blob: 9b16775983076fe738f6ae2100b39a55846396d0 [file] [log] [blame]
%% @doc
%% Dummy module for the NIF implementation in {@link /c_src/hyper_carray.c}.
-module (hyper_carray).
-on_load(load_shared_obj/0).
-behaviour(hyper_register).
-export([new/1,
set/3,
max_merge/1,
max_merge/2,
reduce_precision/2,
bytes/1,
register_sum/1,
zero_count/1,
encode_registers/1,
decode_registers/2,
compact/1]).
% Pull in the NIF.
load_shared_obj() ->
EbinDir = filename:dirname(code:which(?MODULE)),
AppPath = filename:dirname(EbinDir),
Path = filename:join([AppPath, "priv", "hyper_carray"]),
ok = erlang:load_nif(Path, 0).
% Nothing to do.
compact(Handle) ->
Handle.
% Delegate to generalization.
max_merge(HandleA, HandleB) ->
max_merge([HandleA, HandleB]).
% Returns badarg on:
% - Precision is not a positive integer
new(_Precision) ->
erlang:nif_error(nif_not_loaded).
% Returns badarg on:
% - Index is not a positive integer
% - Value not a positive integer
% - Handle is not a hyper_carray
% Value is assumed to fit into one byte, that is within [0, 255]
set(_Index, _Value, _Handle) ->
erlang:nif_error(nif_not_loaded).
% Returns badarg on:
% - Argument is not a list
% - Argument is a list of less than 2 elements
% - An element is not a hyper_carray
% - The elements lack uniform precision
% - Failure to obtain a list element (enif_get_list_cell)
max_merge(_Handles) ->
erlang:nif_error(nif_not_loaded).
reduce_precision(_NewP, _Handle) ->
throw(not_implemented).
% Returns badarg on:
% - Handle is not a hyper_carray
register_sum(_Handle) ->
erlang:nif_error(nif_not_loaded).
% Returns badarg on:
% - Handle is not a hyper_carray
zero_count(_Handle) ->
erlang:nif_error(nif_not_loaded).
% Returns badarg on:
% - Handle is not a hyper_carray
encode_registers(_Handle) ->
erlang:nif_error(nif_not_loaded).
% Returns badarg on:
% - First argument is not a binary
% - Precision is not a positive integer
decode_registers(_Binary, _Precision) ->
erlang:nif_error(nif_not_loaded).
% Returns badarg on:
% - Handle is not a hyper_carray
bytes(_Handle) ->
erlang:nif_error(nif_not_loaded).