StrIterRemainingLength

Table of Contents

StrIterRemainingLength

Description

Get remaining elements left to read

Parameters

NameDirectionDescription
miinStrIter object

Success

Returns remaining element count

Failure

Returns 0 for invalid iterators

Usage example (Cross-references)

    
    static StrIter JSkipObject(StrIter si) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    
    static StrIter JSkipArray(StrIter si) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    
    StrIter JSkipWhitespace(StrIter si) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    }
    
    while (StrIterRemainingLength(&si) && StrIterPeek(&si)) {
    switch (StrIterPeek(&si)) {
    case ' ' :
    
    StrIter JReadString(StrIter si, Str *str) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    
    // string start
    if (StrIterRemainingLength(&si) && StrIterPeek(&si) == '"') {
    StrIterNext(&si);
    
    // while a printable character
    while (StrIterRemainingLength(&si) && StrIterPeek(&si)) {
    // three cases
    // - end of string (return)
    case '\\' :
    StrIterNext(&si);
    if (!StrIterRemainingLength(&si)) {
    LOG_ERROR("Unexpected end of string.");
    StrClear(str);
    
    StrIter JReadNumber(StrIter si, Number *num) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    bool is_parsing         = true;
    
    while (is_parsing && StrIterRemainingLength(&si) && StrIterPeek(&si)) {
    switch (StrIterPeek(&si)) {
    case 'E' :
    
    StrIter JReadInteger(StrIter si, i64 *val) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    
    StrIter JReadFloat(StrIter si, f64 *val) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    
    StrIter JReadBool(StrIter si, bool *b) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    si               = JSkipWhitespace(si);
    
    if (StrIterRemainingLength(&si) >= 4) {
    if (StrIterPeek(&si) == 't') {
    const char *pos = StrIterPos(&si);
    }
    
    if (StrIterRemainingLength(&si) >= 5) {
    if (StrIterPeek(&si) == 'f') {
    const char *pos = StrIterPos(&si);
    
    StrIter JReadNull(StrIter si, bool *is_null) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    
    *is_null = false;
    if (StrIterRemainingLength(&si) >= 4) {
    if (StrIterPeek(&si) == 'n') {
    const char *pos = StrIterPos(&si);
    
    StrIter JSkipValue(StrIter si) {
    if (!StrIterRemainingLength(&si)) {
    return si;
    }
    bool success = true;
    
    if (!StrIterRemainingLength(&si)) {
    WriteFmt("[DEBUG] Remaining length check failed: expected > 0, got {}\n", StrIterRemainingLength(&si));
    success = false;
    
    if (!StrIterRemainingLength(&si)) {
    WriteFmt("[DEBUG] Remaining length check failed: expected > 0, got {}\n", StrIterRemainingLength(&si));
    success = false;
    }
    #define JR_ARR(si, reader)                                                                                             \
    do {                                                                                                               \
    if (!StrIterRemainingLength(&si)) {                                                                            \
    break;                                                                                                     \
    }                                                                                                              \
    #define JR_OBJ(si, reader)                                                                                             \
    do {                                                                                                               \
    if (!StrIterRemainingLength(&si)) {                                                                            \
    break;                                                                                                     \
    }                                                                                                              \

Share :

Related Posts

BitVecLen

BitVecLen Description Get number of bits currently in bitvector.

Read More

StrIterRemainingSize

StrIterRemainingSize Description Get remaining bytes left to read

Read More

StrIterMove

StrIterMove Description Move string iterator position by n elements

Read More