tcerl

tcerlを試してみた。ソースを読みながら試行錯誤している段階なので、
おかしな使い方をしているところがある可能性が高いが、使用できた。
tcは、ハッシュ、B+木、固定長、の3種類のDBを提供しているが、
いままで調べた限りでは、tcerlではB+木だけを提供しているようだ。
ハッシュや固定長もあるとありがたいが、パフォーマンスを気にしなければB+木で
当座は事足りる。

-module(test).
-compile(export_all).

test()->
    Filename="abc",
    tcerl:start(),
    {ok,Wr} = tcbdb:open(Filename,[writer,create,term_store]),
    tcbdb:vanish(Wr),
    put(Wr,{1,1.0},23),
    put(Wr,{1,1.0},24),
    put(Wr,{2,3.0},25),
    put(Wr,{2,3.0},25),
    put(Wr,{3,3.0},25),
    tcbdb:close(Wr),
    {ok,Rd} = tcbdb:open(Filename,[reader,term_store]),
    [23,24] = get(Rd,{1, 1.0}),
    [X1] = next(Rd,{1,1.0}),
    {2,3.0} = X1,
    [X2] = next(Rd,X1),
    {3,3.0} = X2,
    [] = next(Rd,X2).

print(X,Y)->
    io:format("~w ~w~n",[X,Y]).    

print(X)->
    io:format("~w~n",[X]).

next(R,K)->
    map_t2b(tcbdb:next(R,term_to_binary(K))).

put(R,K,V)->
    tcbdb:put_dup(
      R,
      term_to_binary(K),
      term_to_binary(V)).
map_t2b(XS)->
    lists:map(fun(X)->
		      binary_to_term(X) end,XS).

get(R,K)->
    map_t2b(tcbdb:get(R,term_to_binary(K))).