54 lines
1.2 KiB
Erlang
54 lines
1.2 KiB
Erlang
-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).
|