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 
58 namespace 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
GENICAM_INTERFACE INode
Interface common to all nodes.
Definition: ICategory.h:49
Forward declarations for GenICam types.
GENICAM_INTERFACE GENAPI_DECL_ABSTRACT IValue
Interface for value properties.
Definition: IValue.h:59
declspec&#39;s to be used for GenApi Windows dll
Definition: ChunkAdapter.h:37