Current section
Files
Jump to
Current section
Files
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
@insensitive 1
@sensitive 0
def compare(a, b) do
compare(a, b, @insensitive)
end
def compare(a, b, casing) when is_integer(casing) do
nif_cmp(a, b, casing)
end
def compare(a, b, options) when is_list(options) do
casing = casing_from_options(options)
nif_cmp(a, b, casing)
end
defp nif_cmp(a, b, casing) do
case cmp(a, b, casing) do
1 -> :gt
0 -> :eq
-1 -> :lt
end
end
defp cmp(_a, _b, _casing) do
exit(:nif_library_not_loaded)
end
defp casing_from_options(options) do
case Keyword.get(options, :casing, :insensitive) do
:insensitive -> @insensitive
:sensitive -> @sensitive
_ -> @insensitive
end
end
end