47 lines
1.3 KiB
Ada
47 lines
1.3 KiB
Ada
with Ada.Finalization;
|
|
|
|
package BT is
|
|
|
|
type Balanced_Ternary is private;
|
|
|
|
-- conversions
|
|
function To_Balanced_Ternary (Num : Integer) return Balanced_Ternary;
|
|
function To_Balanced_Ternary (Str : String) return Balanced_Ternary;
|
|
function To_Integer (Num : Balanced_Ternary) return Integer;
|
|
function To_string (Num : Balanced_Ternary) return String;
|
|
|
|
-- Arithmetics
|
|
-- unary minus
|
|
function "-" (Left : in Balanced_Ternary)
|
|
return Balanced_Ternary;
|
|
|
|
-- subtraction
|
|
function "-" (Left, Right : in Balanced_Ternary)
|
|
return Balanced_Ternary;
|
|
|
|
-- addition
|
|
function "+" (Left, Right : in Balanced_Ternary)
|
|
return Balanced_Ternary;
|
|
-- multiplication
|
|
function "*" (Left, Right : in Balanced_Ternary)
|
|
return Balanced_Ternary;
|
|
|
|
private
|
|
-- a balanced ternary number is a unconstrained array of (1,0,-1)
|
|
-- dinamically allocated, least significant trit leftmost
|
|
type Trit is range -1..1;
|
|
type Trit_Array is array (Positive range <>) of Trit;
|
|
pragma Pack(Trit_Array);
|
|
|
|
type Trit_Access is access Trit_Array;
|
|
|
|
type Balanced_Ternary is new Ada.Finalization.Controlled
|
|
with record
|
|
Ref : Trit_access;
|
|
end record;
|
|
|
|
procedure Initialize (Object : in out Balanced_Ternary);
|
|
procedure Adjust (Object : in out Balanced_Ternary);
|
|
procedure Finalize (Object : in out Balanced_Ternary);
|
|
|
|
end BT;
|