00001
00002
00030
00031
00032
00033 #include "pbori_defs.h"
00034
00035
00036 #include <string>
00037
00038
00039 #include "CLiteralCodes.h"
00040
00041 #ifndef CStringLiteral_h_
00042 #define CStringLiteral_h_
00043
00044 BEGIN_NAMESPACE_PBORI
00045
00051 template <unsigned LitCode = CLiteralCodes::first_code>
00052 class CStringLiteral {
00053 public:
00054
00056 typedef std::string literal_type;
00057
00059 CStringLiteral() {};
00060
00062 ~CStringLiteral() {};
00063
00065 literal_type operator()() const;
00066 };
00067
00068
00069 #define GENERATE_CSTRINGLITERAL(CODE, STRING) \
00070 template <> inline CStringLiteral<>::literal_type \
00071 CStringLiteral<CLiteralCodes::CODE>::operator()() const{ return STRING; }
00072
00073 GENERATE_CSTRINGLITERAL(empty, "")
00074 GENERATE_CSTRINGLITERAL(space, " ")
00075 GENERATE_CSTRINGLITERAL(plus, "+")
00076 GENERATE_CSTRINGLITERAL(term_separator, " + ")
00077 GENERATE_CSTRINGLITERAL(times, "*")
00078 GENERATE_CSTRINGLITERAL(comma, ",")
00079 GENERATE_CSTRINGLITERAL(list_separator, ", ")
00080 GENERATE_CSTRINGLITERAL(default_variable_name, "x")
00081 GENERATE_CSTRINGLITERAL(variable_head, "(")
00082 GENERATE_CSTRINGLITERAL(variable_tail, ")")
00083 GENERATE_CSTRINGLITERAL(between_list_separator, "}, {")
00084
00085 #undef GENERATE_CSTRINGLITERAL
00086
00087 END_NAMESPACE_PBORI
00088
00089 #endif