-module(qrkit@internal@format_info).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/qrkit/internal/format_info.gleam").
-export([format_bits/2, version_bits/1]).
-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/qrkit/internal/format_info.gleam", 41).
?DOC(false).
-spec bit_length(integer()) -> integer().
bit_length(Value) ->
case Value =:= 0 of
true ->
0;
false ->
1 + bit_length(erlang:'bsr'(Value, 1))
end.
-file("src/qrkit/internal/format_info.gleam", 48).
?DOC(false).
-spec power_of_two(integer()) -> integer().
power_of_two(Value) ->
case Value =< 0 of
true ->
1;
false ->
2 * power_of_two(Value - 1)
end.
-file("src/qrkit/internal/format_info.gleam", 27).
?DOC(false).
-spec do_bch_remainder(integer(), integer()) -> integer().
do_bch_remainder(Value, Polynomial) ->
case bit_length(Value) < bit_length(Polynomial) of
true ->
Value;
false ->
do_bch_remainder(
erlang:'bxor'(
Value,
Polynomial * power_of_two(
bit_length(Value) - bit_length(Polynomial)
)
),
Polynomial
)
end.
-file("src/qrkit/internal/format_info.gleam", 23).
?DOC(false).
-spec bch_remainder(integer(), integer(), integer()) -> integer().
bch_remainder(Value, Polynomial, Shift) ->
do_bch_remainder(Value * power_of_two(Shift), Polynomial).
-file("src/qrkit/internal/format_info.gleam", 55).
?DOC(false).
-spec int_from_ecc(qrkit@types:error_correction()) -> integer().
int_from_ecc(Ecc) ->
case Ecc of
low ->
1;
medium ->
0;
quartile ->
3;
high ->
2
end.
-file("src/qrkit/internal/format_info.gleam", 12).
?DOC(false).
-spec format_bits(qrkit@types:error_correction(), integer()) -> integer().
format_bits(Ecc, Mask) ->
Data = (int_from_ecc(Ecc) * 8) + Mask,
Remainder = bch_remainder(Data, 2#10100110111, 10),
erlang:'bxor'((Data * 1024) + Remainder, 2#101010000010010).
-file("src/qrkit/internal/format_info.gleam", 18).
?DOC(false).
-spec version_bits(integer()) -> integer().
version_bits(Version) ->
Remainder = bch_remainder(Version, 2#1111100100101, 12),
(Version * 4096) + Remainder.