Jelajahi Sumber

Added conversion SIZE --> REAL (removing the circular conversion issue that appeared in Matrix library)

git-svn-id: https://svn.inf.ethz.ch/svn/lecturers/a2/trunk@7831 8c9fc860-2736-0410-a75d-ab315db34111
felixf 7 tahun lalu
induk
melakukan
33bd9df848
1 mengubah file dengan 16 tambahan dan 1 penghapusan
  1. 16 1
      source/FoxArrayBase.Mod

+ 16 - 1
source/FoxArrayBase.Mod

@@ -2126,6 +2126,21 @@ Sufficient (but not necessary) conditions:
 	END "@Convert";
 
 
+	PROCEDURE ConvertLoopYR( ladr, dadr: ADDRESS; linc, dinc, len: SIZE );
+	VAR lval: SIZE;  dval: REAL;
+	BEGIN
+		WHILE (len > 0) DO
+			SYSTEM.GET( ladr, lval );  dval := lval;  SYSTEM.PUT( dadr, dval );
+			INC( ladr, linc );  INC( dadr, dinc );  DEC( len );
+		END;
+	END ConvertLoopYR;
+
+	OPERATOR "@Convert"*(CONST src: ARRAY [ ? ] OF SIZE ): ARRAY [ ? ] OF REAL;
+	BEGIN
+		ApplyUnaryAAOp( ADDRESSOF( RESULT ), ADDRESSOF( src ), SIZEOF( REAL ), ConvertLoopYZ );
+		RETURN RESULT
+	END "@Convert";
+
 	(*** monadic not A -> ~A ********************************************************************)
 
 (** BOOLEAN *)
@@ -8260,7 +8275,7 @@ TYPE
 
 	(*** LEN: array -> array **)
 
-	OPERATOR "LEN"*(CONST left: ARRAY [?]): ARRAY [*] OF LenType;
+	OPERATOR "LEN"*(CONST left: ARRAY [?]): ARRAY [*] OF SIZE;
 	VAR src: ADDRESS; dim,i: SIZE;
 	BEGIN
 		src := SYSTEM.VAL(ADDRESS,left);