IterPeekAt
Description
Propagating peek at signed offset n along the iteration direction from the current position. n is scaled by dir so a peek of n targets the element a move of n would land on – n > 0 looks ahead in iteration order, n < 0 looks behind, for both forward and reverse iters. Does not advance the iterator. Writes the element at pos + dir * n to *out.
Success
*out is set, returns true.
Failure
pos + dir * n is outside [0, length). *out is not written, returns false.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
StrIter.h:372:
/// TAGS: StrIter, Peek, Alias
///
#define StrIterPeek(mi, out) IterPeekAt((mi), 0, (out))
///
- In
StrIter.h:408:
/// TAGS: StrIter, Peek, Offset, Alias
///
#define StrIterPeekAt(mi, n, out) IterPeekAt((mi), (n), (out))
///
- In
StrIter.h:447:
/// TAGS: StrIter, Peek, Next
///
#define StrIterPeekNext(mi, out) IterPeekAt((mi), 1, (out))
///
- In
StrIter.h:466:
/// TAGS: StrIter, Peek, Prev
///
#define StrIterPeekPrev(mi, out) IterPeekAt((mi), -1, (out))
#endif // MISRA_STD_UTILITY_STR_ITER_H
- In
Access.h:162:
#define IterMustPeekAt(mi, n, out) \
do { \
if (!IterPeekAt((mi), (n), (out))) { \
LOG_FATAL("IterMustPeekAt: offset out of range"); \
} \- In
Iter.c:105:
IterMove(&it, 2);
u8 v;
if (!IterPeekAt(&it, 0, &v) || v != 7) {
return false;
}- In
Iter.c:108:
return false;
}
if (!IterPeekAt(&it, 1, &v) || v != 8) {
return false;
}- In
Iter.c:111:
return false;
}
if (!IterPeekAt(&it, -2, &v) || v != 5) {
return false;
}- In
Iter.c:122:
BufIter it = BufIterFromMemory(buf, 2);
u8 v = 0xAA;
if (IterPeekAt(&it, 2, &v)) {
return false;
}- In
Iter.c:128:
return false;
}
if (IterPeekAt(&it, -1, &v)) {
return false;
}- In
Iter.c:244:
u8 v = 0;
// cur == -1, dir == -1, n == -1 -> target -1 + (-1)*(-1) = index 0 (value 10).
if (!IterPeekAt(&it, -1, &v) || v != 10) {
return false;
}- In
Iter.c:248:
}
// cur == -1, dir == -1, n == -3 -> target -1 + (-1)*(-3) = index 2 (value 30).
return IterPeekAt(&it, -3, &v) && v == 30;
}- In
Iter.c:262:
u8 v = 0;
// cur == 2, n == 0 -> index 2 (value 30).
if (!IterPeekAt(&it, 0, &v) || v != 30) {
return false;
}- In
Iter.c:266:
}
// cur == 2, dir == -1, n == 2 -> target 2 + (-1)*2 = index 0 (value 10).
return IterPeekAt(&it, 2, &v) && v == 10;
}
Last updated on