aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.8.3/gcc/ada/s-gearop.ads
diff options
context:
space:
mode:
Diffstat (limited to 'gcc-4.8.3/gcc/ada/s-gearop.ads')
-rw-r--r--gcc-4.8.3/gcc/ada/s-gearop.ads500
1 files changed, 500 insertions, 0 deletions
diff --git a/gcc-4.8.3/gcc/ada/s-gearop.ads b/gcc-4.8.3/gcc/ada/s-gearop.ads
new file mode 100644
index 000000000..f401da219
--- /dev/null
+++ b/gcc-4.8.3/gcc/ada/s-gearop.ads
@@ -0,0 +1,500 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT RUN-TIME COMPONENTS --
+-- --
+-- S Y S T E M . G E N E R I C _ A R R A Y _ O P E R A T I O N S --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2006-2011, Free Software Foundation, Inc. --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+package System.Generic_Array_Operations is
+pragma Pure (Generic_Array_Operations);
+
+ ---------------------
+ -- Back_Substitute --
+ ---------------------
+
+ generic
+ type Scalar is private;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ with function "-" (Left, Right : Scalar) return Scalar is <>;
+ with function "*" (Left, Right : Scalar) return Scalar is <>;
+ with function "/" (Left, Right : Scalar) return Scalar is <>;
+ with function Is_Non_Zero (X : Scalar) return Boolean is <>;
+ procedure Back_Substitute (M, N : in out Matrix);
+
+ --------------
+ -- Diagonal --
+ --------------
+
+ generic
+ type Scalar is private;
+ type Vector is array (Integer range <>) of Scalar;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ function Diagonal (A : Matrix) return Vector;
+
+ -----------------------
+ -- Forward_Eliminate --
+ -----------------------
+
+ -- Use elementary row operations to put square matrix M in row echolon
+ -- form. Identical row operations are performed on matrix N, must have the
+ -- same number of rows as M.
+
+ generic
+ type Scalar is private;
+ type Real is digits <>;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ with function "abs" (Right : Scalar) return Real'Base is <>;
+ with function "-" (Left, Right : Scalar) return Scalar is <>;
+ with function "*" (Left, Right : Scalar) return Scalar is <>;
+ with function "/" (Left, Right : Scalar) return Scalar is <>;
+ Zero : Scalar;
+ One : Scalar;
+ procedure Forward_Eliminate
+ (M : in out Matrix;
+ N : in out Matrix;
+ Det : out Scalar);
+
+ --------------------------
+ -- Square_Matrix_Length --
+ --------------------------
+
+ generic
+ type Scalar is private;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ function Square_Matrix_Length (A : Matrix) return Natural;
+ -- If A is non-square, raise Constraint_Error, else return its dimension
+
+ ----------------------------------
+ -- Vector_Elementwise_Operation --
+ ----------------------------------
+
+ generic
+ type X_Scalar is private;
+ type Result_Scalar is private;
+ type X_Vector is array (Integer range <>) of X_Scalar;
+ type Result_Vector is array (Integer range <>) of Result_Scalar;
+ with function Operation (X : X_Scalar) return Result_Scalar;
+ function Vector_Elementwise_Operation (X : X_Vector) return Result_Vector;
+
+ ----------------------------------
+ -- Matrix_Elementwise_Operation --
+ ----------------------------------
+
+ generic
+ type X_Scalar is private;
+ type Result_Scalar is private;
+ type X_Matrix is array (Integer range <>, Integer range <>) of X_Scalar;
+ type Result_Matrix is array (Integer range <>, Integer range <>)
+ of Result_Scalar;
+ with function Operation (X : X_Scalar) return Result_Scalar;
+ function Matrix_Elementwise_Operation (X : X_Matrix) return Result_Matrix;
+
+ -----------------------------------------
+ -- Vector_Vector_Elementwise_Operation --
+ -----------------------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Left_Vector is array (Integer range <>) of Left_Scalar;
+ type Right_Vector is array (Integer range <>) of Right_Scalar;
+ type Result_Vector is array (Integer range <>) of Result_Scalar;
+ with function Operation
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar;
+ function Vector_Vector_Elementwise_Operation
+ (Left : Left_Vector;
+ Right : Right_Vector) return Result_Vector;
+
+ ------------------------------------------------
+ -- Vector_Vector_Scalar_Elementwise_Operation --
+ ------------------------------------------------
+
+ generic
+ type X_Scalar is private;
+ type Y_Scalar is private;
+ type Z_Scalar is private;
+ type Result_Scalar is private;
+ type X_Vector is array (Integer range <>) of X_Scalar;
+ type Y_Vector is array (Integer range <>) of Y_Scalar;
+ type Result_Vector is array (Integer range <>) of Result_Scalar;
+ with function Operation
+ (X : X_Scalar;
+ Y : Y_Scalar;
+ Z : Z_Scalar) return Result_Scalar;
+ function Vector_Vector_Scalar_Elementwise_Operation
+ (X : X_Vector;
+ Y : Y_Vector;
+ Z : Z_Scalar) return Result_Vector;
+
+ -----------------------------------------
+ -- Matrix_Matrix_Elementwise_Operation --
+ -----------------------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Left_Matrix is array (Integer range <>, Integer range <>)
+ of Left_Scalar;
+ type Right_Matrix is array (Integer range <>, Integer range <>)
+ of Right_Scalar;
+ type Result_Matrix is array (Integer range <>, Integer range <>)
+ of Result_Scalar;
+ with function Operation
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar;
+ function Matrix_Matrix_Elementwise_Operation
+ (Left : Left_Matrix;
+ Right : Right_Matrix) return Result_Matrix;
+
+ ------------------------------------------------
+ -- Matrix_Matrix_Scalar_Elementwise_Operation --
+ ------------------------------------------------
+
+ generic
+ type X_Scalar is private;
+ type Y_Scalar is private;
+ type Z_Scalar is private;
+ type Result_Scalar is private;
+ type X_Matrix is array (Integer range <>, Integer range <>) of X_Scalar;
+ type Y_Matrix is array (Integer range <>, Integer range <>) of Y_Scalar;
+ type Result_Matrix is array (Integer range <>, Integer range <>)
+ of Result_Scalar;
+ with function Operation
+ (X : X_Scalar;
+ Y : Y_Scalar;
+ Z : Z_Scalar) return Result_Scalar;
+ function Matrix_Matrix_Scalar_Elementwise_Operation
+ (X : X_Matrix;
+ Y : Y_Matrix;
+ Z : Z_Scalar) return Result_Matrix;
+
+ -----------------------------------------
+ -- Vector_Scalar_Elementwise_Operation --
+ -----------------------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Left_Vector is array (Integer range <>) of Left_Scalar;
+ type Result_Vector is array (Integer range <>) of Result_Scalar;
+ with function Operation
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar;
+ function Vector_Scalar_Elementwise_Operation
+ (Left : Left_Vector;
+ Right : Right_Scalar) return Result_Vector;
+
+ -----------------------------------------
+ -- Matrix_Scalar_Elementwise_Operation --
+ -----------------------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Left_Matrix is array (Integer range <>, Integer range <>)
+ of Left_Scalar;
+ type Result_Matrix is array (Integer range <>, Integer range <>)
+ of Result_Scalar;
+ with function Operation
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar;
+ function Matrix_Scalar_Elementwise_Operation
+ (Left : Left_Matrix;
+ Right : Right_Scalar) return Result_Matrix;
+
+ -----------------------------------------
+ -- Scalar_Vector_Elementwise_Operation --
+ -----------------------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Right_Vector is array (Integer range <>) of Right_Scalar;
+ type Result_Vector is array (Integer range <>) of Result_Scalar;
+ with function Operation
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar;
+ function Scalar_Vector_Elementwise_Operation
+ (Left : Left_Scalar;
+ Right : Right_Vector) return Result_Vector;
+
+ -----------------------------------------
+ -- Scalar_Matrix_Elementwise_Operation --
+ -----------------------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Right_Matrix is array (Integer range <>, Integer range <>)
+ of Right_Scalar;
+ type Result_Matrix is array (Integer range <>, Integer range <>)
+ of Result_Scalar;
+ with function Operation
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar;
+ function Scalar_Matrix_Elementwise_Operation
+ (Left : Left_Scalar;
+ Right : Right_Matrix) return Result_Matrix;
+
+ -------------------
+ -- Inner_Product --
+ -------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Left_Vector is array (Integer range <>) of Left_Scalar;
+ type Right_Vector is array (Integer range <>) of Right_Scalar;
+ Zero : Result_Scalar;
+ with function "*"
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar is <>;
+ with function "+"
+ (Left : Result_Scalar;
+ Right : Result_Scalar) return Result_Scalar is <>;
+ function Inner_Product
+ (Left : Left_Vector;
+ Right : Right_Vector) return Result_Scalar;
+
+ -------------
+ -- L2_Norm --
+ -------------
+
+ generic
+ type X_Scalar is private;
+ type Result_Real is digits <>;
+ type X_Vector is array (Integer range <>) of X_Scalar;
+ with function "abs" (Right : X_Scalar) return Result_Real is <>;
+ with function Sqrt (X : Result_Real'Base) return Result_Real'Base is <>;
+ function L2_Norm (X : X_Vector) return Result_Real'Base;
+
+ -------------------
+ -- Outer_Product --
+ -------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Left_Vector is array (Integer range <>) of Left_Scalar;
+ type Right_Vector is array (Integer range <>) of Right_Scalar;
+ type Matrix is array (Integer range <>, Integer range <>)
+ of Result_Scalar;
+ with function "*"
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar is <>;
+ function Outer_Product
+ (Left : Left_Vector;
+ Right : Right_Vector) return Matrix;
+
+ ---------------------------
+ -- Matrix_Vector_Product --
+ ---------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Matrix is array (Integer range <>, Integer range <>)
+ of Left_Scalar;
+ type Right_Vector is array (Integer range <>) of Right_Scalar;
+ type Result_Vector is array (Integer range <>) of Result_Scalar;
+ Zero : Result_Scalar;
+ with function "*"
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar is <>;
+ with function "+"
+ (Left : Result_Scalar;
+ Right : Result_Scalar) return Result_Scalar is <>;
+ function Matrix_Vector_Product
+ (Left : Matrix;
+ Right : Right_Vector) return Result_Vector;
+
+ ---------------------------
+ -- Vector_Matrix_Product --
+ ---------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Left_Vector is array (Integer range <>) of Left_Scalar;
+ type Matrix is array (Integer range <>, Integer range <>)
+ of Right_Scalar;
+ type Result_Vector is array (Integer range <>) of Result_Scalar;
+ Zero : Result_Scalar;
+ with function "*"
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar is <>;
+ with function "+"
+ (Left : Result_Scalar;
+ Right : Result_Scalar) return Result_Scalar is <>;
+ function Vector_Matrix_Product
+ (Left : Left_Vector;
+ Right : Matrix) return Result_Vector;
+
+ ---------------------------
+ -- Matrix_Matrix_Product --
+ ---------------------------
+
+ generic
+ type Left_Scalar is private;
+ type Right_Scalar is private;
+ type Result_Scalar is private;
+ type Left_Matrix is array (Integer range <>, Integer range <>)
+ of Left_Scalar;
+ type Right_Matrix is array (Integer range <>, Integer range <>)
+ of Right_Scalar;
+ type Result_Matrix is array (Integer range <>, Integer range <>)
+ of Result_Scalar;
+ Zero : Result_Scalar;
+ with function "*"
+ (Left : Left_Scalar;
+ Right : Right_Scalar) return Result_Scalar is <>;
+ with function "+"
+ (Left : Result_Scalar;
+ Right : Result_Scalar) return Result_Scalar is <>;
+ function Matrix_Matrix_Product
+ (Left : Left_Matrix;
+ Right : Right_Matrix) return Result_Matrix;
+
+ ----------------------------
+ -- Matrix_Vector_Solution --
+ ----------------------------
+
+ generic
+ type Scalar is private;
+ type Vector is array (Integer range <>) of Scalar;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ with procedure Back_Substitute (M, N : in out Matrix) is <>;
+ with procedure Forward_Eliminate
+ (M : in out Matrix;
+ N : in out Matrix;
+ Det : out Scalar) is <>;
+ function Matrix_Vector_Solution (A : Matrix; X : Vector) return Vector;
+
+ ----------------------------
+ -- Matrix_Matrix_Solution --
+ ----------------------------
+
+ generic
+ type Scalar is private;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ with procedure Back_Substitute (M, N : in out Matrix) is <>;
+ with procedure Forward_Eliminate
+ (M : in out Matrix;
+ N : in out Matrix;
+ Det : out Scalar) is <>;
+ function Matrix_Matrix_Solution (A : Matrix; X : Matrix) return Matrix;
+
+ ----------
+ -- Sqrt --
+ ----------
+
+ generic
+ type Real is digits <>;
+ function Sqrt (X : Real'Base) return Real'Base;
+
+ -----------------
+ -- Swap_Column --
+ -----------------
+
+ generic
+ type Scalar is private;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ procedure Swap_Column (A : in out Matrix; Left, Right : Integer);
+
+ ---------------
+ -- Transpose --
+ ---------------
+
+ generic
+ type Scalar is private;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ procedure Transpose (A : Matrix; R : out Matrix);
+
+ -------------------------------
+ -- Update_Vector_With_Vector --
+ -------------------------------
+
+ generic
+ type X_Scalar is private;
+ type Y_Scalar is private;
+ type X_Vector is array (Integer range <>) of X_Scalar;
+ type Y_Vector is array (Integer range <>) of Y_Scalar;
+ with procedure Update (X : in out X_Scalar; Y : Y_Scalar);
+ procedure Update_Vector_With_Vector (X : in out X_Vector; Y : Y_Vector);
+
+ -------------------------------
+ -- Update_Matrix_With_Matrix --
+ -------------------------------
+
+ generic
+ type X_Scalar is private;
+ type Y_Scalar is private;
+ type X_Matrix is array (Integer range <>, Integer range <>) of X_Scalar;
+ type Y_Matrix is array (Integer range <>, Integer range <>) of Y_Scalar;
+ with procedure Update (X : in out X_Scalar; Y : Y_Scalar);
+ procedure Update_Matrix_With_Matrix (X : in out X_Matrix; Y : Y_Matrix);
+
+ -----------------
+ -- Unit_Matrix --
+ -----------------
+
+ generic
+ type Scalar is private;
+ type Matrix is array (Integer range <>, Integer range <>) of Scalar;
+ Zero : Scalar;
+ One : Scalar;
+ function Unit_Matrix
+ (Order : Positive;
+ First_1 : Integer := 1;
+ First_2 : Integer := 1) return Matrix;
+
+ -----------------
+ -- Unit_Vector --
+ -----------------
+
+ generic
+ type Scalar is private;
+ type Vector is array (Integer range <>) of Scalar;
+ Zero : Scalar;
+ One : Scalar;
+ function Unit_Vector
+ (Index : Integer;
+ Order : Positive;
+ First : Integer := 1) return Vector;
+
+end System.Generic_Array_Operations;