1*44844408SAndroid Build Coastguard Worker // Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors 2*44844408SAndroid Build Coastguard Worker // Distributed under MIT license, or public domain if desired and 3*44844408SAndroid Build Coastguard Worker // recognized in your jurisdiction. 4*44844408SAndroid Build Coastguard Worker // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE 5*44844408SAndroid Build Coastguard Worker 6*44844408SAndroid Build Coastguard Worker #ifndef JSON_ASSERTIONS_H_INCLUDED 7*44844408SAndroid Build Coastguard Worker #define JSON_ASSERTIONS_H_INCLUDED 8*44844408SAndroid Build Coastguard Worker 9*44844408SAndroid Build Coastguard Worker #include <cstdlib> 10*44844408SAndroid Build Coastguard Worker #include <sstream> 11*44844408SAndroid Build Coastguard Worker 12*44844408SAndroid Build Coastguard Worker #if !defined(JSON_IS_AMALGAMATION) 13*44844408SAndroid Build Coastguard Worker #include "config.h" 14*44844408SAndroid Build Coastguard Worker #endif // if !defined(JSON_IS_AMALGAMATION) 15*44844408SAndroid Build Coastguard Worker 16*44844408SAndroid Build Coastguard Worker /** It should not be possible for a maliciously designed file to 17*44844408SAndroid Build Coastguard Worker * cause an abort() or seg-fault, so these macros are used only 18*44844408SAndroid Build Coastguard Worker * for pre-condition violations and internal logic errors. 19*44844408SAndroid Build Coastguard Worker */ 20*44844408SAndroid Build Coastguard Worker #if JSON_USE_EXCEPTION 21*44844408SAndroid Build Coastguard Worker 22*44844408SAndroid Build Coastguard Worker // @todo <= add detail about condition in exception 23*44844408SAndroid Build Coastguard Worker #define JSON_ASSERT(condition) \ 24*44844408SAndroid Build Coastguard Worker do { \ 25*44844408SAndroid Build Coastguard Worker if (!(condition)) { \ 26*44844408SAndroid Build Coastguard Worker Json::throwLogicError("assert json failed"); \ 27*44844408SAndroid Build Coastguard Worker } \ 28*44844408SAndroid Build Coastguard Worker } while (0) 29*44844408SAndroid Build Coastguard Worker 30*44844408SAndroid Build Coastguard Worker #define JSON_FAIL_MESSAGE(message) \ 31*44844408SAndroid Build Coastguard Worker do { \ 32*44844408SAndroid Build Coastguard Worker OStringStream oss; \ 33*44844408SAndroid Build Coastguard Worker oss << message; \ 34*44844408SAndroid Build Coastguard Worker Json::throwLogicError(oss.str()); \ 35*44844408SAndroid Build Coastguard Worker abort(); \ 36*44844408SAndroid Build Coastguard Worker } while (0) 37*44844408SAndroid Build Coastguard Worker 38*44844408SAndroid Build Coastguard Worker #else // JSON_USE_EXCEPTION 39*44844408SAndroid Build Coastguard Worker 40*44844408SAndroid Build Coastguard Worker #define JSON_ASSERT(condition) assert(condition) 41*44844408SAndroid Build Coastguard Worker 42*44844408SAndroid Build Coastguard Worker // The call to assert() will show the failure message in debug builds. In 43*44844408SAndroid Build Coastguard Worker // release builds we abort, for a core-dump or debugger. 44*44844408SAndroid Build Coastguard Worker #define JSON_FAIL_MESSAGE(message) \ 45*44844408SAndroid Build Coastguard Worker { \ 46*44844408SAndroid Build Coastguard Worker OStringStream oss; \ 47*44844408SAndroid Build Coastguard Worker oss << message; \ 48*44844408SAndroid Build Coastguard Worker assert(false && oss.str().c_str()); \ 49*44844408SAndroid Build Coastguard Worker abort(); \ 50*44844408SAndroid Build Coastguard Worker } 51*44844408SAndroid Build Coastguard Worker 52*44844408SAndroid Build Coastguard Worker #endif 53*44844408SAndroid Build Coastguard Worker 54*44844408SAndroid Build Coastguard Worker #define JSON_ASSERT_MESSAGE(condition, message) \ 55*44844408SAndroid Build Coastguard Worker do { \ 56*44844408SAndroid Build Coastguard Worker if (!(condition)) { \ 57*44844408SAndroid Build Coastguard Worker JSON_FAIL_MESSAGE(message); \ 58*44844408SAndroid Build Coastguard Worker } \ 59*44844408SAndroid Build Coastguard Worker } while (0) 60*44844408SAndroid Build Coastguard Worker 61*44844408SAndroid Build Coastguard Worker #endif // JSON_ASSERTIONS_H_INCLUDED 62