First commit
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
-module(gmhc_counters).
|
||||
|
||||
-export([ initialize/0 ]).
|
||||
|
||||
-export([ add/1
|
||||
, add/2
|
||||
, add_read/1
|
||||
, add_read/2
|
||||
, get_value/1
|
||||
, values/0 ]).
|
||||
|
||||
counters() ->
|
||||
#{ connector => 1 }.
|
||||
|
||||
initialize() ->
|
||||
Counters = counters(),
|
||||
Size = map_size(Counters),
|
||||
CRef = counters:new(Size, []),
|
||||
put_counters(#{ref => CRef, counters => Counters}).
|
||||
|
||||
add(Counter) ->
|
||||
add(Counter, 1).
|
||||
|
||||
add(Counter, Incr) when is_integer(Incr), Incr >= 0 ->
|
||||
{CRef, Ix} = counter_ix(Counter),
|
||||
counters:add(CRef, Ix, Incr).
|
||||
|
||||
add_read(Counter) ->
|
||||
add_read(Counter, 1).
|
||||
|
||||
add_read(Counter, Incr) when is_integer(Incr), Incr >= 0 ->
|
||||
{CRef, Ix} = counter_ix(Counter),
|
||||
counters:add(CRef, Ix, Incr),
|
||||
counters:get(CRef, Ix).
|
||||
|
||||
get_value(Counter) ->
|
||||
{CRef, Ix} = counter_ix(Counter),
|
||||
counters:get(CRef, Ix).
|
||||
|
||||
values() ->
|
||||
#{ref := CRef, counters := Counters} = get_counters(),
|
||||
maps:map(fun(_,Ix) -> counters:get(CRef, Ix) end, Counters).
|
||||
|
||||
|
||||
counter_ix(Counter) ->
|
||||
#{ref := CRef, counters := #{Counter := Ix}} = get_counters(),
|
||||
{CRef, Ix}.
|
||||
|
||||
put_counters(C) ->
|
||||
persistent_term:put(?MODULE, C).
|
||||
|
||||
get_counters() ->
|
||||
persistent_term:get(?MODULE).
|
||||
Reference in New Issue
Block a user