3 #include "lib/utility.hpp" 
   24     template <
class T, 
class Allocator = std::allocator<T>>
 
   29     typedef typename boost::call_traits<T>::param_type      param_type;
 
   30     typedef typename boost::call_traits<T>::reference       reference;
 
   31     typedef typename boost::call_traits<T>::const_reference const_reference;
 
   32     typedef typename boost::call_traits<T>::value_type      result_type;
 
   34     typedef uint size_type;
 
   40     explicit FixedVector(Allocator 
const& alloc = Allocator()) : _data(alloc){}
 
   41     explicit FixedVector(size_type size, param_type value = T(), Allocator 
const& alloc = Allocator()) : _data(size, value, alloc){}
 
   43     template <
class InputIter> FixedVector(InputIter first, InputIter last, Allocator 
const& alloc = Allocator()) : _data(first, last, alloc){}
 
   44     explicit FixedVector(std::vector<T> 
const& src) : _data(src){}
 
   45     explicit FixedVector(std::vector<T> && src) : _data(move(src)){}
 
   47     FixedVector(FixedVector 
const& src) : _data(src._data){}
 
   48     FixedVector(FixedVector && src) : _data(move(src._data)){}
 
   49     FixedVector(std::initializer_list<T> init, Allocator 
const& alloc = Allocator()) : _data(init){}
 
   51     FixedVector& operator=(FixedVector 
const& src){
 
   52     *
this = FixedVector(src);
 
   55     FixedVector& operator=(FixedVector && src){
 
   56     this->_data = move(src._data);
 
   59     FixedVector& operator=(std::initializer_list<T> ilist){
 
   60     *
this = FixedVector(ilist.begin(), ilist.end());
 
   63     FixedVector& operator=(std::vector<T> 
const& src){
 
   67     FixedVector& operator=(std::vector<T> && src){
 
   68     this->_data = move(src);
 
   72     auto begin()->decltype(_data.begin()){ 
return _data.begin(); }
 
   73     auto begin() const ->decltype(_data.
begin()){ 
return _data.begin(); }
 
   74     auto cbegin() const ->decltype(_data.cbegin()){ 
return _data.cbegin(); }
 
   76     auto end()->decltype(_data.end()){ 
return _data.end(); }
 
   77     auto end() const ->decltype(_data.
end()){ 
return _data.end(); }
 
   78     auto cend() const ->decltype(_data.cend()){ 
return _data.cend(); }
 
   80     auto rbegin()->decltype(_data.rbegin()){ 
return _data.rbegin(); }
 
   81     auto rbegin() const ->decltype(_data.
rbegin()){ 
return _data.rbegin(); }
 
   82     auto crbegin() const ->decltype(_data.crbegin()){ 
return _data.crbegin(); }
 
   84     auto rend()->decltype(_data.rend()){ 
return _data.rend(); }
 
   85     auto rend() const ->decltype(_data.
rend()){ 
return _data.rend(); }
 
   86     auto crend() const ->decltype(_data.crend()){ 
return _data.crend(); }
 
   88     reference at(size_type pos){ 
return _data.at(pos); }
 
   89     const_reference at(size_type pos)
 const{ 
return _data.at(pos); }
 
   91     reference operator [](size_type pos){ 
return _data[pos]; }
 
   92     const_reference operator [](size_type pos)
 const{ 
return _data[pos]; }
 
   94     reference front(){ 
return _data.front(); }
 
   95     const_reference front()
 const{ 
return _data.front(); }
 
   97     reference back(){ 
return _data.back(); }
 
   98     const_reference back()
 const{ 
return _data.back(); }
 
  100     bool empty()
 const{ 
return _data.empty(); }
 
  102     size_type size()
 const{ 
return _data.size(); }
 
  104     size_type max_size()
 const{ 
return _data.max_size; }
 
  106     void swap(FixedVector& other){ _data.swap(other); }
 
auto end(C &&c) -> std::move_iterator< typename RC::iterator >
auto rbegin(C &&c) -> std::move_iterator< typename RC::reverse_iterator >
auto rend(C &&c) -> std::move_iterator< typename RC::reverse_iterator >
auto begin(C &&c) -> std::move_iterator< typename RC::iterator >