Embedded Template Library  1.0
 All Classes Files Functions Variables Typedefs Friends Modules Pages
container.h
Go to the documentation of this file.
1 
3 /******************************************************************************
4 The MIT License(MIT)
5 
6 Embedded Template Library.
7 
8 Copyright(c) 2014 jwellbelove
9 
10 Permission is hereby granted, free of charge, to any person obtaining a copy
11 of this software and associated documentation files(the "Software"), to deal
12 in the Software without restriction, including without limitation the rights
13 to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
14 copies of the Software, and to permit persons to whom the Software is
15 furnished to do so, subject to the following conditions :
16 
17 The above copyright notice and this permission notice shall be included in all
18 copies or substantial portions of the Software.
19 
20 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
23 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
26 SOFTWARE.
27 ******************************************************************************/
28 
29 #ifndef __ETL_CONTAINER__
30 #define __ETL_CONTAINER__
31 
32 #include <stddef.h>
33 #include <iterator>
34 
37 
38 namespace etl
39 {
40  //*****************************************************************************
43  //*****************************************************************************
44  template<typename TContainer>
45  typename TContainer::iterator begin(TContainer& container)
46  {
47  return container.begin();
48  }
49 
50  //*****************************************************************************
53  //*****************************************************************************
54  template<typename TContainer>
55  typename TContainer::const_iterator begin(const TContainer& container)
56  {
57  return container.begin();
58  }
59 
60  //*****************************************************************************
63  //*****************************************************************************
64  template<typename TContainer>
65  typename TContainer::const_iterator cbegin(const TContainer& container)
66  {
67  return container.cbegin();
68  }
69 
70  //*****************************************************************************
73  //*****************************************************************************
74  template<typename TContainer>
75  typename TContainer::reverse_iterator rbegin(const TContainer& container)
76  {
77  return container.rbegin();
78  }
79 
80  //*****************************************************************************
83  //*****************************************************************************
84  template<typename TContainer>
85  typename TContainer::reverse_iterator crbegin(const TContainer& container)
86  {
87  return container.crbegin();
88  }
89 
90  //*****************************************************************************
93  //*****************************************************************************
94  template<typename TContainer>
95  typename TContainer::iterator end(TContainer& container)
96  {
97  return container.end();
98  }
99 
100  //*****************************************************************************
103  //*****************************************************************************
104  template<typename TContainer>
105  typename TContainer::const_iterator end(const TContainer& container)
106  {
107  return container.end();
108  }
109 
110  //*****************************************************************************
113  //*****************************************************************************
114  template<typename TContainer>
115  typename TContainer::const_iterator cend(const TContainer& container)
116  {
117  return container.cend();
118  }
119 
120  //*****************************************************************************
123  //*****************************************************************************
124  template<typename TContainer>
125  typename TContainer::const_iterator rend(const TContainer& container)
126  {
127  return container.rend();
128  }
129 
130  //*****************************************************************************
133  //*****************************************************************************
134  template<typename TContainer>
135  typename TContainer::reverse_iterator crend(const TContainer& container)
136  {
137  return container.crend();
138  }
139 
140  //*****************************************************************************
143  //*****************************************************************************
144  template<typename TValue, const size_t ARRAY_SIZE>
145  TValue* begin(TValue(&data)[ARRAY_SIZE])
146  {
147  return &data[0];
148  }
149 
150  //*****************************************************************************
153  //*****************************************************************************
154  template<typename TValue, const size_t ARRAY_SIZE>
155  const TValue* begin(const TValue(&data)[ARRAY_SIZE])
156  {
157  return &data[0];
158  }
159 
160  //*****************************************************************************
163  //*****************************************************************************
164  template<typename TValue, const size_t ARRAY_SIZE>
165  const TValue* cbegin(const TValue(&data)[ARRAY_SIZE])
166  {
167  return &data[0];
168  }
169 
170  //*****************************************************************************
173  //*****************************************************************************
174  template<typename TValue, const size_t ARRAY_SIZE>
175  std::reverse_iterator<TValue*> rbegin(const TValue(&data)[ARRAY_SIZE])
176  {
177  return std::reverse_iterator<TValue*>(&data[ARRAY_SIZE]);
178  }
179 
180  //*****************************************************************************
183  //*****************************************************************************
184  template<typename TValue, const size_t ARRAY_SIZE>
185  std::reverse_iterator<const TValue*> crbegin(const TValue(&data)[ARRAY_SIZE])
186  {
187  return std::reverse_iterator<const TValue*>(&data[ARRAY_SIZE]);
188  }
189 
190  //*****************************************************************************
193  //*****************************************************************************
194  template<typename TValue, const size_t ARRAY_SIZE>
195  TValue* end(TValue(&data)[ARRAY_SIZE])
196  {
197  return &data[ARRAY_SIZE];
198  }
199 
200  //*****************************************************************************
203  //*****************************************************************************
204  template<typename TValue, const size_t ARRAY_SIZE>
205  const TValue* end(const TValue(&data)[ARRAY_SIZE])
206  {
207  return &data[ARRAY_SIZE];
208  }
209 
210  //*****************************************************************************
213  //*****************************************************************************
214  template<typename TValue, const size_t ARRAY_SIZE>
215  const TValue* cend(const TValue(&data)[ARRAY_SIZE])
216  {
217  return &data[ARRAY_SIZE];
218  }
219 
220  //*****************************************************************************
223  //*****************************************************************************
224  template<typename TValue, const size_t ARRAY_SIZE>
225  std::reverse_iterator<TValue*> rend(const TValue(&data)[ARRAY_SIZE])
226  {
227  return std::reverse_iterator<TValue*>(&data[0]);
228  }
229 
230  //*****************************************************************************
233  //*****************************************************************************
234  template<typename TValue, const size_t ARRAY_SIZE>
235  std::reverse_iterator<const TValue*> crend(const TValue(&data)[ARRAY_SIZE])
236  {
237  return std::reverse_iterator<const TValue*>(&data[0]);
238  }
239 
240  //*****************************************************************************
243  //*****************************************************************************
244  template<class TIterator>
245  TIterator next(TIterator iterator, ptrdiff_t n = 1)
246  {
247  std::advance(iterator, n);
248  return iterator;
249  }
250 
251  //*****************************************************************************
254  //*****************************************************************************
255  template<class TIterator>
256  TIterator prev(TIterator iterator, ptrdiff_t n = 1)
257  {
258  std::advance(iterator, -n);
259  return iterator;
260  }
261 
267  template<typename TContainer>
268  typename TContainer::size_type size(const TContainer& container)
269  {
270  return container.size();
271  }
272 
277  template<typename TValue, const size_t ARRAY_SIZE>
278  size_t size(TValue(&data)[ARRAY_SIZE])
279  {
280  return ARRAY_SIZE;
281  }
282 
290  template <typename T, const size_t ARRAY_SIZE>
291  char(&array_size(T(&array)[ARRAY_SIZE]))[ARRAY_SIZE];
292 }
293 
294 #endif
295 
std::reverse_iterator< const TValue * > crend(const TValue(&data)[ARRAY_SIZE])
Definition: container.h:235
const TValue * cbegin(const TValue(&data)[ARRAY_SIZE])
Definition: container.h:165
TIterator prev(TIterator iterator, ptrdiff_t n=1)
Definition: container.h:256
const TValue * cend(const TValue(&data)[ARRAY_SIZE])
Definition: container.h:215
std::reverse_iterator< TValue * > rbegin(const TValue(&data)[ARRAY_SIZE])
Definition: container.h:175
Definition: algorithm.h:43
TIterator next(TIterator iterator, ptrdiff_t n=1)
Definition: container.h:245
const TValue * begin(const TValue(&data)[ARRAY_SIZE])
Definition: container.h:155
const TValue * end(const TValue(&data)[ARRAY_SIZE])
Definition: container.h:205
std::reverse_iterator< const TValue * > crbegin(const TValue(&data)[ARRAY_SIZE])
Definition: container.h:185
std::reverse_iterator< TValue * > rend(const TValue(&data)[ARRAY_SIZE])
Definition: container.h:225