1 #ifndef JSON_GLOBALS_H 2 #define JSON_GLOBALS_H 3 4 #include "JSONDefs.h" 5 6 /* 7 * The use of singletons for globals makes globals not 8 * actually be initialized until it is first needed, this 9 * makes the library faster to load, and have a smaller 10 * memory footprint 11 */ 12 13 #define json_global_decl(TYPE, NAME, VALUE) \ 14 class jsonSingleton ## NAME { \ 15 public: \ 16 inline static TYPE & getValue() json_nothrow { \ 17 static jsonSingleton ## NAME single; \ 18 return single.val; \ 19 } \ 20 protected: \ 21 inline jsonSingleton ## NAME() json_nothrow : val(VALUE) {} \ 22 TYPE val; \ 23 } 24 25 #define json_global_decl_strconfig(TYPE, NAME, VALUE) \ 26 class jsonSingleton ## NAME { \ 27 public: \ 28 inline static TYPE & getValue() json_nothrow { \ 29 static jsonSingleton ## NAME single; \ 30 return single.val; \ 31 } \ 32 protected: \ 33 inline jsonSingleton ## NAME() json_nothrow { \ 34 const std::string tmp = std::string(VALUE); \ 35 val = json_string(tmp.begin(), tmp.end()); \ 36 } \ 37 TYPE val; \ 38 } 39 40 #define json_global(NAME) jsonSingleton ## NAME::getValue() 41 42 #include <string> 43 json_global_decl(json_string, EMPTY_JSON_STRING, ); 44 json_global_decl(std::string, EMPTY_STD_STRING, ); 45 46 json_global_decl(json_string, CONST_TRUE, JSON_TEXT("true")); 47 json_global_decl(json_string, CONST_FALSE, JSON_TEXT("false")); 48 json_global_decl(json_string, CONST_NULL, JSON_TEXT("null")); 49 50 #ifndef JSON_NEWLINE 51 json_global_decl(json_string, NEW_LINE, JSON_TEXT("\n")); 52 #else 53 json_global_decl_strconfig(json_string, NEW_LINE, JSON_NEWLINE); 54 #endif 55 56 #ifdef JSON_WRITE_BASH_COMMENTS 57 json_global_decl(json_string, SINGLELINE_COMMENT, JSON_TEXT("#")); 58 #else 59 json_global_decl(json_string, SINGLELINE_COMMENT, JSON_TEXT("//")); 60 #endif 61 62 #ifdef JSON_INDENT 63 json_global_decl_strconfig(json_string, INDENT, JSON_INDENT); 64 #endif 65 66 #ifdef JSON_MUTEX_CALLBACKS 67 #include <map> 68 json_global_decl(JSON_MAP(void *, unsigned int), MUTEX_MANAGER, ); 69 json_global_decl(JSON_MAP(int, JSON_MAP(void *, unsigned int) ), THREAD_LOCKS, ); 70 #endif 71 72 #ifdef JSON_LIBRARY 73 #ifdef JSON_MEMORY_MANAGE 74 #include "JSONMemory.h" 75 json_global_decl(auto_expand, STRING_HANDLER, ); 76 json_global_decl(auto_expand_node, NODE_HANDLER, ); 77 #ifdef JSON_STREAM 78 json_global_decl(auto_expand_stream, STREAM_HANDLER, ); 79 #endif 80 #endif 81 #endif 82 83 //These are common error responses 84 json_global_decl(json_string, ERROR_TOO_LONG, JSON_TEXT("Exceeding JSON_SECURITY_MAX_STRING_LENGTH")); 85 json_global_decl(json_string, ERROR_UNKNOWN_LITERAL, JSON_TEXT("Unknown JSON literal: ")); 86 json_global_decl(json_string, ERROR_NON_CONTAINER, JSON_TEXT("Calling container method on non-container: ")); 87 json_global_decl(json_string, ERROR_NON_ITERATABLE, JSON_TEXT("Calling iterator method on non-iteratable: ")); 88 json_global_decl(json_string, ERROR_NULL_IN_CHILDREN, JSON_TEXT("a null pointer within the children")); 89 json_global_decl(json_string, ERROR_UNDEFINED, JSON_TEXT("Undefined results: ")); 90 json_global_decl(json_string, ERROR_LOWER_RANGE, JSON_TEXT(" is outside the lower range of ")); 91 json_global_decl(json_string, ERROR_UPPER_RANGE, JSON_TEXT(" is outside the upper range of ")); 92 json_global_decl(json_string, ERROR_NOT_BASE64, JSON_TEXT("Not base64")); 93 json_global_decl(json_string, ERROR_OUT_OF_MEMORY, JSON_TEXT("Out of memory")); 94 95 #endif 96