All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Pointer.h
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // (c) 2006 by Basler Vision Technologies
3 // Section: Vision Components
4 // Project: GenApi
5 // Author: Fritz Dierks
6 // $Header$
7 //
8 // License: This file is published under the license of the EMVA GenICam Standard Group.
9 // A text file describing the legal terms is included in your installation as 'GenICam_license.pdf'.
10 // If for some reason you are missing this file please contact the EMVA or visit the website
11 // (http://www.genicam.org) for a full copy.
12 //
13 // THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
14 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD GROUP
17 // OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
20 // OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
21 // WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
23 // POSSIBILITY OF SUCH DAMAGE.
24 //-----------------------------------------------------------------------------
31 #ifndef GENAPI_POINTER_H
32 #define GENAPI_POINTER_H
33 
34 #include <assert.h>
35 #include <GenICamFwd.h>
36 #include <GenApi/IEnumeration.h>
37 #include <GenApi/IFloat.h>
38 #include <GenApi/IInteger.h>
39 
40 namespace GENAPI_NAMESPACE
41 {
42  //*************************************************************
43  // CPointer class
44  //*************************************************************
45 
50  template <class T, class B = IBase>
51  class CPointer
52  {
53 
54  public:
56  CPointer(void) throw()
57  : m_pT( NULL )
58  {
59  }
60 
62  CPointer(B *pB)
63  : m_pT( dynamic_cast<T*>(pB) )
64  {
65  }
66 
67  virtual ~CPointer(void)
68  {
69  }
70 
73  {
74  m_pT = dynamic_cast<T*>(pB);
75  return *this;
76  }
77 
79  operator T*(void) const
80  {
81  if (NULL == m_pT)
82  throw LOGICAL_ERROR_EXCEPTION( "NULL pointer dereferenced" );
83  return m_pT;
84  }
85 
87  T& operator*(void) const
88  {
89  if (NULL == m_pT)
90  throw LOGICAL_ERROR_EXCEPTION( "NULL pointer dereferenced" );
91  return *m_pT;
92  }
93 
95  T& operator()(void) const
96  {
97  if (NULL == m_pT)
98  throw LOGICAL_ERROR_EXCEPTION( "NULL pointer dereferenced" );
99  return *m_pT;
100  }
101 
103  T* operator->(void) const
104  {
105  if (NULL == m_pT)
106  throw LOGICAL_ERROR_EXCEPTION( "NULL pointer dereferenced" );
107  return m_pT;
108  }
109 
111  bool IsValid() const throw()
112  {
113  return m_pT != NULL;
114  }
115 
117  operator bool(void) const throw()
118  {
119  return m_pT != NULL;
120  }
121 
123  bool operator==(T* pT) const
124  {
125  return m_pT == pT;
126  }
127 
129  bool operator==(const CPointer<T,B> &rT) const
130  {
131  return m_pT == rT.m_pT;
132  }
133 
135  bool operator==(int nMustBeNull) const
136  {
137  if (0 != nMustBeNull)
138  throw LOGICAL_ERROR_EXCEPTION( "argument must be NULL" );
139  return NULL == m_pT;
140  }
141 
142 
143  protected:
144 
146  T* m_pT;
147  };
148 
149  //*************************************************************
150  // Smartpointer for all interface
151  //*************************************************************
152 
155 
158 
161 
164 
167 
170 
173 
176 
179 
182 
185 
188 
191 
194 
197 
200 
203 
206 
211 
214 
217 
219  class CFloatPtr : public CPointer<IFloat, IBase>
220  {
221  public:
223  CFloatPtr() throw()
224  : CPointer<IFloat, IBase>( )
225  {
226  }
227 
230  : CPointer<IFloat, IBase>( pB )
231  {
232  }
233 
236  {
238  return *this;
239  }
240 
243  {
244  return dynamic_cast<IInteger*>(m_pT->GetNode()->GetCastAlias());
245  }
246 
249  {
250  return dynamic_cast<IEnumeration*>(m_pT->GetNode()->GetCastAlias());
251  }
252  };
253 
255 
258 
261 
264 
268  {
269 # ifdef _MSC_VER
270 # pragma warning (push) // icc -W4 complains: controlling expression is constant
271 # pragma warning (disable : 279)
272 # endif
273  assert(pBase && "don't call this with a NULL pointer");
274 # ifdef _MSC_VER
275 # pragma warning (pop)
276 # endif
277  CNodePtr ptrNode(pBase);
278  switch(ptrNode->GetPrincipalInterfaceType())
279  {
280  case intfIValue:
281  return GENICAM_NAMESPACE::gcstring("IValue");
282  case intfIInteger:
283  return GENICAM_NAMESPACE::gcstring("IInteger");
284  case intfIBoolean:
285  return GENICAM_NAMESPACE::gcstring("IBoolean");
286  case intfICommand:
287  return GENICAM_NAMESPACE::gcstring("ICommand");
288  case intfIFloat:
289  return GENICAM_NAMESPACE::gcstring("IFloat");
290  case intfIString:
291  return GENICAM_NAMESPACE::gcstring("IString");
292  case intfIRegister:
293  return GENICAM_NAMESPACE::gcstring("IRegister");
294  case intfICategory:
295  return GENICAM_NAMESPACE::gcstring("ICategory");
296  case intfIEnumeration:
297  return GENICAM_NAMESPACE::gcstring("IEnumeration");
298  case intfIEnumEntry:
299  return GENICAM_NAMESPACE::gcstring("IEnumEntry");
300  case intfIPort:
301  return GENICAM_NAMESPACE::gcstring("IPort");
302 // Do not use this pragma in public header files (warnings in depend projects): #pragma BullseyeCoverage off
303  case intfIBase:
304  default:
305  return GENICAM_NAMESPACE::gcstring("IBase");
306 // Do not use this pragma in public header files (warnings in depend projects): #pragma BullseyeCoverage on
307  }
308  }
309 
311  template <class T, class B>
312  inline bool IsReadable( const CPointer<T, B>& ptr)
313  {
314  return ptr.IsValid() && IsReadable( ptr->GetAccessMode() );
315  }
316 
318  template <class T, class B>
319  inline bool IsWritable( const CPointer<T, B>& ptr)
320  {
321  return ptr.IsValid() && IsWritable( ptr->GetAccessMode() );
322  }
323 
325  template <class T, class B>
326  inline bool IsImplemented( const CPointer<T, B>& ptr)
327  {
328  return ptr.IsValid() && IsImplemented( ptr->GetAccessMode() );
329  }
330 
332  template <class T, class B>
333  inline bool IsAvailable( const CPointer<T, B>& ptr)
334  {
335  return ptr.IsValid() && IsAvailable( ptr->GetAccessMode() );
336  }
337 
338 
340 
341 
342 }
343 
344 #endif // ifndef GENAPI_POINTER_H
GENAPI_NAMESPACE::IInteger
GENICAM_INTERFACE IInteger
Interface for integer properties.
Definition: IFloat.h:114
GENAPI_NAMESPACE::intfIString
@ intfIString
IString interface.
Definition: Types.h:196
GENAPI_NAMESPACE::intfIBoolean
@ intfIBoolean
IBoolean interface.
Definition: Types.h:193
GENAPI_NAMESPACE
Lexical analyzer for CIntSwissKnife.
Definition: Destructible.h:30
GENAPI_NAMESPACE::CCommandPtr
CPointer< ICommand > CCommandPtr
SmartPointer for ICommand interface pointer.
Definition: Pointer.h:216
GENAPI_NAMESPACE::intfIBase
@ intfIBase
IBase interface.
Definition: Types.h:191
GENAPI_NAMESPACE::intfIRegister
@ intfIRegister
IRegister interface.
Definition: Types.h:197
GENAPI_NAMESPACE::CNodeMapUserDataPtr
CPointer< IUserData, INodeMap > CNodeMapUserDataPtr
SmartPointer for IUserData interface pointer.
Definition: Pointer.h:208
GENAPI_NAMESPACE::intfIInteger
@ intfIInteger
IInteger interface.
Definition: Types.h:192
IFloat.h
Definition of the IFloat interface.
GENAPI_NAMESPACE::IsWritable
bool IsWritable(EAccessMode AccessMode)
Tests if writable.
Definition: INode.h:196
GENAPI_NAMESPACE::CFloatPtr::operator=
CFloatPtr & operator=(IBase *pB)
Assign IBase Pointer.
Definition: Pointer.h:235
IEnumeration.h
Definition of interface IEnumeration.
GENAPI_NAMESPACE::CPortPtr
CPointer< IPort > CPortPtr
SmartPointer for IPort interface pointer.
Definition: Pointer.h:187
GENAPI_NAMESPACE::CFloatPtr::CFloatPtr
CFloatPtr()
Default constructor.
Definition: Pointer.h:223
GENICAM_NAMESPACE::gcstring
A string class which is a clone of std::string.
Definition: GCString.h:52
GENAPI_NAMESPACE::CChunkPortPtr
CPointer< IChunkPort > CChunkPortPtr
SmartPointer for IChunkPort interface pointer.
Definition: Pointer.h:199
GENAPI_NAMESPACE::CSelectorPtr
CPointer< ISelector > CSelectorPtr
SmartPointer for ISelector interface pointer.
Definition: Pointer.h:213
GENAPI_NAMESPACE::CFloatPtr::CFloatPtr
CFloatPtr(IBase *pB)
Constructor from IBase pointer type.
Definition: Pointer.h:229
GENAPI_NAMESPACE::CPointer::operator->
T * operator->(void) const
Dereferencing.
Definition: Pointer.h:103
GENAPI_NAMESPACE::intfIValue
@ intfIValue
IValue interface.
Definition: Types.h:190
GENAPI_NAMESPACE::intfIEnumEntry
@ intfIEnumEntry
IEnumEntry interface.
Definition: Types.h:200
GENAPI_NAMESPACE::CPointer::CPointer
CPointer(B *pB)
Constructor from INode pointer type.
Definition: Pointer.h:62
GenICamFwd.h
Forward declarations for GenICam types.
GENAPI_NAMESPACE::CEnumEntryPtr
CPointer< IEnumEntry > CEnumEntryPtr
SmartPointer for IEnumEntry interface pointer.
Definition: Pointer.h:184
GENAPI_NAMESPACE::CPointer::operator()
T & operator()(void) const
Dereferencing.
Definition: Pointer.h:95
GENAPI_NAMESPACE::intfIFloat
@ intfIFloat
IFloat interface.
Definition: Types.h:195
GENAPI_NAMESPACE::CPortReplayPtr
CPointer< IPortReplay > CPortReplayPtr
SmartPointer for IPortReplay interface pointer.
Definition: Pointer.h:190
GENAPI_NAMESPACE::CValuePtr
CPointer< IValue > CValuePtr
SmartPointer for IValue interface pointer.
Definition: Pointer.h:163
GENAPI_NAMESPACE::CPointer::operator==
bool operator==(const CPointer< T, B > &rT) const
pointer equal
Definition: Pointer.h:129
GENAPI_NAMESPACE::CPortRecorderPtr
CPointer< IPortRecorder > CPortRecorderPtr
SmartPointer for IPortRecorder interface pointer.
Definition: Pointer.h:193
GENAPI_NAMESPACE::CPointer::operator*
T & operator*(void) const
Dereferencing.
Definition: Pointer.h:87
GENAPI_NAMESPACE::CFloatPtr::GetEnumAlias
IEnumeration * GetEnumAlias()
gets the interface of an enum alias node.
Definition: Pointer.h:248
GENAPI_NAMESPACE::CFloatPtr::GetIntAlias
IInteger * GetIntAlias()
gets the interface of an integer alias node.
Definition: Pointer.h:242
GENAPI_NAMESPACE::CPortWriteListPtr
CPointer< IPortWriteList, IPortWriteList > CPortWriteListPtr
SmartPointer for IPortWriteList interface pointer.
Definition: Pointer.h:196
GENAPI_NAMESPACE::IsAvailable
bool IsAvailable(EAccessMode AccessMode)
Tests if available.
Definition: INode.h:232
GENAPI_NAMESPACE::intfIEnumeration
@ intfIEnumeration
IEnumeration interface.
Definition: Types.h:199
IInteger.h
Definition of the interface IInteger.
GENAPI_NAMESPACE::intfIPort
@ intfIPort
IPort interface.
Definition: Types.h:201
GENAPI_NAMESPACE::IEnumeration
GENICAM_INTERFACE GENAPI_DECL_ABSTRACT IEnumeration
Interface for enumeration properties.
Definition: IEnumeration.h:60
GENAPI_NAMESPACE::IsReadable
bool IsReadable(EAccessMode AccessMode)
Tests if readable.
Definition: INode.h:178
GENAPI_NAMESPACE::CPortStackedConstructPtr
CPointer< IPortStackedConstruct > CPortStackedConstructPtr
SmartPointer for IPortStackedConstruct interface pointer.
Definition: Pointer.h:263
GENAPI_NAMESPACE::IFloat
GENICAM_INTERFACE GENAPI_DECL_ABSTRACT IFloat
Interface for float properties.
Definition: IFloat.h:60
GENAPI_NAMESPACE::CDeviceInfoPtr
CPointer< IDeviceInfo, INodeMap > CDeviceInfoPtr
SmartPointer for IDeviceInfo interface pointer.
Definition: Pointer.h:205
GENAPI_NAMESPACE::IsImplemented
bool IsImplemented(EAccessMode AccessMode)
Tests if implemented.
Definition: INode.h:214
GENAPI_NAMESPACE::CCategoryPtr
CPointer< ICategory > CCategoryPtr
SmartPointer for ICategory interface pointer.
Definition: Pointer.h:166
GENAPI_NAMESPACE::intfICommand
@ intfICommand
ICommand interface.
Definition: Types.h:194
GENAPI_NAMESPACE::CNodeUserDataPtr
CPointer< IUserData > CNodeUserDataPtr
SmartPointer for IUserData interface pointer.
Definition: Pointer.h:210
GENAPI_NAMESPACE::CPointer
Encapsulates a GenApi pointer dealing with the dynamic_cast automatically.
Definition: Pointer.h:51
GENAPI_NAMESPACE::CBooleanPtr
CPointer< IBoolean > CBooleanPtr
SmartPointer for IBoolean interface pointer.
Definition: Pointer.h:169
GENAPI_NAMESPACE::intfICategory
@ intfICategory
ICategory interface.
Definition: Types.h:198
GENAPI_NAMESPACE::CPortConstructPtr
CPointer< IPortConstruct > CPortConstructPtr
SmartPointer for IPortConstruct interface pointer.
Definition: Pointer.h:260
GENAPI_NAMESPACE::CPointer::operator=
CPointer & operator=(B *pB)
Assign INode Pointer.
Definition: Pointer.h:72
GENAPI_NAMESPACE::CNodeMapPtr
CPointer< INodeMap, INodeMap > CNodeMapPtr
SmartPointer for INodeMap interface pointer.
Definition: Pointer.h:202
GENAPI_NAMESPACE::CPointer::~CPointer
virtual ~CPointer(void)
Definition: Pointer.h:67
GENAPI_NAMESPACE::CPointer::IsValid
bool IsValid() const
true if the pointer is valid
Definition: Pointer.h:111
LOGICAL_ERROR_EXCEPTION
#define LOGICAL_ERROR_EXCEPTION
Fires a logical error exception, e.g. throw LOGICAL_ERROR_EXCEPTION("Should never reach this point")
Definition: GCException.h:250
GENAPI_NAMESPACE::CNodePtr
CPointer< INode > CNodePtr
SmartPointer for INode interface pointer.
Definition: Pointer.h:160
GENAPI_NAMESPACE::CStringPtr
CPointer< IString > CStringPtr
SmartPointer for IString interface pointer.
Definition: Pointer.h:175
GENAPI_NAMESPACE::CEnumerationPtr
CPointer< IEnumeration > CEnumerationPtr
SmartPointer for IEnumeration interface pointer.
Definition: Pointer.h:181
GENAPI_NAMESPACE::CPointer::m_pT
T * m_pT
Underlying raw pointer.
Definition: Pointer.h:146
GENAPI_NAMESPACE::CPointer::operator==
bool operator==(T *pT) const
pointer equal
Definition: Pointer.h:123
GENAPI_NAMESPACE::CIntegerPtr
CPointer< IInteger > CIntegerPtr
SmartPointer for IInteger interface pointer.
Definition: Pointer.h:172
GENAPI_NAMESPACE::CBasePtr
CPointer< IBase > CBasePtr
SmartPointer for IBase interface pointer.
Definition: Pointer.h:157
GENAPI_NAMESPACE::CFloatPtr
SmartPointer for IFloat interface pointer.
Definition: Pointer.h:219
GENAPI_NAMESPACE::GetInterfaceName
GENICAM_NAMESPACE::gcstring GetInterfaceName(IBase *pBase)
Returns the name of the main interface as string DEPRECATED, use IBase::GetPrincipalInterfaceType() i...
Definition: Pointer.h:267
GENAPI_NAMESPACE::CPointer::CPointer
CPointer(void)
Default constructor.
Definition: Pointer.h:56
GENAPI_NAMESPACE::CRegisterPtr
CPointer< IRegister > CRegisterPtr
SmartPointer for IRegister interface pointer.
Definition: Pointer.h:178
GENAPI_NAMESPACE::IBase
GENICAM_INTERFACE GENAPI_DECL_ABSTRACT IBase
Base interface common to all nodes.
Definition: IBase.h:55
GENAPI_NAMESPACE::CPointer::operator==
bool operator==(int nMustBeNull) const
pointer equal
Definition: Pointer.h:135


rc_genicam_api
Author(s): Heiko Hirschmueller
autogenerated on Wed Dec 4 2024 03:10:11