this repo has no description
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Split seek from seek_forward

garrison ea778c64 5c1274e3

+20 -20
+3
lib/btree/fuzz/model_fuzz.ex
··· 37 37 opts: opts, 38 38 } 39 39 40 + # TODO: remove 41 + :ok = BTree.Writer.apply_batch(state.btree, [{:write, "", ""}]) 42 + 40 43 Enum.reduce(1..opts.iterations, state, fn iteration, state -> 41 44 try do 42 45 Process.put(:fuzz_i, iteration)
+17 -20
lib/btree/iterator.ex
··· 42 42 def next(%Iterator{reverse?: false} = it), do: next_forward(it) 43 43 44 44 defp seek_forward(%Iterator{} = it, search_key) do 45 + it = seek(it, search_key) 46 + {key, _value} = it.current_pair 47 + 48 + case key >= search_key do 49 + true -> it 50 + false -> next_forward(it) 51 + end 52 + end 53 + 54 + defp seek(%Iterator{} = it, search_key) do 45 55 page_data = it.current_page 46 56 << 47 57 _::binary-size(byte_size(page_data) - c_page_trailer_bytes()), ··· 60 70 current_page: child_data, 61 71 current_i: -1, 62 72 } 63 - seek_forward(it, search_key) 73 + seek(it, search_key) 64 74 65 75 0x01 -> 66 - case seek_leaf(page_data, pair_count, search_key) do 67 - {i, {_k, _v} = pair} -> 68 - %{it | 69 - current_i: i, 70 - current_pair: pair, 71 - } 72 - 73 - :not_found -> 74 - it = %{it | 75 - # TODO: kinda sus to use an out-of-bounds i but the page could be empty 76 - current_i: pair_count, 77 - } 78 - next_forward(it) 79 - end 76 + {i, pair} = seek_leaf(page_data, pair_count, search_key) 77 + %{it | 78 + current_i: i, 79 + current_pair: pair, 80 + } 80 81 end 81 82 end 82 83 ··· 145 146 do_seek_leaf(page_data, slots_start, pair_count, search_key, 0) 146 147 end 147 148 148 - defp do_seek_leaf(_page_data, _slots_start, pair_count, _search_key, i) when i == pair_count do 149 - :not_found 150 - end 151 - 152 149 defp do_seek_leaf(page_data, slots_start, pair_count, search_key, i) do 153 150 assert i < pair_count 154 151 << ··· 166 163 _rest::binary, 167 164 >> = page_data 168 165 169 - case key >= search_key do 166 + case (key >= search_key) or (i == (pair_count - 1)) do 170 167 true -> {i, {key, value}} 171 168 false -> do_seek_leaf(page_data, slots_start, pair_count, search_key, i + 1) 172 169 end