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
33namespace 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
Copies data from buffer to variables in a typesafe manner.
Definition RegisterSetHelper.h:40
static size_t CopyToBuffer(void *pvDestination, size_t nbyDestSize, T *d)
Typesafe copy from variable to buffer.
Definition RegisterSetHelper.h:65
static size_t CopyFromBuffer(T *d, const void *pvDestination, size_t nbyDestSize)
Typesafe copy from buffer to variable.
Definition RegisterSetHelper.h:74
static size_t CopyData(void *pvDestination, size_t nbyDestSize, const void *pvSource, size_t nbySourceSize)
memcpy firing exceptions
Definition RegisterSetHelper.h:43
#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",...
Definition GCException.h:240