Common ODB Runtime Library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
vector.hxx
Go to the documentation of this file.
1 // file : odb/vector.hxx
2 // copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC
3 // license : GNU GPL v2; see accompanying LICENSE file
4 
5 #ifndef ODB_VECTOR_HXX
6 #define ODB_VECTOR_HXX
7 
8 #include <odb/pre.hxx>
9 #include <odb/details/config.hxx> // ODB_CXX11
10 
11 #include <vector>
12 #include <iterator>
13 #include <cstddef> // std::ptrdiff_t
14 
15 #ifdef ODB_CXX11
16 # include <utility> // std::move, std::forward
17 # ifdef ODB_CXX11_INITIALIZER_LIST
18 # include <initializer_list>
19 # endif
20 #endif
21 
22 #include <odb/vector-impl.hxx>
23 
24 // Because both std::vector and odb::vector are called 'vector' (who
25 // cares about namespace qualifications, right?), Sun CC complains
26 // with a bogus "Ambiguous partial specialization" error. A really
27 // hideous workaround for this bug is to to add a dummy third template
28 // argument (with a default value).
29 //
30 #ifdef __SUNPRO_CC
31 # define LIBODB_VECTOR_ARG_DEFAULT ,int = 0
32 # define LIBODB_VECTOR_ARG_DECL ,int DUMMY
33 # define LIBODB_VECTOR_ARG_USE ,DUMMY
34 #else
35 # define LIBODB_VECTOR_ARG_DEFAULT
36 # define LIBODB_VECTOR_ARG_DECL
37 # define LIBODB_VECTOR_ARG_USE
38 #endif
39 
40 namespace odb
41 {
42  // An std::vector-like container that keeps track of changes.
43  //
44  // Note that the style and order of definitions is as appears
45  // in the standard.
46  //
47  template <class V, class I>
49 
50  template <class T, class A = std::allocator<T> LIBODB_VECTOR_ARG_DEFAULT>
51  class vector: public vector_base
52  {
53  public:
54  typedef std::vector<T, A> base_vector_type;
55  typedef typename base_vector_type::iterator base_iterator_type;
56  typedef typename base_vector_type::reverse_iterator
58  // types:
59  //
60  typedef typename base_vector_type::reference reference;
61  typedef typename base_vector_type::const_reference const_reference;
63  typedef typename base_vector_type::const_iterator const_iterator;
64  typedef typename base_vector_type::size_type size_type;
65  typedef typename base_vector_type::difference_type difference_type;
66  typedef T value_type;
67  typedef A allocator_type;
68  typedef typename base_vector_type::pointer pointer;
69  typedef typename base_vector_type::const_pointer const_pointer;
70  // No non-const reverse iterator support for Sun CC with non-standard STL.
71  //
72 #ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC
75 #endif
76  typedef typename base_vector_type::const_reverse_iterator
78  // construct/copy/destroy:
79  //
80  explicit vector(const A& a = A()): v_ (a) {}
81  explicit vector(size_type n): v_ (n) {} // C++11
82  vector(size_type n, const T& v, const A& a = A()): v_ (n, v, a) {}
83  template <class I>
84  vector(I f, I l, const A& a = A()) : v_ (f, l, a) {}
85  vector(const vector& x): vector_base (x), v_ (x.v_) {}
86  // ~vector() {}
87  vector& operator=(const vector&);
88  template <class I>
89  void assign(I f, I l);
90  void assign(size_type n, const T& u);
91  allocator_type get_allocator() const /*noexcept*/
92  {return v_.get_allocator ();}
93 
94 #ifdef ODB_CXX11
95  vector(vector&& x): vector_base (std::move (x)), v_ (std::move (x.v_)) {}
96  vector(const vector& x, const A& a): vector_base (x), v_ (x.v_, a) {}
97  vector(vector&& x, const A& a)
98  : vector_base (std::move (x)), v_ (std::move (x.v_), a) {}
100 #ifdef ODB_CXX11_INITIALIZER_LIST
101  vector(std::initializer_list<T> il, const A& a = A()): v_ (il, a) {}
102  vector& operator=(std::initializer_list<T>);
103  void assign(std::initializer_list<T>);
104 #endif
105 #endif
106 
107  // iterators: (all /*noexcept*/)
108  //
109  iterator begin() {return iterator (this, v_.begin ());}
110  iterator end() {return iterator (this, v_.end ());}
111  const_iterator begin() const {return v_.begin ();}
112  const_iterator end() const {return v_.end ();}
113 #ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC
114  reverse_iterator rbegin() {return reverse_iterator (this, v_.rbegin ());}
115  reverse_iterator rend() {return reverse_iterator (this, v_.rend ());}
116 #endif
117  const_reverse_iterator rbegin() const {return v_.rbegin ();}
118  const_reverse_iterator rend() const {return v_.rend ();}
119 
120  // Return standard vector iterators. The begin() functions mark all
121  // the elements as modified.
122  //
124  base_iterator_type mend () {return v_.end ();}
126  base_reverse_iterator_type mrend () {return v_.rend ();}
127 
128 #ifdef ODB_CXX11
129  const_iterator cbegin() const {return v_.cbegin ();}
130  const_iterator cend() const {return v_.cend ();}
131  const_reverse_iterator crbegin() const {return v_.crbegin ();}
132  const_reverse_iterator crend() const {return v_.crend ();}
133 #endif
134 
135  // capacity:
136  //
137  size_type size() const /*noexcept*/ {return v_.size ();}
138  size_type max_size() const /*noexcept*/ {return v_.max_size ();}
139  void resize(size_type); // C++11
140  void resize(size_type, const T&);
141  size_type capacity() const /*noexcept*/ {return v_.capacity ();}
142  bool empty() const /*noexcept*/ {return v_.empty ();}
143  void reserve(size_type);
144 
145 #ifdef ODB_CXX11
146  void shrink_to_fit();
147 #endif
148 
149  // element access:
150  //
151  //reference operator[](size_type n);
153  const_reference operator[](size_type n) const {return v_[n];}
154  //reference at(size_type n);
156  const_reference at(size_type n) const {return v_.at (n);}
157  //reference front();
159  const_reference front() const {return v_.front ();}
160  //reference back();
162  const_reference back() const {return v_.back ();}
163 
164  // data access:
165  //
166 #ifdef ODB_CXX11
167  //T* data() noexcept;
168  T* modify_data() /*noexcept*/;
169  const T* data() const /*noexcept*/ {return v_.data ();}
170 #endif
171 
172  // modifiers:
173  //
174  void push_back(const T& x);
175  void pop_back();
176  iterator insert(iterator position, const T& x);
177  void insert(iterator position, size_type n, const T& x);
178  template <class I>
179  void insert(iterator position, I first, I last);
180  iterator erase(iterator position);
181  iterator erase(iterator first, iterator last);
182  void swap(vector&);
183  void clear() /*noexcept*/;
184 
185 #ifdef ODB_CXX11
186  // In C++11 all modifiers use const_iterator instead of iterator
187  // to represent position. However, some standard libraries (notably
188  // GCC's) still use iterator and so we will do that as well, for now.
189  //
190  void push_back(T&& x);
191  iterator insert(iterator position, T&& x);
192 
193 #ifdef ODB_CXX11_VARIADIC_TEMPLATE
194  template <class... Args>
195  void emplace_back(Args&&... args);
196  template <class... Args>
197  iterator emplace(iterator position, Args&&... args);
198 #endif
199 #endif
200 
201  // Interfacing with the base vector.
202  //
203  vector (const base_vector_type& x): v_ (x) {}
205  operator const base_vector_type& () const {return v_;}
206  base_vector_type& base () {return v_;}
207  const base_vector_type& base () const {return v_;}
208 
209 #ifdef ODB_CXX11
210  vector (base_vector_type&& x): v_ (std::move (x)) {}
212 #endif
213 
214  // Change tracking (the rest comes from vector_base).
215  //
216  public:
217  void
218  _start () const {impl_.start (v_.size ());}
219 
220  private:
221  base_vector_type v_;
222  };
223 
224  namespace core
225  {
226  using odb::vector;
227  }
228 
229  template <class T, class A LIBODB_VECTOR_ARG_DECL>
232  {return x.base () == y.base ();}
233 
234  template <class T, class A LIBODB_VECTOR_ARG_DECL>
236  const std::vector<T,A>& y)
237  {return x.base () == y;}
238 
239  template <class T, class A LIBODB_VECTOR_ARG_DECL>
240  inline bool operator==(const std::vector<T,A>& x,
242  {return x == y.base ();}
243 
244  template <class T, class A LIBODB_VECTOR_ARG_DECL>
245  inline bool operator< (const vector<T,A LIBODB_VECTOR_ARG_USE>& x,
247  {return x.base () < y.base ();}
248 
249  template <class T, class A LIBODB_VECTOR_ARG_DECL>
250  inline bool operator<(const vector<T,A LIBODB_VECTOR_ARG_USE>& x,
251  const std::vector<T,A>& y)
252  {return x.base () < y;}
253 
254  template <class T, class A LIBODB_VECTOR_ARG_DECL>
255  inline bool operator<(const std::vector<T,A>& x,
257  {return x < y.base ();}
258 
259  template <class T, class A LIBODB_VECTOR_ARG_DECL>
262  {return x.base () != y.base ();}
263 
264  template <class T, class A LIBODB_VECTOR_ARG_DECL>
266  const std::vector<T,A>& y)
267  {return x.base () != y;}
268 
269  template <class T, class A LIBODB_VECTOR_ARG_DECL>
270  inline bool operator!=(const std::vector<T,A>& x,
272  {return x != y.base ();}
273 
274  template <class T, class A LIBODB_VECTOR_ARG_DECL>
277  {return x.base () > y.base ();}
278 
279  template <class T, class A LIBODB_VECTOR_ARG_DECL>
282  {return x.base () >= y.base ();}
283 
284  template <class T, class A LIBODB_VECTOR_ARG_DECL>
286  const std::vector<T,A>& y)
287  {return x.base () >= y;}
288 
289  template <class T, class A LIBODB_VECTOR_ARG_DECL>
290  inline bool operator>=(const std::vector<T,A>& x,
292  {return x >= y.base ();}
293 
294  template <class T, class A LIBODB_VECTOR_ARG_DECL>
295  inline bool operator<=(const vector<T,A LIBODB_VECTOR_ARG_USE>& x,
297  {return x.base () <= y.base ();}
298 
299  template <class T, class A LIBODB_VECTOR_ARG_DECL>
300  inline bool operator<=(const vector<T,A LIBODB_VECTOR_ARG_USE>& x,
301  const std::vector<T,A>& y)
302  {return x.base () <= y;}
303 
304  template <class T, class A LIBODB_VECTOR_ARG_DECL>
305  inline bool operator<=(const std::vector<T,A>& x,
307  {return x <= y.base ();}
308 
309  template <class V, class I>
310  class vector_iterator
311  {
312  public:
313  typedef V vector_type;
315  typedef typename vector_type::const_iterator const_iterator_type;
316 
317  // Sun CC with non-standard STL does not have iterator_traits.
318  //
319 #ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC
320  typedef std::iterator_traits<base_iterator_type> base_iterator_traits;
321 
322  typedef typename base_iterator_traits::value_type value_type;
323  typedef typename base_iterator_traits::difference_type difference_type;
324  typedef typename base_iterator_traits::pointer pointer;
325  typedef typename base_iterator_traits::reference reference;
326  typedef typename base_iterator_traits::iterator_category iterator_category;
327 #else
328  // Base iterator is just a pointer.
329  //
330  typedef typename vector_type::value_type value_type;
331  typedef typename vector_type::pointer pointer;
332  typedef typename vector_type::reference reference;
333  typedef std::random_access_iterator_tag iterator_category;
334  typedef std::ptrdiff_t difference_type;
335 #endif
336 
337  typedef typename vector_type::size_type size_type;
338  typedef typename vector_type::const_reference const_reference;
339  typedef typename vector_type::const_pointer const_pointer;
340 
341  vector_iterator (): v_ (0), i_ () {}
343  : v_ (v), i_ (i) {}
344  operator const_iterator_type () const {return i_;}
345  base_iterator_type base () const {return i_;}
346  vector_type* vector () const {return v_;}
347 
348  // Note: const_{reference,pointer}.
349  //
350  const_reference operator* () const {return *i_;}
351  const_pointer operator-> () const {return i_.operator -> ();}
352  const_reference operator[] (difference_type n) const {return i_[n];}
353 
354  // Modifiers.
355  //
356  // Buggy Sun CC cannot have them out of class.
357  //
358  reference modify () const
359  {
360  if (v_->_tracking ())
361  v_->_impl ().modify (
362  static_cast<size_type> (i_ - v_->base ().begin ()));
363  return *i_;
364  }
365 
367  {
368  if (v_->_tracking ())
369  v_->_impl ().modify (
370  static_cast<size_type> (i_ - v_->base ().begin () + n));
371  return i_[n];
372  }
373 
374  vector_iterator& operator++ () {++i_; return *this;}
375  vector_iterator operator++ (int) {return vector_iterator (v_, i_++);}
376  vector_iterator& operator-- () {--i_; return *this;}
377  vector_iterator operator-- (int) {return vector_iterator (v_, i_--);}
378 
380  {return vector_iterator (v_, i_ + n);}
381  vector_iterator& operator+= (difference_type n) {i_ += n; return *this;}
383  {return vector_iterator (v_, i_ - n);}
384  vector_iterator& operator-= (difference_type n) {i_ -= n; return *this;}
385 
386  // Implementation details.
387  //
388  public:
389  base_iterator_type _base () const {return i_;} // Same as base ().
390 
391  private:
392  vector_type* v_;
394  };
395 
396 #ifndef _RWSTD_NO_CLASS_PARTIAL_SPEC
397  template <class V, class J>
398  class vector_iterator<V, std::reverse_iterator<J> >
399  {
400  public:
401  typedef V vector_type;
402  typedef std::reverse_iterator<J> base_iterator_type;
403  typedef typename vector_type::const_reverse_iterator const_iterator_type;
404  typedef std::iterator_traits<base_iterator_type> base_iterator_traits;
405 
406  typedef typename vector_type::iterator iterator_type;
407  typedef typename base_iterator_traits::value_type value_type;
408  typedef typename base_iterator_traits::difference_type difference_type;
409  typedef typename base_iterator_traits::pointer pointer;
410  typedef typename base_iterator_traits::reference reference;
411  typedef typename base_iterator_traits::iterator_category iterator_category;
412 
413  typedef typename vector_type::size_type size_type;
414  typedef typename vector_type::const_reference const_reference;
415  typedef typename vector_type::const_pointer const_pointer;
416 
417  vector_iterator (): v_ (0), i_ () {}
418  explicit vector_iterator (const iterator_type& i)
419  : v_ (i.vector ()), i_ (i.base ()) {}
421  : v_ (v), i_ (i) {}
422  operator const_iterator_type () const {return i_;}
423  iterator_type base () const {return iterator_type (v_, i_.base ());}
424  base_iterator_type rbase () const {return i_;}
425  vector_type* vector () const {return v_;}
426 
427  // Note: const_{reference,pointer}.
428  //
429  const_reference operator* () const {return *i_;}
430  const_pointer operator-> () const {return i_.operator -> ();}
431  const_reference operator[] (difference_type n) const {return i_[n];}
432 
433  // Modifiers.
434  //
435  reference modify () const
436  {
437  if (v_->_tracking ())
438  v_->_impl ().modify (
439  static_cast<size_type> (v_->base ().rend () - i_ - 1));
440  return *i_;
441  }
442 
444  {
445  if (v_->_tracking ())
446  // Note: going in the opposite direction.
447  v_->_impl ().modify (
448  static_cast<size_type> (v_->base ().rend () - i_ - 1 - n));
449  return i_[n];
450  }
451 
452  vector_iterator& operator++ () {++i_; return *this;}
453  vector_iterator operator++ (int) {return vector_iterator (v_, i_++);}
454  vector_iterator& operator-- () {--i_; return *this;}
455  vector_iterator operator-- (int) {return vector_iterator (v_, i_--);}
456 
458  {return vector_iterator (v_, i_ + n);}
459  vector_iterator& operator+= (difference_type n) {i_ += n; return *this;}
461  {return vector_iterator (v_, i_ - n);}
462  vector_iterator& operator-= (difference_type n) {i_ -= n; return *this;}
463 
464  // Implementation details.
465  //
466  public:
467  base_iterator_type _base () const {return i_;} // Same as rbase().
468 
469  private:
470  vector_type* v_;
472  };
473 #endif // _RWSTD_NO_CLASS_PARTIAL_SPEC
474 
475  // operator==
476  //
477  template <class V, class I>
478  inline bool
480  {return x._base () == y._base ();}
481 
482  template <class V, class I>
483  inline bool
486  {return x._base () == y;}
487 
488  template <class V, class I>
489  inline bool
491  const vector_iterator<V, I>& y)
492  {return x == y._base ();}
493 
494  // operator<
495  //
496  template <class V, class I>
497  inline bool
498  operator< (const vector_iterator<V, I>& x, const vector_iterator<V, I>& y)
499  {return x._base () < y._base ();}
500 
501  template <class V, class I>
502  inline bool
503  operator< (const vector_iterator<V, I>& x,
505  {return x._base () < y;}
506 
507  template <class V, class I>
508  inline bool
509  operator< (const typename vector_iterator<V, I>::const_iterator_type& x,
510  const vector_iterator<V, I>& y)
511  {return x < y._base ();}
512 
513  // operator!=
514  //
515  template <class V, class I>
516  inline bool
518  {return x._base () != y._base ();}
519 
520  template <class V, class I>
521  inline bool
524  {return x._base () != y;}
525 
526  template <class V, class I>
527  inline bool
529  const vector_iterator<V, I>& y)
530  {return x != y._base ();}
531 
532  // operator>
533  //
534  template <class V, class I>
535  inline bool
537  {return x._base () > y._base ();}
538 
539  template <class V, class I>
540  inline bool
543  {return x._base () > y;}
544 
545  template <class V, class I>
546  inline bool
548  const vector_iterator<V, I>& y)
549  {return x > y._base ();}
550 
551  // operator>=
552  //
553  template <class V, class I>
554  inline bool
556  {return x._base () >= y._base ();}
557 
558  template <class V, class I>
559  inline bool
562  {return x._base () >= y;}
563 
564  template <class V, class I>
565  inline bool
567  const vector_iterator<V, I>& y)
568  {return x >= y._base ();}
569 
570  // operator<=
571  //
572  template <class V, class I>
573  inline bool
574  operator<= (const vector_iterator<V, I>& x, const vector_iterator<V, I>& y)
575  {return x._base () <= y._base ();}
576 
577  template <class V, class I>
578  inline bool
579  operator<= (const vector_iterator<V, I>& x,
581  {return x._base () <= y;}
582 
583  template <class V, class I>
584  inline bool
585  operator<= (const typename vector_iterator<V, I>::const_iterator_type& x,
586  const vector_iterator<V, I>& y)
587  {return x <= y._base ();}
588 
589  // operator-
590  //
591  template <class V, class I>
592  inline typename vector_iterator<V, I>::difference_type
594  {return x._base () - y._base ();}
595 
596  template <class V, class I>
597  inline typename vector_iterator<V, I>::difference_type
600  {return x._base () - y;}
601 
602  template <class V, class I>
603  inline typename vector_iterator<V, I>::difference_type
605  const vector_iterator<V, I>& y)
606  {return x - y._base ();}
607 
608  // operator+
609  //
610  template <class V, class I>
611  inline vector_iterator<V, I>
613  const vector_iterator<V, I>& x)
614  {return vector_iterator<V, I> (x.vector (), n + x._base ());}
615 }
616 
617 namespace std
618 {
619  template <class T, class A LIBODB_VECTOR_ARG_DECL>
622 }
623 
624 #include <odb/vector.ixx>
625 
626 #include <odb/vector-traits.hxx>
627 
628 #include <odb/post.hxx>
629 
630 #endif // ODB_VECTOR_HXX
vector_type::const_reverse_iterator const_iterator_type
Definition: vector.hxx:403
base_vector_type::const_iterator const_iterator
Definition: vector.hxx:63
vector_iterator< V, I >::difference_type operator-(const vector_iterator< V, I > &x, const vector_iterator< V, I > &y)
Definition: vector.hxx:593
base_reverse_iterator_type mrbegin()
vector_iterator()
Definition: vector.hxx:341
const_reference front() const
Definition: vector.hxx:159
std::vector< T, A > base_vector_type
Definition: vector.hxx:54
bool operator>=(const schema_version_migration &x, const schema_version_migration &y)
Definition: schema-version.hxx:64
const_reverse_iterator rbegin() const
Definition: vector.hxx:117
base_iterator_type _base() const
Definition: vector.hxx:467
iterator end()
Definition: vector.hxx:110
void assign(I f, I l)
void reserve(size_type)
V vector_type
Definition: vector.hxx:313
const_reference operator[](size_type n) const
Definition: vector.hxx:153
void _start() const
Definition: vector.hxx:218
vector_iterator operator-(difference_type n) const
Definition: vector.hxx:382
const_reference operator[](difference_type n) const
Definition: vector.hxx:352
vector_iterator(vector_type *v, const base_iterator_type &i)
Definition: vector.hxx:420
reference modify_at(size_type n)
vector & operator=(const vector &)
base_iterator_traits::iterator_category iterator_category
Definition: vector.hxx:326
base_iterator_type base() const
Definition: vector.hxx:345
base_iterator_traits::reference reference
Definition: vector.hxx:325
Definition: vector.hxx:48
base_vector_type & base()
Definition: vector.hxx:206
vector_type::const_iterator const_iterator_type
Definition: vector.hxx:315
reverse_iterator rend()
Definition: vector.hxx:115
base_iterator_traits::iterator_category iterator_category
Definition: vector.hxx:411
iterator insert(iterator position, const T &x)
std::reverse_iterator< J > base_iterator_type
Definition: vector.hxx:402
const_reverse_iterator rend() const
Definition: vector.hxx:118
base_vector_type::size_type size_type
Definition: vector.hxx:64
base_iterator_type _base() const
Definition: vector.hxx:389
vector(const base_vector_type &x)
Definition: vector.hxx:203
vector_type::const_pointer const_pointer
Definition: vector.hxx:415
base_vector_type::const_pointer const_pointer
Definition: vector.hxx:69
void push_back(const T &x)
vector_type::size_type size_type
Definition: vector.hxx:413
iterator_type base() const
Definition: vector.hxx:423
base_iterator_traits::pointer pointer
Definition: vector.hxx:324
vector_iterator(const iterator_type &i)
Definition: vector.hxx:418
std::iterator_traits< base_iterator_type > base_iterator_traits
Definition: vector.hxx:404
vector_iterator & operator-=(difference_type n)
Definition: vector.hxx:384
reference modify() const
Definition: vector.hxx:358
reference modify(difference_type n) const
Definition: vector.hxx:366
vector_type::iterator iterator_type
Definition: vector.hxx:406
base_iterator_traits::value_type value_type
Definition: vector.hxx:407
base_iterator_traits::difference_type difference_type
Definition: vector.hxx:323
base_vector_type::reference reference
Definition: vector.hxx:60
base_vector_type::iterator base_iterator_type
Definition: vector.hxx:55
reference modify() const
Definition: vector.hxx:435
const_reference at(size_type n) const
Definition: vector.hxx:156
const_pointer operator->() const
Definition: vector.hxx:351
vector_iterator< vector, base_reverse_iterator_type > reverse_iterator
Definition: vector.hxx:74
void resize(size_type)
size_type size() const
Definition: vector.hxx:137
const base_vector_type & base() const
Definition: vector.hxx:207
base_vector_type::const_reverse_iterator const_reverse_iterator
Definition: vector.hxx:77
vector(size_type n, const T &v, const A &a=A())
Definition: vector.hxx:82
bool empty() const
Definition: vector.hxx:142
T value_type
Definition: vector.hxx:66
vector_impl impl_
Definition: vector-impl.hxx:213
base_vector_type::reverse_iterator base_reverse_iterator_type
Definition: vector.hxx:57
reference modify_front()
vector_type::const_pointer const_pointer
Definition: vector.hxx:339
bool operator!=(const lazy_ptr< T > &, const lazy_ptr< Y > &)
vector_iterator & operator+=(difference_type n)
Definition: vector.hxx:381
reference modify(difference_type n) const
Definition: vector.hxx:443
vector_iterator< vector, base_iterator_type > iterator
Definition: vector.hxx:62
vector_type * vector() const
Definition: vector.hxx:425
vector_type::const_reference const_reference
Definition: vector.hxx:338
reverse_iterator rbegin()
Definition: vector.hxx:114
Definition: vector-impl.hxx:173
iterator erase(iterator position)
vector_type::size_type size_type
Definition: vector.hxx:337
vector_iterator(vector_type *v, const base_iterator_type &i)
Definition: vector.hxx:342
void pop_back()
reference modify_back()
vector(const A &a=A())
Definition: vector.hxx:80
base_iterator_type rbase() const
Definition: vector.hxx:424
void swap(lazy_ptr< T > &, lazy_ptr< T > &)
base_iterator_traits::difference_type difference_type
Definition: vector.hxx:408
const_iterator end() const
Definition: vector.hxx:112
query_base operator+(const query_base &x, const query_base &y)
Definition: query-dynamic.hxx:325
void start(std::size_t)
vector_type * vector() const
Definition: vector.hxx:346
const_iterator begin() const
Definition: vector.hxx:111
base_iterator_traits::reference reference
Definition: vector.hxx:410
size_type max_size() const
Definition: vector.hxx:138
void clear()
allocator_type get_allocator() const
Definition: vector.hxx:91
vector_iterator & operator++()
Definition: vector.hxx:374
iterator begin()
Definition: vector.hxx:109
vector_type::const_reference const_reference
Definition: vector.hxx:414
base_reverse_iterator_type mrend()
Definition: vector.hxx:126
base_iterator_traits::pointer pointer
Definition: vector.hxx:409
vector_base()
Definition: vector-impl.hxx:194
I base_iterator_type
Definition: vector.hxx:314
bool operator==(const lazy_ptr< T > &, const lazy_ptr< Y > &)
base_iterator_traits::value_type value_type
Definition: vector.hxx:322
vector(I f, I l, const A &a=A())
Definition: vector.hxx:84
reference modify(size_type n)
size_type capacity() const
Definition: vector.hxx:141
const_reference operator*() const
Definition: vector.hxx:350
base_iterator_type mend()
Definition: vector.hxx:124
base_vector_type::pointer pointer
Definition: vector.hxx:68
base_iterator_type mbegin()
std::iterator_traits< base_iterator_type > base_iterator_traits
Definition: vector.hxx:320
Definition: vector.hxx:51
A allocator_type
Definition: vector.hxx:67
vector_iterator & operator--()
Definition: vector.hxx:376
const_reference back() const
Definition: vector.hxx:162
void swap(vector &)
vector(size_type n)
Definition: vector.hxx:81
vector(const vector &x)
Definition: vector.hxx:85
vector_iterator operator+(difference_type n) const
Definition: vector.hxx:379
base_vector_type::const_reference const_reference
Definition: vector.hxx:61
bool operator>(const schema_version_migration &x, const schema_version_migration &y)
Definition: schema-version.hxx:49
base_vector_type::difference_type difference_type
Definition: vector.hxx:65