std::vector
except that its representation Data is guaranteed to be a structure that can be stored and initialised as a part of another POD structure.
More...
#include <Iguana/Utilities/classlib/utils/PODVector.h>
Public Types | |
typedef const value_type * | const_iterator |
typedef const value_type * | const_pointer |
typedef const value_type & | const_reference |
typedef STDC::ptrdiff_t | difference_type |
typedef value_type * | iterator |
typedef value_type * | pointer |
typedef value_type & | reference |
typedef STDC::size_t | size_type |
typedef T | value_type |
Public Member Functions | |
typedef | REVERSE_ITERATOR (reverse_iterator, random_access_iterator_tag, const_iterator, value_type, const_reference, const_pointer, difference_type) const _reverse_iterator |
typedef | REVERSE_ITERATOR (reverse_iterator, random_access_iterator_tag, iterator, value_type, reference, pointer, difference_type) reverse_iterator |
Static Public Member Functions | |
static const_reference | back (const Data &vector) |
static reference | back (Data &vector) |
static const_iterator | begin (const Data &vector) |
static iterator | begin (Data &vector) |
static size_type | capacity (const Data &vector) |
static void | clear (Data &vector) |
static bool | empty (const Data &vector) |
static const_iterator | end (const Data &vector) |
static iterator | end (Data &vector) |
static iterator | erase (Data &vector, iterator first, iterator last) |
static iterator | erase (Data &vector, iterator pos) |
static const_reference | front (const Data &vector) |
static reference | front (Data &vector) |
static void | insert (Data &vector, iterator pos, long n, const T &x) |
static void | insert (Data &vector, iterator pos, int n, const T &x) |
static void | insert (Data &vector, iterator pos, size_type n, const T &x) |
static iterator | insert (Data &vector, iterator pos) |
static iterator | insert (Data &vector, iterator pos, const T &x) |
static size_type | max_size (const Data &vector) |
static void | pop_back (Data &vector) |
static void | push_back (Data &vector, const T &x) |
static const_reverse_iterator | rbegin (const Data &vector) |
static reverse_iterator | rbegin (Data &vector) |
static const_reverse_iterator | rend (const Data &vector) |
static reverse_iterator | rend (Data &vector) |
static void | reserve (Data &vector, size_type n) |
static void | resize (Data &vector, size_type new_size) |
static void | resize (Data &vector, size_type new_size, const T &x) |
static size_type | size (const Data &vector) |
static void | swap (Data &vector, Data &other) |
Static Private Member Functions | |
static void | insert_grow (Data &vector, iterator pos, const T &x) |
Classes | |
struct | Data |
std::vector
except that its representation Data is guaranteed to be a structure that can be stored and initialised as a part of another POD structure.
No operation on T
may throw. Full erase guarantees complete memory release. Since Data is a POD structure, all methods are outside it in the shell class and have to be passed a Data reference.
Definition at line 24 of file PODVector.h.
typedef const value_type* lat::PODVector< T >::const_iterator |
Definition at line 37 of file PODVector.h.
typedef const value_type* lat::PODVector< T >::const_pointer |
Definition at line 35 of file PODVector.h.
typedef const value_type& lat::PODVector< T >::const_reference |
Definition at line 39 of file PODVector.h.
typedef STDC::ptrdiff_t lat::PODVector< T >::difference_type |
Definition at line 41 of file PODVector.h.
typedef value_type* lat::PODVector< T >::iterator |
Definition at line 36 of file PODVector.h.
typedef value_type* lat::PODVector< T >::pointer |
Definition at line 34 of file PODVector.h.
typedef value_type& lat::PODVector< T >::reference |
Definition at line 38 of file PODVector.h.
typedef STDC::size_t lat::PODVector< T >::size_type |
Definition at line 40 of file PODVector.h.
typedef T lat::PODVector< T >::value_type |
Definition at line 33 of file PODVector.h.
PODVector< T >::const_reference lat::PODVector< T >::back | ( | const Data & | vector | ) | [inline, static] |
PODVector< T >::reference lat::PODVector< T >::back | ( | Data & | vector | ) | [inline, static] |
PODVector< T >::const_iterator lat::PODVector< T >::begin | ( | const Data & | vector | ) | [inline, static] |
PODVector< T >::iterator lat::PODVector< T >::begin | ( | Data & | vector | ) | [inline, static] |
Definition at line 125 of file PODVector.h.
References lat::PODVector< T >::Data::begin.
Referenced by lat::PODVector< T >::insert(), lat::PODVector< T >::insert_grow(), and lat::PODVector< T >::reserve().
PODVector< T >::size_type lat::PODVector< T >::capacity | ( | const Data & | vector | ) | [inline, static] |
Definition at line 177 of file PODVector.h.
References lat::PODVector< T >::Data::begin, and lat::PODVector< T >::Data::limit.
Referenced by lat::PODVector< T >::reserve().
void lat::PODVector< T >::clear | ( | Data & | vector | ) | [inline, static] |
Definition at line 392 of file PODVector.h.
References lat::PODVector< T >::Data::begin, lat::PODVector< T >::Data::end, and lat::PODVector< T >::erase().
00393 { erase (vector.begin, vector.end); }
bool lat::PODVector< T >::empty | ( | const Data & | vector | ) | [inline, static] |
Definition at line 182 of file PODVector.h.
References lat::PODVector< T >::Data::begin, and lat::PODVector< T >::Data::end.
PODVector< T >::const_iterator lat::PODVector< T >::end | ( | const Data & | vector | ) | [inline, static] |
PODVector< T >::iterator lat::PODVector< T >::end | ( | Data & | vector | ) | [inline, static] |
Definition at line 135 of file PODVector.h.
References lat::PODVector< T >::Data::end.
Referenced by lat::PODVector< T >::insert_grow().
PODVector< T >::iterator lat::PODVector< T >::erase | ( | Data & | vector, | |
iterator | first, | |||
iterator | last | |||
) | [inline, static] |
Definition at line 365 of file PODVector.h.
References edmNew::copy(), and lat::PODVector< T >::Data::end.
00366 { 00367 for (first = std::copy (last, vector.end, first); 00368 first != vector.end; 00369 ++first) 00370 first->T::~T (); 00371 vector.end -= last - first; 00372 return first; 00373 }
PODVector< T >::iterator lat::PODVector< T >::erase | ( | Data & | vector, | |
iterator | pos | |||
) | [inline, static] |
Definition at line 346 of file PODVector.h.
References lat::PODVector< T >::Data::begin, edmNew::copy(), lat::PODVector< T >::Data::end, and lat::PODVector< T >::Data::limit.
Referenced by lat::PODVector< T >::clear(), and lat::PODVector< T >::resize().
00347 { 00348 if (pos+1 != vector.end) 00349 std::copy (pos+1, vector.end, pos); 00350 --vector.end; 00351 vector.end->T::~T (); 00352 00353 if (vector.begin == vector.end) 00354 { 00355 ::operator delete (vector.begin); 00356 vector.begin = vector.end = vector.limit = 0; 00357 return 0; 00358 } 00359 else 00360 return pos; 00361 }
PODVector< T >::const_reference lat::PODVector< T >::front | ( | const Data & | vector | ) | [inline, static] |
PODVector< T >::reference lat::PODVector< T >::front | ( | Data & | vector | ) | [inline, static] |
void lat::PODVector< T >::insert | ( | Data & | vector, | |
iterator | pos, | |||
long | n, | |||
const T & | x | |||
) | [inline, static] |
void lat::PODVector< T >::insert | ( | Data & | vector, | |
iterator | pos, | |||
int | n, | |||
const T & | x | |||
) | [inline, static] |
static void lat::PODVector< T >::insert | ( | Data & | vector, | |
iterator | pos, | |||
size_type | n, | |||
const T & | x | |||
) | [static] |
PODVector< T >::iterator lat::PODVector< T >::insert | ( | Data & | vector, | |
iterator | pos | |||
) | [inline, static] |
Definition at line 306 of file PODVector.h.
References lat::PODVector< T >::insert().
00307 { return insert (vector, pos, T()); }
PODVector< T >::iterator lat::PODVector< T >::insert | ( | Data & | vector, | |
iterator | pos, | |||
const T & | x | |||
) | [inline, static] |
Definition at line 290 of file PODVector.h.
References lat::PODVector< T >::begin(), lat::PODVector< T >::Data::begin, lat::PODVector< T >::Data::end, index, lat::PODVector< T >::insert_grow(), and lat::PODVector< T >::Data::limit.
Referenced by lat::PODVector< T >::insert(), and lat::PODVector< T >::resize().
00291 { 00292 size_type index = pos - begin (vector); 00293 if (vector.end != vector.limit && pos != vector.end) 00294 { 00295 new (vector.end) T (x); 00296 ++vector.end; 00297 } 00298 else 00299 insert_grow (vector, pos, x); 00300 00301 return vector.begin + index; 00302 }
void lat::PODVector< T >::insert_grow | ( | Data & | vector, | |
iterator | pos, | |||
const T & | x | |||
) | [inline, static, private] |
Definition at line 241 of file PODVector.h.
References lat::PODVector< T >::begin(), lat::PODVector< T >::Data::begin, lat::PODVector< T >::Data::end, lat::PODVector< T >::end(), first, prof2calltree::last, lat::PODVector< T >::Data::limit, and lat::PODVector< T >::size().
Referenced by lat::PODVector< T >::insert(), and lat::PODVector< T >::push_back().
00242 { 00243 if (vector.end != vector.limit) 00244 { 00245 new (vector.end) T (*(vector.end-1)); 00246 ++vector.end; 00247 std::copy_backward (pos, vector.end-2, vector.end-1); 00248 *pos = x; 00249 } 00250 else 00251 { 00252 size_type old_size = size (vector); 00253 size_type new_size = old_size ? 2*old_size : 1; 00254 iterator begin; 00255 iterator end; 00256 00257 begin = static_cast<iterator> (::operator new (new_size * sizeof (T))); 00258 end = std::uninitialized_copy (vector.begin, pos, begin); 00259 new (end) T (x); 00260 ++end; 00261 end = std::uninitialized_copy (pos, vector.end, end); 00262 00263 for (iterator first = vector.begin, last = vector.end; 00264 first != last; 00265 ++first) 00266 first->T::~T (); 00267 ::operator delete (vector.begin); 00268 00269 vector.begin = begin; 00270 vector.end = end; 00271 vector.limit = begin + new_size; 00272 } 00273 }
PODVector< T >::size_type lat::PODVector< T >::max_size | ( | const Data & | vector | ) | [inline, static] |
void lat::PODVector< T >::pop_back | ( | Data & | vector | ) | [inline, static] |
void lat::PODVector< T >::push_back | ( | Data & | vector, | |
const T & | x | |||
) | [inline, static] |
Definition at line 277 of file PODVector.h.
References lat::PODVector< T >::Data::end, lat::PODVector< T >::insert_grow(), and lat::PODVector< T >::Data::limit.
00278 { 00279 if (vector.end != vector.limit) 00280 { 00281 new (vector.end) T (value); 00282 ++vector.end; 00283 } 00284 else 00285 insert_grow (vector, vector.end, value); 00286 }
PODVector< T >::const_reverse_iterator lat::PODVector< T >::rbegin | ( | const Data & | vector | ) | [inline, static] |
PODVector< T >::reverse_iterator lat::PODVector< T >::rbegin | ( | Data & | vector | ) | [inline, static] |
PODVector< T >::const_reverse_iterator lat::PODVector< T >::rend | ( | const Data & | vector | ) | [inline, static] |
PODVector< T >::reverse_iterator lat::PODVector< T >::rend | ( | Data & | vector | ) | [inline, static] |
void lat::PODVector< T >::reserve | ( | Data & | vector, | |
size_type | n | |||
) | [inline, static] |
Definition at line 219 of file PODVector.h.
References lat::PODVector< T >::begin(), lat::PODVector< T >::Data::begin, lat::PODVector< T >::capacity(), lat::PODVector< T >::Data::end, first, prof2calltree::last, lat::PODVector< T >::Data::limit, and lat::PODVector< T >::size().
00220 { 00221 if (capacity (vector) < new_size) 00222 { 00223 size_type old_size = size (vector); 00224 iterator begin = static_cast<iterator> (::operator new (new_size * sizeof (T))); 00225 00226 std::uninitialized_copy (vector.begin, vector.end, begin); 00227 for (iterator first = vector.begin, last = vector.end; 00228 first != last; 00229 ++first) 00230 first->T::~T (); 00231 ::operator delete (vector.begin); 00232 00233 vector.begin = begin; 00234 vector.end = begin + old_size; 00235 vector.limit = begin + new_size; 00236 } 00237 }
void lat::PODVector< T >::resize | ( | Data & | vector, | |
size_type | new_size | |||
) | [inline, static] |
Definition at line 387 of file PODVector.h.
References lat::PODVector< T >::resize().
00388 { resize (vector, new_size, T()); }
void lat::PODVector< T >::resize | ( | Data & | vector, | |
size_type | new_size, | |||
const T & | x | |||
) | [inline, static] |
Definition at line 377 of file PODVector.h.
References lat::PODVector< T >::Data::begin, lat::PODVector< T >::Data::end, lat::PODVector< T >::erase(), lat::PODVector< T >::insert(), and lat::PODVector< T >::size().
Referenced by lat::PODVector< T >::resize().
00378 { 00379 if (new_size < size ()) 00380 erase (vector.begin + new_size, vector.end); 00381 else 00382 insert (vector.end, new_size-size(), x); 00383 }
typedef lat::PODVector< T >::REVERSE_ITERATOR | ( | reverse_iterator | , | |
random_access_iterator_tag | , | |||
const_iterator | , | |||
value_type | , | |||
const_reference | , | |||
const_pointer | , | |||
difference_type | ||||
) | const |
typedef lat::PODVector< T >::REVERSE_ITERATOR | ( | reverse_iterator | , | |
random_access_iterator_tag | , | |||
iterator | , | |||
value_type | , | |||
reference | , | |||
pointer | , | |||
difference_type | ||||
) |
PODVector< T >::size_type lat::PODVector< T >::size | ( | const Data & | vector | ) | [inline, static] |
Definition at line 167 of file PODVector.h.
References lat::PODVector< T >::Data::begin, and lat::PODVector< T >::Data::end.
Referenced by lat::PODVector< T >::insert_grow(), lat::PODVector< T >::reserve(), and lat::PODVector< T >::resize().
void lat::PODVector< T >::swap | ( | Data & | vector, | |
Data & | other | |||
) | [inline, static] |