35 template <
class T,
class I>
49 inline std::vector<T>&
vec() {
return v_; }
50 inline const std::vector<T>&
vec()
const {
return v_; }
52 inline T& operator[](I idx);
53 inline const T& operator[](I idx)
const;
54 inline T&
first() {
return v_.front(); }
55 inline const T&
first()
const {
return v_.front(); }
56 inline T&
last() {
return v_.back(); }
57 inline const T&
last()
const {
return v_.back(); }
58 inline I
size()
const {
return (I)v_.size(); }
59 inline bool setCapacity(I sz,
bool withmargin);
63 inline bool setSize(I sz,T val);
65 inline bool validIdx(I idx)
const {
return idx>=0 && idx<size(); }
66 inline I
indexOf(
const T&,
bool forward,I start=-1)
const;
67 inline I count(
const T&)
const;
68 inline bool isPresent(
const T&)
const;
70 inline VectorAccess& operator =(
const VectorAccess& v2 )
71 { v_ = v2.
v_;
return *
this; }
72 inline bool push_back(
const T& t );
74 inline void insert( I pos,
const T& val )
75 { v_.insert(v_.begin() + pos,val); }
80 for ( I idx=size()-1; idx!=-1; idx-- )
81 {
if ( v_[idx] == t ) {
remove(idx);
return; } }
83 inline void remove( I idx )
86 v_.erase( v_.begin() + idx );
88 inline void remove( I i1, I i2 )
90 if ( i1 == i2 ) {
remove( i1 );
return; }
91 if ( i1 > i2 ) std::swap( i1, i2 );
93 if ( i1 >= sz )
return;
95 if ( i2 >= sz-1 ) i2 = sz-1;
96 v_.erase( v_.begin()+i1, v_.begin()+i2+1 );
98 inline void swap( I i, I j )
99 { std::swap( v_[i], v_[j] ); }
102 { std::fill( v_.begin(), v_.end(), val ); }
103 inline void replace(
const T& val,
const T& newval )
105 std::replace( v_.begin(), v_.end(), val, newval );
110 if ( t == aft || size() < 2 )
return;
111 I tidx = -1; I aftidx = -1;
112 for ( I idx=size()-1; idx!=-1; idx-- )
115 { tidx = idx;
if ( aftidx != -1 )
break; }
116 if ( v_[idx] == aft )
117 { aftidx = idx;
if ( tidx != -1 )
break; }
119 if ( tidx == -1 || aftidx == -1 || tidx == aftidx )
return;
121 for ( I idx=tidx; idx<aftidx; idx++ )
124 for ( I idx=tidx; idx>aftidx+1; idx-- )
130 if ( size() < 2 )
return;
132 for ( I idx=size()-1; idx!=-1; idx-- )
133 if ( v_[idx] == t ) { tidx = idx;
break; }
134 for ( I idx=tidx; idx>0; idx-- )
145 #define mExportVectorAccess(mod,tp,itp) \ 146 template mExpClass(mod) std::allocator<tp>;\ 147 template mExpClass(mod) std::_Vector_val<tp,std::allocator<tp> >;\ 148 template mExpClass(mod) std::vector<tp>;\ 149 template mExpClass(mod) VectorAccess<tp,itp>;\ 152 template<
class T,
class I>
inline 155 if ( sz<=v_.capacity() )
170 try { v_.reserve(sz); }
171 catch ( std::bad_alloc )
173 catch ( std::length_error )
180 template<
class T,
class I>
inline 185 catch ( std::bad_alloc )
192 template<
class T,
class I>
inline 195 const T lastelem = v_.back();
201 template<
class T,
class I>
inline 204 try { v_.resize(sz,val); }
205 catch ( std::bad_alloc )
213 #define mImplOperator \ 214 try { return v_.at(idx); } \ 215 catch ( std::out_of_range ) \ 216 { DBG::forceCrash(true); } \ 217 return v_[(typename std::vector<T>::size_type)idx] 221 #define mImplOperator \ 222 return v_[(typename std::vector<T>::size_type)idx] 227 template<
class T,
class I>
inline 234 template<
class T,
class I>
inline 243 template<
class T,
class I>
inline 248 typename std::vector<T>::const_iterator begin = v_.begin();
249 const typename std::vector<T>::const_iterator end = v_.end();
253 const typename std::vector<T>::const_iterator res =
258 return mCast(I,res-v_.begin());
261 typename std::vector<T>::const_reverse_iterator begin = v_.rbegin();
262 const typename std::vector<T>::const_reverse_iterator end = v_.rend();
265 const I nrskipped = size()-1-start;
269 const typename std::vector<T>::const_reverse_iterator res =
274 return mCast(I,end-res)-1;
278 template<
class T,
class I>
inline 281 return mCast(I,std::count(v_.begin(),v_.end(),t));
285 template<
class T,
class I>
inline 288 const typename std::vector<T>::const_iterator end = v_.end();
289 return std::find( v_.begin(), end, t )!=end;
T & last()
Definition: vectoraccess.h:56
bool push_back(const T &t)
Definition: vectoraccess.h:181
const T & last() const
Definition: vectoraccess.h:57
T & first()
Definition: vectoraccess.h:54
I indexOf(const T &, bool forward, I start=-1) const
Definition: vectoraccess.h:244
#define mCast(tp, v)
Definition: commondefs.h:120
const std::vector< T > & vec() const
Definition: vectoraccess.h:50
bool setSize(I sz, T val)
Definition: vectoraccess.h:202
void erase()
Definition: vectoraccess.h:76
void insert(I pos, const T &val)
Definition: vectoraccess.h:74
ObjectSet< T >::size_type indexOf(const ObjectSet< T > &os, const S &val)
Locate object in set.
Definition: objectset.h:173
I count(const T &) const
Definition: vectoraccess.h:279
Simple vector-based container simplifying index-based work.
Definition: vectoraccess.h:36
VectorAccess(I n)
Definition: vectoraccess.h:44
T & operator[](I idx)
Definition: vectoraccess.h:228
void moveToStart(const T &t)
Definition: vectoraccess.h:128
std::vector< T > & vec()
Definition: vectoraccess.h:49
I getCapacity() const
Definition: vectoraccess.h:61
std::vector< T > v_
Definition: vectoraccess.h:140
void replace(const T &val, const T &newval)
Definition: vectoraccess.h:103
void erase(const T &t)
Definition: vectoraccess.h:78
VectorAccess(I n, const T &t)
Definition: vectoraccess.h:45
bool validIdx(I idx) const
Definition: vectoraccess.h:65
const T * find(const ObjectSet< T > &os, const S &val)
Get const object in set.
Definition: objectset.h:187
bool setCapacity(I sz, bool withmargin)
Definition: vectoraccess.h:153
void moveAfter(const T &t, const T &aft)
Definition: vectoraccess.h:108
T object_type
Definition: vectoraccess.h:41
#define mImplOperator
Definition: vectoraccess.h:221
void fillWith(const T &val)
Definition: vectoraccess.h:101
VectorAccess(const VectorAccess &v2)
Definition: vectoraccess.h:47
I size_type
Definition: vectoraccess.h:40
void swap(I i, I j)
Definition: vectoraccess.h:98
VectorAccess()
Definition: vectoraccess.h:43
#define mClass(module)
Definition: commondefs.h:161
const T & first() const
Definition: vectoraccess.h:55
I size() const
Definition: vectoraccess.h:58
T pop_back()
Definition: vectoraccess.h:193
bool isPresent(const T &) const
Definition: vectoraccess.h:286