PGE API 0.4
PR00F's Game Engine full documentation
Loading...
Searching...
No Matches
blRawArrayWrapper.hpp
Go to the documentation of this file.
1#ifndef BL_RAWARRAYWRAPPER_HPP
2#define BL_RAWARRAYWRAPPER_HPP
3
4
5//-------------------------------------------------------------------
6// FILE: blRawArrayWrapper.hpp
7// CLASS: blRawArrayWrapper
8// BASE CLASS: None
9//
10// PURPOSE: This class is used to wrap a raw
11// static or dynamic array with the
12// basic functionality needed to use
13// the array with the smart iterators
14// in the blIteratorAPI library
15//
16// AUTHOR: Vincenzo Barbato
17// http://www.barbatolabs.com
18// navyenzo@gmail.com
19//
20// LISENSE: MIT-LICENCE
21// http://www.opensource.org/licenses/mit-license.php
22//
23// DEPENDENCIES:
24//
25// NOTES:
26//
27// DATE CREATED: Mar/20/2014
28//
29// DATE UPDATED:
30//-------------------------------------------------------------------
31
32
33//-------------------------------------------------------------------
34template<typename blDataType>
35
37{
38public: // Public typedefs
39
42
45
46public: // Constructors and destructors
47
48 // Default constructor
49
51
52 // Copy constructor
53
54 blRawArrayWrapper(const blRawArrayWrapper<blDataType>& rawArrayWrapper) = default;
55
56 // Move constructor
57
59
60 // Constructor using
61 // a raw static array
62
63 template<size_t blArraySize>
64 blRawArrayWrapper(blDataType (&rawStaticArray)[blArraySize]);
65
66 // Constructor using
67 // a raw array
68
69 blRawArrayWrapper(blDataType* rawArray,
70 const size_t& arraySize);
71
72 // Destructor
73
75 {
76 }
77
78public: // Public functions
79
80 // Assignment operator
81 // overloads
84
85 // Additional operator
86 // overloads
87
88 bool operator==(const blRawArrayWrapper<blDataType>& array)const;
89 bool operator!=(const blRawArrayWrapper<blDataType>& array)const;
90
91 // Element access
92 // functions
93
94 blDataType& operator[](const size_t elementIndex);
95 const blDataType& operator[](const size_t elementIndex)const;
96
97 // Functions used
98 // to return the
99 // array size
100
101 size_t length()const;
102 size_t size()const;
103 size_t max_size()const;
104 bool empty()const;
105
106 // Function used to
107 // get the container
108 // iterator
109
110 const iterator& getContainerIter()const;
112
113 // Functions used to
114 // get iterators to
115 // this container
116
117 iterator begin();
118 iterator end();
119 const_iterator cbegin()const;
120 const_iterator cend()const;
121
126
127private: // Private variables
128
129 // The pointer to the
130 // raw array data
131
133
134 // The size/length of
135 // the raw array
136
137 size_t m_size;
138};
139//-------------------------------------------------------------------
140
141
142//-------------------------------------------------------------------
143template<typename blDataType>
145{
146 m_size = 0;
147}
148//-------------------------------------------------------------------
149
150
151//-------------------------------------------------------------------
152template<typename blDataType>
153template<size_t blArraySize>
154inline blRawArrayWrapper<blDataType>::blRawArrayWrapper(blDataType (&rawStaticArray)[blArraySize])
155{
156 if(blArraySize > 0)
157 m_containerIter = iterator(&rawStaticArray[0]);
158
159 m_size = blArraySize;
160}
161//-------------------------------------------------------------------
162
163
164//-------------------------------------------------------------------
165template<typename blDataType>
167 const size_t& arraySize)
168{
169 m_containerIter = iterator(rawArray);
170 m_size = arraySize;
171}
172//-------------------------------------------------------------------
173
174
175//-------------------------------------------------------------------
176template<typename blDataType>
177
178inline const typename blRawArrayWrapper<blDataType>::iterator&
179
181{
182 return m_containerIter;
183}
184//-------------------------------------------------------------------
185
186
187//-------------------------------------------------------------------
188template<typename blDataType>
189
191
193{
194 return m_containerIter;
195}
196//-------------------------------------------------------------------
197
198
199//-------------------------------------------------------------------
200template<typename blDataType>
202{
203 if(!m_containerIter || !rawArrayWrapper.getContainerIter())
204 return false;
205
206 if(this == &rawArrayWrapper)
207 return true;
208
209 auto iter1 = cbegin();
210 auto iter2 = rawArrayWrapper.cbegin();
211
212 for(;
213 iter1 != cend(),iter2 != rawArrayWrapper.cend();
214 ++iter1,++iter2)
215 {
216 if((*iter1) != (*iter2))
217 return false;
218 }
219
220 return true;
221}
222//-------------------------------------------------------------------
223
224
225//-------------------------------------------------------------------
226template<typename blDataType>
228{
229 return !( (*this) == array );
230}
231//-------------------------------------------------------------------
232
233
234//-------------------------------------------------------------------
235template<typename blDataType>
236inline blDataType& blRawArrayWrapper<blDataType>::operator[](const size_t elementIndex)
237{
238 return m_containerIter[elementIndex];
239}
240//-------------------------------------------------------------------
241
242
243//-------------------------------------------------------------------
244template<typename blDataType>
245inline const blDataType& blRawArrayWrapper<blDataType>::operator[](const size_t elementIndex)const
246{
247 return m_containerIter[elementIndex];
248}
249//-------------------------------------------------------------------
250
251
252//-------------------------------------------------------------------
253template<typename blDataType>
255{
256 return m_size;
257}
258//-------------------------------------------------------------------
259
260
261//-------------------------------------------------------------------
262template<typename blDataType>
264{
265 return m_size;
266}
267//-------------------------------------------------------------------
268
269
270//-------------------------------------------------------------------
271template<typename blDataType>
273{
274 return m_size;
275}
276//-------------------------------------------------------------------
277
278
279//-------------------------------------------------------------------
280template<typename blDataType>
282{
283 return (m_size != 0);
284}
285//-------------------------------------------------------------------
286
287
288//-------------------------------------------------------------------
289// The iterators
290//-------------------------------------------------------------------
291template<typename blDataType>
293{
294 return m_containerIter;
295}
296
297template<typename blDataType>
299{
300 if(m_containerIter)
301 return (m_containerIter + static_cast<ptrdiff_t>(size()));
302 else
303 return m_containerIter;
304}
305
306template<typename blDataType>
308{
309 return m_containerIter;
310}
311
312template<typename blDataType>
314{
315 if(m_containerIter)
316 return (m_containerIter + size());
317 else
318 return m_containerIter;
319}
320
321template<typename blDataType>
323{
324 if(m_containerIter && (size() > 0))
325 return reverse_iterator(m_containerIter + static_cast<ptrdiff_t>(size()) - 1);
326 else
327 return m_containerIter;
328}
329
330template<typename blDataType>
332{
333 if(m_containerIter && (size() > 0))
334 return (m_containerIter - 1);
335 else
336 return m_containerIter;
337}
338
339template<typename blDataType>
341{
342 if(m_containerIter && (size() > 0))
343 return (m_containerIter + size() - 1);
344 else
345 return m_containerIter;
346}
347
348template<typename blDataType>
350{
351 if(m_containerIter && (size() > 0))
352 return (m_containerIter - 1);
353 else
354 return m_containerIter;
355}
356//-------------------------------------------------------------------
357
358
359//-------------------------------------------------------------------
360// Functions used to easily initialize
361// a raw array wrapper
362//-------------------------------------------------------------------
363template<typename blDataType,size_t blArraySize>
364blRawArrayWrapper<blDataType> getRawArrayWrapper(blDataType (&rawStaticArray)[blArraySize])
365{
366 return blRawArrayWrapper<blDataType>(rawStaticArray);
367}
368
369template<typename blDataType>
371 const size_t& arraySize)
372{
373 return blRawArrayWrapper<blDataType>(rawArray,
374 arraySize);
375}
376//-------------------------------------------------------------------
377
378
379#endif // BL_RAWARRAYWRAPPER_HPP
blRawArrayWrapper< blDataType > getRawArrayWrapper(blDataType(&rawStaticArray)[blArraySize])
blRawIterator< blDataType > iterator
const iterator & getContainerIter() const
const_reverse_iterator crbegin() const
blRawIterator< const blDataType > const_iterator
blRawArrayWrapper< blDataType > & operator=(blRawArrayWrapper< blDataType > &&)=default
bool operator==(const blRawArrayWrapper< blDataType > &array) const
blDataType & operator[](const size_t elementIndex)
reverse_iterator rend()
bool operator!=(const blRawArrayWrapper< blDataType > &array) const
blRawArrayWrapper(const blRawArrayWrapper< blDataType > &rawArrayWrapper)=default
reverse_iterator rbegin()
const_iterator cend() const
const_iterator cbegin() const
const_iterator getContainerConstIter() const
blRawArrayWrapper< blDataType > & operator=(const blRawArrayWrapper< blDataType > &)=default
blRawReverseIterator< const blDataType > const_reverse_iterator
blRawArrayWrapper(blRawArrayWrapper< blDataType > &&rawArrayWrapper)=default
blRawReverseIterator< blDataType > reverse_iterator
const_reverse_iterator crend() const