OpenGM  2.3.x
Discrete Graphical Model Library
macros.hxx
Go to the documentation of this file.
1 #pragma once
2 #ifndef OPENGM_MACROS
3 #define OPENGM_MACROS
4 
5 #include <string>
6 
7 #include "opengm/opengm.hxx"
8 
9 #define STRING_TO_ENUM_1( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENUM_OUT) \
10 if (NAME_STRING==std::string( #ENTRY_1)) ENUM_OUT=CLASS_OF_ENUM::ENTRY_1 \
11 else (throw RuntimeError(std::string("Wrong value for parameter")+std::string(#PARAM_NAME)))
12 
13 #define STRING_TO_ENUM_2( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENUM_OUT) \
14 if (NAME_STRING==std::string( #ENTRY_1)) ENUM_OUT=CLASS_OF_ENUM::ENTRY_1 \
15 else if (NAME_STRING==std::string( #ENTRY_2)) ENUM_OUT=CLASS_OF_ENUM::ENTRY_2 \
16 else (throw RuntimeError(std::string("Wrong value for parameter")+std::string(#PARAM_NAME)))
17 
18 #define STRING_TO_ENUM_3( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENTYR_3,ENUM_OUT) \
19 if (NAME_STRING==std::string( #ENTRY_1)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_1;} \
20 else if (NAME_STRING==std::string( #ENTRY_2)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_2;} \
21 else if (NAME_STRING==std::string( #ENTRY_3)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_3;} \
22 else {throw RuntimeError(std::string("unsupported value for parameter ")+std::string(#PARAM_NAME));}
23 
24 #define STRING_TO_ENUM_4( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENTYR_3,ENTYR_4,ENUM_OUT) \
25 if (NAME_STRING==std::string( #ENTRY_1)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_1;} \
26 else if (NAME_STRING==std::string( #ENTRY_2)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_2;} \
27 else if (NAME_STRING==std::string( #ENTRY_3)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_3;} \
28 else if (NAME_STRING==std::string( #ENTRY_4)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_4;} \
29 else {throw RuntimeError(std::string("unsupported value for parameter ")+std::string(#PARAM_NAME));}
30 
31 #define STRING_TO_ENUM_5( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENTYR_3,ENTYR_4,ENTYR_5,ENUM_OUT) \
32 if (NAME_STRING==std::string( #ENTRY_1)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_1;} \
33 else if (NAME_STRING==std::string( #ENTRY_2)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_2;} \
34 else if (NAME_STRING==std::string( #ENTRY_3)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_3;} \
35 else if (NAME_STRING==std::string( #ENTRY_4)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_4;} \
36 else if (NAME_STRING==std::string( #ENTRY_5)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_5;} \
37 else {throw RuntimeError(std::string("unsupported value for parameter ")+std::string(#PARAM_NAME));}
38 
39 #define STRING_TO_ENUM_6( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENTYR_3,ENTYR_4,ENTYR_5,ENTYR_6,ENUM_OUT) \
40 if (NAME_STRING==std::string( #ENTRY_1)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_1;} \
41 else if (NAME_STRING==std::string( #ENTRY_2)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_2;} \
42 else if (NAME_STRING==std::string( #ENTRY_3)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_3;} \
43 else if (NAME_STRING==std::string( #ENTRY_4)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_4;} \
44 else if (NAME_STRING==std::string( #ENTRY_5)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_5;} \
45 else if (NAME_STRING==std::string( #ENTRY_6)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_6;} \
46 else {throw RuntimeError(std::string("unsupported value for parameter ")+std::string(#PARAM_NAME));}
47 
48 #define STRING_TO_ENUM_7( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENTYR_3,ENTYR_4,ENTYR_5,ENTYR_6,ENTYR_7,ENUM_OUT) \
49 if (NAME_STRING==std::string( #ENTRY_1)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_1;} \
50 else if (NAME_STRING==std::string( #ENTRY_2)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_2;} \
51 else if (NAME_STRING==std::string( #ENTRY_3)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_3;} \
52 else if (NAME_STRING==std::string( #ENTRY_4)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_4;} \
53 else if (NAME_STRING==std::string( #ENTRY_5)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_5;} \
54 else if (NAME_STRING==std::string( #ENTRY_6)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_6;} \
55 else if (NAME_STRING==std::string( #ENTRY_7)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_7;} \
56 else {throw RuntimeError(std::string("unsupported value for parameter ")+std::string(#PARAM_NAME));}
57 
58 #define STRING_TO_ENUM_8( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENTYR_3,ENTYR_4,ENTYR_5,ENTYR_6,ENTYR_7,ENTYR_8,ENUM_OUT) \
59 if (NAME_STRING==std::string( #ENTRY_1)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_1;} \
60 else if (NAME_STRING==std::string( #ENTRY_2)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_2;} \
61 else if (NAME_STRING==std::string( #ENTRY_3)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_3;} \
62 else if (NAME_STRING==std::string( #ENTRY_4)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_4;} \
63 else if (NAME_STRING==std::string( #ENTRY_5)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_5;} \
64 else if (NAME_STRING==std::string( #ENTRY_6)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_6;} \
65 else if (NAME_STRING==std::string( #ENTRY_7)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_7;} \
66 else if (NAME_STRING==std::string( #ENTRY_8)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_8;} \
67 else {throw RuntimeError(std::string("unsupported value for parameter ")+std::string(#PARAM_NAME));}
68 
69 #define STRING_TO_ENUM_9( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENTYR_3,ENTYR_4,ENTYR_5,ENTYR_6,ENTYR_7,ENTYR_8,ENTYR_9,ENUM_OUT) \
70 if (NAME_STRING==std::string( #ENTRY_1)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_1;} \
71 else if (NAME_STRING==std::string( #ENTRY_2)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_2;} \
72 else if (NAME_STRING==std::string( #ENTRY_3)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_3;} \
73 else if (NAME_STRING==std::string( #ENTRY_4)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_4;} \
74 else if (NAME_STRING==std::string( #ENTRY_5)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_5;} \
75 else if (NAME_STRING==std::string( #ENTRY_6)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_6;} \
76 else if (NAME_STRING==std::string( #ENTRY_7)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_7;} \
77 else if (NAME_STRING==std::string( #ENTRY_8)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_8;} \
78 else if (NAME_STRING==std::string( #ENTRY_9)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_9;} \
79 else {throw RuntimeError(std::string("unsupported value for parameter ")+std::string(#PARAM_NAME));}
80 
81 #define STRING_TO_ENUM_10( CLASS_OF_ENUM,NAME_STRING,PARAM_NAME,ENTRY_1,ENTYR_2,ENTYR_3,ENTYR_4,ENTYR_5,ENTYR_6,ENTYR_7,ENTYR_8,ENTYR_9,ENTYR_10,ENUM_OUT) \
82 if (NAME_STRING==std::string( #ENTRY_1)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_1;} \
83 else if (NAME_STRING==std::string( #ENTRY_2)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_2;} \
84 else if (NAME_STRING==std::string( #ENTRY_3)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_3;} \
85 else if (NAME_STRING==std::string( #ENTRY_4)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_4;} \
86 else if (NAME_STRING==std::string( #ENTRY_5)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_5;} \
87 else if (NAME_STRING==std::string( #ENTRY_6)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_6;} \
88 else if (NAME_STRING==std::string( #ENTRY_7)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_7;} \
89 else if (NAME_STRING==std::string( #ENTRY_8)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_8;} \
90 else if (NAME_STRING==std::string( #ENTRY_9)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_9;} \
91 else if (NAME_STRING==std::string( #ENTRY_10)) {ENUM_OUT=CLASS_OF_ENUM::ENTRY_10;} \
92 else {throw RuntimeError(std::string("unsupported value for parameter ")+std::string(#PARAM_NAME));}
93 
94 #endif // #ifndef OPENGM_MACROS