Browse Source

kvs_stream cleanup

Namdak Tonpa 7 years ago
parent
commit
495a8da30e
1 changed files with 15 additions and 14 deletions
  1. 15 14
      src/kvs_stream.erl

+ 15 - 14
src/kvs_stream.erl

@@ -6,20 +6,23 @@
 
 % PUBLIC
 
-new(T)                -> #cur{feed=kvs:next_id(cur,1),tab=T}.
-top(#cur{top=[]}=C)   -> C#cur{val=[]};
-top(#cur{top=T}=C)    -> seek(T,C).
-bot(#cur{bot=[]}=C)   -> C#cur{val=[]};
-bot(#cur{bot=B}=C)    -> seek(B,C).
-take(N,#cur{dir=D}=C) -> take(D,N,C,[]).
-save(C)               -> kvs:put(C), C.
-load(#cur{feed=K})    -> kvs:get(cur,K).
-
-seek(Id, #cur{tab=T}=C)    -> {ok,R}=kvs:get(T,Id),   C#cur{val=R}.
+new(T)                     -> #cur{feed=kvs:next_id(cur,1),tab=T}.
+top(#cur{top=[]}=C)        -> C#cur{val=[]};
+top(#cur{top=T}=C)         -> seek(T,C).
+bot(#cur{bot=[]}=C)        -> C#cur{val=[]};
+bot(#cur{bot=B}=C)         -> seek(B,C).
+save(#cur{}=C)             -> kvs:put(C), C.
+load(#cur{feed=K})         -> kvs:get(cur,K).
 next(#cur{tab=T,val=[]}=C) -> {error,[]};
 next(#cur{tab=T,val=B}=C)  -> lookup(kvs:get(T,en(B)),C).
 prev(#cur{tab=T,val=[]}=C) -> {error,[]};
 prev(#cur{tab=T,val=B}=C)  -> lookup(kvs:get(T,ep(B)),C).
+take(N,#cur{dir=D}=C)      -> take(D,N,C,[]).
+seek(Id, #cur{tab=T}=C)    -> {ok,R}=kvs:get(T,Id), C#cur{val=R}.
+remove(Id, #cur{tab=M}=C)  -> {ok,R}=kvs:get(M,Id),
+                              join(M,Id,[fix(kvs:get(M,X))||X<-[ep(R),en(R)]],C).
+
+% PRIVATE
 
 add(top,M,#cur{top=T,val=[]}=C) -> Id=id(M), N=sp(sn(M,T),[]), kvs:put(N), C#cur{val=N,bot=Id,top=Id};
 add(bot,M,#cur{bot=B,val=[]}=C) -> Id=id(M), N=sn(sp(M,B),[]), kvs:put(N), C#cur{val=N,bot=Id,top=Id};
@@ -28,10 +31,6 @@ add(bot,M,#cur{bot=B, val=V}=C) when element(2,V) /=B -> add(bot, M, bot(C));
 add(top,M,#cur{top=T, val=V}=C) -> Id=id(M), N=sp(sn(M,T),[]), kvs:put([N,sp(V,Id)]), C#cur{val=N,top=Id};
 add(bot,M,#cur{bot=B, val=V}=C) -> Id=id(M), N=sn(sp(M,B),[]), kvs:put([N,sn(V,Id)]), C#cur{val=N,bot=Id}.
 
-remove(Id, #cur{tab=M}=C) ->
-    {ok,R}=kvs:get(M,Id),
-    join(M,Id,lists:map(fun(X)->fix(kvs:get(M,X))end,[ep(R),en(R)]),C).
-
 join(T,I,[[],[]],C) ->                                          kvs:delete(T,I), C#cur{top=[],bot=[],val=[]};
 join(T,I,[[], R],C) -> N=sp(R,[]),    kvs:put(N),               kvs:delete(T,I), C#cur{top=id(N),val=N};
 join(T,I,[L, []],C) -> N=sn(L,[]),    kvs:put(N),               kvs:delete(T,I), C#cur{bot=id(N),val=N};
@@ -59,6 +58,8 @@ take(_,_,{error,_},R)     -> lists:flatten(R);
 take(_,0,_,R)             -> lists:flatten(R);
 take(A,N,#cur{val=B}=C,R) -> take(A,N-1,?MODULE:A(C),[B|R]).
 
+% TESTS
+
 check() -> test(), test2(), ok.
 
 test2() ->