Current section
Files
Jump to
Current section
Files
src/arr.erl
%%
%% Array with origin shift.
%%
-module(arr).
-export([new/3, get/2, set/3, size/1, lower/1, upper/1]).
-spec new(non_neg_integer(),integer(),_) -> {'arr',integer(),array:array(_)}.
new(Size, Zero, Defval) ->
{arr, Zero, array:new(Size, [{default, Defval}, {fixed, true}])}.
-spec get(integer(),{'arr',integer(),array:array(_)}) -> any().
get(Index, {arr, Zero, Arr}) ->
array:get(Zero+Index, Arr).
-spec set(integer(),_,{'arr',integer(),array:array(_)}) -> {'arr',integer(),array:array(_)}.
set(Index, Value, {arr, Zero, Arr}) ->
{arr, Zero, array:set(Zero+Index, Value, Arr)}.
-spec size({'arr',_,array:array(_)}) -> non_neg_integer().
size({arr, _Zero, Arr}) ->
array:size(Arr).
-spec lower({'arr',integer(),_}) -> integer().
lower({arr, Zero, _Arr}) ->
-Zero.
-spec upper({'arr',integer(),array:array(_)}) -> integer().
upper({arr, Zero, Arr}) ->
array:size(Arr) - Zero - 1.