diff options
Diffstat (limited to 'lib/data/data.ex')
-rw-r--r-- | lib/data/data.ex | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/data/data.ex b/lib/data/data.ex index 428957c..c2c659d 100644 --- a/lib/data/data.ex +++ b/lib/data/data.ex @@ -1,6 +1,13 @@ defmodule SData do @moduledoc """ Utility functions + + Compare functions are functions that compares stored items and provides a total order. + They must return: + - `:after` if the first argument is more recent + - `:duplicate` if the two items are the same + - `:before` if the first argument is older + These functions must only return :duplicate for equal items. """ @doc """ @@ -11,4 +18,32 @@ defmodule SData do :crypto.hash(algo, (:erlang.term_to_binary term)) end + @doc""" + Compare function for arbitrary terms using the Erlang order + """ + def cmp_term(a, b) do + cond do + a > b -> :after + a < b -> :before + a == b -> :duplicate + end + end + + @doc""" + Compare function for timestamped strings + """ + def cmp_ts_str({ts1, str1}, {ts2, str2}) do + cond do + ts1 > ts2 -> :after + ts1 < ts2 -> :before + str1 > str2 -> :after + str1 < str2 -> :before + true -> :duplicate + end + end + + @doc""" + Merge function for nils + """ + def merge_true(true, true), do: true end |