OpenGM  2.3.x
Discrete Graphical Model Library
config.hxx
Go to the documentation of this file.
1 #ifndef CONFIG_HXX
2 #define CONFIG_HXX
3 #ifdef OPENGM_CONFIGFILE
4 // include own include file with
5 // g++ ... -DOPENGM_CONFIGFILE=path/config.hxx ....
6 #include OPENGM_CONFIGFILE
7 #else // OPENGM_CONFIGFILE
8 
16 
17 // has no typedef ? (TODO make this a option in cmake list or
18 // find out in cmake if this define should be active or not
19 #ifdef OPENGM_NO_TYPENAME
20 # define typename
21 #endif
23 
24 #define OPENGM_WORD_LENGTH sizeof(void *)
25 #define OPENGM_SIZE_OF_BOOL 1
26 #define OPENGM_SIZE_OF_CHAR sizeof(char)
27 #define OPENGM_SIZE_OF_SIGNED_CHAR sizeof(unsigned char)
28 #define OPENGM_SIZE_OF_UNSIGNED_CHAR sizeof(unsigned char)
29 #define OPENGM_SIZE_OF_WCHAR_T sizeof(wchar_t)
30 #define OPENGM_SIZE_OF_SHORT sizeof(short)
31 #define OPENGM_SIZE_OF_UNSIGNED_SHORT sizeof(unsigned short)
32 #define OPENGM_SIZE_OF_INT sizeof(int)
33 #define OPENGM_SIZE_OF_UNSIGNED_INT sizeof(unsigned int)
34 #define OPENGM_SIZE_OF_LONG sizeof(long)
35 #define OPENGM_SIZE_OF_UNSIGNED_LONG sizeof(unsigned long)
36 #define OPENGM_SIZE_OF_LONG_LONG sizeof(long long)
37 #define OPENGM_SIZE_OF_UNSIGNED_LONG_LONG sizeof(unsigned long long)
38 #define OPENGM_SIZE_OF_FLOAT sizeof(float)
39 #define OPENGM_SIZE_OF_DOUBLE sizeof(double)
40 #define OPENGM_SIZE_OF_LONG_DOUBLE sizeof(long double)
41 
42 
43 namespace opengm{
44 
45 
47 const unsigned int VERSION_MAJOR = 2;
49 const unsigned int VERSION_MINOR = 0;
51 const unsigned int VERSION_PATCH = 2;
52 
58 const size_t USUAL_MAX_FACTOR_ORDER=5;
59 
61 #ifdef NDEBUG
62 const bool NO_DEBUG = true;
63 #else
64 const bool NO_DEBUG = false;
65 #endif
66 namespace detail_types{
68 // structs to identify if am system
69 // does not have a certain type
70 struct NoCharOnSystem;
71 struct NoUnsignedCharOnSystem;
72 struct NoSignedCharOnSystem;
73 struct NoWCharTOnSystem;
74 struct NoShortOnSystem;
75 struct NoUnsignedShortOnSystem;
76 struct NoIntOnSystem;
77 struct NoUnsignedIntOnSystem;
78 struct NoLongOnSystem;
79 struct NoUnsignedLongOnSystem;
80 struct NoUnsignedLongLongOnSystem;
81 struct NoLongLongOnSystem;
82 struct NoFloatOnSystem;
83 struct NoDoubleOnSystem;
84 struct NoLongDoubleOnSystem;
85 struct NoUIntTypeOnSystem;
86 struct NoIntTypeOnSystem;
87 struct NoFloatTypeOnSystem;
88 struct NoUInt8OnSystem;
89 struct NoUInt16OnSystem;
90 struct NoUInt32OnSystem;
91 struct NoUInt64OnSystem;
92 struct NoInt8OnSystem;
93 struct NoInt16OnSystem;
94 struct NoInt32OnSystem;
95 struct NoInt64OnSystem;
96 struct NoFloat32OnSystem;
97 struct NoFloat64OnSystem;
98 struct NoFloat128OnSystem;
99 // typedefs to types to identify if am system
100 // does not have a certain type
101 #ifdef OPENGM_NO_CHAR
102 typedef opengm::meta::InvalideType<NoCharOnSystem> Char;
103 #else
104 typedef char Char;
105 #endif
106 #ifdef OPENGM_NO_UNSIGNED_CHAR
107 typedef opengm::meta::InvalideType<NoUnsignedCharOnSystem> UnsignedChar;
108 #else
109 typedef unsigned char UnsignedChar;
110 #endif
111 #ifdef OPENGM_NO_SIGNED_CHAR
112 typedef opengm::meta::InvalideType<NoSignedCharOnSystem> SignedChar;
113 #else
114 typedef signed char SignedChar;
115 #endif
116 #ifdef OPENGM_NO_WCHAR_T
117 typedef opengm::meta::InvalideType<NoWCharTOnSystem> WCharT;
118 #else
119 typedef wchar_t WCharT;
120 #endif
121 #ifdef OPENGM_NO_SHORT
122 typedef NoShortOnSystem Short;
123 #else
124 typedef short Short;
125 #endif
126 #ifdef OPENGM_NO_UNSIGNED_SHORT
127 typedef opengm::meta::InvalideType<NoUnsignedShortOnSystem> UnsignedShort;
128 #else
129 typedef unsigned short UnsignedShort;
130 #endif
131 #ifdef OPENGM_NO_INT
132 typedef opengm::meta::InvalideType<NoIntOnSystem> Int;
133 #else
134 typedef int Int;
135 #endif
136 #ifdef OPENGM_NO_UNSIGNED_INT
137 typedef opengm::meta::InvalideType<NoUnsignedIntOnSystem> UnsignedInt;
138 #else
139 typedef unsigned int UnsignedInt;
140 #endif
141 #ifdef OPENGM_NO_LONG
142 typedef opengm::meta::InvalideType<NoLongOnSystem> Long;
143 #else
144 typedef long Long;
145 #endif
146 #ifdef OPENGM_NO_UNSIGNED_LONG
147 typedef opengm::meta::InvalideType<NoUnsignedLongOnSystem> UnsignedLong;
148 #else
149 typedef unsigned long UnsignedLong;
150 #endif
151 #ifdef OPENGM_NO_LONG_LONG
152 typedef opengm::meta::InvalideType<NoLongLongOnSystem> LongLong;
153 #else
154 typedef long long LongLong;
155 #endif
156 #ifdef OPENGM_NO_UNSIGNED_LONG
157 typedef opengm::meta::InvalideType<NoUnsignedLongLongOnSystem> UnsignedLongLong;
158 #else
159 typedef unsigned long long UnsignedLongLong;
160 #endif
161 #ifdef OPENGM_NO_Float
162 typedef opengm::meta::InvalideType<NoFloatOnSystem> Float;
163 #else
164 typedef float Float;
165 #endif
166 #ifdef OPENGM_NO_DOUBLE
167 typedef opengm::meta::InvalideType<NoDoubleOnSystem> Double;
168 #else
169 typedef double Double;
170 #endif
171 #ifdef OPENGM_NO_LONG_DOUBLE
172 typedef opengm::meta::InvalideType<NoLongDoubleOnSystem> LongDouble;
173 #else
174 typedef long double LongDouble;
175 #endif
176 typedef bool Bool ;
177 // typelists of the basic c++ types
178 // Floats:
179 typedef opengm::meta::TypeListGenerator<
180  Float,Double , LongDouble
181 >::type StdFloatingPointTypesTypeList;
182 // UInt:
183 typedef opengm::meta::TypeListGenerator<
184  UnsignedChar,UnsignedShort, UnsignedInt, UnsignedLong, UnsignedLongLong
185 >::type StdUnsignedIntegerTypesTypeList;
186 // Int:
187 typedef opengm::meta::TypeListGenerator<
188  Char, SignedChar, Short, Int, Long,LongLong
189 >::type StdSignedIntegerTypesTypeList;
190 // typelists of the sizes of the basic c++ types
191 // Float sizes:
192 typedef opengm::meta::TypeListGenerator<
193  opengm::meta::SizeT<OPENGM_SIZE_OF_FLOAT>,meta::SizeT<OPENGM_SIZE_OF_DOUBLE>,
194  opengm::meta::SizeT<OPENGM_SIZE_OF_LONG_DOUBLE>
195 >::type StdFloatingPointSizesTypeList;
196 // UInt sizes:
197 typedef opengm::meta::TypeListGenerator<
198  opengm::meta::SizeT<OPENGM_SIZE_OF_UNSIGNED_CHAR>, opengm::meta::SizeT<OPENGM_SIZE_OF_UNSIGNED_SHORT>,
199  opengm::meta::SizeT<OPENGM_SIZE_OF_UNSIGNED_INT>, opengm::meta::SizeT<OPENGM_SIZE_OF_UNSIGNED_LONG>,
200  opengm::meta::SizeT<OPENGM_SIZE_OF_UNSIGNED_LONG_LONG>
201 >::type StdUnsignedIntegerSizesTypeList;
202 // Int sizes:
203 typedef opengm::meta::TypeListGenerator<
204  opengm::meta::SizeT<OPENGM_SIZE_OF_CHAR>, opengm::meta::SizeT<OPENGM_SIZE_OF_SIGNED_CHAR>,
205  opengm::meta::SizeT<OPENGM_SIZE_OF_SHORT>,opengm::meta::SizeT<OPENGM_SIZE_OF_INT>,
206  opengm::meta::SizeT<OPENGM_SIZE_OF_LONG>,opengm::meta::SizeT<OPENGM_SIZE_OF_LONG_LONG>
207 >::type StdSignedIntegerSizesTypeList;
208 // platform independent
209 // UInt :
210 typedef opengm::meta::FindSizedType<StdUnsignedIntegerTypesTypeList,StdUnsignedIntegerSizesTypeList,
211  1,meta::InvalidType<NoUInt8OnSystem > >::type UInt8Type ;
212 typedef opengm::meta::FindSizedType<StdUnsignedIntegerTypesTypeList,StdUnsignedIntegerSizesTypeList,
213  2,meta::InvalidType<NoUInt16OnSystem> >::type UInt16Type ;
214 typedef opengm::meta::FindSizedType<StdUnsignedIntegerTypesTypeList,StdUnsignedIntegerSizesTypeList,
215  4,meta::InvalidType<NoUInt32OnSystem> >::type UInt32Type ;
216 typedef opengm::meta::FindSizedType<StdUnsignedIntegerTypesTypeList,StdUnsignedIntegerSizesTypeList,
217  8,meta::InvalidType<NoUInt64OnSystem> >::type UInt64Type ;
218 //Int :
219 typedef opengm::meta::FindSizedType<StdSignedIntegerTypesTypeList,StdSignedIntegerSizesTypeList,
220  1,meta::InvalidType<NoInt8OnSystem > >::type Int8Type ;
221 typedef opengm::meta::FindSizedType<StdSignedIntegerTypesTypeList,StdSignedIntegerSizesTypeList,
222  2,meta::InvalidType<NoInt16OnSystem> >::type Int16Type ;
223 typedef opengm::meta::FindSizedType<StdSignedIntegerTypesTypeList,StdSignedIntegerSizesTypeList,
224  4,meta::InvalidType<NoInt32OnSystem> >::type Int32Type ;
225 typedef opengm::meta::FindSizedType<StdSignedIntegerTypesTypeList,StdSignedIntegerSizesTypeList,
226  8,meta::InvalidType<NoInt64OnSystem> >::type Int64Type ;
227 // Float :
228 typedef opengm::meta::FindSizedType<StdFloatingPointTypesTypeList,StdFloatingPointSizesTypeList,
229  4,meta::InvalidType<NoFloat32OnSystem> >::type Float32Type ;
230 typedef opengm::meta::FindSizedType<StdFloatingPointTypesTypeList,StdFloatingPointSizesTypeList,
231  8,meta::InvalidType<NoFloat64OnSystem> >::type Float64Type ;
232 typedef opengm::meta::FindSizedType<StdFloatingPointTypesTypeList,StdFloatingPointSizesTypeList,
233  16,meta::InvalidType<NoFloat128OnSystem> >::type Float128Type ;
234 // opengm::meta-"switch-cases" typelists to find out the
235 // biggest and smallest uint, int and float type
236 typedef opengm::meta::TypeListGenerator<
237  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< UInt64Type >::value >::value ,UInt64Type>,
238  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< UInt32Type >::value >::value ,UInt32Type>,
239  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< UInt16Type >::value >::value ,UInt16Type>,
240  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< UInt8Type >::value >::value ,UInt8Type>
241 >::type UIntSwitchCasesBiggest;
242 typedef opengm::meta::TypeListGenerator<
243  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Int64Type >::value >::value ,Int64Type>,
244  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Int32Type >::value >::value ,Int32Type>,
245  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Int16Type >::value >::value ,Int16Type>,
246  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Int8Type >::value >::value ,Int8Type>
247 >::type IntSwitchCasesBiggest;
248 typedef opengm::meta::TypeListGenerator<
249  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Float128Type >::value >::value ,Float128Type>,
250  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Float64Type >::value >::value ,Float64Type>,
251  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Float32Type >::value >::value ,Float32Type>
252 >::type FloatSwitchCasesBiggest;
253 typedef opengm::meta::TypeListGenerator<
254  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< UInt8Type >::value >::value ,UInt8Type>,
255  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< UInt16Type >::value >::value ,UInt16Type>,
256  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< UInt32Type >::value >::value ,UInt32Type>,
257  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< UInt64Type >::value >::value ,UInt64Type>
258 >::type UIntSwitchCasesSmallest;
259 typedef opengm::meta::TypeListGenerator<
260  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Int8Type >::value >::value ,Int8Type>,
261  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Int16Type >::value >::value ,Int16Type>,
262  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Int32Type >::value >::value ,Int32Type>,
263  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Int64Type >::value >::value ,Int64Type>
264 >::type IntSwitchCasesSmallest;
265 typedef opengm::meta::TypeListGenerator<
266  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Float32Type >::value >::value,Float32Type >,
267  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Float64Type >::value >::value ,Float64Type>,
268  opengm::meta::SwitchCase< opengm::meta::Not< opengm::meta::IsInvalidType< Float128Type >::value >::value ,Float128Type>
269 >::type FloatSwitchCasesSmallest;
270 // biggest type
271 typedef opengm::meta::Switch< UIntSwitchCasesBiggest ,
272  NoUIntTypeOnSystem >::type BiggestUIntType;
273 typedef opengm::meta::Switch< IntSwitchCasesBiggest ,
274  NoIntTypeOnSystem >::type BiggestIntType;
275 typedef opengm::meta::Switch< FloatSwitchCasesBiggest ,
276  NoFloatTypeOnSystem >::type BiggestFloatType;
277 // smallest types
278 typedef opengm::meta::Switch< UIntSwitchCasesSmallest ,
279  NoUIntTypeOnSystem >::type SmallestUIntType;
280 typedef opengm::meta::Switch< IntSwitchCasesSmallest ,
281  NoIntTypeOnSystem >::type SmallestIntType;
282 typedef opengm::meta::Switch< FloatSwitchCasesSmallest ,
283  NoFloatTypeOnSystem >::type SmallestFloatType;
284 } // end namespace detail_types
285 
286 
287 
288 
291 //typedef size_t ::size_t;
292 // UInt Types
301 // Int Types:
309 // Float Types:
319 // smallest Types:
324 // default Types:
326 typedef BiggestUIntType UIntType;
328 typedef BiggestIntType IntType;
330 typedef SmallestFloatType FloatType;
331 } // end namespace opengm
332 
333 #endif // OPENGM_CONFIGFILE
334 #endif // CONFIG_HXX
335 
detail_types::BiggestUIntType BiggestUIntType
biggest / longest uint
Definition: config.hxx:315
The OpenGM namespace.
Definition: config.hxx:43
detail_types::Float32Type Float32Type
float32
Definition: config.hxx:311
detail_types::Int16Type Int16Type
int8
Definition: config.hxx:304
detail_types::SmallestUIntType SmallestUIntType
smallest / shortest int
Definition: config.hxx:321
detail_types::UInt8Type UInt8Type
SizeT.
Definition: config.hxx:294
BiggestUIntType UIntType
default uint (biggest / longest uint)
Definition: config.hxx:326
detail_types::Int64Type Int64Type
int32
Definition: config.hxx:308
SmallestFloatType FloatType
default uint (biggest / longest float)
Definition: config.hxx:330
const size_t USUAL_MAX_FACTOR_ORDER
usual factor order
Definition: config.hxx:58
const unsigned int VERSION_MAJOR
major version number of opengm
Definition: config.hxx:47
detail_types::SmallestFloatType SmallestFloatType
Definition: config.hxx:323
detail_types::UInt64Type UInt64Type
uint64
Definition: config.hxx:300
detail_types::Int32Type Int32Type
int16
Definition: config.hxx:306
detail_types::Int8Type Int8Type
Definition: config.hxx:302
detail_types::UInt32Type UInt32Type
uint32
Definition: config.hxx:298
detail_types::UInt16Type UInt16Type
uint16
Definition: config.hxx:296
detail_types::Float64Type Float64Type
float64
Definition: config.hxx:313
detail_types::BiggestFloatType BiggestFloatType
Definition: config.hxx:318
const bool NO_DEBUG
Definition: config.hxx:64
BiggestIntType IntType
default uint (biggest / longest int)
Definition: config.hxx:328
const unsigned int VERSION_MINOR
minor version number of opengm
Definition: config.hxx:49
detail_types::SmallestIntType SmallestIntType
Definition: config.hxx:322
detail_types::BiggestIntType BiggestIntType
biggest / longest int
Definition: config.hxx:317
const unsigned int VERSION_PATCH
patch version number of opengm
Definition: config.hxx:51