| ------------------------------------------------------------------------------ |
| -- -- |
| -- GNAT RUN-TIME COMPONENTS -- |
| -- -- |
| -- ADA.NUMERICS.BIG_NUMBERS.BIG_INTEGERS -- |
| -- -- |
| -- S p e c -- |
| -- -- |
| -- This specification is derived from the Ada Reference Manual for use with -- |
| -- GNAT. In accordance with the copyright of that document, you can freely -- |
| -- copy and modify this specification, provided that if you redistribute a -- |
| -- modified version, any changes that you have made are clearly indicated. -- |
| -- -- |
| ------------------------------------------------------------------------------ |
| |
| with Ada.Strings.Text_Buffers; use Ada.Strings.Text_Buffers; |
| |
| private with Ada.Finalization; |
| private with System; |
| |
| package Ada.Numerics.Big_Numbers.Big_Integers |
| with Preelaborate |
| is |
| type Big_Integer is private |
| with Integer_Literal => From_Universal_Image, |
| Put_Image => Put_Image; |
| |
| function Is_Valid (Arg : Big_Integer) return Boolean |
| with |
| Convention => Intrinsic, |
| Global => null; |
| |
| subtype Valid_Big_Integer is Big_Integer |
| with Dynamic_Predicate => Is_Valid (Valid_Big_Integer), |
| Predicate_Failure => raise Program_Error; |
| |
| function "=" (L, R : Valid_Big_Integer) return Boolean with Global => null; |
| |
| function "<" (L, R : Valid_Big_Integer) return Boolean with Global => null; |
| |
| function "<=" (L, R : Valid_Big_Integer) return Boolean with Global => null; |
| |
| function ">" (L, R : Valid_Big_Integer) return Boolean with Global => null; |
| |
| function ">=" (L, R : Valid_Big_Integer) return Boolean with Global => null; |
| |
| function To_Big_Integer (Arg : Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| subtype Big_Positive is Big_Integer |
| with Dynamic_Predicate => |
| (if Is_Valid (Big_Positive) |
| then Big_Positive > To_Big_Integer (0)), |
| Predicate_Failure => (raise Constraint_Error); |
| |
| subtype Big_Natural is Big_Integer |
| with Dynamic_Predicate => |
| (if Is_Valid (Big_Natural) |
| then Big_Natural >= To_Big_Integer (0)), |
| Predicate_Failure => (raise Constraint_Error); |
| |
| function In_Range |
| (Arg : Valid_Big_Integer; Low, High : Big_Integer) return Boolean |
| is (Low <= Arg and Arg <= High) |
| with |
| Global => null; |
| |
| function To_Integer (Arg : Valid_Big_Integer) return Integer |
| with |
| Pre => In_Range (Arg, |
| Low => To_Big_Integer (Integer'First), |
| High => To_Big_Integer (Integer'Last)) |
| or else (raise Constraint_Error), |
| Global => null; |
| |
| generic |
| type Int is range <>; |
| package Signed_Conversions is |
| |
| function To_Big_Integer (Arg : Int) return Valid_Big_Integer |
| with Global => null; |
| |
| function From_Big_Integer (Arg : Valid_Big_Integer) return Int |
| with |
| Pre => In_Range (Arg, |
| Low => To_Big_Integer (Int'First), |
| High => To_Big_Integer (Int'Last)) |
| or else (raise Constraint_Error), |
| Global => null; |
| end Signed_Conversions; |
| |
| generic |
| type Int is mod <>; |
| package Unsigned_Conversions is |
| |
| function To_Big_Integer (Arg : Int) return Valid_Big_Integer |
| with Global => null; |
| |
| function From_Big_Integer (Arg : Valid_Big_Integer) return Int |
| with |
| Pre => In_Range (Arg, |
| Low => To_Big_Integer (Int'First), |
| High => To_Big_Integer (Int'Last)) |
| or else (raise Constraint_Error), |
| Global => null; |
| |
| end Unsigned_Conversions; |
| |
| function To_String (Arg : Valid_Big_Integer; |
| Width : Field := 0; |
| Base : Number_Base := 10) return String |
| with |
| Post => To_String'Result'First = 1, |
| Global => null; |
| |
| function From_String (Arg : String) return Valid_Big_Integer |
| with Global => null; |
| |
| function From_Universal_Image (Arg : String) return Valid_Big_Integer |
| renames From_String; |
| |
| procedure Put_Image (S : in out Root_Buffer_Type'Class; V : Big_Integer); |
| |
| function "+" (L : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "-" (L : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "abs" (L : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "+" (L, R : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "-" (L, R : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "*" (L, R : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "/" (L, R : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "mod" (L, R : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "rem" (L, R : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function "**" (L : Valid_Big_Integer; R : Natural) return Valid_Big_Integer |
| with Global => null; |
| |
| function Min (L, R : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function Max (L, R : Valid_Big_Integer) return Valid_Big_Integer |
| with Global => null; |
| |
| function Greatest_Common_Divisor |
| (L, R : Valid_Big_Integer) return Big_Positive |
| with |
| Pre => (L /= To_Big_Integer (0) and R /= To_Big_Integer (0)) |
| or else (raise Constraint_Error), |
| Global => null; |
| |
| private |
| |
| type Controlled_Bignum is new Ada.Finalization.Controlled with record |
| C : System.Address := System.Null_Address; |
| end record; |
| |
| procedure Adjust (This : in out Controlled_Bignum); |
| procedure Finalize (This : in out Controlled_Bignum); |
| |
| type Big_Integer is record |
| Value : Controlled_Bignum; |
| end record; |
| |
| end Ada.Numerics.Big_Numbers.Big_Integers; |