Current section

Files

Jump to
datastructures lib data array standard.ex
Raw

lib/data/array/standard.ex

# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# Version 2, December 2004
#
# DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
# TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.
defmodule Data.Array.Standard do
defstruct [:array]
def new do
%__MODULE__{array: :array.new(default: nil)}
end
def new([{ index, _ } | _] = list) when is_integer(index) do
%__MODULE__{array: :array.from_orddict(list, nil)}
end
def new(enum_or_array) do
if :array.is_array(enum_or_array) do
%__MODULE__{array: enum_or_array}
else
%__MODULE__{array: case Data.to_list(enum_or_array) do
[] ->
:array.new(default: nil)
[{ index, _ } | _] = list when is_integer(index) ->
:array.from_orddict(list, nil)
list ->
:array.from_list(list, nil)
end}
end
end
def to_list(%__MODULE__{array: self}) do
:array.to_list(self)
end
end
defimpl Data.Array, for: Data.Array.Standard do
defdelegate fetch(self, index), to: Data.Array.Standard
defdelegate set(self, index, value), to: Data.Array.Standard
end