StrIterRemainingLength
- Macro
- August 22, 2025
Table of Contents
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)
- In
JSON.h:408
:
#define JR_ARR(si, reader) \
do { \
if (!StrIterRemainingLength(&si)) { \
break; \
} \
- In
JSON.h:500
:
#define JR_OBJ(si, reader) \
do { \
if (!StrIterRemainingLength(&si)) { \
break; \
} \
- In
JSON.c:7
:
static StrIter JSkipObject(StrIter si) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:90
:
static StrIter JSkipArray(StrIter si) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:146
:
StrIter JSkipWhitespace(StrIter si) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:150
:
}
while (StrIterRemainingLength(&si) && StrIterPeek(&si)) {
switch (StrIterPeek(&si)) {
case ' ' :
- In
JSON.c:167
:
StrIter JReadString(StrIter si, Str* str) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:180
:
// string start
if (StrIterRemainingLength(&si) && StrIterPeek(&si) == '"') {
StrIterNext(&si);
- In
JSON.c:184
:
// while a printable character
while (StrIterRemainingLength(&si) && StrIterPeek(&si)) {
// three cases
// - end of string (return)
- In
JSON.c:198
:
case '\\' :
StrIterNext(&si);
if (!StrIterRemainingLength(&si)) {
LOG_ERROR("Unexpected end of string.");
StrClear(str);
- In
JSON.c:275
:
StrIter JReadNumber(StrIter si, Number* num) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:299
:
bool is_parsing = true;
while (is_parsing && StrIterRemainingLength(&si) && StrIterPeek(&si)) {
switch (StrIterPeek(&si)) {
case 'E' :
- In
JSON.c:403
:
StrIter JReadInteger(StrIter si, i64* val) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:432
:
StrIter JReadFloat(StrIter si, f64* val) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:460
:
StrIter JReadBool(StrIter si, bool* b) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:472
:
si = JSkipWhitespace(si);
if (StrIterRemainingLength(&si) >= 4) {
if (StrIterPeek(&si) == 't') {
const char* pos = StrIterPos(&si);
- In
JSON.c:484
:
}
if (StrIterRemainingLength(&si) >= 5) {
if (StrIterPeek(&si) == 'f') {
const char* pos = StrIterPos(&si);
- In
JSON.c:509
:
StrIter JReadNull(StrIter si, bool* is_null) {
if (!StrIterRemainingLength(&si)) {
return si;
}
- In
JSON.c:522
:
*is_null = false;
if (StrIterRemainingLength(&si) >= 4) {
if (StrIterPeek(&si) == 'n') {
const char* pos = StrIterPos(&si);
- In
JSON.c:545
:
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;
}