summaryrefslogtreecommitdiff
path: root/src/lqueue.erl
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2011-10-11 18:02:04 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2011-10-11 18:02:04 +0100
commitb558d28a63ba9c84e4d33dcf4775692b894f3ff0 (patch)
tree4a70b732b4237dec59e0bb370a56ce386bef1af1 /src/lqueue.erl
parent2e0752768e98f771aed71bd711805e2c57fa2b56 (diff)
downloadrabbitmq-server-git-b558d28a63ba9c84e4d33dcf4775692b894f3ff0.tar.gz
Add peek and peek_r to lqueue, and use them in needs_timeout. Whilst this is better, it's still O(N) per msg, so we shouldn't actually be doing even this...
Diffstat (limited to 'src/lqueue.erl')
-rw-r--r--src/lqueue.erl10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/lqueue.erl b/src/lqueue.erl
index 4a8164f6db..f07eec1873 100644
--- a/src/lqueue.erl
+++ b/src/lqueue.erl
@@ -17,7 +17,7 @@
-module(lqueue).
-export([new/0, is_empty/1, len/1, in/2, in_r/2, out/1, out_r/1, join/2,
- foldl/3, foldr/3, from_list/1, to_list/1]).
+ foldl/3, foldr/3, from_list/1, to_list/1, peek/1, peek_r/1]).
-define(QUEUE, queue).
@@ -42,6 +42,8 @@
-spec(foldr/3 :: (fun ((value(), B) -> B), B, ?MODULE()) -> B).
-spec(from_list/1 :: ([value()]) -> ?MODULE()).
-spec(to_list/1 :: (?MODULE()) -> [value()]).
+-spec(peek(?MODULE) -> 'empty' | {'value',value()}).
+-spec(peek_r(?MODULE) -> 'empty' | {'value',value()}).
-endif.
@@ -87,3 +89,9 @@ foldr(Fun, Init, Q) ->
len({L, _Q}) ->
L.
+
+peek({0, _Q}) -> empty;
+peek({_L, Q}) -> ?QUEUE:peek(Q).
+
+peek_r({0, _Q}) -> empty;
+peek_r({_L, Q}) -> ?QUEUE:peek_r(Q).