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_VECTOR_H
00037 #define __POOL_VECTOR_H
00038
00039 #include <vector>
00040
00041 #ifdef ONIKIRI_USE_ONIKIRI_POOL_ALLOCATOR
00042 #include "pool_allocator.h"
00043 #define ONIKIRI_POOL_VECTOR_ALLOCATOR pool_allocator
00044 #else
00045 #include <boost/pool/pool_alloc.hpp>
00046 #define ONIKIRI_POOL_VECTOR_ALLOCATOR boost::pool_allocator
00047 #endif
00048
00049 namespace Onikiri
00050 {
00051 template <typename T>
00052 class pool_vector :
00053 public std::vector<T, ONIKIRI_POOL_VECTOR_ALLOCATOR<T> >
00054 {
00055 typedef ONIKIRI_POOL_VECTOR_ALLOCATOR<T> allocator_type;
00056 typedef std::vector<T, allocator_type > collection_type;
00057
00058 public:
00059 pool_vector()
00060 : collection_type()
00061 {
00062 }
00063
00064 explicit pool_vector(
00065 const allocator_type& allocator
00066 ) :
00067 collection_type(allocator)
00068 {
00069 }
00070
00071 explicit pool_vector(
00072 size_t n,
00073 const T& value = T(),
00074 const allocator_type& allocator = allocator_type()
00075 ) :
00076 collection_type(n, value, allocator)
00077 {
00078 };
00079
00080 template <class input_iterator>
00081 pool_vector(
00082 input_iterator begin,
00083 input_iterator end,
00084 const allocator_type& allocator = allocator_type()
00085 ) :
00086 collection_type(begin, end, allocator)
00087 {
00088 };
00089
00090
00091 pool_vector(const pool_vector<T>& x)
00092 : collection_type(x)
00093 {
00094 }
00095 };
00096
00097 };
00098
00099 #endif