-module(utFifo).
|
|
|
|
-export([
|
|
new/1
|
|
, del/1
|
|
, in/2
|
|
, out/1
|
|
, clear/1
|
|
, size/1
|
|
]).
|
|
|
|
-spec new(Name :: atom()) -> ok | name_used.
|
|
new(Name) ->
|
|
case ets:info(Name, id) of
|
|
undefined ->
|
|
ets:new(Name, [ordered_set, public, named_table, {write_concurrency, true}]);
|
|
_ ->
|
|
name_used
|
|
end.
|
|
|
|
-spec del(Name :: atom()) -> ok.
|
|
del(Name) ->
|
|
ets:delete(Name).
|
|
|
|
-spec in(Name :: atom(), Value :: term()) -> true.
|
|
in(Name, Value) ->
|
|
ets:insert(Name, {erlang:unique_integer(), Value}).
|
|
|
|
-spec out(Name :: atom()) -> empty | Value :: term().
|
|
out(Name) ->
|
|
do_out(Name).
|
|
|
|
do_out(Name) ->
|
|
case ets:first(Name) of
|
|
'$end_of_table' ->
|
|
empty;
|
|
Key ->
|
|
case ets:take(Name, Key) of
|
|
[] ->
|
|
do_out(Name);
|
|
[{_, Value}] ->
|
|
Value
|
|
end
|
|
end.
|
|
|
|
-spec clear(Name :: atom()) -> ok.
|
|
clear(Name) ->
|
|
ets:delete_all_objects(Name).
|
|
|
|
-spec size(Name :: atom()) -> Size :: integer() | undefined.
|
|
size(Name) ->
|
|
ets:info(Name, size).
|
|
|