00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef __POOL_UNORDERED_MAP_H
00037 #define __POOL_UNORDERED_MAP_H
00038
00039 #include "SysDeps/STL/unordered_map.h"
00040
00041 #ifdef ONIKIRI_USE_ONIKIRI_POOL_ALLOCATOR
00042 #include "pool_allocator.h"
00043 #define ONIKIRI_POOL_UNORDERED_MAP_ALLOCATOR pool_allocator
00044 #else
00045 #include <boost/pool/pool_alloc.hpp>
00046 #define ONIKIRI_POOL_UNORDERED_MAP_ALLOCATOR boost::fast_pool_allocator
00047 #endif
00048
00049 namespace Onikiri
00050 {
00051
00052 template <
00053 typename KeyT,
00054 typename T,
00055 typename HashT,
00056 typename CmpT = std::equal_to<KeyT>
00057 >
00058 class pool_unordered_map :
00059 public unordered_map<
00060 KeyT, T, HashT, CmpT,
00061 ONIKIRI_POOL_UNORDERED_MAP_ALLOCATOR<
00062 std::pair<const KeyT, T>
00063 >
00064 >
00065 {
00066 typedef
00067 ONIKIRI_POOL_UNORDERED_MAP_ALLOCATOR<
00068 std::pair<const KeyT, T>
00069 >
00070 allocator_type;
00071
00072 typedef
00073 unordered_map<
00074 KeyT, T, HashT, CmpT,
00075 allocator_type
00076 >
00077 collection_type;
00078
00079
00080 public:
00081 pool_unordered_map()
00082 : collection_type()
00083 {
00084 }
00085
00086 explicit pool_unordered_map(
00087 size_t initial_bucket_count,
00088 const HashT& hash = HashT()
00089 )
00090 : collection_type( initial_bucket_count, hash )
00091 {
00092 }
00093
00094 pool_unordered_map(
00095 const pool_unordered_map<KeyT, T, HashT, CmpT>& x
00096 )
00097 : collection_type(x)
00098 {
00099 }
00100 };
00101 }
00102
00103 #endif