-module(glat@util). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([int_power_check/2, int_power/2, gcd/2]). -file("/home/benjamin/building/gleam/glatv1/src/glat/util.gleam", 22). -spec do_int_power(integer(), integer(), integer()) -> integer(). do_int_power(Acc, Base, Exp) -> case Exp of 1 -> Acc * Base; _ -> do_int_power(Acc * Base, Base, Exp - 1) end. -file("/home/benjamin/building/gleam/glatv1/src/glat/util.gleam", 7). -spec int_power_check(integer(), integer()) -> {ok, integer()} | {error, nil}. int_power_check(Base, Exponent) -> case Exponent of _ when Exponent < 0 -> {error, nil}; 0 -> {ok, 1}; 1 -> {ok, Base}; 2 -> {ok, Base * Base}; _ -> {ok, do_int_power(1, Base, Exponent)} end. -file("/home/benjamin/building/gleam/glatv1/src/glat/util.gleam", 18). -spec int_power(integer(), integer()) -> integer(). int_power(Base, Exponent) -> _pipe = int_power_check(Base, Exponent), gleam@result:unwrap(_pipe, 0). -file("/home/benjamin/building/gleam/glatv1/src/glat/util.gleam", 29). -spec gcd(integer(), integer()) -> integer(). gcd(A, B) -> case {A, B} of {_, 0} -> gleam@int:absolute_value(A); {0, _} -> gleam@int:absolute_value(B); {_, _} -> gcd(B, case B of 0 -> 0; Gleam@denominator -> A rem Gleam@denominator end) end.