this repo has no description
2
fork

Configure Feed

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

Create empty root directly

garrison 0fc10359 edc0a07c

+19 -9
+6 -9
lib/btree/btree.ex
··· 1 1 defmodule Hobbes.BTree do 2 2 alias Hobbes.BTree 3 - alias Hobbes.BTree.{Store, FreeList, Page} 3 + alias Hobbes.BTree.{Store, FreeList} 4 4 5 5 import ExUnit.Assertions, only: [assert: 1] 6 6 ··· 68 68 free_list_tail_address: nil, 69 69 free_list_max_index: nil, 70 70 } 71 - :ok = create_root_pages(btree) 71 + :ok = create_root(btree) 72 72 73 73 btree 74 74 end ··· 85 85 } 86 86 end 87 87 88 - @keyspace_end_key "\xFF\xFF\xFF\xFF" 89 - 90 - defp create_root_pages(%BTree{} = btree) do 88 + defp create_root(%BTree{} = btree) do 91 89 %{ 92 90 store: store, 93 91 free_list: free_list, ··· 96 94 page_size: opt_page_size, 97 95 }, 98 96 } = btree 99 - 100 97 assert not :ets.member(btree.root_store, :root_address) 101 98 99 + root_data = BTree.Writer.empty_leaf(opt_page_size) 102 100 [root_index] = FreeList.reserve_pages(free_list, 1) 103 - 104 - [{_ek, root_data}] = Page.encode_page_from_pairs(:leaf, opt_page_size, [], @keyspace_end_key) 105 101 root_checksum = Store.checksum(root_data) 102 + 106 103 :ok = Store.write_page(store, root_index, root_data) 104 + :ets.insert(root_store, {:root_address, {root_index, root_checksum}}) 107 105 108 - :ets.insert(root_store, {:root_address, {root_index, root_checksum}}) 109 106 :ok 110 107 end 111 108
+13
lib/btree/writer.ex
··· 559 559 >> 560 560 encode_offset_slots(offsets_rest, slots_acc) 561 561 end 562 + 563 + @spec empty_leaf(pos_integer) :: binary 564 + def empty_leaf(opt_page_size) do 565 + pad_bytes = opt_page_size - c_page_trailer_bytes() 566 + pair_count = 0 567 + type_byte = 0x01 568 + # See constant: c_page_trailer_bytes() 569 + << 570 + 0::integer-unit(8)-size(pad_bytes), 571 + pair_count::integer-16, 572 + type_byte::integer-8, 573 + >> 574 + end 562 575 end