Skip to content
StrIterRemainingLength

StrIterRemainingLength

StrIterRemainingLength

Description

Get remaining elements left to read

Parameters

Name Direction Description
mi in StrIter object

Success

Returns remaining element count

Failure

Returns 0 for invalid iterators

Usage example (Cross-references)

Usage examples (Cross-references)
    
    StrIter KvConfigSkipWhitespace(StrIter si) {
        while (StrIterRemainingLength(&si) && kvconfig_is_space(StrIterPeek(&si))) {
            StrIterNext(&si);
        }
    
    StrIter KvConfigSkipLine(StrIter si) {
        while (StrIterRemainingLength(&si) && !kvconfig_is_line_end(StrIterPeek(&si))) {
            StrIterNext(&si);
        }
        si = KvConfigSkipWhitespace(si);
    
        while (StrIterRemainingLength(&si)) {
            char c = StrIterPeek(&si);
        si = KvConfigSkipWhitespace(si);
    
        if (!StrIterRemainingLength(&si) || kvconfig_is_line_end(StrIterPeek(&si)) ||
            kvconfig_is_comment_start(StrIterPeek(&si))) {
            return si;
            StrIterNext(&si);
    
            while (StrIterRemainingLength(&si)) {
                char c = StrIterPeek(&si);
                if (c == '\\') {
                    StrIterNext(&si);
                    if (!StrIterRemainingLength(&si)) {
                        LOG_ERROR("Unexpected end of quoted config value");
                        StrClear(value);
        }
    
        while (StrIterRemainingLength(&si) && !kvconfig_is_line_end(StrIterPeek(&si))) {
            char c = StrIterPeek(&si);
        ValidateMap(cfg);
    
        while (StrIterRemainingLength(&si)) {
            Str     key   = StrInit();
            Str     value = StrInit();
            StrIter read_si;
    
            while (StrIterRemainingLength(&si)) {
                char c = StrIterPeek(&si);
            }
    
            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)) {
            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;                                                                                                     \
            }                                                                                                              \
Last updated on