code: func (e *Enumerator) Next() (k []byte, v []byte, err error) {
  	if err = e.err; err != nil {
  		return
  	}
  
  	if e.ver != e.t.ver {
  		f, hit := e.t.Seek(e.k)
  		if !e.hit && hit {
  			if err = f.next(); err != nil {
  				return
  			}
  		}
  
  		*e = *f
  		f.Close()
  	}
  	if e.q == nil {
  		e.err, err = io.EOF, io.EOF
  		return
  	}
  
  	if e.i >= e.q.c {
  		if err = e.next(); err != nil {
  			return
  		}
  	}
  
  	i := e.q.d[e.i]
  	k, v = i.k, i.v
  	e.k, e.hit = k, false
  	e.next()
  	return
  }
docs: // Next returns the currently enumerated item, if it exists and moves to the
  // next item in the key collation order. If there is no item to return, err ==
  // io.EOF is returned.