AbstractNumberVector.st
changeset 19921 a8c0dde1075e
parent 19220 b2b3ad682045
child 19948 be658f466bca
child 20627 47ed4d83bc81
--- a/AbstractNumberVector.st	Wed Jun 01 13:23:33 2016 +0200
+++ b/AbstractNumberVector.st	Thu Jun 02 11:26:05 2016 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 2011 by Claus Gittinger
               All Rights Reserved
@@ -215,9 +217,13 @@
 !AbstractNumberVector methodsFor:'destructive arithmetic support'!
 
 primAbs
-    "low performance fall back: destructive replace each element by its absolute value"
+    "low performance fall back: destructive replace each element by its absolute value.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) abs].
+    |sz "{ Class: SmallInteger }"|
+    
+    sz := self size.
+    1 to: sz do:[:i| self at:i put: (self at:i) abs].
 
     "
      |f|
@@ -232,11 +238,15 @@
     "
 !
 
-primAddArray: floatArray
+primAddArray:anArray
     "low performance fallback: destructively add the vector argument into the receiver.
-     The argument must be another vector"
+     The argument must be another vector.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) + (floatArray at: i)].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to:sz do:[:i| self at:i put: (self at:i) + (anArray at:i)].
 
     "
      |f1 f2|
@@ -249,16 +259,24 @@
 !
 
 primAddScalar: aScalar
-    "low performance fallback: destructively add the scalar argument into the receiver."
+    "low performance fallback: destructively add the scalar argument into the receiver.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) + aScalar].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to:sz do:[:i| self at:i put:(self at:i) + aScalar].
 !
 
 primDivArray: floatArray
     "low performance fallback: destructively divide the vector argument into the receiver.
-     The argument must be another vector"
+     The argument must be another vector.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) / (floatArray at: i)].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to: sz do:[:i| self at: i put: (self at: i) / (floatArray at: i)].
 
     "
      |f1 f2|
@@ -271,16 +289,25 @@
 !
 
 primDivScalar: aScalar
-    "low performace fallback: destructively divide each element of the receiver by the scalar argument."
+    "low performace fallback: destructively divide each element of the receiver 
+     by the scalar argument.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) / aScalar ].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to: sz do:[:i| self at: i put: (self at: i) / aScalar ].
 !
 
 primMulArray: floatArray
     "low performance fallback: destructively multiply the vector argument into the receiver.
-     The argument must be another vector"
+     The argument must be another vector.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) * (floatArray at: i)].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to: sz do:[:i| self at: i put: (self at: i) * (floatArray at: i)].
 
     "
      |f1 f2|
@@ -293,15 +320,24 @@
 !
 
 primMulScalar: aScalar
-    "low performace fallback: destructively multiply each element of the receiver by the scalar argument."
+    "low performace fallback: destructively multiply each element of the receiver 
+     by the scalar argument.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) * aScalar ].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to: sz do:[:i| self at: i put: (self at: i) * aScalar ].
 !
 
 primNegated
-    "low performance fallback: destructively negative value of each element"
+    "low performance fallback: destructively negative value of each element.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) negated].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to: sz do:[:i| self at: i put: (self at: i) negated].
 
     "
      |f|
@@ -314,9 +350,13 @@
 
 primSubtractArray: floatArray
     "low performance fallback: destructively subtract the vector argument into the receiver.
-     The argument must be another vector"
+     The argument must be another vector.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) - (floatArray at: i)].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to: sz do:[:i| self at: i put: (self at: i) - (floatArray at: i)].
 
     "
      |f1 f2|
@@ -329,9 +369,14 @@
 !
 
 primSubtractScalar: aScalar
-    "low performace fallback: destructively subtract the scalar argument from each element of the receiver."
+    "low performace fallback: destructively subtract the scalar argument 
+     from each element of the receiver.
+     May be redefined in subclasses to use vector instructions"
 
-    1 to: self size do:[:i| self at: i put: (self at: i) - aScalar ].
+    |sz "{ Class: SmallInteger }"|
+
+    sz := self size.
+    1 to: sz do:[:i| self at: i put: (self at: i) - aScalar ].
 ! !
 
 !AbstractNumberVector methodsFor:'queries'!