00001 #ifndef QPID_INLINEVECTOR_H
00002 #define QPID_INLINEVECTOR_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "qpid/InlineAllocator.h"
00026 #include <vector>
00027
00028 namespace qpid {
00029
00040 template <class T, size_t Max, class Alloc=std::allocator<T> >
00041 class InlineVector : public std::vector<T, InlineAllocator<Alloc, Max> >
00042 {
00043 typedef std::vector<T, InlineAllocator<Alloc, Max> > Base;
00044 public:
00045 typedef typename Base::allocator_type allocator_type;
00046 typedef typename Base::value_type value_type;
00047 typedef typename Base::size_type size_type;
00048
00049 explicit InlineVector(const allocator_type& a=allocator_type()) : Base(a) {
00050 this->reserve(Max);
00051 }
00052
00053 explicit InlineVector(size_type n, const value_type& x = value_type(),
00054 const allocator_type& a=allocator_type()) : Base(a)
00055 {
00056 this->reserve(std::max(n, Max));
00057 this->insert(this->end(), n, x);
00058 }
00059
00060 InlineVector(const InlineVector& x) : Base() {
00061 this->reserve(std::max(x.size(), Max));
00062 *this = x;
00063 }
00064 };
00065
00066 }
00067
00068 #endif