with GENERIC_DIGITS_ARITHMETIC ; generic type SIZE is range <> ; -- range is 0..NUMBER_OF_DIGITS type REAL is digits <> ; -- some real type for conversions package GENERIC_DIGITS_MATRIX_ARITHMETIC is -- DECIMAL FLOATING POINT MATRIX ARITHMETIC PACKAGE SPECIFICATION -- -- Purpose : To provide the basic set of matrix arithmetic -- capability in ada -- -- Method : This package defines the types -- digits_matrix and digits_vector -- this package also defines the overloaded procedures -- get & put for the types digits_matrix and digits_vector -- -- this package then defines the overloaded operators -- -- + - * unary + unary - -- -- for combining types DIGITS_MATRIX DIGITS_VECTOR -- and D_NUMBER -- package DIGITS_ARITHMETIC is new GENERIC_DIGITS_ARITHMETIC ( SIZE , REAL ) ; use DIGITS_ARITHMETIC ; type DIGITS_MATRIX is array ( INTEGER range <> , INTEGER range <> ) of D_NUMBER ; -- -- THE FIRST SUBSCRIPT IS THE ROW NUMBER, -- THE SECOND SUBSCRIPT IS THE COLUMN NUMBER -- -- type DIGITS_VECTOR is array ( INTEGER range <> ) of D_NUMBER ; -- MATRIX_ERROR : exception ; -- Raised for any ilegal operation -- The exception conditions are tested explicitly in order to -- convey the improper calling parameters to the user . It could -- be difficult to find the improper calling parameter if the -- Ada exceptions CONSTRAINT_ERROR or others occured in the -- middle of the code. -- function "+" ( A , B : DIGITS_MATRIX ) return DIGITS_MATRIX ; function "-" ( A , B : DIGITS_MATRIX ) return DIGITS_MATRIX ; function "*" ( A , B : DIGITS_MATRIX ) return DIGITS_MATRIX ; function "+" ( A , B : DIGITS_VECTOR ) return DIGITS_VECTOR ; function "-" ( A , B : DIGITS_VECTOR ) return DIGITS_VECTOR ; function "*" ( V : DIGITS_VECTOR ; A : DIGITS_MATRIX ) return DIGITS_VECTOR ; function "*" ( A : DIGITS_MATRIX ; V : DIGITS_VECTOR ) return DIGITS_VECTOR ; function DOT_PRODUCT ( P : DIGITS_VECTOR ; Q : DIGITS_VECTOR ) return D_NUMBER ; function CROSS_PRODUCT ( P : DIGITS_VECTOR ; Q : DIGITS_VECTOR ) return DIGITS_VECTOR ; function CROSS_PRODUCT ( A : DIGITS_MATRIX ) return DIGITS_VECTOR ; function IDENTITY_MATRIX ( N : INTEGER ) return DIGITS_MATRIX ; function "*" ( F : D_NUMBER ; A : DIGITS_MATRIX ) return DIGITS_MATRIX ; function "*" ( A : DIGITS_MATRIX ; F : D_NUMBER ) return DIGITS_MATRIX ; function "*" ( F : D_NUMBER ; A : DIGITS_VECTOR ) return DIGITS_VECTOR ; function "*" ( A : DIGITS_VECTOR ; F : D_NUMBER ) return DIGITS_VECTOR ; function COLUMN_TO_VECTOR ( COLUMN : INTEGER ; A : DIGITS_MATRIX ) return DIGITS_VECTOR ; procedure VECTOR_TO_COLUMN ( V : DIGITS_VECTOR ; COLUMN : INTEGER ; A : in out DIGITS_MATRIX ) ; function ROW_TO_VECTOR ( ROW : INTEGER ; A : DIGITS_MATRIX ) return DIGITS_VECTOR ; procedure VECTOR_TO_ROW ( V : DIGITS_VECTOR ; ROW : INTEGER ; A : in out DIGITS_MATRIX ) ; function EXTRACT_SUB_MATRIX ( ROW_1 , ROW_2 , COL_1 , COL_2 : INTEGER ; A : DIGITS_MATRIX ) return DIGITS_MATRIX ; procedure INSERT_SUB_MATRIX ( SUB_MATRIX : DIGITS_MATRIX ; ROW , COLUMN : INTEGER ; A : in out DIGITS_MATRIX ) ; procedure PUT ( A : DIGITS_MATRIX ) ; procedure PUT ( V : DIGITS_VECTOR ) ; procedure GET ( A : out DIGITS_MATRIX ) ; procedure GET ( V : out DIGITS_VECTOR ) ; end GENERIC_DIGITS_MATRIX_ARITHMETIC ;