Skip to content
IterRemainingLength

IterRemainingLength

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)

Usage examples (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
Last updated on