Преглед на файлове

ALL on LONGCOMPLEX

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7130 8c9fc860-2736-0410-a75d-ab315db34111
felixf преди 8 години
родител
ревизия
d7be5b2170
променени са 1 файла, в които са добавени 12 реда и са изтрити 3 реда
  1. 12 3
      source/FoxArrayBase.Mod

+ 12 - 3
source/FoxArrayBase.Mod

@@ -2115,17 +2115,20 @@ Sufficient (but not necessary) conditions:
 			DEC( len );
 		END;
 	END GenericLoopZ;
-(*
+
 (** LONGCOMPLEX *)
 	PROCEDURE GenericLoopLZ( ladr, dadr, linc, dinc, len: LONGINT; op: PROCEDURE(x: LONGCOMPLEX): LONGCOMPLEX );
 	VAR lval: LONGCOMPLEX;
 	BEGIN
 		WHILE (len > 0) DO
-			SYSTEM.GET( ladr, lval );  SYSTEM.PUT( dadr, op(lval) );  INC( ladr, linc );  INC( dadr, dinc );
+			SYSTEM.MOVE(ladr, ADDRESS OF lval, SIZE OF LONGCOMPLEX);
+			lval := op(lval);
+			SYSTEM.MOVE(ADDRESS OF lval, dadr, SIZE OF LONGCOMPLEX);
+			INC( ladr, linc );  INC( dadr, dinc );
 			DEC( len );
 		END;
 	END GenericLoopLZ;
-*)
+
 	(*** monadic minus A -> -A  ********************************************************************)
 
 (** SHORTINT *)
@@ -10082,6 +10085,12 @@ Sufficient (but not necessary) conditions:
 		RETURN RESULT;
 	END "ALL";
 
+	OPERATOR "ALL"*(CONST x: ARRAY [?] OF LONGCOMPLEX; op: PROCEDURE(x: LONGCOMPLEX): LONGCOMPLEX): ARRAY[?] OF LONGCOMPLEX; (*should also accept operator ?*)
+	BEGIN
+		ApplyGenericUnaryAAOpLZ(ADDRESSOF(RESULT),ADDRESSOF(x),SIZEOF(LONGCOMPLEX),GenericLoopLZ,op);
+		RETURN RESULT;
+	END "ALL";
+
 BEGIN
 	alloc := 0;  SetDefaults();  InitOptimization();  (* CreateTypePool;  *)
 END FoxArrayBase.