-module(nifHashb).
|
|
|
|
-on_load(init/0).
|
|
|
|
-export([
|
|
new/0
|
|
, get/2
|
|
, put/3
|
|
, hash1/2
|
|
, hash2/2
|
|
, hash3/2
|
|
, cb1/2
|
|
, cb2/2
|
|
, compareBin1/2
|
|
, compareBin2/2
|
|
]).
|
|
|
|
init() ->
|
|
SoName =
|
|
case code:priv_dir(?MODULE) of
|
|
{error, _} ->
|
|
case code:which(?MODULE) of
|
|
Filename when is_list(Filename) ->
|
|
filename:join([filename:dirname(Filename), "../priv", "nifHashb"]);
|
|
_ ->
|
|
filename:join("../priv", "nifHashb")
|
|
end;
|
|
Dir ->
|
|
filename:join(Dir, "nifHashb")
|
|
end,
|
|
erlang:load_nif(SoName, 0).
|
|
|
|
new() ->
|
|
erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
|
|
|
|
get(Ref, Key) ->
|
|
KeyBin = erlang:term_to_binary(Key),
|
|
Hash1 = erlang:phash2(KeyBin),
|
|
Hash2 = erlang:phash2(KeyBin, 123211111),
|
|
get(Ref, Hash1, Hash2, KeyBin).
|
|
|
|
get(Ref, Hash1, Hash2, KeyBin) ->
|
|
erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
|
|
|
|
put(Ref, Key, Value) ->
|
|
KeyBin = erlang:term_to_binary(Key),
|
|
ValueBin = erlang:term_to_binary(Value),
|
|
Hash1 = erlang:phash2(KeyBin),
|
|
Hash2 = erlang:phash2(KeyBin, 123211111),
|
|
put(Ref, Hash1, Hash2, KeyBin, ValueBin).
|
|
|
|
put(Ref, Hash1, Hash2, Key, Value) ->
|
|
erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
|
|
|
|
hash1(Term, Range) ->
|
|
erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
|
|
|
|
hash2(Term, Range) ->
|
|
erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
|
|
|
|
hash3(Term, Range) ->
|
|
erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
|
|
|
|
cb1(Term1, Term2) ->
|
|
compareBin1(term_to_binary(Term1), term_to_binary(Term2)).
|
|
|
|
cb2(Term1, Term2) ->
|
|
compareBin2(term_to_binary(Term1), term_to_binary(Term2)).
|
|
|
|
compareBin1(Bin1, Bin2) ->
|
|
erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
|
|
|
|
compareBin2(Bin1, Bin2) ->
|
|
erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
|
|
|
|
|
|
|