Namdak Tonpa 4 years ago
parent
commit
68b7e6991b
7 changed files with 28 additions and 24 deletions
  1. 1 1
      index.html
  2. 1 1
      mix.exs
  3. 1 1
      src/kvs.app.src
  4. 20 20
      src/layers/kvs_stream.erl
  5. 1 0
      src/stores/kvs_fs.erl
  6. 2 1
      src/stores/kvs_mnesia.erl
  7. 2 0
      src/stores/kvs_rocks.erl

+ 1 - 1
index.html

@@ -43,7 +43,7 @@
             <br />
             <br />
             <div>
             <div>
                 JAN 2020 © <a href="https://github.com/5HT">5HT</a> ISC<br />
                 JAN 2020 © <a href="https://github.com/5HT">5HT</a> ISC<br />
-                VER 7.1 6.5 6.4
+                VER 8.4 8.3 7.9.1
             </div>
             </div>
         </section>
         </section>
         <section>
         <section>

+ 1 - 1
mix.exs

@@ -4,7 +4,7 @@ defmodule KVS.Mixfile do
   def project do
   def project do
     [
     [
       app: :kvs,
       app: :kvs,
-      version: "8.3.0",
+      version: "8.4.0",
       description: "KVS Abstract Chain Database",
       description: "KVS Abstract Chain Database",
       package: package(),
       package: package(),
       deps: deps()
       deps: deps()

+ 1 - 1
src/kvs.app.src

@@ -1,6 +1,6 @@
 {application, kvs,
 {application, kvs,
    [{description, "KVS Abstract Chain Database"},
    [{description, "KVS Abstract Chain Database"},
-    {vsn, "8.3.0"},
+    {vsn, "8.4.0"},
     {registered, []},
     {registered, []},
     {applications, [kernel,stdlib]},
     {applications, [kernel,stdlib]},
     {mod, { kvs, []}},
     {mod, { kvs, []}},

+ 20 - 20
src/layers/kvs_stream.erl

@@ -27,30 +27,32 @@ ep(T)   -> e(#iter.prev, T).
 acc(0)  -> next;
 acc(0)  -> next;
 acc(1)  -> prev.
 acc(1)  -> prev.
 
 
-% section: next, prev
-
-top(#reader{feed=F}=C) -> w(kvs:get(writer,F),top,C).
-bot(#reader{feed=F}=C) -> w(kvs:get(writer,F),bot,C).
-
-next(#reader{cache=[]}) -> {error,empty};
-next(#reader{cache={T,R},pos=P}=C) -> n(kvs:get(T,R),C,P+1).
-
-prev(#reader{cache=[]}) -> {error,empty};
-prev(#reader{cache={T,R},pos=P}=C) -> p(kvs:get(T,R),C,P-1).
-
 n({ok,R},C,P)    -> r(kvs:get(tab(R),en(R)),C,P);
 n({ok,R},C,P)    -> r(kvs:get(tab(R),en(R)),C,P);
 n({error,X},_,_) -> {error,X}.
 n({error,X},_,_) -> {error,X}.
+
 p({ok,R},C,P)    -> r(kvs:get(tab(R),ep(R)),C,P);
 p({ok,R},C,P)    -> r(kvs:get(tab(R),ep(R)),C,P);
 p({error,X},_,_) -> {error,X}.
 p({error,X},_,_) -> {error,X}.
+
 r({ok,R},C,P)    -> C#reader{cache={tab(R),id(R)},pos=P};
 r({ok,R},C,P)    -> C#reader{cache={tab(R),id(R)},pos=P};
 r({error,X},_,_) -> {error,X}.
 r({error,X},_,_) -> {error,X}.
+
 w({ok,#writer{first=[]}},bot,C)           -> C#reader{cache=[],pos=1,dir=0};
 w({ok,#writer{first=[]}},bot,C)           -> C#reader{cache=[],pos=1,dir=0};
 w({ok,#writer{first=B}},bot,C)            -> C#reader{cache={tab(B),id(B)},pos=1,dir=0};
 w({ok,#writer{first=B}},bot,C)            -> C#reader{cache={tab(B),id(B)},pos=1,dir=0};
 w({ok,#writer{cache=B,count=Size}},top,C) -> C#reader{cache={tab(B),id(B)},pos=Size,dir=1};
 w({ok,#writer{cache=B,count=Size}},top,C) -> C#reader{cache={tab(B),id(B)},pos=Size,dir=1};
 w({error,X},_,_)                          -> {error,X}.
 w({error,X},_,_)                          -> {error,X}.
 
 
-% section: take, drop
-feed(Feed) -> #reader{args=Args} = take((reader(Feed))#reader{args=-1}), Args.
+% next, prev, top, bot
+
+top(#reader{feed=F}=C) -> w(kvs:get(writer,F),top,C).
+bot(#reader{feed=F}=C) -> w(kvs:get(writer,F),bot,C).
+
+next(#reader{cache=[]}) -> {error,empty};
+next(#reader{cache={T,R},pos=P}=C) -> n(kvs:get(T,R),C,P+1).
+
+prev(#reader{cache=[]}) -> {error,empty};
+prev(#reader{cache={T,R},pos=P}=C) -> p(kvs:get(T,R),C,P-1).
+
+% take, drop, feed
 
 
 drop(#reader{cache=[]}=C) -> C#reader{args=[]};
 drop(#reader{cache=[]}=C) -> C#reader{args=[]};
 drop(#reader{dir=D,cache=B,args=N,pos=P}=C)  -> drop(acc(D),N,C,C,P,B).
 drop(#reader{dir=D,cache=B,args=N,pos=P}=C)  -> drop(acc(D),N,C,C,P,B).
@@ -65,18 +67,20 @@ drop(_,_,{error,_},C2,P,B)     -> C2#reader{pos=P,cache=B};
 drop(_,0,_,C2,P,B)             -> C2#reader{pos=P,cache=B};
 drop(_,0,_,C2,P,B)             -> C2#reader{pos=P,cache=B};
 drop(A,N,#reader{cache=B,pos=P}=C,C2,_,_) -> drop(A,N-1,?MODULE:A(C),C2,P,B).
 drop(A,N,#reader{cache=B,pos=P}=C,C2,_,_) -> drop(A,N-1,?MODULE:A(C),C2,P,B).
 
 
-% new, save, load, up, down, top, bot
+feed(Feed) -> #reader{args=Args} = take((reader(Feed))#reader{args=-1}), Args.
+
+% new, save, load, writer, reader
 
 
 load_reader (Id) -> case kvs:get(reader,Id) of {ok,C} -> C; _ -> #reader{id=[]} end.
 load_reader (Id) -> case kvs:get(reader,Id) of {ok,C} -> C; _ -> #reader{id=[]} end.
 
 
+save (C) -> NC = c4(C,[]), kvs:put(NC), NC.
 writer (Id) -> case kvs:get(writer,Id) of {ok,W} -> W; {error,_} -> #writer{id=Id} end.
 writer (Id) -> case kvs:get(writer,Id) of {ok,W} -> W; {error,_} -> #writer{id=Id} end.
 reader (Id) -> case kvs:get(writer,Id) of
 reader (Id) -> case kvs:get(writer,Id) of
          {ok,#writer{first=[]}} -> #reader{id=kvs:seq(reader,1),feed=Id,cache=[]};
          {ok,#writer{first=[]}} -> #reader{id=kvs:seq(reader,1),feed=Id,cache=[]};
          {ok,#writer{first=F}}  -> #reader{id=kvs:seq(reader,1),feed=Id,cache={tab(F),id(F)}};
          {ok,#writer{first=F}}  -> #reader{id=kvs:seq(reader,1),feed=Id,cache={tab(F),id(F)}};
          {error,_} -> save(#writer{id=Id}), reader(Id) end.
          {error,_} -> save(#writer{id=Id}), reader(Id) end.
-save (C) -> NC = c4(C,[]), kvs:put(NC), NC.
 
 
-% add
+% add, remove, append
 
 
 add(#writer{args=M}=C) when element(2,M) == [] -> add(si(M,kvs:seq(tab(M),1)),C);
 add(#writer{args=M}=C) when element(2,M) == [] -> add(si(M,kvs:seq(tab(M),1)),C);
 add(#writer{args=M}=C) -> add(M,C).
 add(#writer{args=M}=C) -> add(M,C).
@@ -85,10 +89,6 @@ add(M,#writer{cache=[]}=C) ->
     _Id=id(M), N=sp(sn(M,[]),[]), kvs:put(N),
     _Id=id(M), N=sp(sn(M,[]),[]), kvs:put(N),
     C#writer{cache=N,count=1,first=N};
     C#writer{cache=N,count=1,first=N};
 
 
-%add(M,#writer{cache=V,count=S}=C) ->
-%    N=sp(sn(M,[]),id(V)), P=sn(V,id(M)), kvs:put([N,P]),
-%    C#writer{cache=N,count=S+1}.
-
 add(M,#writer{cache=V1,count=S}=C) ->
 add(M,#writer{cache=V1,count=S}=C) ->
     {ok,V} = kvs:get(tab(V1),id(V1)),
     {ok,V} = kvs:get(tab(V1),id(V1)),
     N=sp(sn(M,[]),id(V)), P=sn(V,id(M)), kvs:put([N,P]),
     N=sp(sn(M,[]),id(V)), P=sn(V,id(M)), kvs:put([N,P]),

+ 1 - 0
src/stores/kvs_fs.erl

@@ -4,6 +4,7 @@
 -include("metainfo.hrl").
 -include("metainfo.hrl").
 -include_lib("stdlib/include/qlc.hrl").
 -include_lib("stdlib/include/qlc.hrl").
 -export(?BACKEND).
 -export(?BACKEND).
+
 start()    -> ok.
 start()    -> ok.
 stop()     -> ok.
 stop()     -> ok.
 destroy()  -> ok.
 destroy()  -> ok.

+ 2 - 1
src/stores/kvs_mnesia.erl

@@ -6,6 +6,7 @@
 -include_lib("stdlib/include/qlc.hrl").
 -include_lib("stdlib/include/qlc.hrl").
 -export(?BACKEND).
 -export(?BACKEND).
 -export([info/1,exec/1,dump/1]).
 -export([info/1,exec/1,dump/1]).
+
 start()    -> mnesia:start().
 start()    -> mnesia:start().
 stop()     -> mnesia:stop().
 stop()     -> mnesia:stop().
 destroy()  -> [mnesia:delete_table(T)||{_,T}<-kvs:dir()], mnesia:delete_schema([node()]), ok.
 destroy()  -> [mnesia:delete_table(T)||{_,T}<-kvs:dir()], mnesia:delete_schema([node()]), ok.
@@ -13,6 +14,7 @@ leave()    -> ok.
 version()  -> {version,"KVS MNESIA"}.
 version()  -> {version,"KVS MNESIA"}.
 dir()      -> [{table,T}||T<-mnesia:system_info(local_tables)].
 dir()      -> [{table,T}||T<-mnesia:system_info(local_tables)].
 join([])   -> mnesia:start(), mnesia:change_table_copy_type(schema, node(), disc_copies), initialize();
 join([])   -> mnesia:start(), mnesia:change_table_copy_type(schema, node(), disc_copies), initialize();
+
 join(Node) ->
 join(Node) ->
     mnesia:start(),
     mnesia:start(),
     mnesia:change_config(extra_db_nodes, [Node]),
     mnesia:change_config(extra_db_nodes, [Node]),
@@ -61,7 +63,6 @@ just_one(Fun) ->
         R when is_list(R) -> {ok,R};
         R when is_list(R) -> {ok,R};
         Error -> Error end.
         Error -> Error end.
 
 
-%add(Record) -> mnesia:activity(context(),fun() -> kvs:append(Record,#kvs{mod=?MODULE}) end).
 context() -> application:get_env(kvs,mnesia_context,async_dirty).
 context() -> application:get_env(kvs,mnesia_context,async_dirty).
 
 
 dump() -> dump([ N || #table{name=N} <- kvs:tables() ]), ok.
 dump() -> dump([ N || #table{name=N} <- kvs:tables() ]), ok.

+ 2 - 0
src/stores/kvs_rocks.erl

@@ -44,6 +44,7 @@ o(Key,FK,Dir,Fx) ->
   Infotech = fun (F,K,H,V,Acc) when binary_part(K,{0,S}) == FK -> {F(H,Dir),H,[V|Acc]};
   Infotech = fun (F,K,H,V,Acc) when binary_part(K,{0,S}) == FK -> {F(H,Dir),H,[V|Acc]};
                  (_,K,H,V,Acc) -> close_it(H),
                  (_,K,H,V,Acc) -> close_it(H),
                                   throw({ok,fd(K),bt(V),[bt(A1)||A1<-Acc]}) end,
                                   throw({ok,fd(K),bt(V),[bt(A1)||A1<-Acc]}) end,
+
   Privat = fun(F,K,V,H) -> case F(H,prev) of
   Privat = fun(F,K,V,H) -> case F(H,prev) of
       {ok,K1,V1} when binary_part(K,{0,S}) == FK -> {{ok,K1,V1},H,[V]};
       {ok,K1,V1} when binary_part(K,{0,S}) == FK -> {{ok,K1,V1},H,[V]};
       {ok,K1,V1} -> Infotech(F,K1,H,V1,[]);
       {ok,K1,V1} -> Infotech(F,K1,H,V1,[]);
@@ -58,6 +59,7 @@ o(Key,FK,Dir,Fx) ->
           (_,{{error,_},H,Acc}) -> {{ok,[],[]},H,Acc};
           (_,{{error,_},H,Acc}) -> {{ok,[],[]},H,Acc};
           (F,{R,O})             -> F(R,O);
           (F,{R,O})             -> F(R,O);
           (F,H)                 -> F(H) end,
           (F,H)                 -> F(H) end,
+
   catch case lists:foldl(It, {ref(),[]}, Fx) of
   catch case lists:foldl(It, {ref(),[]}, Fx) of
     {{ok,K,Bin},_,A}  -> {ok,fd(K), bt(Bin),[bt(A1)||A1<-A]};
     {{ok,K,Bin},_,A}  -> {ok,fd(K), bt(Bin),[bt(A1)||A1<-A]};
     {{ok,K,Bin},_}    -> {ok,fd(K), bt(Bin),[]};
     {{ok,K,Bin},_}    -> {ok,fd(K), bt(Bin),[]};