| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- #include "JsonParser.h"
- #include "../JsonBuffer.h"
- #include <stdlib.h>
- #include <ctype.h>
- bool JsonParser::isEnd()
- {
- return *_ptr == 0;
- }
- bool JsonParser::isArrayStart()
- {
- return *_ptr == '[';
- }
- bool JsonParser::isArrayStop()
- {
- return *_ptr == ']';
- }
- bool JsonParser::isLong()
- {
- char* ptr = _ptr;
- // skip all digits
- while (isdigit(*ptr))
- ptr++;
- // same position => 0 digits => not a long
- if (ptr == _ptr)
- return false;
- // stopped on a decimal separator => not a long but a double
- if (*ptr == '.')
- return false;
- return true;
- }
- bool JsonParser::isSpace()
- {
- return *_ptr == ' ' || *_ptr == '\t' || *_ptr == '\n' || *_ptr == '\r';
- }
- void JsonParser::skipOneChar()
- {
- _ptr++;
- }
- void JsonParser::skipSpaces()
- {
- while(isSpace()) skipOneChar();
- }
- JsonNode* JsonParser::parseNode()
- {
- skipSpaces();
- if (isArrayStart())
- return parseArray();
-
- if (isLong())
- return parseLong();
- return 0;
- }
- JsonNode* JsonParser::parseArray()
- {
- skipOneChar();
- JsonNode* node = _buffer->createNode();
- node->setAsArray(_buffer);
- skipSpaces();
- if (isArrayStop())
- return node;
- node->addChild(parseNode());
- return node;
- }
- JsonNode* JsonParser::parseLong()
- {
- long value = strtol(_ptr, &_ptr, 10);
- JsonNode* node = _buffer->createNode();
- node->setAsLong(value);
- return node;
- }
|