Current section
Files
Jump to
Current section
Files
src/glearray.erl
-module(glearray).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
-export([new/0, from_list/1, to_list/1, length/1, at/2, set/3, push/2, insert/3, iterate/1]).
-export_type([array/1]).
-type array(FJV) :: any() | {gleam_phantom, FJV}.
-spec new() -> array(any()).
new() ->
glearray_ffi:new().
-spec from_list(list(FJY)) -> array(FJY).
from_list(List) ->
erlang:list_to_tuple(List).
-spec to_list(array(FKB)) -> list(FKB).
to_list(Array) ->
erlang:tuple_to_list(Array).
-spec length(array(any())) -> integer().
length(Array) ->
erlang:tuple_size(Array).
-spec is_valid_index(array(any()), integer()) -> boolean().
is_valid_index(Array, Index) ->
(Index >= 0) andalso (Index < erlang:tuple_size(Array)).
-spec at(array(FKG), integer()) -> {ok, FKG} | {error, nil}.
at(Array, Index) ->
case is_valid_index(Array, Index) of
true ->
{ok, glearray_ffi:at(Array, Index)};
false ->
{error, nil}
end.
-spec set(array(FKM), integer(), FKM) -> {ok, array(FKM)} | {error, nil}.
set(Array, Index, Value) ->
case is_valid_index(Array, Index) of
true ->
{ok, glearray_ffi:set(Array, Index, Value)};
false ->
{error, nil}
end.
-spec push(array(FKW), FKW) -> array(FKW).
push(Array, Value) ->
erlang:append_element(Array, Value).
-spec insert(array(FKZ), integer(), FKZ) -> {ok, array(FKZ)} | {error, nil}.
insert(Array, Index, Value) ->
case (Index >= 0) andalso (Index =< erlang:tuple_size(Array)) of
true ->
{ok, glearray_ffi:insert(Array, Index, Value)};
false ->
{error, nil}
end.
-spec iterate(array(FLH)) -> gleam@iterator:iterator(FLH).
iterate(Array) ->
gleam@iterator:unfold(0, fun(Index) -> case at(Array, Index) of
{ok, Element} ->
{next, Element, Index + 1};
{error, _} ->
done
end end).