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)

    #define JR_ARR(si, reader)                                                                                             \
    do {                                                                                                               \
    if (!StrIterRemainingLength(&si)) {                                                                            \
    break;                                                                                                     \
    }                                                                                                              \
    #define JR_OBJ(si, reader)                                                                                             \
    do {                                                                                                               \
    if (!StrIterRemainingLength(&si)) {                                                                            \
    break;                                                                                                     \
    }                                                                                                              \
    
    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)) {
    printf("[DEBUG] Remaining length check failed: expected > 0, got %zu\n", StrIterRemainingLength(&si));
    success = false;
    
    if (!StrIterRemainingLength(&si)) {
    printf("[DEBUG] Remaining length check failed: expected > 0, got %zu\n", StrIterRemainingLength(&si));
    success = false;
    }

Share :

Related Posts

StrIterRemainingSize

StrIterRemainingSize Description Get remaining bytes left to read

Read More

StrIterFromCstr

StrIterFromCstr Description Create string iterator from C string with explicit length

Read More

StrIterPrev

StrIterPrev Description Move to previous character in string iterator

Read More