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

Last change on this file since 3603 was 3603, checked in by Christoph Mayer, 16 years ago

-merge from pp branch

File size: 2.9 KB
Line 
1// [Licence]
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// [Licence]
38
39#ifndef UTILITIES_HPP_
40#define UTILITIES_HPP_
41
42#include <boost/cstdint.hpp>
43#include <boost/type_traits.hpp>
44#include <boost/utility/enable_if.hpp>
45
46/* force inline macro */
47#ifndef finline
48#define finline inline __attribute__((always_inline))
49#endif
50
51/* check whether X is a base class of Y */
52#define if_is_base_of(X,Y) \
53 typename boost::enable_if<boost::is_base_of<X, Y> , int>::type __v = 0
54
55/* check whether X is a unsigned integer */
56#define if_uint(X) \
57 typename boost::enable_if<boost::is_integral<X>,int>::type __i##X = 0,\
58 typename boost::enable_if<boost::is_unsigned<X>,int>::type __u##X = 0
59
60/* check whether X is a signed integer */
61#define if_int(X) \
62 typename boost::enable_if<boost::is_integral<X>,int>::type __i##X = 0,\
63 typename boost::enable_if<boost::is_signed<X>,int>::type __s##X = 0
64
65/* signature conversion */
66#define CONVERT_SIGN(X,Y) \
67 finline X& _unsigned( Y& v ) { return *((X*)&v); } \
68 finline X& _unsigned( X& v ) { return v; } \
69 finline Y& _signed( X& v ) { return *((Y*)&v); } \
70 finline Y& _signed( Y& v ) { return v; }
71
72CONVERT_SIGN( uint8_t, int8_t );
73CONVERT_SIGN( uint16_t, int16_t );
74CONVERT_SIGN( uint32_t, int32_t );
75CONVERT_SIGN( uint64_t, int64_t );
76#endif /* UTILITIES_HPP_ */
Note: See TracBrowser for help on using the repository browser.