defmodule FDS.ArrayList do defstruct [:ral] def new() do %__MODULE__{ral: :fds_ralist.new()} end end defimpl Collectable, for: FDS.ArrayList do def into(%FDS.ArrayList{ral: ral}) do {ral, &do_into/2} end defp do_into(_ral, :halt), do: :ok defp do_into(ral, :done), do: %FDS.ArrayList{ral: ral} defp do_into(ral, {:cont, item}), do: :fds_ralist.cons(item, ral) end defimpl Enumerable, for: FDS.ArrayList do def reduce(%FDS.ArrayList{ral: ral}, acc, fun) do {:done, :fds_ralist.foldl(fun, acc, ral)} end def count(%FDS.ArrayList{ral: ral}), do: :fds_ralist.count(ral) def member?(%FDS.ArrayList{}, _item), do: {:error, @for} def slice(%FDS.ArrayList{}), do: {:error, @for} end