-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}).