1 #include "JSONDebug.h" 2 #ifdef JSON_DEBUG 3 4 #ifdef JSON_STDERROR 5 #include <iostream> //need std::cerr 6 #else 7 #include "JSONSingleton.h" 8 //otherwise, use a callback to tell the end user what happened register_callback(json_error_callback_t callback)9 json_error_callback_t JSONDebug::register_callback(json_error_callback_t callback) json_nothrow { 10 json_error_callback_t res = JSONSingleton<json_error_callback_t>::get(); 11 JSONSingleton<json_error_callback_t>::set(callback); 12 return res; 13 } 14 #endif 15 16 //Something went wrong or an assert failed _JSON_FAIL(const json_string & msg)17void JSONDebug::_JSON_FAIL(const json_string & msg) json_nothrow { 18 #ifdef JSON_STDERROR //no callback, just use stderror 19 #ifndef JSON_UNICODE 20 std::cerr << msg << std::endl; 21 #else 22 std::cerr << std::string(msg.begin(), msg.end()) << std::endl; 23 #endif 24 #else 25 if (json_error_callback_t ErrorCallback = JSONSingleton<json_error_callback_t>::get()){ //only do anything if the callback is registered 26 #ifdef JSON_LIBRARY 27 ErrorCallback(msg.c_str()); 28 #else 29 ErrorCallback(msg); 30 #endif 31 } 32 #endif 33 } 34 35 //asserts that condition is true, more useful than cassert because it lets you keep going _JSON_ASSERT(bool condition,const json_string & msg)36void JSONDebug::_JSON_ASSERT(bool condition, const json_string & msg) json_nothrow { 37 if (json_unlikely(!condition)){ 38 _JSON_FAIL(msg); 39 } 40 } 41 #endif 42 43