add feed_var/3, join/1

This commit is contained in:
Feng Lee 2015-05-06 01:00:07 +08:00
parent 201b7c414a
commit 0dd046840d
1 changed files with 25 additions and 1 deletions

View File

@ -32,7 +32,7 @@
-export([match/2, validate/1, triples/1, words/1, wildcard/1]). -export([match/2, validate/1, triples/1, words/1, wildcard/1]).
-export([is_queue/1, systop/1]). -export([join/1, feed_var/3, is_queue/1, systop/1]).
%-type type() :: static | dynamic. %-type type() :: static | dynamic.
@ -187,3 +187,27 @@ systop(Name) when is_atom(Name) ->
systop(Name) when is_binary(Name) -> systop(Name) when is_binary(Name) ->
list_to_binary(["$SYS/brokers/", atom_to_list(node()), "/", Name]). list_to_binary(["$SYS/brokers/", atom_to_list(node()), "/", Name]).
-spec feed_var(binary(), binary(), binary()) -> binary().
feed_var(Var, Val, Topic) ->
feed_var(Var, Val, words(Topic), []).
feed_var(_Var, _Val, [], Acc) ->
join(lists:reverse(Acc));
feed_var(Var, Val, [Var|Words], Acc) ->
feed_var(Var, Val, Words, [Val|Acc]);
feed_var(Var, Val, [W|Words], Acc) ->
feed_var(Var, Val, Words, [W|Acc]).
-spec join(list(binary())) -> binary().
join([]) ->
<<>>;
join([W]) ->
bin(W);
join(Words) ->
{_, Bin} =
lists:foldr(fun(W, {true, Tail}) ->
{false, <<W/binary, Tail/binary>>};
(W, {false, Tail}) ->
{false, <<W/binary, "/", Tail/binary>>}
end, {true, <<>>}, [bin(W) || W <- Words]),
Bin.