Packages

An asynchronous task pool with limited concurrency

Current section

Files

Jump to
crew src crew_ffi.erl
Raw

src/crew_ffi.erl

-module(crew_ffi).
-export([identity/1, scheduler_count/0, system_time/0]).
-export([get_counter/1, set_counter/2, increment_counter/2, decrement_counter/2]).
identity(X) -> X.
scheduler_count() -> erlang:system_info(schedulers_online).
system_time() -> os:system_time(millisecond).
get_counter(Name) ->
case persistent_term:get(Name, undefined) of
undefined -> 0;
Counter -> counters:get(Counter, 1)
end.
set_counter(Name, Value) ->
case persistent_term:get(Name, undefined) of
undefined ->
Counter = counters:new(1, []),
counters:put(Counter, 1, Value),
persistent_term:put(Name, Counter);
Counter -> counters:put(Counter, 1, Value)
end.
increment_counter(Name, Incr) -> counters:add(persistent_term:get(Name), 1, Incr).
decrement_counter(Name, Decr) -> counters:sub(persistent_term:get(Name), 1, Decr).