this repo has no description
2
fork

Configure Feed

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

Add Hobbes.BTree

garrison 8c926942 f612fc7f

+70
+51
lib/btree/btree.ex
··· 1 + defmodule Hobbes.BTree do 2 + alias Hobbes.BTree 3 + 4 + import ExUnit.Assertions, only: [assert: 1] 5 + 6 + defmodule Opts do 7 + @type t :: %__MODULE__{ 8 + page_size: pos_integer, 9 + } 10 + @enforce_keys [ 11 + :page_size, 12 + ] 13 + defstruct @enforce_keys 14 + end 15 + 16 + @type t :: %__MODULE__{ 17 + opts: Opts.t, 18 + page_store: :ets.table, 19 + } 20 + @enforce_keys [ 21 + :opts, 22 + :page_store, 23 + ] 24 + defstruct @enforce_keys 25 + 26 + defp parse_opts(opts) do 27 + page_size = Keyword.get(opts, :page_size, 4096) 28 + assert page_size > 0 29 + 30 + %Opts{ 31 + page_size: page_size, 32 + } 33 + end 34 + 35 + def new(opts \\ []) do 36 + opts = parse_opts(opts) 37 + 38 + page_store = :ets.new(__MODULE__, [:set, :protected]) 39 + 40 + btree = %BTree{ 41 + opts: opts, 42 + page_store: page_store, 43 + } 44 + 45 + btree 46 + end 47 + 48 + def apply_batch(%BTree{} = _btree, _mutations) do 49 + :ok 50 + end 51 + end
+19
test/btree_test.exs
··· 1 + defmodule Hobbes.BTreeTest do 2 + use ExUnit.Case, async: true 3 + 4 + alias Hobbes.BTree 5 + 6 + @moduletag :btree 7 + 8 + describe "BTree" do 9 + test "insert" do 10 + mutations = [ 11 + {:write, "foo", "bar"}, 12 + {:write, "hello", "world"}, 13 + ] 14 + 15 + btree = BTree.new() 16 + :ok = BTree.apply_batch(btree, mutations) 17 + end 18 + end 19 + end