src/Utility/Collection/pool/pool_unordered_map.h

説明を見る。
00001 // 
00002 // Copyright (c) 2005-2008 Kenichi Watanabe.
00003 // Copyright (c) 2005-2008 Yasuhiro Watari.
00004 // Copyright (c) 2005-2008 Hironori Ichibayashi.
00005 // Copyright (c) 2008-2009 Kazuo Horio.
00006 // Copyright (c) 2009-2013 Naruki Kurata.
00007 // Copyright (c) 2005-2013 Ryota Shioya.
00008 // Copyright (c) 2005-2013 Masahiro Goshima.
00009 // 
00010 // This software is provided 'as-is', without any express or implied
00011 // warranty. In no event will the authors be held liable for any damages
00012 // arising from the use of this software.
00013 // 
00014 // Permission is granted to anyone to use this software for any purpose,
00015 // including commercial applications, and to alter it and redistribute it
00016 // freely, subject to the following restrictions:
00017 // 
00018 // 1. The origin of this software must not be misrepresented; you must not
00019 // claim that you wrote the original software. If you use this software
00020 // in a product, an acknowledgment in the product documentation would be
00021 // appreciated but is not required.
00022 // 
00023 // 2. Altered source versions must be plainly marked as such, and must not be
00024 // misrepresented as being the original software.
00025 // 
00026 // 3. This notice may not be removed or altered from any source
00027 // distribution.
00028 // 
00029 // 
00030 
00031 
00032 //
00033 // STL unordered_map wrapper for boost::fast_pool_allocator
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

Onikiri2に対してTue Jun 18 14:34:27 2013に生成されました。  doxygen 1.4.7