Geant4 Cross Reference |
1 // Copyright (C) 2010, Guy Barrand. All rights reserved. 2 // See the file tools.license for terms. 3 4 #ifndef tools_S_STRING 5 #define tools_S_STRING 6 7 // a few place in which a cpp macro help the readability. 8 9 #include <string> 10 11 #define TOOLS_CLASS_STRING(a_name)\ 12 static const std::string& s_##a_name() {\ 13 static const std::string s_v(#a_name);\ 14 return s_v;\ 15 } 16 17 #define TOOLS_CLASS_STRING_VALUE(a_name,a_value)\ 18 static const std::string& s_##a_name() {\ 19 static const std::string s_v(#a_value);\ 20 return s_v;\ 21 } 22 23 #define TOOLS_CLASS_STRING_SVALUE(a_name,a_value)\ 24 static const std::string& s_##a_name() {\ 25 static const std::string s_v(a_value);\ 26 return s_v;\ 27 } 28 29 #define TOOLS_GLOBAL_STRING(a_name)\ 30 inline const std::string& s_##a_name() {\ 31 static const std::string s_v(#a_name);\ 32 return s_v;\ 33 } 34 35 #define TOOLS_GLOBAL_STRING_VALUE(a_name,a_value)\ 36 inline const std::string& s_##a_name() {\ 37 static const std::string s_v(#a_value);\ 38 return s_v;\ 39 } 40 41 #define TOOLS_SCLASS(a_name)\ 42 static const std::string& s_class() {\ 43 static const std::string s_v(#a_name);\ 44 return s_v;\ 45 }\ 46 static void check_class_name() {a_name::s_class();} 47 48 #define TOOLS_T_SCLASS(a_T,a_name)\ 49 static const std::string& s_class() {\ 50 static const std::string s_v(#a_name);\ 51 return s_v;\ 52 }\ 53 static void check_class_name() {a_name<a_T>::s_class();} 54 55 #define TOOLS_T2_SCLASS(a_T1,a_T2,a_name)\ 56 static const std::string& s_class() {\ 57 static const std::string s_v(#a_name);\ 58 return s_v;\ 59 }\ 60 static void check_class_name() {a_name<a_T1,a_T2>::s_class();} 61 62 #define TOOLS_T3_SCLASS(a_T1,a_T2,a_T3,a_name)\ 63 static const std::string& s_class() {\ 64 static const std::string s_v(#a_name);\ 65 return s_v;\ 66 }\ 67 static void check_class_name() {a_name<a_T1,a_T2,a_T3>::s_class();} 68 69 // to transform the value of a cpp macro to a string : 70 #define TOOLS_CPP_TO__STRING(a_cpp) #a_cpp 71 #define TOOLS_CPP_TO_STRING(a_cpp) std::string(TOOLS_CPP_TO__STRING(a_cpp)) 72 // for example : 73 // #define FOO foo 74 // std::cout << TOOLS_CPP_TO_STRING(FOO) << std::endl; 75 76 #endif