Skip to content

Updated to Elixir 1.0.0 #6

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/ebin
/deps
/_build
erl_crash.dump
4 changes: 2 additions & 2 deletions lib/data/dictionary.ex
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,10 @@ defimpl Data.Dictionary, for: List do
end

def keys(self) do
lc { key, _ } inlist self, do: key
for { key, _ } <- self, do: key
end

def values(self) do
lc { _, value } inlist self, do: value
for { _, value } <- self, do: value
end
end
15 changes: 12 additions & 3 deletions lib/data/dictionary/balanced_tree.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

require Record

defmodule Data.Dictionary.BalancedTree do
defrecordp :wrap, __MODULE__, dict: nil
Record.defrecordp :wrap, __MODULE__, dict: nil

def new do
wrap(dict: :gb_trees.empty)
Expand Down Expand Up @@ -61,6 +63,12 @@ defmodule Data.Dictionary.BalancedTree do
end
end

def get_and_update(me, key, fun) do
value = get(me, key)
{get, update} = fun.(value)
{get, put(me, key, update)}
end

def delete(wrap(dict: self), key) do
wrap(dict: :gb_trees.delete_any(key, self))
end
Expand Down Expand Up @@ -100,7 +108,7 @@ defmodule Data.Dictionary.BalancedTree do
end

defmodule Sequence do
defrecordp :seq, __MODULE__, iter: nil
Record.defrecordp :seq, __MODULE__, iter: nil

def new(dict) do
seq(iter: :gb_trees.iterator(dict))
Expand Down Expand Up @@ -178,7 +186,8 @@ defimpl Data.Sequenceable, for: Data.Dictionary.BalancedTree do
end

defimpl Access, for: Data.Dictionary.BalancedTree do
defdelegate access(self, key), to: Data.Dictionary.BalancedTree, as: :get
defdelegate get(self, key), to: Data.Dictionary.BalancedTree
defdelegate get_and_update(self, key, fun), to: Data.Dictionary.BalancedTree
end

defimpl Enumerable, for: Data.Dictionary.BalancedTree do
Expand Down
13 changes: 11 additions & 2 deletions lib/data/dictionary/standard.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

require Record

defmodule Data.Dictionary.Standard do
defrecordp :wrap, __MODULE__, dict: nil
Record.defrecordp :wrap, __MODULE__, dict: nil

def new do
wrap(dict: :dict.new)
Expand Down Expand Up @@ -53,6 +55,12 @@ defmodule Data.Dictionary.Standard do
end
end

def get_and_update(me, key, fun) do
value = get(me, key)
{get, update} = fun.(value)
{get, put(me, key, update)}
end

def delete(wrap(dict: self), key) do
wrap(dict: :dict.erase(key, self))
end
Expand Down Expand Up @@ -159,7 +167,8 @@ defimpl Enumerable, for: Data.Dictionary.Standard do
end

defimpl Access, for: Data.Dictionary.Standard do
defdelegate access(self, key), to: Data.Dictionary.Standard, as: :get
defdelegate get(self, key), to: Data.Dictionary.Standard
defdelegate get_and_update(self, key, fun), to: Data.Dictionary.Standard
end

defimpl Inspect, for: Data.Dictionary.Standard do
Expand Down
17 changes: 12 additions & 5 deletions lib/data/exceptions.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,22 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

defexception Data.Empty, message: "the data is empty"
defexception Data.OutOfBounds, message: "out of bounds"
defmodule Data.Empty do
defexception message: "the data is empty"
end

defmodule Data.OutOfBounds do
defexception message: "out of bounds"
end

defmodule Data.Missing do
defexception message: nil

defexception Data.Missing, key: nil, what: nil do
def message(Data.Missing[key: key]) when key != nil do
def exception(key: key) when key != nil do
"key missing: #{inspect key}"
end

def message(Data.Missing[what: what]) when what != nil do
def exception(what: what) when what != nil do
"#{inspect what} is missing"
end
end
4 changes: 3 additions & 1 deletion lib/data/queue/simple.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

require Record

defmodule Data.Queue.Simple do
@moduledoc """
A simple and performant queue.
Expand All @@ -14,7 +16,7 @@ defmodule Data.Queue.Simple do
@opaque t :: record
@type v :: any

defrecordp :queue, __MODULE__, enqueue: [], dequeue: []
Record.defrecordp :queue, __MODULE__, enqueue: [], dequeue: []

@doc """
Creates an empty queue.
Expand Down
4 changes: 3 additions & 1 deletion lib/data/queue/standard.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

require Record

defmodule Data.Queue.Standard do
defrecordp :wrap, __MODULE__, queue: nil
Record.defrecordp :wrap, __MODULE__, queue: nil

def new do
wrap(queue: :queue.new)
Expand Down
8 changes: 5 additions & 3 deletions lib/data/seq.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

require Record

defmodule Data.Seq do
@type t :: Data.Sequence.t | Data.Sequenceable.t | Data.Listable.t

Expand All @@ -20,7 +22,7 @@ defmodule Data.Seq do
end

defmodule WithIndex do
defrecordp :wrap, __MODULE__, index: 0, seq: nil
Record.defrecordp :wrap, __MODULE__, index: 0, seq: nil

alias Data.Sequence, as: S

Expand Down Expand Up @@ -537,7 +539,7 @@ defmodule Data.Seq do
def join(seq, string) do
[first | rest] = map seq, &[string, to_string(&1)]

[tl(first), rest] |> iolist_to_binary
[tl(first), rest] |> IO.iodata_to_binary
end

@spec group_by(t, (term -> term)) :: Data.Dict.t
Expand Down Expand Up @@ -572,6 +574,6 @@ defmodule Data.Seq do
{ reverse(list1), reverse(list2) }
end

def split(seq, count) when count < 0 do
def split(_seq, count) when count < 0 do
end
end
4 changes: 3 additions & 1 deletion lib/data/set/balanced_tree.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,13 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

require Record

defmodule Data.Set.BalancedTree do
@opaque t :: record
@type v :: any

defrecordp :wrap, __MODULE__, set: nil
Record.defrecordp :wrap, __MODULE__, set: nil

def new do
wrap(set: :gb_sets.new)
Expand Down
4 changes: 3 additions & 1 deletion lib/data/set/standard.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

require Record

defmodule Data.Set.Standard do
defrecordp :wrap, __MODULE__, set: nil
Record.defrecordp :wrap, __MODULE__, set: nil

def new do
wrap(set: :sets.new)
Expand Down
4 changes: 3 additions & 1 deletion lib/data/stack/simple.ex
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
#
# 0. You just DO WHAT THE FUCK YOU WANT TO.

require Record

defmodule Data.Stack.Simple do
@moduledoc """
A simple stack.
Expand All @@ -14,7 +16,7 @@ defmodule Data.Stack.Simple do
@opaque t :: record
@type v :: any

defrecordp :stack, __MODULE__, list: []
Record.defrecordp :stack, __MODULE__, list: []

@doc """
Creates an empty stack.
Expand Down
2 changes: 1 addition & 1 deletion mix.exs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ defmodule Datastructures.Mixfile do
def project do
[ app: :datastructures,
version: "0.0.1",
elixir: "~> 0.12.3",
elixir: "~> 1.0.0",
deps: deps ]
end

Expand Down