IterRead
Description
Propagating read. Writes the current element to *out and advances the iterator. out must point at storage compatible with the iterator’s element type.
Success
*out is set, pos advances by dir, returns true.
Failure
Iterator is exhausted. *out is not written, pos is unchanged, returns false.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
StrIter.h:339:
/// TAGS: StrIter, Read, Advance, Alias
///
#define StrIterRead(mi, out) IterRead((mi), (out))
///
- In
Access.h:125:
#define IterMustRead(mi, out) \
do { \
if (!IterRead((mi), (out))) { \
LOG_FATAL("IterMustRead: iterator exhausted"); \
} \- In
Deadend.c:17:
BufIter it = BufIterFromMemory(buf, 1);
u8 v;
IterRead(&it, &v);
IterMustRead(&it, &v);
return true;- In
Deadend.c:41:
BufIter it = BufIterFromMemory(buf, 1);
u8 v;
IterRead(&it, &v);
IterMustNext(&it);
return true;- In
Iter.c:26:
}
u8 v;
IterRead(&it, &v);
if (IterRemainingLength(&it) != 2) {
return false;- In
Iter.c:30:
return false;
}
IterRead(&it, &v);
IterRead(&it, &v);
return IterRemainingLength(&it) == 0;- In
Iter.c:31:
}
IterRead(&it, &v);
IterRead(&it, &v);
return IterRemainingLength(&it) == 0;
}- In
Iter.c:42:
}
u8 v;
IterRead(&it, &v);
if (IterRemainingLength(&it) != 2) {
return false;- In
Iter.c:46:
return false;
}
IterRead(&it, &v);
IterRead(&it, &v);
return IterRemainingLength(&it) == 0;- In
Iter.c:47:
}
IterRead(&it, &v);
IterRead(&it, &v);
return IterRemainingLength(&it) == 0;
}- In
Iter.c:55:
BufIter it = BufIterFromMemory(buf, 3);
u8 v = 0;
if (!IterRead(&it, &v) || v != 10) {
return false;
}- In
Iter.c:58:
return false;
}
if (!IterRead(&it, &v) || v != 20) {
return false;
}- In
Iter.c:61:
return false;
}
if (!IterRead(&it, &v) || v != 30) {
return false;
}- In
Iter.c:65:
}
// Fourth read must fail: cursor sits at EOF after the three above.
return !IterRead(&it, &v);
}- In
Iter.c:72:
BufIter it = from_rev(buf, 3);
u8 v = 0;
if (!IterRead(&it, &v) || v != 30) {
return false;
}- In
Iter.c:75:
return false;
}
if (!IterRead(&it, &v) || v != 20) {
return false;
}- In
Iter.c:78:
return false;
}
if (!IterRead(&it, &v) || v != 10) {
return false;
}- In
Iter.c:82:
}
// Fourth read must fail: cursor has stepped past the start sentinel.
return !IterRead(&it, &v);
}- In
Iter.c:89:
BufIter it = BufIterFromMemory(buf, 1);
u8 v = 0;
IterRead(&it, &v);
size pos_before = IterIndex(&it);
u8 sentinel = 0xAA;- In
Iter.c:93:
u8 sentinel = 0xAA;
v = sentinel;
if (IterRead(&it, &v)) {
return false;
}- In
Iter.c:285:
}
u8 v = 0;
return IterRead(&it, &v) && v == 10;
}- In
Iter.c:300:
}
u8 v = 0;
return IterRead(&it, &v) && v == 30;
}- In
Iter.c:422:
}
u8 v = 0;
if (!IterRead(&it, &v) || v != 2) {
return false;
}- In
Iter.c:425:
return false;
}
if (!IterRead(&it, &v) || v != 3) {
return false;
}- In
Iter.c:429:
}
// Indices 3,4 are now past-the-end.
return !IterRead(&it, &v);
}- In
Iter.c:444:
}
u8 v = 0;
if (!IterRead(&child, &v) || v != 20) {
return false;
}- In
Iter.c:447:
return false;
}
if (!IterRead(&child, &v) || v != 30) {
return false;
}- In
Iter.c:450:
return false;
}
if (IterRead(&child, &v)) {
return false;
}
Last updated on