Packages

Elixir implementation of the Cldr Collation algorithm, providing language-aware string sorting and comparison. An opt-in NIF is provided for high performance collating.

Current section

Files

Jump to
ex_cldr_collation lib cldr_collation.ex
Raw

lib/cldr_collation.ex

defmodule Cldr.Collation do
@on_load :init
@so_path './priv/ucol'
def init do
num_scheds = :erlang.system_info(:schedulers)
:ok = :erlang.load_nif(@so_path, num_scheds)
end
def cmp(a, b, options \\ []) do
casing = casing_from_options(options)
ucol(a, b, casing)
end
def compare(a, b, options \\ []) do
casing = casing_from_options(options)
case cmp(a, b, casing) do
1 -> :gt
0 -> :eq
-1 -> :lt
end
end
def ucol(_a, _b, _casing) do
exit(:nif_library_not_loaded)
end
defp casing_from_options(options) do
case Keyword.get(options, :casing, :insensitive) do
:insensitive -> 1
:sensitive -> 0
_ -> 1
end
end
end