Fraction.st
branchjv
changeset 20344 152b525b5c63
parent 19277 e9182dc00c6d
parent 20308 9110f117d260
child 20578 39641ba8d6e0
--- a/Fraction.st	Thu Aug 25 11:28:17 2016 +0100
+++ b/Fraction.st	Wed Aug 31 22:45:49 2016 +0100
@@ -90,73 +90,73 @@
 %{  /* NOCONTEXT */
 #ifdef __SCHTEAM__
     if (self == Fraction.Class) {
-        return context._RETURN(new STFraction(num, den));
+	return context._RETURN(new STFraction(num, den));
     }
 #else
     /* this check allows subclassing .. */
     if (self == Fraction) {
-        if (__bothSmallInteger(num, den)) {
-            if (den != __mkSmallInteger(0)) {
-                if (__CanDoQuickAlignedNew(sizeof(struct __Fraction))) {    /* OBJECT ALLOCATION */
-                    OBJ newFraction;
-                    INT iDen;
-                    INT iNum;
+	if (__bothSmallInteger(num, den)) {
+	    if (den != __mkSmallInteger(0)) {
+		if (__CanDoQuickNew(sizeof(struct __Fraction))) {    /* OBJECT ALLOCATION */
+		    OBJ newFraction;
+		    INT iDen;
+		    INT iNum;
 
-                    __qCheckedAlignedNew(newFraction, sizeof(struct __Fraction));
-                    __InstPtr(newFraction)->o_class = self;
-                    __qSTORE(newFraction, self);
+		    __qCheckedNew(newFraction, sizeof(struct __Fraction));
+		    __InstPtr(newFraction)->o_class = self;
+		    __qSTORE(newFraction, self);
 
-                    iDen = __intVal(den);
-                    iNum = __intVal(num);
+		    iDen = __intVal(den);
+		    iNum = __intVal(num);
 
-                    if (iDen < 0) {
-                        iNum = -iNum;
-                        iDen = -iDen;
-                    }
-                    while ( (((iNum | iDen) & 1) == 0) && ( iNum != 0) && ( iDen != 0)) {
-                        /* both even and non-zero */
-                        iNum = iNum >> 1;
-                        iDen = iDen >> 1;
-                    }
-                    if (iNum >= _MAX_INT) {
-                        __FractionInstPtr(newFraction)->f_numerator = __MKINT(iNum);
-                    } else {
-                        __FractionInstPtr(newFraction)->f_numerator = __MKSMALLINT(iNum);
-                    }
-                    if (iDen >= _MAX_INT) {
-                        __FractionInstPtr(newFraction)->f_denominator = __MKINT(iDen);
-                    } else {
-                        __FractionInstPtr(newFraction)->f_denominator = __MKSMALLINT(iDen);
-                    }
-                    if (iNum == 1) {
-                        /* no need to reduce */
-                        RETURN ( newFraction );
-                    }
-                }
-            }
-        }
+		    if (iDen < 0) {
+			iNum = -iNum;
+			iDen = -iDen;
+		    }
+		    while ( (((iNum | iDen) & 1) == 0) && ( iNum != 0) && ( iDen != 0)) {
+			/* both even and non-zero */
+			iNum = iNum >> 1;
+			iDen = iDen >> 1;
+		    }
+		    if (iNum >= _MAX_INT) {
+			__FractionInstPtr(newFraction)->f_numerator = __MKINT(iNum);
+		    } else {
+			__FractionInstPtr(newFraction)->f_numerator = __MKSMALLINT(iNum);
+		    }
+		    if (iDen >= _MAX_INT) {
+			__FractionInstPtr(newFraction)->f_denominator = __MKINT(iDen);
+		    } else {
+			__FractionInstPtr(newFraction)->f_denominator = __MKSMALLINT(iDen);
+		    }
+		    if (iNum == 1) {
+			/* no need to reduce */
+			RETURN ( newFraction );
+		    }
+		}
+	    }
+	}
     }
 #endif /* not __SCHTEAM__ */
 %}.
     den = 0 ifTrue:[
-        ^ ZeroDivide raiseRequestWith:thisContext.
+	^ ZeroDivide raiseRequestWith:thisContext.
     ].
     newFraction isNil ifTrue:[
-        newFraction := self basicNew setNumerator:num denominator:den.
+	newFraction := self basicNew setNumerator:num denominator:den.
     ].
     ^ newFraction reduced
 
     "
