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 >