# 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 get(self, index), to: Data.Array.Standard defdelegate get!(self, index), to: Data.Array.Standard defdelegate set(self, index, value), to: Data.Array.Standard end