dune-common  2.2.1
reservedvector.hh
Go to the documentation of this file.
1 #ifndef RESERVEDVECTOR_HH
2 #define RESERVEDVECTOR_HH
3 
8 #include <iostream>
10 
11 #ifdef CHECK_RESERVEDVECTOR
12 #define CHECKSIZE(X) assert(X)
13 #else
14 #define CHECKSIZE(X) {}
15 #endif
16 
17 namespace Dune
18 {
33  template<class T, int n>
35  {
36  public:
37 
40 
41  typedef T value_type;
43  typedef T* pointer;
45  typedef T& reference;
47  typedef const T& const_reference;
49  typedef size_t size_type;
51  typedef std::ptrdiff_t difference_type;
56 
61 
62  ReservedVector() : sz(0) {}
63 
68 
69  void clear()
70  {
71  sz = 0;
72  }
73 
75  void resize(size_t s)
76  {
77  CHECKSIZE(s<=n);
78  sz = s;
79  }
80 
82  void push_back(const T& t)
83  {
84  CHECKSIZE(sz<n);
85  data[sz++] = t;
86  }
87 
89  void pop_back()
90  {
91  if (! empty()) sz--;
92  }
93 
96  return iterator(*this, 0);
97  }
98 
101  return const_iterator(*this, 0);
102  }
103 
106  return iterator(*this, sz);
107  }
108 
110  const_iterator end() const{
111  return const_iterator(*this, sz);
112  }
113 
116  {
117  CHECKSIZE(sz>i);
118  return data[i];
119  }
120 
123  {
124  CHECKSIZE(sz>i);
125  return data[i];
126  }
127 
130  {
131  CHECKSIZE(sz>0);
132  return data[0];
133  }
134 
137  {
138  CHECKSIZE(sz>0);
139  return data[0];
140  }
141 
144  {
145  CHECKSIZE(sz>0);
146  return data[sz-1];
147  }
148 
151  {
152  CHECKSIZE(sz>0);
153  return data[sz-1];
154  }
155 
160 
161  size_type size () const
162  {
163  return sz;
164  }
165 
167  bool empty() const
168  {
169  return sz==0;
170  }
171 
174  {
175  return n;
176  }
177 
180  {
181  return n;
182  }
183 
186 
187  friend std::ostream& operator<< (std::ostream& s, const ReservedVector& v)
188  {
189  for (size_t i=0; i<v.size(); i++)
190  s << v[i] << " ";
191  return s;
192  }
193 
194  private:
195  T data[n];
196  size_type sz;
197  };
198 
199 }
200 
201 #undef CHECKSIZE
202 
203 #endif // RESERVEDVECTOR_HH