24 #ifndef __K2PtrVectorBase__ 25 #define __K2PtrVectorBase__ 27 #include "K2VectorBase.h" 33 namespace K2Internals {
45 typedef value_type* pointer;
46 typedef const value_type* const_pointer;
47 typedef value_type* iterator;
48 typedef const value_type* const_iterator;
49 typedef value_type& reference;
50 typedef const value_type& const_reference;
51 typedef std::size_t size_type;
52 typedef std::ptrdiff_t difference_type;
61 : fArray((Inherited::size_type)count, value) {}
63 : fArray(Inherited::const_iterator(first), Inherited::const_iterator(last)) {}
70 iterator begin() {
return iterator(fArray.begin());}
71 const_iterator begin()
const {
return const_iterator(fArray.begin());}
72 iterator end() {
return iterator(fArray.end());}
73 const_iterator end()
const {
return const_iterator(fArray.end());}
79 size_type size()
const {
return fArray.size();}
80 size_type max_size()
const {
return fArray.max_size();}
81 size_type capacity()
const {
return fArray.capacity();}
82 bool16 empty()
const {
return fArray.empty();}
84 allocator_type get_allocator()
const {
return fArray.get_allocator();}
86 void assign(size_type count,
const T& v) {fArray.assign((Inherited::size_type)count, v);}
88 template <
class InputIter>
89 void assign(InputIter first, InputIter last) { fArray.assign(first, last); }
91 reference operator[](size_type i) {
return reference(fArray.operator[]((Inherited::size_type)i));}
92 const_reference operator[](size_type i)
const {
return const_reference(fArray.operator[]((Inherited::size_type)i));}
93 reference at(size_type i) {
return reference(fArray.at((Inherited::size_type)i));}
94 const_reference at(size_type i)
const {
return const_reference(fArray.at((Inherited::size_type)i));}
95 reference front() {
return reference(fArray.front());}
96 const_reference front()
const {
return const_reference(fArray.front());}
97 reference back() {
return reference(fArray.back());}
98 const_reference back()
const {
return const_reference(fArray.back());}
100 void push_back(
const T& x) {fArray.push_back((
const void*)x);}
101 void pop_back() {fArray.pop_back();}
102 iterator insert(iterator position,
const T& x) {
return iterator(fArray.insert(Inherited::iterator(position), (
const void*)x));}
103 void insert(iterator position, size_type n,
const T& x) {fArray.insert(Inherited::iterator(position), (Inherited::size_type)n, (
const void*)x);}
104 template <
class InputIter>
105 void insert(iterator pos, InputIter first, InputIter last)
107 fArray.insert(Inherited::iterator(pos), first, last);
111 iterator erase(iterator position) {
return iterator(fArray.erase(Inherited::iterator(position)));}
112 iterator erase(iterator first, iterator last) {
return iterator(fArray.erase(Inherited::iterator(first), Inherited::iterator(last)));}
114 void clear() {fArray.clear();}
116 void resize(size_type sz,
const T& value){fArray.resize((Inherited::size_type)sz, value);}
117 void reserve(size_type sz) {fArray.reserve((Inherited::size_type)sz);}
119 void initialize(size_type ,
const T& ) {}
120 void fill_assign(size_type,
const T&) {}
121 void fill_insert(iterator, size_type,
const T&){}
125 size_type DoGetCapacity(size_type) {
return 0;}
126 void DoReset(pointer, size_type, size_type) {}
133 template <
typename T>
136 template <
typename T>
137 inline bool16 operator!=(
const K2PtrVectorBase<T>& lhs,
const K2PtrVectorBase<T>& rhs) {
return !(lhs == rhs);}
139 template <
typename T>
140 inline bool16 operator< (const K2PtrVectorBase<T>& lhs,
const K2PtrVectorBase<T>& rhs) {
return std::lexicographical_compare(lhs.begin(), lhs.end(), rhs.begin(), rhs.end());}
142 template <
typename T>
143 inline bool16 operator> (
const K2PtrVectorBase<T>& lhs,
const K2PtrVectorBase<T>& rhs) {
return rhs < lhs;}
145 template <
typename T>
146 inline bool16 operator>=(
const K2PtrVectorBase<T>& lhs,
const K2PtrVectorBase<T>& rhs) {
return !(lhs < rhs);}
148 template <
typename T>
149 inline bool16 operator<=(const K2PtrVectorBase<T>& lhs,
const K2PtrVectorBase<T>& rhs) {
return !(rhs < lhs);}
152 inline void swap(K2PtrVectorBase<T/*, Allocator*/>& x, K2PtrVectorBase<T/*, Allocator*/>& y) noexcept
158 #endif // __K2PtrVectorBase__