File : bit_arrays-numbers.adb
-- Simple functions for integers:
with Bit_arrays.Modular;
package body Bit_arrays.Numbers is
use Interfaces;
function To_bit_array(
n: Long_long_integer; Size: Positive) return Bit_array is
Result: Bit_array(1..Size);
Aux: Mod_aux:= Mod_aux(n);
begin
for i in 1..Size loop
Result(i):= (Shift_right(Aux, Size - i) and 1) = 1;
end loop;
Return Result;
end To_bit_array;
function To_bit_array(n: Integer; Size: Positive) return Bit_array is
Result: Bit_array(1..Size);
Aux: Mod_aux:= Mod_aux(n);
begin
for i in 1..Size loop
Result(i):= (Shift_right(Aux, Size - i) and 1) = 1;
end loop;
Return Result;
end To_bit_array;
To_num: constant array(boolean) of Mod_aux:= (True => 1, False => 0);
-- Returns a number:
function To_number_LE(b: Bit_array) return integer is
Result: Mod_aux:= 0;
begin
for i in b'range loop
Result:= Result or Shift_left(To_num(b(i)), i - b'first);
end loop;
return integer(Result);
end To_number_LE;
function To_number_BE(b: Bit_array) return integer is
Result: Mod_aux:= 0;
begin
for i in b'range loop
Result:= Shift_left(Result, 1) or To_num(b(i));
end loop;
return integer(result);
end To_number_BE;
end Bit_arrays.Numbers;