11 static bool json_isdigit(
int ch)
    13     return ((ch >= 
'0') && (ch <= 
'9'));
    17 static const char *hatoui(
const char *first, 
const char *last,
    20     unsigned int result = 0;
    21     for (; first != last; ++first)
    24         if (json_isdigit(*first))
    27         else if (*first >= 
'a' && *first <= 
'f')
    28             digit = *first - 
'a' + 10;
    30         else if (*first >= 
'A' && *first <= 
'F')
    31             digit = *first - 
'A' + 10;
    36         result = 16 * result + digit;
    44                             const char *raw, 
const char *
end)
    49     const char *rawStart = raw;
    51     while (raw < 
end && (json_isspace(*raw)))          
    61         consumed = (raw - rawStart);
    65         consumed = (raw - rawStart);
    69         consumed = (raw - rawStart);
    73         consumed = (raw - rawStart);
    78         consumed = (raw - rawStart);
    82         consumed = (raw - rawStart);
    88         if (!strncmp(raw, 
"null", 4)) {
    90             consumed = (raw - rawStart);
    92         } 
else if (!strncmp(raw, 
"true", 4)) {
    94             consumed = (raw - rawStart);
    96         } 
else if (!strncmp(raw, 
"false", 5)) {
    98             consumed = (raw - rawStart);
   117         const char *first = raw;
   119         const char *firstDigit = first;
   120         if (!json_isdigit(*firstDigit))
   122         if ((*firstDigit == 
'0') && json_isdigit(firstDigit[1]))
   128         if ((*first == 
'-') && (raw < 
end) && (!json_isdigit(*raw)))
   131         while (raw < 
end && json_isdigit(*raw)) {  
   137         if (raw < 
end && *raw == 
'.') {
   141             if (raw >= 
end || !json_isdigit(*raw))
   143             while (raw < 
end && json_isdigit(*raw)) { 
   150         if (raw < 
end && (*raw == 
'e' || *raw == 
'E')) {
   154             if (raw < 
end && (*raw == 
'-' || *raw == 
'+')) { 
   159             if (raw >= 
end || !json_isdigit(*raw))
   161             while (raw < 
end && json_isdigit(*raw)) { 
   168         consumed = (raw - rawStart);
   179             if (raw >= 
end || (
unsigned char)*raw < 0x20)
   182             else if (*raw == 
'\\') {
   190                 case '\\': writer.
push_back(
'\\'); 
break;
   199                     unsigned int codepoint;
   200                     if (raw + 1 + 4 >= 
end ||
   201                         hatoui(raw + 1, raw + 1 + 4, codepoint) !=
   216             else if (*raw == 
'"') {
   230         consumed = (raw - rawStart);
   247 #define expect(bit) (expectMask & (EXP_##bit))   248 #define setExpect(bit) (expectMask |= EXP_##bit)   249 #define clearExpect(bit) (expectMask &= ~EXP_##bit)   255     uint32_t expectMask = 0;
   256     std::vector<UniValue*> stack;
   258     std::string tokenVal;
   259     unsigned int consumed;
   271         bool isValueOpen = jsonTokenIsValue(tok) ||
   279         } 
else if (
expect(ARR_VALUE)) {
   286         } 
else if (
expect(OBJ_NAME)) {
   291         } 
else if (
expect(COLON)) {
   316                 stack.push_back(
this);
   320                 top->
values.push_back(tmpVal);
   335             if (!stack.size() || (last_tok == 
JTOK_COMMA))
   397             top->
values.push_back(tmpVal);
   411             top->
values.push_back(tmpVal);
   420                 top->
keys.push_back(tokenVal);
   430                 top->
values.push_back(tmpVal);
   440     } 
while (!stack.empty ());
 
bool read(const char *raw, size_t len)
 
enum VType getType() const
 
std::vector< UniValue > values
 
void push_back(unsigned char ch)
 
Filter that generates and validates UTF-8, as well as collates UTF-16 surrogate pairs as specified in...
 
enum jtokentype getJsonToken(std::string &tokenVal, unsigned int &consumed, const char *raw, const char *end)
 
bool push_back(const UniValue &val)
 
std::vector< std::string > keys
 
void push_back_u(unsigned int codepoint_)