previous | next |
With Matrix_stuff; Use Matrix_stuff;
PROCEDURE Swap(x,y: IN OUT matrix) is
BEGINx := x + y;END
y := x - y;
x := x - y;BEGIN -- Main
a:=(1..3 => ( 1..3 => 1));
Swap (a,a);
END;
PACKAGE Matrix_stuff ISTYPE index is RANGE 1..20;END Matrix_stuff;
TYPE matrix is ARRAY(index RANGE <>,
index RANGE <>) of INTEGER;
FUNCTION "+" (x,y : IN matrix) RETURN matrix;
FUNCTION "" (x,y : IN matrix) RETURN matrix;PACKAGE BODY Matrix_stuff IS
FUNCTION "+" (x,y : IN matrix) RETURN matrix ISBEGINL1 : x’FIRST(1);
U1 : x’LAST(1);
L2 : x’FIRST(2);
U2 : x’LAST(2);
z : matrix(L1..U1, L2..U2);IF L1 /= y’FIRST(1) or U1 /= y’LAST(1) orFUNCTION ”-" (x,y : IN matrix) RETURN matrix IS
L2 /= y’FIRST(2)or U2 /= y’LAST(2)
THEN Raise CONSTRAINT_ERROR;
END IF
FOR i IN L1..U1 LOOPFOR j IN L2..U2 LOOPEND LOOP;
z(i,j) := x(i, j) + y(i, j);
END LOOP;
return (z);
END;BEGINL1 : x’FIRST(1);
U1 : x’LAST(1);
L2 : x’FIRST(2);
U2 : x’LAST(2);
z : matrix(L1..U1, L2..U2);IF L1 /= y’FIRST(1) or U1 /= y’LAST(1) orEnd Matrix_stuff;
L2 /= y’FIRST(2)or U2 /= y’LAST(2)
THEN Raise CONSTRAINT_ERROR;
END IF
FOR i IN L1..U1 LOOPFOR j IN L2..U2 LOOPEND LOOP;
z(i,j) := x(i, j) - y(i, j);
END LOOP;
return (z);
END;
previous | next |