Skip to content
JSkipWhitespace

JSkipWhitespace

Description

Skip whitespace from current reading position.

Parameters

Name Direction Description
si in Reading position to start looking for whitespace

Success

Returns StrIter advanced past all whitespace

Failure

Returns original StrIter if already at end

Usage example (Cross-references)

Usage examples (Cross-references)
    
        StrIter saved_si = si;
        si               = JSkipWhitespace(si);
    
        // starting of an object
        }
        StrIterMustNext(&si);
        si = JSkipWhitespace(si);
    
        StrIter read_si;
                }
                StrIterMustNext(&si); // skip comma
                si = JSkipWhitespace(si);
            }
            }
            si = read_si;
            si = JSkipWhitespace(si);
    
            if (!StrIterPeek(&si, &c) || c != ':') {
            }
            StrIterMustNext(&si);
            si = JSkipWhitespace(si);
    
            // skip values within object
            StrDeinit(&key);
            si = read_si;
            si = JSkipWhitespace(si);
    
            // expect a comma after a successful key-value pair read
    
        StrIter saved_si = si;
        si               = JSkipWhitespace(si);
    
        char c;
        }
        StrIterMustNext(&si);
        si = JSkipWhitespace(si);
    
        StrIter read_si;
                }
                StrIterMustNext(&si); // skip comma
                si = JSkipWhitespace(si);
            }
    
            si = read_si;
            si = JSkipWhitespace(si);
    
            // expect a comma after a successful value read in array
    }
    
    StrIter JSkipWhitespace(StrIter si) {
        char c;
        while (StrIterPeek(&si, &c)) {
    
        StrIter saved_si = si;
        si               = JSkipWhitespace(si);
    
        // string start
    
        StrIter saved_si = si;
        si               = JSkipWhitespace(si);
        // scratch allocator for the digit-accumulator Str `ns`. JSON numbers
        // are caller-controlled and have no spec-mandated upper length, so a
    
        StrIter saved_si = si;
        si               = JSkipWhitespace(si);
    
        char c;
    
        StrIter saved_si = si;
        si               = JSkipWhitespace(si);
    
        *is_null = false;
    
        StrIter saved_si = si;
        si               = JSkipWhitespace(si);
    
        char c;
            }                                                                                                              \
            StrIter UNPL(saved_si) = si;                                                                                   \
            si                     = JSkipWhitespace(si);                                                                  \
            char UNPL(jr_c);                                                                                               \
            if (!StrIterPeek(&si, &UNPL(jr_c)) || UNPL(jr_c) != '{') {                                                     \
            }                                                                                                              \
            StrIterMustNext(&si);                                                                                          \
            si = JSkipWhitespace(si);                                                                                      \
            StrIter UNPL(read_si);                                                                                         \
            bool    UNPL(expect_comma) = false;                                                                            \
                    }                                                                                                      \
                    StrIterMustNext(&si);                                                                                  \
                    si = JSkipWhitespace(si);                                                                              \
                }                                                                                                          \
                Str key       = StrInit(&alloc);                                                                           \
                }                                                                                                          \
                si = UNPL(read_si);                                                                                        \
                si = JSkipWhitespace(si);                                                                                  \
                if (!StrIterPeek(&si, &UNPL(jr_c)) || UNPL(jr_c) != ':') {                                                 \
                    LOG_ERROR("Expected ':' after key string. Failed to read JSON");                                       \
                }                                                                                                          \
                StrIterMustNext(&si);                                                                                      \
                si                           = JSkipWhitespace(si);                                                        \
                StrIter UNPL(si_before_read) = si;                                                                         \
                { reader }                                                                                                 \
                }                                                                                                          \
                StrDeinit(&key);                                                                                           \
                si                 = JSkipWhitespace(si);                                                                  \
                UNPL(expect_comma) = true;                                                                                 \
            }                                                                                                              \
                                                                                                                           \
            StrIter UNPL(saved_si) = si;                                                                                   \
            si                     = JSkipWhitespace(si);                                                                  \
                                                                                                                           \
            /* starting of an array */                                                                                     \
            }                                                                                                              \
            StrIterMustNext(&si);                                                                                          \
            si = JSkipWhitespace(si);                                                                                      \
                                                                                                                           \
            bool UNPL(expect_comma) = false;                                                                               \
                    }                                                                                                      \
                    StrIterMustNext(&si); /* skip comma */                                                                 \
                    si = JSkipWhitespace(si);                                                                              \
                }                                                                                                          \
                                                                                                                           \
                    si = UNPL(read_si);                                                                                    \
                }                                                                                                          \
                si = JSkipWhitespace(si);                                                                                  \
                                                                                                                           \
                /* expect a comma after a successful value read in array */                                                \
                                                                                                                           \
            StrIter UNPL(saved_si) = si;                                                                                   \
            si                     = JSkipWhitespace(si);                                                                  \
                                                                                                                           \
            /* starting of an object */                                                                                    \
            }                                                                                                              \
            StrIterMustNext(&si);                                                                                          \
            si = JSkipWhitespace(si);                                                                                      \
                                                                                                                           \
            StrIter UNPL(read_si);                                                                                         \
                    }                                                                                                      \
                    StrIterMustNext(&si); /* skip comma */                                                                 \
                    si = JSkipWhitespace(si);                                                                              \
                }                                                                                                          \
                                                                                                                           \
                                                                                                                           \
                si = UNPL(read_si);                                                                                        \
                si = JSkipWhitespace(si);                                                                                  \
                                                                                                                           \
                                                                                                                           \
                }                                                                                                          \
                StrIterMustNext(&si);                                                                                      \
                si = JSkipWhitespace(si);                                                                                  \
                                                                                                                           \
                                                                                                                           \
                }                                                                                                          \
                StrDeinit(&key);                                                                                           \
                si = JSkipWhitespace(si);                                                                                  \
                                                                                                                           \
                                                                                                                           \
Last updated on