-     Fraction numerator:1 denominator:3 
-     Fraction numerator:2 denominator:3   
-     Fraction numerator:2 denominator:6 
+     Fraction numerator:1 denominator:3
+     Fraction numerator:2 denominator:3
+     Fraction numerator:2 denominator:6
 
      Fraction numerator:1 denominator:0  -> error
      Fraction numerator:2 denominator:0  -> error
 
-     Fraction numerator:5 denominator:10    
-     Fraction numerator:50 denominator:100  
-     Fraction numerator:8 denominator:16  
+     Fraction numerator:5 denominator:10
+     Fraction numerator:50 denominator:100
+     Fraction numerator:8 denominator:16
     "
 
     "Modified: / 27-02-2016 / 00:25:47 / cg"
@@ -201,24 +201,24 @@
 
     "/ sigh - care for subclasses...
     self == Fraction ifFalse:[
-        ^ super readFrom:aStringOrStream onError:exceptionBlock
+	^ super readFrom:aStringOrStream onError:exceptionBlock
     ].
 
     s := aStringOrStream readStream.
     s skipSeparators.
     s peekOrNil == $( ifTrue:[
-        s next.
+	s next.
     ].
 
     numerator := super readFrom:s onError:[^ exceptionBlock value].
     numerator isInteger ifTrue:[
-        s skipSeparators.
-        (s peekOrNil == $/) ifTrue:[
-            s next.
-            denominator := Integer readFrom:s onError:[^ exceptionBlock value].
-            ^ self numerator:numerator denominator:denominator
-        ].
-        ^ numerator
+	s skipSeparators.
+	(s peekOrNil == $/) ifTrue:[
+	    s next.
+	    denominator := Integer readFrom:s onError:[^ exceptionBlock value].
+	    ^ self numerator:numerator denominator:denominator
+	].
+	^ numerator
     ].
     ^ numerator asFraction
 
@@ -246,13 +246,13 @@
      The approx. returned here has an error smaller than representable by float instances"
 
     ^ self
-        numerator:314159265358979323846264343
-        denominator:100000000000000000000000000
+	numerator:314159265358979323846264343
+	denominator:100000000000000000000000000
 
 "
     ^ self
-        numerator:  314159265358979323846264338327950288419716939937510582097494459
-        denominator:100000000000000000000000000000000000000000000000000000000000000
+	numerator:  314159265358979323846264338327950288419716939937510582097494459
+	denominator:100000000000000000000000000000000000000000000000000000000000000
 "
 
     "
@@ -269,16 +269,16 @@
     "return an approximation of the constant pi as Fraction (1024 decimal digits)."
 
     PI_1000 isNil ifTrue:[
-        PI_1000 := self
-                        numerator:31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788
-                        denominator:(10 raisedTo:1024).
+	PI_1000 := self
+			numerator:31415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632788
+			denominator:(10 raisedTo:1024).
     ].
     ^ PI_1000
 
 "
     ^ self
-        numerator:  314159265358979323846264338327950288419716939937510582097494459
-        denominator:100000000000000000000000000000000000000000000000000000000000000
+	numerator:  314159265358979323846264338327950288419716939937510582097494459
+	denominator:100000000000000000000000000000000000000000000000000000000000000
 "
 
     "
@@ -489,8 +489,8 @@
 
     "/ no need to reduce - I am already
     ^ self class basicNew
-        setNumerator:(numerator negated)
-        denominator:denominator
+	setNumerator:(numerator negated)
+	denominator:denominator
 
     "Modified: 5.11.1996 / 10:29:11 / cg"
 !
@@ -501,8 +501,8 @@
     numerator == 1 ifTrue:[^ denominator].
     "/ no need to reduce - I am already
     ^ self class basicNew
-        setNumerator:denominator
-        denominator:numerator
+	setNumerator:denominator
+	denominator:numerator
 
     "Modified: 5.11.1996 / 10:29:22 / cg"
 ! !
@@ -757,11 +757,11 @@
      0.5 hash
      0.25 hash
      0.4 hash
-     
-     0.25 hash 
-     -0.25 hash 
-     (1/4) hash 
-     (-1/4) hash 
+
+     0.25 hash
+     -0.25 hash
+     (1/4) hash
+     (-1/4) hash
     "
 !
 
@@ -889,7 +889,7 @@
 
     "/ save a multiplication if possible
     d == denominator ifTrue:[
-        ^ n < numerator
+	^ n < numerator
     ].
     ^ (denominator * n) < (numerator * d)
 !
@@ -1148,7 +1148,7 @@
     "return true if the receiver is less than zero"
 
     (numerator < 0) ifTrue:[
-        ^ (denominator < 0) not
+	^ (denominator < 0) not
     ].
     ^ (denominator < 0)
 ! !