IterRemainingLength

Table of Contents

IterRemainingLength

Description

Get remaining length left to read this memory iterator.

Success

If provided Iter object is not NULL_ITER(mi) then remaining size left to read in memory region is returned.

Failure

If provided Iter is NULL_ITER(mi) then returns 0

Usage example (Cross-references)

    ///
    /// TAGS: StrIter, Length, Query, Iter
    #define StrIterRemainingLength(mi) IterRemainingLength(mi)
    
    ///
    #define IterMove(mi, n)                                                                                                \
    do {                                                                                                               \
    if (IterRemainingLength(mi) - (mi)->dir * (n) <= IterLength(mi))                                               \
    (mi)->pos += (mi)->dir * (n);                                                                              \
    } while (0)
    /// TAGS: Memory, Iter, Size
    ///
    #define IterRemainingSize(mi) IterRemainingLength(mi) * ALIGN_UP(sizeof(ITER_DATA_TYPE(mi)), (mi)->alignment)
    
    ///
    ///
    #define IterPos(mi)                                                                                                    \
    (IterRemainingLength(mi) ?                                                                                         \
    (ITER_DATA_TYPE(mi) *)(((u64)(mi)->data) +                                                                    \
    (mi)->pos * ALIGN_UP(sizeof(ITER_DATA_TYPE(mi)), (mi)->alignment)) :                   \
    ///
    #define IterRead(mi)                                                                                                   \
    (IterRemainingLength(mi) ? (((mi)->pos = (mi)->pos + (mi)->dir), (mi)->data[(mi)->pos - (mi)->dir]) :              \
    (ITER_DATA_TYPE(mi)) {0})
    ///
    #define IterPeekAt(mi, n)                                                                                              \
    (IterRemainingLength(mi) > (n) || (mi)->pos + (n) >= 0 ? (mi)->data[(mi)->pos + (n)] : (ITER_DATA_TYPE(mi)) {0})
    
    #endif // MISRA_STD_UTILITY_ITER_ACCESS_H

Share :

Related Posts

IterInitRevAlignedT

IterInitRevAlignedT Description Initialize Iter with custom alignment to iterate in backward direction.

Read More

StrIterLength

StrIterLength Description Get total length in elements

Read More

IterNext

IterNext Description Move to next element (wrapper for IterMove)

Read More