|
@@ -79,7 +79,7 @@ take(#reader{args=N,feed=Feed,cache={T,O},dir=0}=C) -> % 1
|
|
{[],_} -> C#reader{args=[],cache=[]};
|
|
{[],_} -> C#reader{args=[],cache=[]};
|
|
{[H],A} when element(2,KK) == O -> C#reader{args=Res,pos=Last,cache={e(1,H),e(2,H)}}; % 2
|
|
{[H],A} when element(2,KK) == O -> C#reader{args=Res,pos=Last,cache={e(1,H),e(2,H)}}; % 2
|
|
{[H|X],A} when A < N + 1 orelse N == -1 -> C#reader{args=Res,cache={e(1,H),e(2,H)},pos=Last};
|
|
{[H|X],A} when A < N + 1 orelse N == -1 -> C#reader{args=Res,cache={e(1,H),e(2,H)},pos=Last};
|
|
- {[H|X],A} when A == N -> C#reader{args=[bt(BERT)|X],cache={e(1,H),e(2,H)}};
|
|
|
|
|
|
+ {[H|X],A} when A == N -> C#reader{args=[bt(BERT)|X],cache={e(1,H),e(2,H)},pos=Last};
|
|
{[H|X],_} -> C#reader{args=X,cache={e(1,H),e(2,H)}} end;
|
|
{[H|X],_} -> C#reader{args=X,cache={e(1,H),e(2,H)}} end;
|
|
|
|
|
|
% TODO: try to remove lists:reverse and abstract both branches
|
|
% TODO: try to remove lists:reverse and abstract both branches
|
|
@@ -91,11 +91,12 @@ take(#reader{args=N,feed=Feed,cache={T,O},dir=1}=C) -> % 1
|
|
{ok,K,BERT} = rocksdb:iterator_move(I, {seek,feed_key({T,O},Feed)}),
|
|
{ok,K,BERT} = rocksdb:iterator_move(I, {seek,feed_key({T,O},Feed)}),
|
|
{KK,Res} = kvs_rocks:prev2(I,Key,size(Key),K,BERT,[],case N of -1 -> -1; J -> J + 1 end,0),
|
|
{KK,Res} = kvs_rocks:prev2(I,Key,size(Key),K,BERT,[],case N of -1 -> -1; J -> J + 1 end,0),
|
|
Last = last(KK,O,'begin'),
|
|
Last = last(KK,O,'begin'),
|
|
|
|
+ io:format("Debug: ~p~n",[{KK,O,Res}]),
|
|
case {lists:reverse(Res),length(Res)} of
|
|
case {lists:reverse(Res),length(Res)} of
|
|
{[],_} -> C#reader{args=[],cache=[]};
|
|
{[],_} -> C#reader{args=[],cache=[]};
|
|
{[H],A} when element(2,KK) == O -> C#reader{args=Res,pos=Last,cache={e(1,H),e(2,H)}}; % 2
|
|
{[H],A} when element(2,KK) == O -> C#reader{args=Res,pos=Last,cache={e(1,H),e(2,H)}}; % 2
|
|
{[H|X],A} when A < N - 1 orelse N == -1 -> [HX|_] = Res, C#reader{args=Res,cache={e(1,HX),e(2,HX)},pos=Last};
|
|
{[H|X],A} when A < N - 1 orelse N == -1 -> [HX|_] = Res, C#reader{args=Res,cache={e(1,HX),e(2,HX)},pos=Last};
|
|
- {[H|X],A} when A == N -> [HX|TL] = Res, C#reader{args=[bt(BERT)|X],cache={e(1,HX),e(2,HX)}};
|
|
|
|
|
|
+ {[H|X],A} when A == N -> [HX|TL] = Res, C#reader{args=[bt(BERT)|X],cache={e(1,HX),e(2,HX)},pos=Last};
|
|
{[H|X],_} -> [HX|TL] = Res, C#reader{args=lists:reverse(TL),cache={e(1,HX),e(2,HX)}} end.
|
|
{[H|X],_} -> [HX|TL] = Res, C#reader{args=lists:reverse(TL),cache={e(1,HX),e(2,HX)}} end.
|
|
|
|
|
|
last(KK,O,Atom) ->
|
|
last(KK,O,Atom) ->
|