File : vectors.ads
with Ada.Text_IO, Reps;
use Ada.Text_IO, Reps;
pragma Elaborate (Reps);
generic
-------------------- begin_include scalars Scalar
type Scalar is private;
--- addition and multiplication
with function IsZero(S: Scalar) return Boolean is <>;
with procedure SetZero(S: out Scalar) is <>;
with procedure Neg(S: in out Scalar) is <>;
with procedure Neg(S1: in Scalar; S2: out Scalar) is <>;
with function "-"(S: Scalar) return Scalar is <>;
with procedure Add(S1: in Scalar; S2: in out Scalar) is <>;
with procedure Sum(S1,S2: in Scalar; S3: out Scalar) is <>;
with function "+"(S1,S2: Scalar) return Scalar is <>;
with procedure Sub(S1: in Scalar; S2: in out Scalar) is <>;
with procedure Diff(S1,S2: in Scalar; S3: out Scalar) is <>;
with function "-"(S1,S2: Scalar) return Scalar is <>;
with procedure Mult(I: in Integer; S: in out Scalar) is <>;
with procedure Prod(I: in Integer; S1: in Scalar; S2: out Scalar) is <>;
with function "*"(I: Integer; S: Scalar) return Scalar is <>;
with procedure MultAdd(I: Integer; S1: in Scalar; S2: in out Scalar) is <>;
with procedure Mult(S1: in Scalar; S2: in out Scalar) is <>;
with procedure Prod(S1,S2: in Scalar; S3: out Scalar) is <>;
with function "*"(S1,S2: Scalar) return Scalar is <>;
with procedure MultAdd(S1,S2: in Scalar; S3: in out Scalar) is <>;
with function "**"(S: Scalar; I: Integer) return Scalar is <>;
--- conversion and i/o
with function Scal(K: Integer) return Scalar is <>;
with function Scal(R: Rep) return Scalar is <>;
with procedure ShowType(S: in Scalar) is <>;
with procedure Show1(N: in String; S: in Scalar) is <>;
with procedure Show2(N: in String; S,S2: in Scalar) is <>;
with procedure Get(F: in File_Type; S: out Scalar; Decimal: in Boolean := False) is <>;
with procedure Put(F: in File_Type; S: in Scalar; Decimal: in Boolean := False) is <>;
-------------------- end_include scalars
-------------------- begin_include components Scalar Component
type Component is private;
--- vector space
with procedure Mult(S: in Scalar; C: in out Component) is <>;
with procedure Prod(S: in Scalar; C1: in Component; C2: out Component) is <>;
with function "*"(S: Scalar; C: Component) return Component is <>;
with procedure MultAdd(S: in Scalar; C1: in Component; C2: in out Component) is <>;
--- addition and multiplication
with function IsZero(C: Component) return Boolean is <>;
with procedure SetZero(C: out Component) is <>;
with procedure Neg(C: in out Component) is <>;
with procedure Neg(C1: in Component; C2: out Component) is <>;
with function "-"(C: Component) return Component is <>;
with procedure Add(C1: in Component; C2: in out Component) is <>;
with procedure Sum(C1,C2: in Component; C3: out Component) is <>;
with function "+"(C1,C2: Component) return Component is <>;
with procedure Sub(C1: in Component; C2: in out Component) is <>;
with procedure Diff(C1,C2: in Component; C3: out Component) is <>;
with function "-"(C1,C2: Component) return Component is <>;
with procedure Mult(I: in Integer; C1: in out Component) is <>;
with procedure Prod(I: in Integer; C1: in Component; C2: out Component) is <>;
with function "*"(I: Integer; C: Component) return Component is <>;
with procedure MultAdd(I: Integer; C1: in Component; C2: in out Component) is <>;
with procedure Mult(C1: in Component; C2: in out Component) is <>;
with procedure Prod(C1,C2: in Component; C3: out Component) is <>;
with function "*"(C1,C2: Component) return Component is <>;
with procedure MultAdd(C1,C2: in Component; C3: in out Component) is <>;
--- i/o
with procedure Show1(N: in String; C: in Component) is <>;
with procedure Show2(N: in String; C1,C2: in Component) is <>;
with procedure Get(F: in File_Type; C: out Component; Decimal: in Boolean := False) is <>;
with procedure Put(F: in File_Type; C: in Component; Decimal: in Boolean := False) is <>;
-------------------- end_include components
package Vectors is -- generic vectors and matrices
type Vector is array(Integer range <>) of Component;
function IsZero(V: Vector) return Boolean; -- V=0
procedure SetZero(V: out Vector); -- V := 0
function EffLast(V: Vector) return Integer; -- last index mod zeros
procedure Neg(V: in out Vector); -- V := -V
procedure Neg(V1: in Vector; V2: out Vector); -- V2 := -V1
function "-"(V: Vector) return Vector; -- return -V
procedure Add(V1: in Vector; V2: in out Vector); -- V2 := V2+V1
procedure Sum(V1,V2: in Vector; V3: out Vector); -- V3 := V1+V2
function "+"(V1,V2: Vector) return Vector; -- return V1+V2
procedure Sub(V1: in Vector; V2: in out Vector); -- V2 := V2-V1
procedure Diff(V1,V2: in Vector; V3: out Vector); -- V3 := V1-V2
function "-"(V1,V2: Vector) return Vector; -- return V1-V2
procedure Mult(K: in Integer; V: in out Vector); -- V := K*V
procedure Prod(K: in Integer; V1: in Vector; V2: out Vector); -- V2 := K*V1
function "*"(K: Integer; V: Vector) return Vector; -- return K*V
procedure Mult(S: in Scalar; V: in out Vector); -- V := S*V
procedure Prod(S: in Scalar; V1: in Vector; V2: out Vector); -- V2 := S*V1
function "*"(S: Scalar; V: Vector) return Vector; -- return S*V
procedure MultAdd(S: Scalar; V1: in Vector; V2: in out Vector); -- V2 := V2+S*V1
procedure Show1(N: in String; V: in Vector);
procedure Show2(N: in String; V1,V2: in Vector);
procedure Get(F: in File_Type; V: out Vector; Decimal: in Boolean := False);
procedure Put(F: in File_Type; V: in Vector; Decimal: in Boolean := False);
procedure Read(Name: in String; V: out Vector; Decimal: in Boolean := False);
procedure Write(Name: in String; V: in Vector; Decimal: in Boolean := False);
type Matrix is array(Integer range <>, Integer range <>) of Scalar;
function IsZero(A: Matrix) return Boolean;
procedure SetZero(A: out Matrix);
procedure ZeroRow(I: in Integer; A: in out Matrix);
procedure ZeroColumn(J: in Integer; A: in out Matrix);
procedure AddConst(R: Rep; A: in out Matrix);
function EffLast1(A: Matrix) return Integer;
function EffLast2(A: Matrix) return Integer;
procedure Transpose(A: in out Matrix);
function Transpose(A: Matrix) return Matrix;
procedure Neg(A: in out Matrix);
procedure Neg(A1: in Matrix; A2: out Matrix);
function "-"(A: Matrix) return Matrix;
procedure Add(A1: in Matrix; A2: in out Matrix);
procedure Sum(A1,A2: in Matrix; A3: out Matrix);
function "+"(A1,A2: Matrix) return Matrix;
procedure Sub(A1: in Matrix; A2: in out Matrix);
procedure Diff(A1,A2: in Matrix; A3: out Matrix);
function "-"(A1,A2: Matrix) return Matrix;
procedure Mult(K: in Integer; A: in out Matrix);
procedure Prod(K: in Integer; A1: in Matrix; A2: out Matrix);
function "*"(K: Integer; A: Matrix) return Matrix;
procedure Mult(S: in Scalar; A: in out Matrix);
procedure Prod(S: in Scalar; A1: in Matrix; A2: out Matrix);
function "*"(S: Scalar; A: Matrix) return Matrix;
procedure MultAdd(S: in Scalar; A1: in Matrix; A2: in out Matrix);
procedure Mult(A: in Matrix; V: in out Vector);
procedure Prod(A: in Matrix; V1: in Vector; V2: out Vector);
function "*"(A: Matrix; V: Vector) return Vector;
procedure MultAdd(A: in Matrix; V1: in Vector; V2: in out Vector);
procedure Mult(A1: in Matrix; A2: in out Matrix);
procedure Prod(A1,A2: in Matrix; A3: out Matrix);
function "*"(A1,A2: Matrix) return Matrix;
procedure MultAdd(A1,A2: in Matrix; A3: in out Matrix);
procedure Show1(N: in String; A: in Matrix);
procedure Show2(N: in String; A1,A2: in Matrix);
procedure Get(F: in File_Type; A: out Matrix; Decimal: in Boolean := True);
procedure Put(F: in File_Type; A: in Matrix; Decimal: in Boolean := True);
procedure Read(Name: in String; A: out Matrix; Decimal: in Boolean := False);
procedure Write(Name: in String; A: in Matrix; Decimal: in Boolean := False);
end Vectors;