erlang各种有用的函数包括一些有用nif封装,还有一些性能测试case。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.2 KiB

5 years ago
  1. -module(nifArray).
  2. -on_load(init/0).
  3. -export([
  4. new/1
  5. , get/2
  6. , put/3
  7. , test/1
  8. , test1/1
  9. ]).
  10. -type nifArray() :: reference().
  11. init() ->
  12. SoName =
  13. case code:priv_dir(?MODULE) of
  14. {error, _} ->
  15. case code:which(?MODULE) of
  16. Filename when is_list(Filename) ->
  17. filename:join([filename:dirname(Filename), "../priv", "nifArray"]);
  18. _ ->
  19. filename:join("../priv", "nifArray")
  20. end;
  21. Dir ->
  22. filename:join(Dir, "nifArray")
  23. end,
  24. erlang:load_nif(SoName, 0).
  25. -spec new(Size :: integer()) -> nifArray().
  26. new(_Size) ->
  27. erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
  28. -spec get(Ref :: nifArray(), Index :: integer()) -> term().
  29. get(_Ref, _Index) ->
  30. erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
  31. -spec put(Ref :: nifArray(), Index :: integer(), Value :: term()) -> term().
  32. put(_Ref, _Index, _Value) ->
  33. erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
  34. test(Value) ->
  35. erlang:nif_error({nif_not_loaded, module, ?MODULE, line, ?LINE}).
  36. test1(Value) ->
  37. Bin = term_to_binary(Value),
  38. Term = binary_to_term(Bin).