Browse Source

代码添加

master
SisMaker 5 years ago
parent
commit
056d229d10
4 changed files with 59 additions and 0 deletions
  1. +15
    -0
      c_src/binaryAddr/binaryAddr.c
  2. +7
    -0
      c_src/binaryAddr/rebar.config
  3. +23
    -0
      src/nifSrc/binaryAddr/binaryAddr.erl
  4. +14
    -0
      src/testCase/utTestPerformance.erl

+ 15
- 0
c_src/binaryAddr/binaryAddr.c View File

@ -0,0 +1,15 @@
#include "erl_nif.h"
#include <stdio.h>
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);

+ 7
- 0
c_src/binaryAddr/rebar.config View File

@ -0,0 +1,7 @@
{port_specs, [
{"../../priv/binaryAddr.so", ["*.c"]}
]}.

+ 23
- 0
src/nifSrc/binaryAddr/binaryAddr.erl View File

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

+ 14
- 0
src/testCase/utTestPerformance.erl View File

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

Loading…
Cancel
Save