source: source/ariba/utility/internal/Utilities.hpp@ 10574

Last change on this file since 10574 was 7523, checked in by Christoph Mayer, 15 years ago
File size: 3.0 KB
Line 
1// [License]
2// The Ariba-Underlay Copyright
3//
4// Copyright (c) 2008-2009, Institute of Telematics, UniversitÀt Karlsruhe (TH)
5//
6// Institute of Telematics
7// UniversitÀt Karlsruhe (TH)
8// Zirkel 2, 76128 Karlsruhe
9// Germany
10//
11// Redistribution and use in source and binary forms, with or without
12// modification, are permitted provided that the following conditions are
13// met:
14//
15// 1. Redistributions of source code must retain the above copyright
16// notice, this list of conditions and the following disclaimer.
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// THIS SOFTWARE IS PROVIDED BY THE INSTITUTE OF TELEMATICS ``AS IS'' AND
22// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE ARIBA PROJECT OR
25// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
26// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
28// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
29// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
30// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
31// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32//
33// The views and conclusions contained in the software and documentation
34// are those of the authors and should not be interpreted as representing
35// official policies, either expressed or implied, of the Institute of
36// Telematics.
37// [License]
38
39#ifndef UTILITIES_HPP_
40#define UTILITIES_HPP_
41
42#include "ariba/config.h"
43#include <boost/cstdint.hpp>
44#include <boost/type_traits.hpp>
45#include <boost/utility/enable_if.hpp>
46
47/* force inline macro */
48#ifndef finline
49 #ifdef HAVE_MAEMO
50 #define finline inline
51 #else
52 #define finline inline __attribute__((always_inline))
53 #endif
54#endif
55
56/* check whether X is a base class of Y */
57#define if_is_base_of(X,Y) \
58 typename boost::enable_if<boost::is_base_of<X, Y> , int>::type __v = 0
59
60/* check whether X is a unsigned integer */
61#define if_uint(X) \
62 typename boost::enable_if<boost::is_integral<X>,int>::type __i##X = 0,\
63 typename boost::enable_if<boost::is_unsigned<X>,int>::type __u##X = 0
64
65/* check whether X is a signed integer */
66#define if_int(X) \
67 typename boost::enable_if<boost::is_integral<X>,void*>::type __i##X = NULL,\
68 typename boost::enable_if<boost::is_signed<X>,void*>::type __s##X = NULL
69
70/* signature conversion */
71#define CONVERT_SIGN(X,Y) \
72 finline X& _unsigned( Y& v ) { return *((X*)&v); } \
73 finline X& _unsigned( X& v ) { return v; } \
74 finline Y& _signed( X& v ) { return *((Y*)&v); } \
75 finline Y& _signed( Y& v ) { return v; }
76
77CONVERT_SIGN( uint8_t, int8_t );
78CONVERT_SIGN( uint16_t, int16_t );
79CONVERT_SIGN( uint32_t, int32_t );
80CONVERT_SIGN( uint64_t, int64_t );
81
82#endif /* UTILITIES_HPP_ */
Note: See TracBrowser for help on using the repository browser.