this repo has no description
1
fork

Configure Feed

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

Remove dead code

garrison 1d9d954e 8bc5f691

-64
-64
lib/btree/btree.ex
··· 106 106 end 107 107 end 108 108 109 - def apply_batch(%BTree{} = btree, mutations) do 110 - %{ 111 - page_store: page_store, 112 - free_list: free_list, 113 - root_store: root_store, 114 - opts: %{ 115 - page_size: opt_page_size, 116 - }, 117 - } = btree 118 - 119 - Enum.each(mutations, fn 120 - {:write, k, v} -> 121 - [{:root_address, {root_index, root_checksum}}] = :ets.lookup(root_store, :root_address) 122 - new_root_address = write_recursive(page_store, free_list, opt_page_size, root_index, root_checksum, k, v) 123 - :ets.insert(root_store, {:root_address, new_root_address}) 124 - end) 125 - 126 - :ok 127 - end 128 - 129 - defp write_recursive(page_store, free_list, opt_page_size, page_index, page_checksum, key, value) do 130 - {page_type, pairs} = 131 - read_page(page_store, page_index, page_checksum) 132 - |> Page.decode_page() 133 - 134 - pairs = 135 - case page_type do 136 - :inner -> 137 - assert pairs != [] 138 - {child_key, child_address} = find_pointer(pairs, key) 139 - <<child_index::integer-64, child_checksum::binary-16>> = child_address 140 - 141 - {new_child_index, new_child_checksum} = write_recursive(page_store, free_list, opt_page_size, child_index, child_checksum, key, value) 142 - new_child_value = <<new_child_index::integer-64, new_child_checksum::binary-16>> 143 - 144 - write_pair(pairs, child_key, new_child_value) 145 - 146 - :leaf -> 147 - write_pair(pairs, key, value) 148 - end 149 - 150 - new_page_data = Page.encode_page_from_pairs(:leaf, opt_page_size, pairs) 151 - [new_page_index] = FreeList.reserve_pages(free_list, 1) 152 - new_page_checksum = checksum(new_page_data) 153 - :ok = write_page(page_store, new_page_index, new_page_data) 154 - 155 - {new_page_index, new_page_checksum} 156 - end 157 - 158 109 def write_pair(pairs, key, value, acc \\ []) 159 110 def write_pair([], key, value, acc), do: Enum.reverse(acc, [{key, value}]) 160 111 def write_pair([{k, _v} = p | pairs_rest], key, value, acc) do ··· 162 113 k < key -> write_pair(pairs_rest, key, value, [p | acc]) 163 114 k == key -> Enum.reverse([{key, value} | acc], pairs_rest) 164 115 k > key -> Enum.reverse([{key, value} | acc], [p | pairs_rest]) 165 - end 166 - end 167 - 168 - defp find_pointer(pairs, search_key, last_pair \\ nil) 169 - 170 - defp find_pointer([], _key, last_pair) do 171 - # if last_pair == nil, pairs was empty 172 - assert last_pair != nil 173 - last_pair 174 - end 175 - 176 - defp find_pointer([{fence_key, _address} = pair | pairs_rest], search_key, last_pair) do 177 - case fence_key > search_key do 178 - true -> last_pair 179 - false -> find_pointer(pairs_rest, search_key, pair) 180 116 end 181 117 end 182 118 end