Exemplo n.º 1
0
unsigned int readNextName(char *start, char **first, char **last, unsigned int *hash) {
    unsigned char state = ST_OBJECT_SEEK;
    while(start[0] != '\0') {
        switch(state) {
            case ST_OBJECT_SEEK:
                if (start[0] == '{') {
                    state = ST_OBJECT_PROP_NAME;
                } else {
                    state = ST_OBJECT_PROP_SEEK;
                } 
                break;
            case ST_OBJECT_PROP_SEEK:
                if (start[0] == ',') {
                    state = ST_OBJECT_PROP_NAME;
                } else if (start[0] == '}') {
                    *first = start;
                    *last = start;
                    return PARSE_END;
                } else if (start[0] != ' ' && start[0] != '\t') {
                    return ERR_PARSE_OBJECT;
                }
                break;
            case ST_OBJECT_PROP_NAME: 
                if (start[0] != ' ' && start[0] != '\t') {
                    return getStringAndHash(start, first, last, hash);
                }
                break;
        }

        ++start;
    }

    return ERR_PARSE_OBJECT;
}
Exemplo n.º 2
0
unsigned int readNextString(char *start, char **first, char **last, unsigned int *hash) {
    unsigned char state = ST_OBJECT_PROP_PARSE;
    ++start;
    while(start[0] != '\0') {
        switch(state) {
            case ST_OBJECT_PROP_PARSE:
                if (start[0] == ':') {
                    state = ST_OBJECT_PROP_VAL;
                } else if (!IS_WHITESPACE(start[0])) {
                    return ERR_PARSE_OBJECT;
                }
                break;
            case ST_OBJECT_PROP_VAL:
                return getStringAndHash(start, first, last, hash);
        }
                
        ++start;
    }

    return ERR_PARSE_OBJECT;
}