casacore
|
Non-templated base class for templated Array class. More...
#include <ArrayBase.h>
Public Member Functions | |
ArrayBase () | |
ArrayBase (const IPosition &shape) | |
Create an array of the given shape, i.e. More... | |
ArrayBase (const ArrayBase &other) | |
Copy constructor. More... | |
ArrayBase & | operator= (const ArrayBase &) |
Assignment. More... | |
virtual | ~ArrayBase () |
Destructor. More... | |
uInt | ndim () const |
The dimensionality of this array. More... | |
size_t | nelements () const |
How many elements does this array have? Product of all axis lengths. More... | |
size_t | size () const |
Bool | empty () const |
Is the array empty (i.e. More... | |
Bool | contiguousStorage () const |
Are the array data contiguous? If they are not contiguous, getStorage (see below) needs to make a copy. More... | |
virtual Bool | ok () const |
Check to see if the Array is consistent. More... | |
const IPosition & | shape () const |
The length of each axis. More... | |
IPosition | endPosition () const |
A convenience function: endPosition(i) = shape(i) - 1; i.e. More... | |
const IPosition & | steps () const |
Return steps to be made if stepping one element in a dimension. More... | |
virtual CountedPtr< ArrayBase > | makeArray () const |
Make an empty array of the same type. More... | |
virtual void | resize (const IPosition &newShape, Bool copyValues=False) |
Resize the array and optionally copy the values. More... | |
virtual void | resize (const IPosition &newShape, Bool copyValues, ArrayInitPolicy policy) |
Resize the array and optionally copy the values. More... | |
virtual CountedPtr< ArrayPositionIterator > | makeIterator (uInt byDim) const |
Create an ArrayIterator object of the correct type. More... | |
virtual CountedPtr< ArrayBase > | getSection (const Slicer &) const |
Get a reference to a section of an array. More... | |
virtual void | assignBase (const ArrayBase &source, Bool checkType=True) |
Assign the source array to this array. More... | |
virtual void * | getVStorage (Bool &deleteIt) |
The following functions behave the same as the corresponding getStorage functions in the derived templated Array class. More... | |
virtual const void * | getVStorage (Bool &deleteIt) const |
virtual void | putVStorage (void *&storage, Bool deleteAndCopy) |
virtual void | freeVStorage (const void *&storage, Bool deleteIt) const |
void | validateConformance (const ArrayBase &) const |
Various helper functions. More... | |
void | validateIndex (const IPosition &) const |
void | validateIndex (uInt index) const |
void | validateIndex (uInt index1, uInt index2) const |
void | validateIndex (uInt index1, uInt index2, uInt index3) const |
Static Public Member Functions | |
static uInt | arrayVersion () |
Array version for major change (used by ArrayIO). More... | |
Protected Member Functions | |
void | baseCopy (const ArrayBase &that) |
Bool | reformOrResize (const IPosition &newShape, Bool resizeIfNeeded, uInt nReferences, Int64 nElementsAllocated, Bool copyDataIfNeeded, uInt resizePercentage) |
Either reforms the array if size permits or resizes it to the new shape. More... | |
Bool | isStorageContiguous () const |
Determine if the storage of a subset is contiguous. More... | |
void | checkVectorShape () |
Check if the shape of a vector is correct. More... | |
void | checkMatrixShape () |
Check if the shape of a matrix is correct. More... | |
void | checkCubeShape () |
Check if the shape of a cube is correct. More... | |
void | baseReform (ArrayBase &tmp, const IPosition &shape, Bool strict=True) const |
Reform the array to a shape with the same nr of elements. More... | |
void | baseNonDegenerate (const ArrayBase &other, const IPosition &ignoreAxes) |
Remove the degenerate axes from the Array object. More... | |
void | baseAddDegenerate (ArrayBase &, uInt numAxes) |
These member functions return an Array reference with the specified number of extra axes, all of length one, appended to the end of the Array. More... | |
size_t | makeSubset (ArrayBase &out, const IPosition &b, const IPosition &e, const IPosition &i) |
Make a subset of an array. More... | |
size_t | makeDiagonal (uInt firstAxis, Int64 diag) |
Set the length and stride such that the diagonal of the matrices defined by two consecutive axes is formed. More... | |
Bool | conform2 (const ArrayBase &other) const |
Are the shapes identical? More... | |
void | baseMakeSteps () |
Make the indexing step sizes. More... | |
void | throwNdimVector () |
Throw expection if vector dimensionality is incorrect. More... | |
Bool | copyVectorHelper (const ArrayBase &other) |
Helper function for templated Vector class. More... | |
Protected Attributes | |
size_t | nels_p |
Number of elements in the array. More... | |
uInt | ndimen_p |
Dimensionality of the array. More... | |
Bool | contiguous_p |
Are the data contiguous? More... | |
IPosition | length_p |
Used to hold the shape, increment into the underlying storage and originalLength of the array. More... | |
IPosition | inc_p |
IPosition | originalLength_p |
IPosition | steps_p |
Used to hold the step to next element in each dimension. More... | |
Non-templated base class for templated Array class.
ArrayBase is only used to factor out common code from the templated Array class.
Definition at line 74 of file ArrayBase.h.
casacore::ArrayBase::ArrayBase | ( | ) |
|
explicit |
Create an array of the given shape, i.e.
after construction array.ndim() == shape.nelements() and array.shape() == shape. The origin of the Array is zero.
casacore::ArrayBase::ArrayBase | ( | const ArrayBase & | other | ) |
Copy constructor.
|
virtual |
Destructor.
|
inlinestatic |
Array version for major change (used by ArrayIO).
enum did not work properly with cfront 3.0.1), so replaced by a static inline function. Users won't normally use this.
Definition at line 138 of file ArrayBase.h.
|
virtual |
Assign the source array to this array.
If checkType==True
, it is checked if the underlying template types match. Otherwise, it is only checked in debug mode (for performance).
The default implementation in ArrayBase throws an exception.
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
inlineprotected |
Definition at line 182 of file ArrayBase.h.
References operator=().
|
protected |
Make the indexing step sizes.
Referenced by casacore::Array< casacore::String >::makeSteps().
|
protected |
Remove the degenerate axes from the Array object.
This is the implementation of the nonDegenerate functions. It has a different name to be able to make it virtual without having the "hide virtual function" message when compiling derived classes.
|
protected |
Reform the array to a shape with the same nr of elements.
If nonStrict then caller assumes responsibility for not overrunning storage (avoid or use with extreme care).
|
protected |
Check if the shape of a cube is correct.
Adjust it if smaller.
|
protected |
Check if the shape of a matrix is correct.
Adjust it if smaller.
|
protected |
Check if the shape of a vector is correct.
If possible, adjust if not. It is possible if at most one axis has length > 1.
Are the shapes identical?
Definition at line 239 of file ArrayBase.h.
References casacore::IPosition::isEqual(), and length_p.
Referenced by casacore::Array< casacore::String >::conform().
|
inline |
Are the array data contiguous? If they are not contiguous, getStorage
(see below) needs to make a copy.
Definition at line 112 of file ArrayBase.h.
References contiguous_p.
Referenced by casacore::ArrayMath_global_functions_Array_mathematical_operations::arrayContTransform(), and casacore::ArrayMath_global_functions_Array_mathematical_operations::arrayTransformInPlace().
Helper function for templated Vector class.
It returns if this and other are conformant.
|
inline |
Is the array empty (i.e.
no elements)?
Definition at line 106 of file ArrayBase.h.
References nels_p.
Referenced by casacore::MArrayBase::hasMask().
IPosition casacore::ArrayBase::endPosition | ( | ) | const |
|
virtual |
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
virtual |
Get a reference to a section of an array.
This is the same as Array<T>::operator(), but without having to know the exact template type.
The default implementation in ArrayBase throws an exception.
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
virtual |
The following functions behave the same as the corresponding getStorage functions in the derived templated Array class.
They handle a pointer to a contiguous block of array data. If the array is not contiguous, a copy is used to make it contiguous.
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
virtual |
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
protected |
Determine if the storage of a subset is contiguous.
|
virtual |
Make an empty array of the same type.
The default implementation in ArrayBase throws an exception.
Reimplemented in casacore::Array< T >.
Set the length and stride such that the diagonal of the matrices defined by two consecutive axes is formed.
diag
== 0 indicates the main diagonal, >0 above, <0 below. It returns the offset of the diagonal in the (original) array.
|
virtual |
Create an ArrayIterator object of the correct type.
This is implemented in the derived Array classes.
The default implementation in ArrayBase throws an exception.
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
protected |
Make a subset of an array.
It checks if start,end,incr are within the array limits. It returns the offset of the subset in the (original) array.
|
inline |
The dimensionality of this array.
Definition at line 94 of file ArrayBase.h.
References ndimen_p.
Referenced by casacore::TableProxy::record2Array(), and casacore::Array< casacore::String >::setEndIter().
|
inline |
How many elements does this array have? Product of all axis lengths.
Definition at line 99 of file ArrayBase.h.
References nels_p.
Referenced by casacore::areEQ(), casacore::ArrayMath_global_functions_Array_mathematical_operations::madfm(), casacore::ArrayMath_global_functions_Array_mathematical_operations::madfmInPlace(), casacore::ArrayMath_global_functions_Array_mathematical_operations::median(), and casacore::ArrayMath_global_functions_Array_mathematical_operations::medianInPlace().
|
virtual |
Check to see if the Array is consistent.
This is about the same thing as checking for invariants. If AIPS_DEBUG is defined, this is invoked after construction and on entry to most member functions.
Reimplemented in casacore::Array< T >.
Assignment.
Referenced by baseCopy().
|
virtual |
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
protected |
Either reforms the array if size permits or resizes it to the new shape.
Implementation of Array<T>::reformOrResize (slightly different signature).
|
virtual |
Resize the array and optionally copy the values.
The default implementation in ArrayBase throws an exception.
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
virtual |
Resize the array and optionally copy the values.
The default implementation in ArrayBase throws an exception.
Reimplemented in casacore::Array< T >, casacore::Array< Float >, casacore::Array< recordType >, casacore::Array< MRadialVelocity >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< MPosition >, casacore::Array< MDirection >, casacore::Array< Short >, casacore::Array< uChar >, casacore::Array< MFrequency >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< casacore::MVTime >, casacore::Array< DComplex >, casacore::Array< FType >, casacore::Array< Bool >, casacore::Array< Complex >, casacore::Array< MEarthMagnetic >, casacore::Array< MDoppler >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< MEpoch >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
inline |
The length of each axis.
Definition at line 121 of file ArrayBase.h.
References length_p.
Referenced by casacore::checkArrayShapes(), casacore::MArray< casacore::String >::fill(), casacore::TableProxy::record2Array(), and casacore::TableExprNodeSet::toArray().
|
inline |
Definition at line 101 of file ArrayBase.h.
References nels_p.
Referenced by casacore::ArrayLogical_global_functions_Array_logical_operations::allSame(), and casacore::MArray< casacore::String >::flatten().
|
inline |
Return steps to be made if stepping one element in a dimension.
This is the 'physical' step, thus it also works correctly for non-contiguous arrays. E.g. data() + steps(0)
gives the second element of the first axis.
Definition at line 132 of file ArrayBase.h.
References steps_p.
|
protected |
Throw expection if vector dimensionality is incorrect.
void casacore::ArrayBase::validateConformance | ( | const ArrayBase & | ) | const |
Various helper functions.
void casacore::ArrayBase::validateIndex | ( | const IPosition & | ) | const |
void casacore::ArrayBase::validateIndex | ( | uInt | index | ) | const |
|
protected |
Are the data contiguous?
Definition at line 268 of file ArrayBase.h.
Referenced by contiguousStorage(), and casacore::Array< casacore::String >::setEndIter().
|
protected |
Definition at line 271 of file ArrayBase.h.
|
protected |
Used to hold the shape, increment into the underlying storage and originalLength of the array.
Definition at line 271 of file ArrayBase.h.
Referenced by conform2(), casacore::Array< casacore::String >::setEndIter(), and shape().
|
protected |
|
protected |
Number of elements in the array.
Cached rather than computed.
Definition at line 264 of file ArrayBase.h.
Referenced by empty(), nelements(), casacore::Array< casacore::String >::setEndIter(), and size().
|
protected |
Definition at line 271 of file ArrayBase.h.
|
protected |
Used to hold the step to next element in each dimension.
Definition at line 273 of file ArrayBase.h.
Referenced by casacore::Array< casacore::String >::setEndIter(), and steps().