Packages
ex_cldr_units
3.16.1
3.20.5
3.20.4
3.20.3
3.20.2
3.20.1
3.20.0
3.19.2
3.19.1
3.19.0
3.18.1
3.18.0
3.17.2
3.17.1
3.17.0
3.16.5
3.16.4
3.16.3
3.16.2
3.16.1
3.16.0
3.15.0
3.14.0
3.13.3
3.13.2
3.13.1
3.13.0
3.12.2
3.12.1
3.12.0
3.11.0
3.10.0
3.9.2
3.9.1
3.9.0
3.8.0
3.8.0-rc.2
3.8.0-rc.1
3.8.0-rc.0
3.7.1
3.7.0
3.6.0
3.5.3
3.5.2
3.5.1
3.5.0
3.5.0-rc.1
3.5.0-rc.0
3.4.0
3.4.0-rc.0
3.3.1
3.3.0
3.3.0-rc.0
3.2.1
3.2.0
3.1.2
3.1.1
3.1.0
3.0.1
3.0.0
3.0.0-rc.0
2.8.1
2.8.0
2.7.0
2.6.1
2.6.0
2.5.3
2.5.2
2.5.1
2.5.0
2.4.0
2.3.3
2.3.2
retired
2.3.1
2.3.0
2.2.0
2.1.0
2.0.0
1.3.0
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
retired
1.0.1
retired
1.0.0
retired
1.0.0-rc.0
retired
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.1
0.2.0
0.1.3
0.1.2
0.1.1
0.1.0
Unit formatting (volume, area, length, ...), conversion and arithmetic functions based upon the Common Locale Data Repository (CLDR).
Current section
Files
Jump to
Current section
Files
lib/cldr/protocol/enumerate.ex
defimpl Enumerable, for: Cldr.Unit.Range do
@impl Enumerable
def count(%{first: first, last: last}) do
count =
cond do
first.value >= 0 and last.value >= 0 ->
last.value - first.value + 1
first.value < 0 and last.value >= 0 ->
abs(first.value) + last.value + 1
first.value >= 0 and last.value < 0 ->
first.value + abs(last.value) + 1
end
{:ok, count}
end
@impl Enumerable
def member?(range, %Cldr.Unit{} = unit) do
case Cldr.Unit.convert(unit, range.first.unit) do
{:ok, converted} ->
{:ok, converted.value >= range.first.value and converted.value <= range.last.value}
_other ->
{:ok, false}
end
end
# TODO implement this properly
@impl Enumerable
def slice(_range) do
{:error, __MODULE__}
end
@impl Enumerable
def reduce(range, {:cont, acc}, fun) do
if range.first.value <= range.last.value do
next = Map.put(range.first, :value, range.first.value + 1)
new_range = Map.put(range, :first, next)
reduce(new_range, fun.(range.first, acc), fun)
else
{:done, acc}
end
end
def reduce(_enum, {:halt, acc}, _fun) do
{:halted, acc}
end
def reduce(enum, {:suspend, acc}, fun) do
{:suspended, acc, &reduce(enum, &1, fun)}
end
end