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

StrIterFromZstr

StrIterFromZstr Description Create string iterator from null-terminated C string

Read More

StrIterNext

StrIterNext Description Advance to next character in string iterator

Read More

StrIterLength

StrIterLength Description Get total length in elements

Read More