aeron-client/src/main/java/io/aeron/logbuffer/TermBlockScanner.java
public static int scan(final UnsafeBuffer termBuffer, final int termOffset, final int limitOffset)
    {
        int offset = termOffset;

        while (offset < limitOffset)
        {
            final int frameLength = frameLengthVolatile(termBuffer, offset);
            if (frameLength <= 0)
            {
                break;
            }

            final int alignedFrameLength = align(frameLength, FRAME_ALIGNMENT);

            if (isPaddingFrame(termBuffer, offset))
            {
                if (termOffset == offset)
                {
                    offset += alignedFrameLength;
                }

                break;
            }

            if (offset + alignedFrameLength > limitOffset)
            {
                break;
            }

            offset += alignedFrameLength;
        }

        return offset;
    }
public static int scan(final UnsafeBuffer termBuffer, final int termOffset, final int limitOffset)
    {
        int offset = termOffset;

        while (offset < limitOffset)
        {
            final int frameLength = frameLengthVolatile(termBuffer, offset);
            if (frameLength <= 0)
            {
                break;
            }

            final int alignedFrameLength = align(frameLength, FRAME_ALIGNMENT);

            if (isPaddingFrame(termBuffer, offset))
            {
                if (termOffset == offset)
                {
                    offset += alignedFrameLength;
                }

                break;
            }

            if (offset + alignedFrameLength > limitOffset)
            {
                break;
            }

            offset += alignedFrameLength;
        }

        return offset;
    }
public static int scan ( final UnsafeBuffer termBuffer , final int termOffset , final int limitOffset ) { int offset = termOffset ; while ( offset < limitOffset ) { final int frameLength = frameLengthVolatile ( termBuffer , offset ) ; if ( frameLength <= 0 ) { break ; } final int alignedFrameLength = align ( frameLength , FRAME_ALIGNMENT ) ; if ( isPaddingFrame ( termBuffer , offset ) ) { if ( termOffset == offset ) { offset += alignedFrameLength ; } break ; } if ( offset + alignedFrameLength > limitOffset ) { break ; } offset += alignedFrameLength ; } return offset ; }
Scan a term buffer for a block of message fragments from an offset up to a limitOffset.
<p>
A scan will terminate if a padding frame is encountered. If first frame in a scan is padding then a block
for the padding is notified. If the padding comes after the first frame in a scan then the scan terminates
at the offset the padding frame begins. Padding frames are delivered singularly in a block.
<p>
Padding frames may be for a greater range than the limit offset but only the header needs to be valid so
relevant length of the frame is {@link io.aeron.protocol.DataHeaderFlyweight#HEADER_LENGTH}.

@param termBuffer  to scan for message fragments.
@param termOffset  at which the scan should begin.
@param limitOffset at which the scan should stop.
@return the offset at which the scan terminated.
Scan a term buffer for a block of message fragments from an offset up to a limitOffset . <p > A scan will terminate if a padding frame is encountered . If first frame in a scan is padding then a block for the padding is notified . If the padding comes after the first frame in a scan then the scan terminates at the offset the padding frame begins . Padding frames are delivered singularly in a block . <p > Padding frames may be for a greater range than the limit offset but only the header needs to be valid so relevant length of the frame is { @link io . aeron . protocol . DataHeaderFlyweight#HEADER_LENGTH } .