diff --git a/c_src/binaryAddr/binaryAddr.c b/c_src/binaryAddr/binaryAddr.c new file mode 100644 index 0000000..8c4ba9d --- /dev/null +++ b/c_src/binaryAddr/binaryAddr.c @@ -0,0 +1,15 @@ +#include "erl_nif.h" +#include + +static ERL_NIF_TERM getBinAddr(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) { + ErlNifBinary bin; + enif_inspect_binary(env, argv[0], &bin); + char buf[256]; + sprintf(buf, "bin: size=%zu, ptr=%p", bin.size, bin.data); + return enif_make_string(env, buf, ERL_NIF_LATIN1); +} +static ErlNifFunc nif_funcs[] = { + {"getBinAddr", 1, getBinAddr} +}; + +ERL_NIF_INIT(binaryAddr, nif_funcs, NULL, NULL, NULL, NULL); \ No newline at end of file diff --git a/c_src/binaryAddr/rebar.config b/c_src/binaryAddr/rebar.config new file mode 100644 index 0000000..29b3607 --- /dev/null +++ b/c_src/binaryAddr/rebar.config @@ -0,0 +1,7 @@ +{port_specs, [ + {"../../priv/binaryAddr.so", ["*.c"]} +]}. + + + + diff --git a/src/nifSrc/binaryAddr/binaryAddr.erl b/src/nifSrc/binaryAddr/binaryAddr.erl new file mode 100644 index 0000000..c6aca8e --- /dev/null +++ b/src/nifSrc/binaryAddr/binaryAddr.erl @@ -0,0 +1,23 @@ +-module(binaryAddr). + +-export([getBinAddr/1]). + +-on_load(init/0). + +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", "binaryAddr"]); + _ -> + filename:join("../priv", "binaryAddr") + end; + Dir -> + filename:join(Dir, "binaryAddr") + end, + erlang:load_nif(SoName, 0). + +getBinAddr(_Bin) -> + erlang:error({"NIF not implemented in nif_test at line", ?LINE}). \ No newline at end of file diff --git a/src/testCase/utTestPerformance.erl b/src/testCase/utTestPerformance.erl index e0e7871..ea9a716 100644 --- a/src/testCase/utTestPerformance.erl +++ b/src/testCase/utTestPerformance.erl @@ -279,4 +279,18 @@ cddo(N, Bin, Fun) -> nifHashb:Fun(Bin, Bin), cddo(N - 1, Bin, Fun). +cc1(0, A1, A2) -> + A1 / A2; +cc1(N, A1, A2) -> + A1 / A2, + cc1(N - 1, A1, A2). + +cc2(0, A1, A2) -> + A1 div A2; +cc2(N, A1, A2) -> + A1 div A2, + cc2(N - 1, A1, A2). + + +