Library of Assembled Shared Sources
call_traits.h
Go to the documentation of this file.
1/** @file
2 * @author Bram de Greve (bram@cocamware.com)
3 * @author Tom De Muer (tom@cocamware.com)
4 *
5 * *** BEGIN LICENSE INFORMATION ***
6 *
7 * The contents of this file are subject to the Common Public Attribution License
8 * Version 1.0 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://lass.sourceforge.net/cpal-license. The License is based on the
11 * Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12 * use of software over a computer network and provide for limited attribution for
13 * the Original Developer. In addition, Exhibit A has been modified to be consistent
14 * with Exhibit B.
15 *
16 * Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17 * WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18 * language governing rights and limitations under the License.
19 *
20 * The Original Code is LASS - Library of Assembled Shared Sources.
21 *
22 * The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23 * The Original Developer is the Initial Developer.
24 *
25 * All portions of the code written by the Initial Developer are:
26 * Copyright (C) 2004-2011 the Initial Developer.
27 * All Rights Reserved.
28 *
29 * Contributor(s):
30 *
31 * Alternatively, the contents of this file may be used under the terms of the
32 * GNU General Public License Version 2 or later (the GPL), in which case the
33 * provisions of GPL are applicable instead of those above. If you wish to allow use
34 * of your version of this file only under the terms of the GPL and not to allow
35 * others to use your version of this file under the CPAL, indicate your decision by
36 * deleting the provisions above and replace them with the notice and other
37 * provisions required by the GPL License. If you do not delete the provisions above,
38 * a recipient may use your version of this file under either the CPAL or the GPL.
39 *
40 * *** END LICENSE INFORMATION ***
41 */
42
43#ifndef LASS_GUARDIAN_OF_INCLUSION_UTIL_CALL_TRAITS_H
44#define LASS_GUARDIAN_OF_INCLUSION_UTIL_CALL_TRAITS_H
45
46#include "util_common.h"
47
48namespace lass
49{
50namespace util
51{
52
53template <typename T>
54struct CallTraits
55{
56 typedef T TValue;
57 typedef T const & TParam;
58 typedef T const & TConstReference;
59 typedef T & TReference;
60};
61
62template <typename T>
63struct CallTraits<T const>
64{
65 typedef T const TValue;
66 typedef T const & TParam;
67 typedef T const & TConstReference;
68 typedef T const & TReference;
69};
70
71template <typename T>
72struct CallTraits<T &>
73{
74 typedef T & TValue;
75 typedef T & TParam;
76 typedef T const & TConstReference;
77 typedef T & TReference;
78};
79
80template <typename T>
81struct CallTraits<T const &>
82{
83 typedef T const & TValue;
84 typedef T const & TParam;
85 typedef T const & TConstReference;
86 typedef T const & TReference;
87};
88
89template <typename T>
90struct CallTraits<T *>
91{
92 typedef T * TValue;
93 typedef T * TParam;
94 typedef T * const & TConstReference;
95 typedef T * & TReference;
96};
97
98template <typename T>
99struct CallTraits<T const *>
100{
101 typedef T const * TValue;
102 typedef T const * TParam;
103 typedef T const * const & TConstReference;
104 typedef T const * & TReference;
105};
106
107template <typename T, int N>
108struct CallTraits<T [N]>
109{
110 typedef T * TValue;
111 typedef T * TParam;
112 typedef T * const & TConstReference;
113 typedef T * & TReference;
114};
115
116template <typename T, int N>
117struct CallTraits<T const [N]>
118{
119 typedef T const * TValue;
120 typedef T const * TParam;
121 typedef T const * const & TConstReference;
122 typedef T const * & TReference;
123};
124
125#define LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(T)\
126 template <> struct CallTraits<T>\
127 {\
128 typedef T TValue;\
129 typedef T TParam;\
130 typedef T const & TConstReference;\
131 typedef T & TReference;\
132 };\
133 template <> struct CallTraits<T const>\
134 {\
135 typedef T const TValue;\
136 typedef T const TParam;\
137 typedef T const & TConstReference;\
138 typedef T const & TReference;\
139 };\
140 /**/
141
142LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(char)
143LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(unsigned char)
144LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(signed char)
145LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(unsigned short)
146LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(signed short)
147LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(unsigned int)
148LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(signed int)
149LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(unsigned long)
150LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(signed long)
151LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(float)
152LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(double)
153LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(long double)
154LASS_UTIL_CALL_TRAITS_FUNDAMENTAL(bool)
155
156}
157}
158
159#endif
160
161// EOF
general utility, debug facilities, ...
Library for Assembled Shared Sources.
Definition config.h:53