-module(sparklinekit@internal@scale).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/sparklinekit/internal/scale.gleam").
-export([round_to_int/1, clamp_int/3, clamp_finite/1, min_max/1, unit/3]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-file("src/sparklinekit/internal/scale.gleam", 88).
?DOC(false).
-spec round_to_int(float()) -> integer().
round_to_int(Value) ->
erlang:round(Value).
-file("src/sparklinekit/internal/scale.gleam", 93).
?DOC(false).
-spec clamp_int(integer(), integer(), integer()) -> integer().
clamp_int(Value, Lo, Hi) ->
case Value < Lo of
true ->
Lo;
false ->
case Value > Hi of
true ->
Hi;
false ->
Value
end
end.
-file("src/sparklinekit/internal/scale.gleam", 25).
?DOC(false).
-spec clamp_finite(float()) -> float().
clamp_finite(Value) ->
case Value > 1.0e300 of
true ->
1.0e300;
false ->
case Value < (+0.0 - 1.0e300) of
true ->
+0.0 - 1.0e300;
false ->
Value
end
end.
-file("src/sparklinekit/internal/scale.gleam", 42).
?DOC(false).
-spec min_max(list(float())) -> {float(), float()}.
min_max(Values) ->
case Values of
[] ->
{+0.0, +0.0};
[Head | Rest] ->
Safe_head = clamp_finite(Head),
gleam@list:fold(
Rest,
{Safe_head, Safe_head},
fun(Acc, Value) ->
Safe_value = clamp_finite(Value),
{Lo, Hi} = Acc,
New_lo = case Safe_value < Lo of
true ->
Safe_value;
false ->
Lo
end,
New_hi = case Safe_value > Hi of
true ->
Safe_value;
false ->
Hi
end,
{New_lo, New_hi}
end
)
end.
-file("src/sparklinekit/internal/scale.gleam", 72).
?DOC(false).
-spec unit(float(), float(), float()) -> float().
unit(Value, Min, Max) ->
Safe_value = clamp_finite(Value),
Safe_min = clamp_finite(Min),
Safe_max = clamp_finite(Max),
Span = Safe_max - Safe_min,
case Span =< +0.0 of
true ->
0.5;
false ->
case Span of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> (Safe_value - Safe_min) / Gleam@denominator
end
end.