class FDB::TransactionRead

def each

def each
  bsel = @bsel
  esel = @esel
  limit = @limit
  iteration = 1 # the first read was fired off when the RangeEnum was initialized
  future = @future
  done = false
  while !done
    if future
      kvs, count, more = future.wait
      index = 0
      future = nil
      return if count.zero?
    end
    result = kvs[index]
    index += 1
    if index == count
      if more.zero? || limit == count
        done = true
      else
        iteration += 1
        if limit.nonzero?
          limit -= count
        end
        if @reverse.nonzero?
          esel = KeySelector.first_greater_or_equal(kvs.last.key)
        else
          bsel = KeySelector.first_greater_than(kvs.last.key)
        end
        future = @get_range.call(bsel, esel, limit, @mode, iteration, @reverse)
      end
    end
    yield result
  end
end