diff options
Diffstat (limited to 'src/jlib.erl')
-rw-r--r-- | src/jlib.erl | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/jlib.erl b/src/jlib.erl index 096ef4012..939baae84 100644 --- a/src/jlib.erl +++ b/src/jlib.erl @@ -38,8 +38,8 @@ -export([tolower/1, term_to_base64/1, base64_to_term/1, decode_base64/1, encode_base64/1, ip_to_list/1, atom_to_binary/1, binary_to_atom/1, tuple_to_binary/1, - l2i/1, i2l/1, i2l/2, queue_drop_while/2, - expr_to_term/1, term_to_expr/1]). + l2i/1, i2l/1, i2l/2, expr_to_term/1, term_to_expr/1, + queue_drop_while/2, queue_foldl/3, queue_foldr/3, queue_foreach/2]). %% The following functions are used by gen_iq_handler.erl for providing backward %% compatibility and must not be used in other parts of the code @@ -974,3 +974,33 @@ queue_drop_while(F, Q) -> empty -> Q end. + +-spec queue_foldl(fun((term(), T) -> T), T, ?TQUEUE) -> T. +queue_foldl(F, Acc, Q) -> + case queue:out(Q) of + {{value, Item}, Q1} -> + Acc1 = F(Item, Acc), + queue_foldl(F, Acc1, Q1); + {empty, _} -> + Acc + end. + +-spec queue_foldr(fun((term(), T) -> T), T, ?TQUEUE) -> T. +queue_foldr(F, Acc, Q) -> + case queue:out_r(Q) of + {{value, Item}, Q1} -> + Acc1 = F(Item, Acc), + queue_foldr(F, Acc1, Q1); + {empty, _} -> + Acc + end. + +-spec queue_foreach(fun((_) -> _), ?TQUEUE) -> ok. +queue_foreach(F, Q) -> + case queue:out(Q) of + {{value, Item}, Q1} -> + F(Item), + queue_foreach(F, Q1); + {empty, _} -> + ok + end. |