GenApi  3.5.1
RegisterSetHelper.h
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // (c) 2006 by Basler Vision Technologies
3 // Author: Alexander Happe, Fritz Dierks
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 //-----------------------------------------------------------------------------
30 #ifndef REGISTER_SET_HELPER_H
31 #define REGISTER_SET_HELPER_H
32 
33 namespace GENAPI_NAMESPACE
34 {
39  class GENAPI_DECL CRegisterSetHelper
40  {
41  public:
43  static size_t CopyData( void *pvDestination, size_t nbyDestSize, const void *pvSource, size_t nbySourceSize )
44  {
45  if (nbyDestSize != nbySourceSize)
46  {
47  throw OUT_OF_RANGE_EXCEPTION("CopyData : Destination size (%ld) does not fit source size (%d)", nbyDestSize, nbySourceSize);
48  }
49 
50 #if defined(_WINDOWS_)
51  if ( IsBadWritePtr(pvDestination, nbyDestSize) || IsBadReadPtr(pvSource, nbySourceSize) )
52  {
53  throw RUNTIME_EXCEPTION("Invalid user buffer");
54  }
55 #endif
56 
57  memcpy( pvDestination, pvSource, nbySourceSize );
58  return nbySourceSize;
59  }
60 
64  template<typename T>
65  static size_t CopyToBuffer( void *pvDestination, size_t nbyDestSize, T *d )
66  {
67  return CopyData( pvDestination, nbyDestSize, d, sizeof( *d ) );
68  }
69 
73  template<typename T>
74  static size_t CopyFromBuffer( T *d, const void *pvDestination, size_t nbyDestSize)
75  {
76  return CopyData( d, sizeof( *d ), pvDestination, nbyDestSize);
77  }
78  };
79 
80 } // namespace GenApi
81 
82 #endif // ifndef REGISTER_SET_HELPER_H
static size_t CopyData(void *pvDestination, size_t nbyDestSize, const void *pvSource, size_t nbySourceSize)
memcpy firing exceptions
Definition: RegisterSetHelper.h:43
static size_t CopyToBuffer(void *pvDestination, size_t nbyDestSize, T *d)
Typesafe copy from variable to buffer.
Definition: RegisterSetHelper.h:65
Copies data from buffer to variables in a typesafe manner.
Definition: RegisterSetHelper.h:39
#define RUNTIME_EXCEPTION
Fires a runtime exception, e.g. throw RUNTIME_EXCEPTION("buh!")
Definition: GCException.h:246
#define OUT_OF_RANGE_EXCEPTION
Fires an out of range exception, e.g. throw OUT_OF_RANGE_EXCEPTION("%ld too large", Value);.
Definition: GCException.h:240
static size_t CopyFromBuffer(T *d, const void *pvDestination, size_t nbyDestSize)
Typesafe copy from buffer to variable.
Definition: RegisterSetHelper.h:74
Definition: ChunkAdapter.h:37