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

IterMove

IterMove Description Move current reading position of Iterator.

Read More

IterInitAlignedT

IterInitAlignedT Description Initialize Iter with custom alignment to iterate in forward direction.

Read More

StrIterRemainingLength

StrIterRemainingLength Description Get remaining elements left to read

Read More