GenApi 3.5.1
Container.h
Go to the documentation of this file.
1//-----------------------------------------------------------------------------
2// (c) 2006 by Basler Vision Technologies
3// Author: Alex Happe
4//
5// License: This file is published under the license of the EMVA GenICam Standard Group.
6// A text file describing the legal terms is included in your installation as 'GenICam_license.pdf'.
7// If for some reason you are missing this file please contact the EMVA or visit the website
8// (http://www.genicam.org) for a full copy.
9//
10// THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
11// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
12// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
13// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD GROUP
14// OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
15// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
16// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
17// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
18// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
19// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
20// POSSIBILITY OF SUCH DAMAGE.
21//
22//-----------------------------------------------------------------------------
29#ifndef GENICAM_GENAPI_NODEVECTOR_H
30#define GENICAM_GENAPI_NODEVECTOR_H
31
32
33#include <GenApi/GenApiDll.h>
34#include <GenICamFwd.h>
35
36#include <vector>
37
38#ifndef _WIN32
39# include <stdint.h>
40#endif
41
42#if defined ( __GNUC__ ) && !defined (VXWORKS) && !defined ( __APPLE__ )
43 using namespace __gnu_cxx;
44#endif
45
46#if defined ( __GNUC__ ) && defined ( __linux__)
47# include <cstddef>
48#endif
49
50#if defined (_WIN32) || (defined (__GNUC__) && (defined (__linux__) || defined (__APPLE__) || defined(VXWORKS)))
51
52// conversion from 'uintptr_t' to 'void *' of greater size
53// This is a portability warning
54#ifdef _MSC_VER
55# pragma warning( disable : 4312 )
56#endif
57
58namespace GENAPI_NAMESPACE
59{
60 struct INode;
61 struct IValue;
62
63
64 //*************************************************************
65 // N O D E _ V E C T O R
66 //*************************************************************
67
72 class GENAPI_DECL node_vector
73 {
74 typedef INode* T;
75
76 // Nested types
77 // ---------------------------------------------------------------------------
78 public:
79 class GENAPI_DECL const_iterator
80 {
81 // iterator traits
82 // ------------------------------------------------------------------------
83 public:
84 typedef std::random_access_iterator_tag iterator_category;
85 typedef T value_type;
86 typedef ptrdiff_t difference_type;
87 typedef T* pointer;
88 typedef T& reference;
89 // Ctor / Dtor
90 // -------------------------------------------------------------------------
91 public:
92 const_iterator ( T *pPtr = 0 );
93
94 // Operators
95 // -------------------------------------------------------------------------
96 public:
97 const T & operator * ( void ) const;
98 const_iterator & operator ++ ( void );
99 const_iterator operator ++ ( int );
100 const_iterator & operator -- ( void );
101 const_iterator operator -- ( int );
102 const_iterator & operator += ( intptr_t iInc );
103 const_iterator operator += ( intptr_t iInc ) const;
104 const_iterator operator + ( intptr_t iInc ) const;
105 const_iterator & operator -= ( intptr_t iDec );
106 const_iterator operator -= ( intptr_t iDec ) const;
107 intptr_t operator - ( const const_iterator &iter ) const;
108 const_iterator operator - ( intptr_t iDec ) const;
109 const T & operator [] ( intptr_t iIndex ) const;
110 bool operator == ( const const_iterator &iter ) const;
111 bool operator != ( const const_iterator &iter ) const;
112 bool operator < ( const const_iterator &iter ) const;
113 bool operator > ( const const_iterator &iter ) const;
114 bool operator <= ( const const_iterator &iter ) const;
115 bool operator >= ( const const_iterator &iter ) const;
116 GENAPI_DECL
117 friend const_iterator operator + ( intptr_t iInc, const const_iterator &iter);
118
119 // Member
120 // -------------------------------------------------------------------------
121 protected:
122 T * _ps;
123 };
124
125 class GENAPI_DECL iterator :
126 public const_iterator
127 {
128 public:
129 // iterator traits
130 // -------------------------------------------------------------------------
131 typedef std::random_access_iterator_tag iterator_category;
132 typedef T value_type;
133 typedef const_iterator::difference_type difference_type;
134 typedef const_iterator::pointer pointer;
135 typedef const_iterator::reference reference;
136 // Ctor / Dtor
137 // -------------------------------------------------------------------------
138 public:
139 iterator ( T *pPtr = 0 );
140
141 // Operators
142 // -------------------------------------------------------------------------
143 public:
144 T & operator * ( void ) const;
145 iterator & operator ++ ( void );
146 iterator operator ++ ( int );
147 iterator & operator -- ( void );
148 iterator operator -- ( int );
149 iterator & operator += ( intptr_t iInc );
150 iterator operator += ( intptr_t iInc ) const;
151 iterator operator + ( intptr_t iInc ) const;
152 iterator & operator -= ( intptr_t iDec );
153 iterator operator -= ( intptr_t iDec ) const;
154 intptr_t operator - ( const iterator &iter ) const;
155 iterator operator - ( intptr_t iDec ) const;
156 T & operator [] ( intptr_t iIndex ) const;
157 GENAPI_DECL
158 friend iterator operator + ( intptr_t iInc, const iterator &iter);
159 };
160
161 // Ctor / Dtor
162 // ---------------------------------------------------------------------------
163 public:
164 node_vector ( void );
165 explicit node_vector ( size_t uiSize);
166 node_vector ( const node_vector &obj);
167 virtual ~node_vector ( void );
168
169 // Element access
170 // ---------------------------------------------------------------------------
171 public:
172 virtual void assign ( size_t n, const T &val );
173 virtual void clear ( void );
174 virtual iterator erase ( iterator pos );
175 virtual T & at ( size_t uiIndex );
176 virtual const T & at ( size_t uiIndex ) const;
177 virtual T & back ( void );
178 virtual const T & back ( void ) const;
179 virtual iterator begin ( void );
180 virtual const_iterator begin ( void ) const;
181 virtual size_t capacity ( void ) const;
182 virtual iterator end ( void );
183 virtual const_iterator end ( void ) const;
184 virtual T & front ( void );
185 virtual const T & front ( void ) const;
186 virtual size_t max_size ( void ) const;
187 virtual size_t size ( void ) const;
188 virtual iterator insert ( iterator pos, const T& val) ;
189 virtual bool empty ( void ) const;
190 virtual void pop_back ( void );
191 virtual void push_back ( const T &val );
192 virtual void resize ( size_t uiSize );
193 virtual void reserve ( size_t uiSize );
194
195 // Do not use - only left in for backwards compatibility!
196 virtual void erase (size_t uiIndex);
197 virtual void insert (size_t uiIndex, const T &val);
198
199// Operators
200 // ---------------------------------------------------------------------------
201 public:
202 node_vector & operator = ( const node_vector &obj );
203 T & operator [] ( size_t uiIndex );
204 const T & operator [] ( size_t uiIndex ) const;
205 void operator delete ( void *pWhere );
206 void * operator new ( size_t uiSize );
207
208 // Member
209 // ---------------------------------------------------------------------------
210 private:
211 typedef std::vector<T, std::allocator<T> > vector_t;
212 vector_t *_pv;
213 };
214
215
216
217 //*************************************************************
218 // V A L U E _ V E C T O R
219 //*************************************************************
220
225 class GENAPI_DECL value_vector
226 {
227 typedef IValue* T;
228 // Nested types
229 // ---------------------------------------------------------------------------
230 public:
231 class GENAPI_DECL const_iterator
232 {
233 // iterator traits
234 // ------------------------------------------------------------------------
235 public:
236 typedef std::random_access_iterator_tag iterator_category;
237 typedef T value_type;
238 typedef ptrdiff_t difference_type;
239 typedef T* pointer;
240 typedef T& reference;
241
242 // Ctor / Dtor
243 // -------------------------------------------------------------------------
244 public:
245 const_iterator ( T *pPtr = 0 );
246
247 // Operators
248 // -------------------------------------------------------------------------
249 public:
250 const T & operator * ( void ) const;
251 const_iterator & operator ++ ( void );
252 const_iterator operator ++ ( int );
253 const_iterator & operator -- ( void );
254 const_iterator operator -- ( int );
255 const_iterator & operator += ( intptr_t iInc );
256 const_iterator operator += ( intptr_t iInc ) const;
257 const_iterator operator + ( intptr_t iInc ) const;
258 const_iterator & operator -= ( intptr_t iDec );
259 const_iterator operator -= ( intptr_t iDec ) const;
260 intptr_t operator - ( const const_iterator &iter ) const;
261 const_iterator operator - ( intptr_t iDec ) const;
262 const T & operator [] ( intptr_t iIndex ) const;
263 bool operator == ( const const_iterator &iter ) const;
264 bool operator != ( const const_iterator &iter ) const;
265 bool operator < ( const const_iterator &iter ) const;
266 bool operator > ( const const_iterator &iter ) const;
267 bool operator <= ( const const_iterator &iter ) const;
268 bool operator >= ( const const_iterator &iter ) const;
269 GENAPI_DECL
270 friend const_iterator operator + ( intptr_t iInc, const const_iterator &iter);
271
272 // Member
273 // -------------------------------------------------------------------------
274 protected:
275 T * _ps;
276 };
277
278 class GENAPI_DECL iterator :
279 public const_iterator
280 {
281 public:
282 // iterator traits
283 // -------------------------------------------------------------------------
284 typedef std::random_access_iterator_tag iterator_category;
285 typedef T value_type;
286 typedef const_iterator::difference_type difference_type;
287 typedef const_iterator::pointer pointer;
288 typedef const_iterator::reference reference;
289 // Ctor / Dtor
290 // -------------------------------------------------------------------------
291 public:
292 iterator ( T *pPtr = 0 );
293
294 // Operators
295 // -------------------------------------------------------------------------
296 public:
297 T & operator * ( void ) const;
298 iterator & operator ++ ( void );
299 iterator operator ++ ( int );
300 iterator & operator -- ( void );
301 iterator operator -- ( int );
302 iterator & operator += ( intptr_t iInc );
303 iterator operator += ( intptr_t iInc ) const;
304 iterator operator + ( intptr_t iInc ) const;
305 iterator & operator -= ( intptr_t iDec );
306 iterator operator -= ( intptr_t iDec ) const;
307 intptr_t operator - ( const iterator &iter ) const;
308 iterator operator - ( intptr_t iDec ) const;
309 T & operator [] ( intptr_t iIndex ) const;
310 GENAPI_DECL
311 friend iterator operator + ( intptr_t iInc, const iterator &iter);
312 };
313
314 // Ctor / Dtor
315 // ---------------------------------------------------------------------------
316 public:
317 value_vector ( void );
318 explicit value_vector ( size_t uiSize);
319 value_vector ( const value_vector &obj);
320 virtual ~value_vector ( void );
321
322 // Element access
323 // ---------------------------------------------------------------------------
324 public:
325 virtual void assign ( size_t n, const T &obj );
326 virtual void clear ( void );
327 virtual iterator erase ( iterator pos );
328 virtual T & at ( size_t uiIndex );
329 virtual const T & at ( size_t uiIndex ) const;
330 virtual T & back ( void );
331 virtual const T & back ( void ) const;
332 virtual iterator begin ( void );
333 virtual const_iterator begin ( void ) const;
334 virtual size_t capacity ( void ) const;
335 virtual iterator end ( void );
336 virtual const_iterator end ( void ) const;
337 virtual T & front ( void );
338 virtual const T & front ( void ) const;
339 virtual size_t max_size ( void ) const;
340 virtual size_t size ( void ) const;
341 virtual iterator insert ( iterator pos, const T& val) ;
342 virtual bool empty ( void ) const;
343 virtual void pop_back ( void );
344 virtual void push_back ( const T &val );
345 virtual void resize ( size_t uiSize, const T &val );
346 virtual void reserve ( size_t uiSize );
347
348
349 // Do not use - only left in for backwards compatibility!
350 virtual void erase (size_t uiIndex);
351 virtual void insert (size_t uiIndex, const T &val);
352
353// Operators
354 // ---------------------------------------------------------------------------
355 public:
356 value_vector & operator = ( const value_vector &obj );
357 T & operator [] ( size_t uiIndex );
358 const T & operator [] ( size_t uiIndex ) const;
359 void operator delete ( void *pWhere );
360 void * operator new ( size_t uiSize );
361
362 // Member
363 // ---------------------------------------------------------------------------
364 private:
365 typedef std::vector<T, std::allocator<T> > vector_t;
366 vector_t *_pv;
367 };
368
370 typedef value_vector FeatureList_t;
371} // namespace GenApi;
372
373
374#else
375# error Unknown platform
376#endif
377
378#endif // GENICAM_GENAPI_NODEVECTOR_H
declspec's to be used for GenApi Windows dll
Forward declarations for GenICam types.
GENICAM_INTERFACE GENAPI_DECL_ABSTRACT IValue
Interface for value properties.
Definition IValue.h:59
GENICAM_INTERFACE INode
Interface common to all nodes.
Definition ICategory.h:49