StrIterRemainingLength
Description
Characters remaining to read in the iteration direction. Alias- reframe of IterRemainingLength in string vocabulary. See IterRemainingLength for the full contract.
Parameters
| Name | Direction | Description |
|---|---|---|
mi |
in | Pointer to the StrIter to measure. |
Success
Returns the count of characters remaining to read in the iteration direction (0 once past the end/start).
Failure
Macro cannot fail.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
JSON.h:439:
#define JR_ARR(si, reader) \
do { \
if (!StrIterRemainingLength(&si)) { \
break; \
} \- In
JSON.h:535:
#define JR_OBJ(si, reader) \
do { \
if (!StrIterRemainingLength(&si)) { \
break; \
} \- In
ArgParse.c:93:
}
// No digits consumed (cursor at entry) or trailing junk after digits.
if (StrIterRemainingLength(&si) == StrIterLength(&si) || StrIterRemainingLength(&si) != 0)
return false;
if (v > hi)- In
Io.c:856:
LOG_FATAL("buf_read_fmt: unterminated {{ in fmt");
}
u32 spec_len = (u32)(StrIterRemainingLength(&spec_start_fsi) - StrIterRemainingLength(&fsi));
FmtInfo fmt_info = {0};- In
Io.c:1053:
LOG_FATAL("buf_*_fmt: unterminated {{ in fmt");
}
u32 spec_len = (u32)(StrIterRemainingLength(&spec_start_fsi) - StrIterRemainingLength(&fsi));
FmtInfo fmt_info = {0};- In
Io.c:2662:
}
if (!StrIterRemainingLength(&si)) {
LOG_ERROR("Failed to parse f64: empty input");
DefaultAllocatorDeinit(&scratch);- In
Io.c:2775:
}
if (!StrIterRemainingLength(&si)) {
LOG_ERROR("Failed to parse u8: empty input");
DefaultAllocatorDeinit(&scratch);- In
Io.c:2894:
} \
\
if (!StrIterRemainingLength(&si)) { \
LOG_ERROR("Failed to parse " #NAME ": empty input"); \
DefaultAllocatorDeinit(&scratch); \
- In
Io.c:3192:
}
if (!StrIterRemainingLength(&si)) {
LOG_ERROR("Empty input string");
return StrIterDataAt(&si, StrIterIndex(&si));- In
Io.c:3328:
}
if (!StrIterRemainingLength(&si)) {
LOG_ERROR("Failed to parse Int: empty input");
return StrIterDataAt(&si, StrIterIndex(&si));- In
Io.c:3425:
}
if (!StrIterRemainingLength(&si)) {
LOG_ERROR("Failed to parse Float: empty input");
StrDeinit(&temp);- In
Io.c:3481:
}
if (!StrIterRemainingLength(&si)) {
LOG_ERROR("Failed to parse f32: empty input");
DefaultAllocatorDeinit(&scratch);- In
Dns.c:149:
StrIterMustNext(si);
}
if (StrIterRemainingLength(si) > 0) {
StrIterMustNext(si);
}- In
Dns.c:163:
StrIter si = StrIterFromStr(buf);
char c;
while (StrIterRemainingLength(&si)) {
skip_hspace_iter(&si);- In
Dns.c:261:
StrIter si = StrIterFromStr(buf);
char c;
while (StrIterRemainingLength(&si)) {
skip_hspace_iter(&si);- In
Dns.c:273:
// `kw_len` for the required separator -- both bounds-checked.
char sep;
if (StrIterRemainingLength(&si) > kw_len &&
MemCompare(StrIterDataAt(&si, StrIterIndex(&si)), NS_KEYWORD, kw_len) == 0 &&
StrIterPeekAt(&si, (i64)kw_len, &sep) && (sep == ' ' || sep == '\t')) {- In
Dns.c:39:
// Trailing dot at the end is valid (means root); leading or
// middle empty labels are not.
if (StrIterRemainingLength(&si) == 0) {
break;
}- In
ProcMaps.c:107:
// perms: 4 chars
if (StrIterRemainingLength(si) < 4)
return false;
u32 perms = 0;- In
ProcMaps.c:175:
// slices that alias the buffer are usable as `Zstr`.
StrIter si = StrIterFromStr(out->raw);
while (StrIterRemainingLength(&si)) {
ProcMapEntry e = {0};
if (!parse_one_line(&si, &e)) {- In
ProcMaps.c:183:
StrIterMustNext(&si);
}
if (StrIterRemainingLength(&si)) {
StrIterMustNext(&si);
}- In
JSON.c:13:
static StrIter JSkipObject(StrIter si) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
JSON.c:109:
static StrIter JSkipArray(StrIter si) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
JSON.c:182:
StrIter JReadString(StrIter si, Str *str) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
JSON.c:297:
StrIter JReadNumber(StrIter si, Number *num) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
JSON.c:442:
StrIter JReadInteger(StrIter si, i64 *val) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
JSON.c:470:
StrIter JReadFloat(StrIter si, f64 *val) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
JSON.c:497:
StrIter JReadBool(StrIter si, bool *b) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
JSON.c:509:
char c;
if (StrIterRemainingLength(&si) >= 4) {
if (StrIterPeek(&si, &c) && c == 't') {
Zstr pos = StrIterPos(&si);- In
JSON.c:521:
}
if (StrIterRemainingLength(&si) >= 5) {
if (StrIterPeek(&si, &c) && c == 'f') {
Zstr pos = StrIterPos(&si);- In
JSON.c:546:
StrIter JReadNull(StrIter si, bool *is_null) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
JSON.c:559:
*is_null = false;
char c;
if (StrIterRemainingLength(&si) >= 4) {
if (StrIterPeek(&si, &c) && c == 'n') {
Zstr pos = StrIterPos(&si);- In
JSON.c:582:
StrIter JSkipValue(StrIter si) {
if (!StrIterRemainingLength(&si)) {
return si;
}- In
StrIter.c:11:
bool test_striter_from_zstr_length_and_read(void) {
StrIter si = StrIterFromZstr("abc");
if (StrIterRemainingLength(&si) != 3) {
return false;
}- In
StrIter.c:32:
bool test_striter_from_cstr_caps_length(void) {
StrIter si = StrIterFromCstr("abcd", 2);
if (StrIterRemainingLength(&si) != 2) {
return false;
} #define JR_OBJ(si, reader) \
do { \
if (!StrIterRemainingLength(&si)) { \
break; \
} \ 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;
}
Last updated on