|
@@ -63,7 +63,7 @@ drop(#reader{args=N,feed=Feed,cache=I}=C) when N > 0 ->
|
|
|
lists:seq(0,N)),
|
|
|
C#reader{cache=bt(element(1,element(2,Term)))}.
|
|
|
|
|
|
-take(#reader{args=N,feed=Feed,cache={T,O}}=C) ->
|
|
|
+take(#reader{args=N,feed=Feed,cache={T,O},dir=0}=C) ->
|
|
|
Key = list_to_binary(lists:concat(["/",kvs_rocks:format(Feed)])),
|
|
|
{ok,I} = rocksdb:iterator(ref(), []),
|
|
|
{ok,K,BERT} = rocksdb:iterator_move(I, {seek,feed_key({T,O},Feed)}),
|
|
@@ -71,7 +71,21 @@ take(#reader{args=N,feed=Feed,cache={T,O}}=C) ->
|
|
|
case {Res,length(Res) < N + 1 orelse N == -1} of
|
|
|
{[],_} -> C#reader{args=[],cache=[]};
|
|
|
{[H|X],false} -> C#reader{args=X,cache={e(1,H),e(2,H)}};
|
|
|
- {[H|X],true} -> C#reader{args=Res,cache=[]} end.
|
|
|
+ {[H|X],true} -> C#reader{args=Res,cache={e(1,H),e(2,H)}} end;
|
|
|
+
|
|
|
+take(#reader{args=N,feed=Feed,cache={T,O},dir=1}=C) ->
|
|
|
+ Key = list_to_binary(lists:concat(["/",kvs_rocks:format(Feed)])),
|
|
|
+ {ok,I} = rocksdb:iterator(ref(), []),
|
|
|
+ {ok,K,BERT} = rocksdb:iterator_move(I, {seek,feed_key({T,O},Feed)}),
|
|
|
+ Res = kvs_rocks:prev(I,Key,size(Key),K,BERT,[],case N of -1 -> -1; J -> J + 1 end,0),
|
|
|
+ case {Res,length(Res) < N + 1 orelse N == -1} of
|
|
|
+ {[],_} -> C#reader{args=[],cache=[]};
|
|
|
+ {[H|X],false} -> C#reader{args=X,cache={e(1,H),e(2,H)}};
|
|
|
+ {[H|X],true} -> C#reader{args=Res,cache={e(1,H),e(2,H)}} end;
|
|
|
+
|
|
|
+take(X) ->
|
|
|
+ io:format("ERROR: ~p~n",[X]),
|
|
|
+ X.
|
|
|
|
|
|
% new, save, load, up, down, top, bot
|
|
|
|