CDB to gen_server
First draft to make CDB a gen_Server
This commit is contained in:
parent
28f612426a
commit
b5db1b4e14
1 changed files with 37 additions and 6 deletions
|
@ -56,6 +56,8 @@
|
||||||
code_change/3,
|
code_change/3,
|
||||||
cdb_open_writer/1,
|
cdb_open_writer/1,
|
||||||
cdb_open_reader/1,
|
cdb_open_reader/1,
|
||||||
|
cdb_get/2,
|
||||||
|
cdb_put/3,
|
||||||
from_dict/2,
|
from_dict/2,
|
||||||
create/2,
|
create/2,
|
||||||
dump/1,
|
dump/1,
|
||||||
|
@ -107,11 +109,11 @@ cdb_open_reader(Filename) ->
|
||||||
Error
|
Error
|
||||||
end.
|
end.
|
||||||
|
|
||||||
%cdb_get(Pid, Key) ->
|
cdb_get(Pid, Key) ->
|
||||||
% gen_server:call(Pid, {cdb_get, Key}, infinity).
|
gen_server:call(Pid, {cdb_get, Key}, infinity).
|
||||||
%
|
|
||||||
%cdb_put(Pid, Key, Value) ->
|
cdb_put(Pid, Key, Value) ->
|
||||||
% gen_server:call(Pid, {cdb_put, Key, Value}, infinity).
|
gen_server:call(Pid, {cdb_put, Key, Value}, infinity).
|
||||||
%
|
%
|
||||||
%cdb_close(Pid) ->
|
%cdb_close(Pid) ->
|
||||||
% gen_server:call(Pid, cdb_close, infinity).
|
% gen_server:call(Pid, cdb_close, infinity).
|
||||||
|
@ -139,7 +141,36 @@ handle_call({cdb_open_reader, Filename}, _From, State) ->
|
||||||
{ok, Handle} = file:open(Filename, [binary, raw, read]),
|
{ok, Handle} = file:open(Filename, [binary, raw, read]),
|
||||||
{reply, ok, State#state{handle=Handle,
|
{reply, ok, State#state{handle=Handle,
|
||||||
filename=Filename,
|
filename=Filename,
|
||||||
writer=false}}.
|
writer=false}};
|
||||||
|
handle_call({cdb_get, Key}, _From, State) ->
|
||||||
|
case State#state.writer of
|
||||||
|
true ->
|
||||||
|
{reply,
|
||||||
|
get_mem(Key, State#state.handle, State#state.hashtree),
|
||||||
|
State};
|
||||||
|
false ->
|
||||||
|
{reply,
|
||||||
|
get(State#state.handle, Key),
|
||||||
|
State}
|
||||||
|
end;
|
||||||
|
handle_call({cdb_put, Key, Value}, _From, State) ->
|
||||||
|
case State#state.writer of
|
||||||
|
true ->
|
||||||
|
Result = put(State#state.handle,
|
||||||
|
Key, Value,
|
||||||
|
{State#state.last_position, State#state.hashtree}),
|
||||||
|
{UpdHandle, NewPosition, HashTree} = Result,
|
||||||
|
{reply,
|
||||||
|
ok,
|
||||||
|
State#state{handle=UpdHandle,
|
||||||
|
last_position=NewPosition,
|
||||||
|
hashtree=HashTree}};
|
||||||
|
false ->
|
||||||
|
{reply,
|
||||||
|
{error, read_only},
|
||||||
|
State}
|
||||||
|
end.
|
||||||
|
|
||||||
|
|
||||||
handle_cast(_Msg, State) ->
|
handle_cast(_Msg, State) ->
|
||||||
{noreply, State}.
|
{noreply, State}.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue