
<change id=0095>
 <author> Ger van Diepen </author>
 <date> 2001/05/22 </date>
 <avers> 1.6 </avers>
 <area> Library </area>
 <package> casa </package>
 <module> Arrays </module>
 <type> Code </type>
 <category> New </category>
 <defects>  </defects>
 <summary>
Added functions partial..., ntrue, nfalse, reorderArray
 </summary>
 <description>
The following (global) functions have been added:
- ntrue, nfalse   returning the nr of true/false elements in an array
- reorderArray    making it possible to rearrange the axes of an array
                  (i.e. it is a generalized form of the matrix transpose)
- partialX        where X is min,max,sum,mean,median, etc.
                  They calculate the min, etc. for the elements in a given
                  number of axes. E.g. in a cube it can calculate the
                  min for each plane, resulting in a vector of min values.
                  They are very efficient.
 </description>
</change>

<change id=0126>
 <author> Wim Brouw </author>
 <date> 2002/06/21 </date>
 <avers> 1.8 </avers>
 <area> Library </area>
 <package> casa </package>
 <module> Arrays </module>
 <type> Code </type>
 <category> New </category>
 <defects>  </defects>
 <summary>
Added conversion to/from STL vector
 </summary>
 <description>
A conversion from STL vector to aips++ Vector (through a non-explicit constructor); and from any Array to STL vector (through Array::tovector())
was added.
This connection can also be used to go to/from  other sequential STL containers using range constructors.
 </description>
</change>

<change id=0130>
 <author> Wim Brouw </author>
 <date> 2002/12/09 </date>
 <avers> 1.8 </avers>
 <area> Library </area>
 <package> casa </package>
 <module> Arrays </module>
 <type> Code Documentation Review </type>
 <category> New </category>
 <defects>  </defects>
 <summary>
Added ArrayAccessor
 </summary>
 <description>
An ArrayAccessor class was added to optimise stepped access along a single
axis of a multi-dimensional Array at a time.
At the same time the access (by caching the 'step' along an axis) to an indexed value (multi-dimensional) has improved.
An STL-like iterator class has been added to the Array class recently as well.
 </description>
</change>

<change id=0132>
 <author> Ger van Diepen </author>
 <date> 2002/12/13 </date>
 <avers> 1.8 </avers>
 <area> Library </area>
 <package> casa </package>
 <module> Arrays </module>
 <type> Code </type>
 <category> New </category>
 <defects>  </defects>
 <summary>
Added STL-style iterator
 </summary>
 <description>
In the Array class an STL-style iterator has been added. For contiguous arrays it is about 20% slower than using the pointer returned by getStorage, but for non-contiguous arrays it is considerably faster.
Currently only a forward iterator exist (for const and non-const).
If needed, a backward iterator could be added in the future.
 </description>
</change>

<change id=0156>
 <author> Ger van Diepen </author>
 <date> 2003/08/13 </date>
 <avers> 1.9 </avers>
 <area> Library </area>
 <package> casa </package>
 <module> Arrays </module>
 <type> Code </type>
 <category> New </category>
 <defects>  </defects>
 <summary>
Added function assign
 </summary>
 <description>
Array::operator= is the function to assign one array to another (using copy semantics). One of its properties is that the shapes of the arrays have to match or that the destination array is empty.
Some people did not like that property as they wanted an automatic resize if the shapes mismatch.

For that reason the function assign has been added to the classes Array, Vector, Matrix, and Cube. It resizes the array if needed and uses operator= thereafter to do the actual assignment.

Note that assign should only be used when needed. For example, when assigning an array to a slice of another array, operator= should always be used, because in such a case the shapes should match.
 </description>
</change>

<change id=0162>
 <author> Ger van Diepen </author>
 <date> 2004/12/23 </date>
 <avers> 1.9 </avers>
 <area> Library </area>
 <package> casa </package>
 <module> Arrays </module>
 <type> Code </type>
 <category> New </category>
 <defects>  </defects>
 <summary>
Added arbitrary axes to ArrayIterator classes
 </summary>
 <description>
ArrayIterator (and its derived classes VectorIterator and MatrixIterator) have been extended with the ability to iterate over any combination of axes.
For example, in VectorIterator the cursor axis can now be axis 2. Before it could only be axis 0.
 </description>
</change>

<change id=0166>
 <author> Ger van Diepen </author>
 <date> 2005/04/04 </date>
 <avers> 1.9 </avers>
 <area> Library </area>
 <package> casa </package>
 <module> Arrays </module>
 <type> Code </type>
 <category> New </category>
 <defects>  </defects>
 <summary>
Vector accepts Array with > 1 dimensions
 </summary>
 <description>
The Vector constructor taking an Array has been changed such that now it accepts an Array with more than one dimensions as long as at most one dimensions has a length > 1. In this way one can easily make a Vector from a 1-dim slice of an Array without having to use the reform function.

Furthermore the reference function has been changed to accept a const Array
object. It makes it possible to use a temporary Array object (e.g. a slice) directly instead of having to create an intermediate Array object. Several Array examples already contained this until now incorrect behaviour.

Finally The Matrix and Cube constructor accepting an Array can now correctly handle a 0-dim Array.
 </description>
</change>
