Array backend.
diff --git a/src/hyper_array.erl b/src/hyper_array.erl
new file mode 100644
index 0000000..5750b25
--- /dev/null
+++ b/src/hyper_array.erl
@@ -0,0 +1,26 @@
+-module(hyper_array).
+-export([new/1, get/2, set/3, fold/3]).
+-behaviour(hyper_register).
+
+new(P) ->
+ M = trunc(math:pow(2, P)),
+ array:new([{size, M}, {fixed, true}, {default, 0}]).
+
+get(Index, A) ->
+ case catch array:get(Index, A) of
+ {'EXIT', {badarg, _}} ->
+ error_logger:info_msg("bad: index: ~p~n ~p~n", [Index, A]);
+ 0 ->
+ undefined;
+ Value ->
+ {ok, Value}
+ end.
+
+
+set(Index, Value, A) ->
+ array:set(Index, Value, A).
+
+
+
+fold(F, Acc, A) ->
+ array:sparse_foldl(F, Acc, A).
diff --git a/src/hyper_register.erl b/src/hyper_register.erl
new file mode 100644
index 0000000..e028f37
--- /dev/null
+++ b/src/hyper_register.erl
@@ -0,0 +1,15 @@
+-module(hyper_register).
+
+-callback new(P :: hyper:precision()) -> hyper:registers().
+-callback get(Index :: integer(), hyper:registers()) -> {ok, integer()} | undefined.
+-callback set(Index :: integer(), Value :: integer(),
+ hyper:registers()) -> hyper:registers().
+-callback fold(fun(), Acc :: any(), hyper:registers()) -> Acc :: any().
+
+
+
+
+
+
+
+