Current section

Files

Jump to
utility src counter.erl
Raw

src/counter.erl

%% -------------------------------------------------------
%% @doc 计数器
%%
%% -------------------------------------------------------
-module(counter).
-export([create/0, init/1, init/2]).
-export([up/1, info/1, info/0]).
-define(ets_name, sys_counter).
create() ->
ensure_ets().
%% -> ok | ignore
init(Key) ->
init(Key, 1).
init(Key, InitVal) when is_integer(InitVal) ->
ensure_ets(),
case ets:lookup(?ets_name, Key) of
[] ->
ets:insert(?ets_name, {Key, InitVal}),
ok;
_ ->
ignore
end.
up(Key) ->
ets:update_counter(?ets_name, Key, 1).
info(Key) ->
case ets:lookup(?ets_name, Key) of
[{_, Value} | _] ->
Value;
[] ->
undefined
end.
info() ->
ets:tab2list(?ets_name).
%% -----------------------------------
%% 内部私有函数
%%
ensure_ets() ->
case ets:info(?ets_name) of
undefined ->
ets:new(?ets_name, [named_table, public, set, {write_concurrency, true}]);
_ ->
ignore
end.