Lines Matching refs:iter

25 func (iter *Iterator) limitIterator() bool {
26 if iter.node == nil {
30 node := iter.node
31 if iter.startKey != nil && bytes.Compare(node.key, iter.startKey) < 0 {
32 iter.node = nil
36 if iter.limitKey != nil && bytes.Compare(node.key, iter.limitKey) >= 0 {
37 iter.node = nil
55 func (iter *Iterator) seek(key []byte, exactMatch bool, greater bool) bool {
56 iter.node = nil
57 iter.parents = parentStack{}
59 for node := iter.root; node != nil; {
60 iter.parents.Push(node)
69 iter.node = node
70 selectedNodeDepth = iter.parents.Len() - 1
77 iter.node = node
78 selectedNodeDepth = iter.parents.Len() - 1
87 iter.node = node
88 iter.parents.Pop()
89 return iter.limitIterator()
107 for i := iter.parents.Len(); i > selectedNodeDepth; i-- {
108 iter.parents.Pop()
110 return iter.limitIterator()
116 func (iter *Iterator) First() bool {
120 iter.isNew = false
121 if iter.startKey != nil {
122 return iter.seek(iter.startKey, true, true)
126 iter.parents = parentStack{}
127 for node := iter.root; node != nil; node = node.left {
129 iter.node = node
132 iter.parents.Push(node)
140 func (iter *Iterator) Last() bool {
144 iter.isNew = false
145 if iter.limitKey != nil {
146 return iter.seek(iter.limitKey, false, false)
150 iter.parents = parentStack{}
151 for node := iter.root; node != nil; node = node.right {
153 iter.node = node
156 iter.parents.Push(node)
164 func (iter *Iterator) Next() bool {
165 if iter.isNew {
166 return iter.First()
169 if iter.node == nil {
176 if seekKey := iter.seekKey; seekKey != nil {
177 iter.seekKey = nil
178 return iter.seek(seekKey, false, true)
183 if iter.node.right == nil {
184 parent := iter.parents.Pop()
185 for parent != nil && parent.right == iter.node {
186 iter.node = parent
187 parent = iter.parents.Pop()
189 iter.node = parent
190 return iter.limitIterator()
195 iter.parents.Push(iter.node)
196 iter.node = iter.node.right
197 for node := iter.node.left; node != nil; node = node.left {
198 iter.parents.Push(iter.node)
199 iter.node = node
201 return iter.limitIterator()
207 func (iter *Iterator) Prev() bool {
208 if iter.isNew {
209 return iter.Last()
212 if iter.node == nil {
219 if seekKey := iter.seekKey; seekKey != nil {
220 iter.seekKey = nil
221 return iter.seek(seekKey, false, false)
227 for iter.node.left == nil {
228 parent := iter.parents.Pop()
229 for parent != nil && parent.left == iter.node {
230 iter.node = parent
231 parent = iter.parents.Pop()
233 iter.node = parent
234 return iter.limitIterator()
239 iter.parents.Push(iter.node)
240 iter.node = iter.node.left
241 for node := iter.node.right; node != nil; node = node.right {
242 iter.parents.Push(iter.node)
243 iter.node = node
245 return iter.limitIterator()
250 func (iter *Iterator) Seek(key []byte) bool {
251 iter.isNew = false
252 return iter.seek(key, true, true)
258 func (iter *Iterator) Key() []byte {
259 if iter.node == nil {
262 return iter.node.key
268 func (iter *Iterator) Value() []byte {
269 if iter.node == nil {
272 return iter.node.value
277 func (iter *Iterator) Valid() bool {
278 return iter.node != nil
287 func (iter *Iterator) ForceReseek() {
290 if iter.t == nil {
296 iter.root = iter.t.root
301 if iter.node == nil {
302 iter.seekKey = nil
305 iter.seekKey = iter.node.key
329 iter := &Iterator{
336 return iter
347 iter := &Iterator{
353 return iter