erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 
 
 

51 řádky
1.3 KiB

-module(enlfq).
-on_load(load_nif/0).
-define(NOT_LOADED, not_loaded(?LINE)).
%% API exports
-export([new/0, push/2, pop/1]).
%%====================================================================
%% API functions
%%====================================================================
-spec(new() -> {ok, QueueRef :: reference()} | badarg | {error, Reason :: binary()}).
new() ->
?NOT_LOADED.
-spec(push(QueueRef :: reference(), Data :: any()) ->
true | {error, Reason :: binary()}).
push(_QueueRef, _Data) ->
?NOT_LOADED.
-spec(pop(QueueRef :: reference()) ->
{ok, Data :: any()} | empty | {error, Reason :: binary()}).
pop(_QueueRef) ->
?NOT_LOADED.
%%====================================================================
%% Internal functions
%%====================================================================
%% nif functions
load_nif() ->
SoName = get_priv_path(?MODULE),
io:format(<<"Loading library: ~p ~n">>, [SoName]),
ok = erlang:load_nif(SoName, 0).
get_priv_path(File) ->
case code:priv_dir(?MODULE) of
{error, bad_name} ->
Ebin = filename:dirname(code:which(?MODULE)),
filename:join([filename:dirname(Ebin), "priv", File]);
Dir ->
filename:join(Dir, File)
end.
not_loaded(Line) ->
erlang:nif_error({not_loaded, [{module, ?MODULE}, {line, Line}]}).