123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- #ifndef RAPIDJSON_ERROR_ERROR_H_
- #define RAPIDJSON_ERROR_ERROR_H_
- #include "../rapidjson.h"
- #ifdef __clang__
- RAPIDJSON_DIAG_PUSH
- RAPIDJSON_DIAG_OFF(padded)
- #endif
- #ifndef RAPIDJSON_ERROR_CHARTYPE
- #define RAPIDJSON_ERROR_CHARTYPE char
- #endif
- #ifndef RAPIDJSON_ERROR_STRING
- #define RAPIDJSON_ERROR_STRING(x) x
- #endif
- RAPIDJSON_NAMESPACE_BEGIN
- enum ParseErrorCode {
- kParseErrorNone = 0,
- kParseErrorDocumentEmpty,
- kParseErrorDocumentRootNotSingular,
- kParseErrorValueInvalid,
- kParseErrorObjectMissName,
- kParseErrorObjectMissColon,
- kParseErrorObjectMissCommaOrCurlyBracket,
- kParseErrorArrayMissCommaOrSquareBracket,
- kParseErrorStringUnicodeEscapeInvalidHex,
- kParseErrorStringUnicodeSurrogateInvalid,
- kParseErrorStringEscapeInvalid,
- kParseErrorStringMissQuotationMark,
- kParseErrorStringInvalidEncoding,
- kParseErrorNumberTooBig,
- kParseErrorNumberMissFraction,
- kParseErrorNumberMissExponent,
- kParseErrorTermination,
- kParseErrorUnspecificSyntaxError
- };
- struct ParseResult {
-
- typedef bool (ParseResult::*BooleanType)() const;
- public:
-
- ParseResult() : code_(kParseErrorNone), offset_(0) {}
-
- ParseResult(ParseErrorCode code, size_t offset) : code_(code), offset_(offset) {}
-
- ParseErrorCode Code() const { return code_; }
-
- size_t Offset() const { return offset_; }
-
- operator BooleanType() const { return !IsError() ? &ParseResult::IsError : NULL; }
-
- bool IsError() const { return code_ != kParseErrorNone; }
- bool operator==(const ParseResult& that) const { return code_ == that.code_; }
- bool operator==(ParseErrorCode code) const { return code_ == code; }
- friend bool operator==(ParseErrorCode code, const ParseResult & err) { return code == err.code_; }
- bool operator!=(const ParseResult& that) const { return !(*this == that); }
- bool operator!=(ParseErrorCode code) const { return !(*this == code); }
- friend bool operator!=(ParseErrorCode code, const ParseResult & err) { return err != code; }
-
- void Clear() { Set(kParseErrorNone); }
-
- void Set(ParseErrorCode code, size_t offset = 0) { code_ = code; offset_ = offset; }
- private:
- ParseErrorCode code_;
- size_t offset_;
- };
- typedef const RAPIDJSON_ERROR_CHARTYPE* (*GetParseErrorFunc)(ParseErrorCode);
- RAPIDJSON_NAMESPACE_END
- #ifdef __clang__
- RAPIDJSON_DIAG_POP
- #endif
- #endif
|