in src/table.jl [633:667]
function Base.iterate(x::BatchIterator, (pos, id)=(x.startpos, 0))
@debug "checking for next arrow message: pos = $pos"
if pos + 3 > length(x.bytes)
@debug "not enough bytes left for another batch message"
return nothing
end
if readbuffer(x.bytes, pos, UInt32) != CONTINUATION_INDICATOR_BYTES
@debug "didn't find continuation byte to keep parsing messages: $(readbuffer(x.bytes, pos, UInt32))"
return nothing
end
pos += 4
if pos + 3 > length(x.bytes)
@debug "not enough bytes left to read length of another batch message"
return nothing
end
msglen = readbuffer(x.bytes, pos, Int32)
if msglen == 0
@debug "message has 0 length; terminating message parsing"
return nothing
end
pos += 4
if pos + msglen - 1 > length(x.bytes)
@debug "not enough bytes left to read Meta.Message"
return nothing
end
msg = FlatBuffers.getrootas(Meta.Message, x.bytes, pos - 1)
pos += msglen
@debug "parsing message: pos = $pos, msglen = $msglen, bodyLength = $(msg.bodyLength)"
if pos + msg.bodyLength - 1 > length(x.bytes)
@debug "not enough bytes left to read message body"
return nothing
end
return Batch(msg, x.bytes, pos, id), (pos + msg.bodyLength, id + 1)
end