1 #ifndef OPENDDS_DCPS_POOL_ALLOCATOR_H 2 #define OPENDDS_DCPS_POOL_ALLOCATOR_H 4 #include <ace/config-macros.h> 5 #if defined OPENDDS_SAFETY_PROFILE && defined ACE_HAS_ALLOC_HOOKS 6 # define OPENDDS_POOL_ALLOCATOR 1 8 # define OPENDDS_POOL_ALLOCATOR 0 11 #if OPENDDS_POOL_ALLOCATOR 25 #include <unordered_map> 33 #if OPENDDS_POOL_ALLOCATOR 51 typedef const T* const_pointer;
53 typedef const T& const_reference;
54 typedef std::size_t size_type;
55 typedef std::ptrdiff_t difference_type;
56 template <
typename U>
struct rebind {
typedef PoolAllocator<U> other; };
61 PoolAllocator(
const PoolAllocator<U>&) {}
63 static T* allocate(std::size_t n)
66 if (!raw_mem)
throw std::bad_alloc();
67 return static_cast<T*
>(raw_mem);
70 static void deallocate(T* ptr, std::size_t)
75 static void construct(T* ptr,
const T&
value)
77 new (
static_cast<void*
>(ptr)) T(value);
81 static void construct(T* ptr, T&& value)
83 new (
static_cast<void*
>(ptr)) T(
std::move(value));
87 static void destroy(T* ptr)
92 static size_type max_size()
94 return std::numeric_limits<size_type>::max();
98 template <
typename T,
typename U>
99 bool operator==(
const PoolAllocator<T>&,
const PoolAllocator<U>&)
104 template <
typename T,
typename U>
105 bool operator!=(
const PoolAllocator<T>&,
const PoolAllocator<U>&)
110 template <
typename T>
111 struct add_const {
typedef const T type; };
114 #define OPENDDS_ALLOCATOR(T) OpenDDS::DCPS::PoolAllocator<T > 116 typedef std::basic_string<wchar_t, std::char_traits<wchar_t>,
OPENDDS_ALLOCATOR(
wchar_t)>
118 #define OPENDDS_MAP(K, V) std::map<K, V, std::less<K >, \ 119 OpenDDS::DCPS::PoolAllocator<std::pair<OpenDDS::DCPS::add_const<K >::type, V > > > 120 #define OPENDDS_MAP_CMP(K, V, C) std::map<K, V, C, \ 121 OpenDDS::DCPS::PoolAllocator<std::pair<OpenDDS::DCPS::add_const<K >::type, V > > > 122 #define OPENDDS_MULTIMAP(K, T) std::multimap<K, T, std::less<K >, \ 123 OpenDDS::DCPS::PoolAllocator<std::pair<OpenDDS::DCPS::add_const<K >::type, T > > > 124 #define OPENDDS_MULTIMAP_CMP(K, T, C) std::multimap<K, T, C, \ 125 OpenDDS::DCPS::PoolAllocator<std::pair<OpenDDS::DCPS::add_const<K >::type, T > > > 126 #define OPENDDS_MAP_T(K, V) std::map<K, V, std::less<K >, \ 127 OpenDDS::DCPS::PoolAllocator<std::pair<typename OpenDDS::DCPS::add_const<K >::type, V > > > 128 #define OPENDDS_MAP_CMP_T(K, V, C) std::map<K, V, C, \ 129 OpenDDS::DCPS::PoolAllocator<std::pair<typename OpenDDS::DCPS::add_const<K >::type, V > > > 130 #define OPENDDS_MULTIMAP_T(K, T) std::multimap<K, T, std::less<K >, \ 131 OpenDDS::DCPS::PoolAllocator<std::pair<typename OpenDDS::DCPS::add_const<K >::type, T > > > 132 #define OPENDDS_MULTIMAP_CMP_T(K, T, C) std::multimap<K, T, C, \ 133 OpenDDS::DCPS::PoolAllocator<std::pair<typename OpenDDS::DCPS::add_const<K >::type, T > > > 134 #define OPENDDS_SET(K) std::set<K, std::less<K >, \ 135 OpenDDS::DCPS::PoolAllocator<K > > 136 #define OPENDDS_SET_CMP(K, C) std::set<K, C, \ 137 OpenDDS::DCPS::PoolAllocator<K > > 138 #define OPENDDS_MULTISET(K) std::multiset<K, std::less<K >, \ 139 OpenDDS::DCPS::PoolAllocator<K > > 140 #define OPENDDS_MULTISET_CMP(K, C) std::multiset<K, C, \ 141 OpenDDS::DCPS::PoolAllocator<K > > 142 #define OPENDDS_VECTOR(T) std::vector<T, \ 143 OpenDDS::DCPS::PoolAllocator<T > > 144 #define OPENDDS_LIST(T) std::list<T, \ 145 OpenDDS::DCPS::PoolAllocator<T > > 146 #define OPENDDS_DEQUE(T) std::deque<T, \ 147 OpenDDS::DCPS::PoolAllocator<T > > 148 #define OPENDDS_QUEUE(T) std::queue<T, std::deque<T, \ 149 OpenDDS::DCPS::PoolAllocator<T > > > 151 #define OPENDDS_UNORDERED_MAP(K, V) std::unordered_map<K, V, std::hash<K >, std::equal_to<K >, \ 152 OpenDDS::DCPS::PoolAllocator<std::pair<OpenDDS::DCPS::add_const<K >::type, V > > > 153 #define OPENDDS_UNORDERED_MAP_CHASH(K, V, C) std::unordered_map<K, V, C, std::equal_to<K >, \ 154 OpenDDS::DCPS::PoolAllocator<std::pair<OpenDDS::DCPS::add_const<K >::type, V > > > 155 #define OPENDDS_UNORDERED_MAP_T(K, V) std::unordered_map<K, V, std::hash<K >, std::equal_to<K >, \ 156 OpenDDS::DCPS::PoolAllocator<std::pair<typename OpenDDS::DCPS::add_const<K >::type, V > > > 157 #define OPENDDS_UNORDERED_MAP_CHASH_T(K, V, C) std::unordered_map<K, V, C, std::equal_to<K >, \ 158 OpenDDS::DCPS::PoolAllocator<std::pair<typename OpenDDS::DCPS::add_const<K >::type, V > > > 161 #else // (!OPENDDS_POOL_ALLOCATOR) 162 #define OPENDDS_ALLOCATOR(T) std::allocator<T > 165 #define OPENDDS_MAP(K, V) std::map<K, V > 166 #define OPENDDS_MAP_CMP(K, V, C) std::map<K, V, C > 167 #define OPENDDS_MULTIMAP(K, T) std::multimap<K, T > 168 #define OPENDDS_MULTIMAP_CMP(K, T, C) std::multimap<K, T, C > 169 #define OPENDDS_MAP_T OPENDDS_MAP 170 #define OPENDDS_MAP_CMP_T OPENDDS_MAP_CMP 171 #define OPENDDS_MULTIMAP_T OPENDDS_MULTIMAP 172 #define OPENDDS_MULTIMAP_CMP_T OPENDDS_MULTIMAP_CMP 173 #define OPENDDS_SET(K) std::set<K > 174 #define OPENDDS_SET_CMP(K, C) std::set<K, C > 175 #define OPENDDS_MULTISET(K) std::multiset<K > 176 #define OPENDDS_MULTISET_CMP(K, C) std::multiset<K, C > 177 #define OPENDDS_VECTOR(T) std::vector<T > 178 #define OPENDDS_LIST(T) std::list<T > 179 #define OPENDDS_DEQUE(T) std::deque<T > 180 #define OPENDDS_QUEUE(T) std::queue<T > 182 #define OPENDDS_UNORDERED_MAP(K, V) std::unordered_map<K, V > 183 #define OPENDDS_UNORDERED_MAP_CHASH(K, V, C) std::unordered_map<K, V, C > 184 #define OPENDDS_UNORDERED_MAP_T OPENDDS_UNORDERED_MAP 185 #define OPENDDS_UNORDERED_MAP_CHASH_T OPENDDS_UNORDERED_MAP_CHASH 188 #endif // OPENDDS_POOL_ALLOCATOR 190 #define OPENDDS_STRING OpenDDS::DCPS::String 191 #define OPENDDS_WSTRING OpenDDS::DCPS::WString 198 #endif // OPENDDS_DCPS_POOL_ALLOCATOR_H
const LogLevel::Value value
#define OpenDDS_Dcps_Export
virtual void free(void *ptr)=0
T::rv_reference move(T &p)
bool operator==(const DisjointSequence::OrderedRanges< T > &a, const DisjointSequence::OrderedRanges< T > &b)
#define OPENDDS_ALLOCATOR(T)
static ACE_Allocator * instance(void)
bool operator!=(const GUID_t &lhs, const GUID_t &rhs)
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
The Internal API and Implementation of OpenDDS.
virtual void * malloc(size_type nbytes)=0