All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
BooleanT.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: Alexander Happe
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_BOOLEANT_H
32 #define GENAPI_BOOLEANT_H
33 
34 #include "../IBoolean.h"
35 #include "GenApi/impl/Log.h"
36 #include "Exception.h"
37 
38 namespace GENAPI_NAMESPACE
39 {
40 
44  template <class Base>
45  class BooleanT : public Base
46  {
47  public:
48 
50  //{
52  virtual void SetValue(bool Value, bool Verify = true)
53  {
54  // a list of callbacks to fire held outside(!) the autolock on the stack(!)
55  std::list<CNodeCallback*> CallbacksToFire;
56  {
58  typename Base::EntryMethodFinalizer E(this, meSetValue, Base::IsStreamable());
59 
60  if (!Base::CanBeWritten( Verify ))
61  {
62  throw ACCESS_EXCEPTION_NODE( "Node is not writable." );
63  }
64 #pragma BullseyeCoverage off
65  GCLOGINFOPUSH( Base::m_pValueLog, "SetValue( " + (Value ? GENICAM_NAMESPACE::gcstring("true") : GENICAM_NAMESPACE::gcstring("false")) + " )..." );
66 #pragma BullseyeCoverage on
67  {
68  typename Base::PostSetValueFinalizer PostSetValueCaller(this, CallbacksToFire); // dtor calls Base::PostSetValue
69 
70  Base::PreSetValue(); // invalidates all nodes if this is the first call in a chain of SetValue calls
71 
72  Base::InternalSetValue( Value, Verify );
73 
74  }
75 
76  if (Verify)
77  Base::InternalCheckError();
78 
79 #pragma BullseyeCoverage off
80  GCLOGINFOPOP( Base::m_pValueLog, "...SetValue" );
81 #pragma BullseyeCoverage on
82 
83  // fire callbacks inside the lock
84  std::list<CNodeCallback*>::iterator ptrCallback;
85  for( ptrCallback = CallbacksToFire.begin(); ptrCallback != CallbacksToFire.end(); ptrCallback++ )
86  {
87  (*ptrCallback)->operator ()(cbPostInsideLock);
88  }
89  }
90 
91  // fire callbacks outside the lock
92  std::list<CNodeCallback*>::iterator ptrCallback;
93  for( ptrCallback = CallbacksToFire.begin(); ptrCallback != CallbacksToFire.end(); ptrCallback++ )
94  {
95  (*ptrCallback)->operator ()(cbPostOutsideLock);
96  }
97  }
98 
100  virtual BooleanT& operator=(bool Value)
101  {
102  SetValue(Value);
103  return *this;
104  }
105 
107  virtual bool GetValue(bool Verify = false, bool IgnoreCache = false) const
108  {
109  AutoLock l(Base::GetLock());
110  typename Base::EntryMethodFinalizer E(this, meGetValue, Base::IsStreamable(), IgnoreCache);
111 
112  GCLOGINFOPUSH( Base::m_pValueLog, "GetValue..." );
113 
114  // Note that readability is tested regardless of Verify
115  if( !IsReadable( this ) )
116  throw ACCESS_EXCEPTION_NODE("Node is not readable.");
117 
118  const bool Value( Base::InternalGetValue(Verify, IgnoreCache) );
119 
120  if( Verify )
121  Base::InternalCheckError();
122 
123  GCLOGINFOPOP( Base::m_pValueLog, "...GetValue = " + (Value ? GENICAM_NAMESPACE::gcstring("true") : GENICAM_NAMESPACE::gcstring("false") ) );
124 
125  return Value;
126 
127  }
128 
130  virtual bool operator()() const
131  {
132  return GetValue();
133  }
134  //}
135 
136  };
137 }
138 
139 #endif // ifndef GENAPI_BOOLEANT_H
GENAPI_NAMESPACE
Lexical analyzer for CIntSwissKnife.
Definition: Destructible.h:30
GENAPI_NAMESPACE::meGetValue
@ meGetValue
Definition: Exception.h:46
GENAPI_NAMESPACE::cbPostOutsideLock
@ cbPostOutsideLock
callback is fired on leaving the tree inside the lock-guarded area
Definition: NodeCallback.h:48
GENICAM_NAMESPACE::gcstring
A string class which is a clone of std::string.
Definition: GCString.h:52
GENAPI_NAMESPACE::BooleanT::operator=
virtual BooleanT & operator=(bool Value)
IBoolean::operator=()
Definition: BooleanT.h:100
GENAPI_NAMESPACE::GetLock
virtual CLock & GetLock() const =0
Returns the lock which guards the node map.
GENAPI_NAMESPACE::BooleanT::SetValue
virtual void SetValue(bool Value, bool Verify=true)
IBoolean::SetValue()
Definition: BooleanT.h:52
GENAPI_NAMESPACE::Verify
GENICAM_INTERFACE GENAPI_DECL_ABSTRACT bool Verify
Definition: IBoolean.h:61
GCLOGINFOPOP
#define GCLOGINFOPOP(cat,...)
Definition: CLog.h:134
GENAPI_NAMESPACE::BooleanT
Implementation of the IBoolean interface.
Definition: BooleanT.h:45
Exception.h
GENAPI_NAMESPACE::CanBeWritten
virtual bool CanBeWritten(bool Verify)=0
ACCESS_EXCEPTION_NODE
#define ACCESS_EXCEPTION_NODE
Fires a access error exception, e.g. throw ACCESS_ERROR_EXCEPTION("Not everybody")
Definition: Exception.h:179
GENAPI_NAMESPACE::IsReadable
bool IsReadable(EAccessMode AccessMode)
Tests if readable.
Definition: INode.h:178
GENAPI_NAMESPACE::AutoLock
Definition: Synch.h:139
GENAPI_NAMESPACE::BooleanT::GetValue
virtual bool GetValue(bool Verify=false, bool IgnoreCache=false) const
IBoolean::GetValue()
Definition: BooleanT.h:107
GENAPI_NAMESPACE::IsStreamable
virtual bool IsStreamable() const =0
True if the node is streamable.
GENAPI_NAMESPACE::meSetValue
@ meSetValue
Definition: Exception.h:47
GENAPI_NAMESPACE::cbPostInsideLock
@ cbPostInsideLock
Definition: NodeCallback.h:47
GCLOGINFOPUSH
#define GCLOGINFOPUSH(cat,...)
Definition: CLog.h:130
GENAPI_NAMESPACE::BooleanT::operator()
virtual bool operator()() const
IBoolean::operator()()
Definition: BooleanT.h:130


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