| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 package memory | 5 package memory |
| 6 | 6 |
| 7 import ( | 7 import ( |
| 8 "bytes" | 8 "bytes" |
| 9 "sync" | 9 "sync" |
| 10 | 10 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 58 for { | 58 for { |
| 59 stop := false | 59 stop := false |
| 60 restart := false | 60 restart := false |
| 61 | 61 |
| 62 for idx, it := range ts { | 62 for idx, it := range ts { |
| 63 if skip >= 0 && skip == idx { | 63 if skip >= 0 && skip == idx { |
| 64 continue | 64 continue |
| 65 } | 65 } |
| 66 def := defs[idx] | 66 def := defs[idx] |
| 67 | 67 |
| 68 » » » it.next(serialize.Join(def.prefix, suffix), func(itm *gk
vlite.Item) { | 68 » » » pfxLen := prefixLens[idx] |
| 69 » » » it.next(serialize.Join(def.prefix[:pfxLen], suffix), fun
c(itm *gkvlite.Item) { |
| 69 if itm == nil { | 70 if itm == nil { |
| 70 // we hit the end of an iterator, we're
now done with the whole | 71 // we hit the end of an iterator, we're
now done with the whole |
| 71 // query. | 72 // query. |
| 72 stop = true | 73 stop = true |
| 73 return | 74 return |
| 74 } | 75 } |
| 75 | 76 |
| 76 » » » » sfxRO := itm.Key[prefixLens[idx]:] | 77 » » » » sfxRO := itm.Key[pfxLen:] |
| 77 | 78 |
| 78 if bytes.Compare(sfxRO, suffix) > 0 { | 79 if bytes.Compare(sfxRO, suffix) > 0 { |
| 79 // this row has a higher suffix than any
thing we've seen before. Set | 80 // this row has a higher suffix than any
thing we've seen before. Set |
| 80 // ourself to be the skip, and resart th
is loop from the top. | 81 // ourself to be the skip, and resart th
is loop from the top. |
| 81 suffix = append(suffix[:0], sfxRO...) | 82 suffix = append(suffix[:0], sfxRO...) |
| 82 skip = idx | 83 skip = idx |
| 83 if idx != 0 { | 84 if idx != 0 { |
| 84 // no point to restarting on the
0th index | 85 // no point to restarting on the
0th index |
| 85 restart = true | 86 restart = true |
| 86 } | 87 } |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 t.ch <- &cmd{targ, func(i *gkvlite.Item) { | 207 t.ch <- &cmd{targ, func(i *gkvlite.Item) { |
| 207 defer close(waiter) | 208 defer close(waiter) |
| 208 | 209 |
| 209 if i == nil { | 210 if i == nil { |
| 210 t.stop() | 211 t.stop() |
| 211 } | 212 } |
| 212 cb(i) | 213 cb(i) |
| 213 }} | 214 }} |
| 214 <-waiter | 215 <-waiter |
| 215 } | 216 } |
| OLD | NEW |