casacore
|
Non-templated base class for templated Array class. More...
#include <ArrayBase.h>
Public Member Functions | |
ArrayBase () noexcept | |
ArrayBase (const IPosition &shape) | |
Create an array of the given shape, i.e. More... | |
ArrayBase (const ArrayBase &other) | |
Copy constructor. More... | |
ArrayBase (ArrayBase &&source) noexcept | |
ArrayBase & | assign (const ArrayBase &) |
Assignment. More... | |
ArrayBase & | operator= (const ArrayBase &)=delete |
ArrayBase & | operator= (ArrayBase &&) noexcept |
virtual | ~ArrayBase () noexcept |
Destructor. More... | |
size_t | 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 std::unique_ptr< 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 std::unique_ptr< ArrayPositionIterator > | makeIterator (size_t byDim) const |
Resize the array and optionally copy the values. More... | |
virtual std::unique_ptr< 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 (size_t index) const |
void | validateIndex (size_t index1, size_t index2) const |
void | validateIndex (size_t index1, size_t index2, size_t index3) const |
Static Public Member Functions | |
static unsigned | arrayVersion () |
Array version for major change (used by ArrayIO). More... | |
Protected Member Functions | |
ArrayBase (ArrayBase &&source, const IPosition &shapeForSource) noexcept | |
For subclasses, this move constructor allows the moved-from object to obtain a given shape after resizing. More... | |
void | swap (ArrayBase &source) noexcept |
bool | reformOrResize (const IPosition &newShape, bool resizeIfNeeded, size_t nReferences, long long nElementsAllocated, bool copyDataIfNeeded, size_t 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 &, size_t 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 (size_t firstAxis, long long 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... | |
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... | |
size_t | 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 72 of file ArrayBase.h.
|
noexcept |
|
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.
|
noexcept |
|
virtualnoexcept |
Destructor.
|
protectednoexcept |
For subclasses, this move constructor allows the moved-from object to obtain a given shape after resizing.
This way, e.g. a source Matrix can still kee a dimensionality of 2.
|
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 142 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, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
protected |
|
protected |
Make the indexing step sizes.
Referenced by casacore::Array< T, Alloc >::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.
|
inlineprotected |
Are the shapes identical?
Definition at line 247 of file ArrayBase.h.
References casacore::IPosition::isEqual(), and length_p.
Referenced by casacore::Array< T, Alloc >::conform().
|
inline |
Are the array data contiguous? If they are not contiguous, getStorage
(see below) needs to make a copy.
Definition at line 116 of file ArrayBase.h.
References contiguous_p.
Referenced by casacore::ArrayMath_global_functions_Array_mathematical_operations::arrayContTransform(), casacore::ArrayMath_global_functions_Array_mathematical_operations::arrayTransformInPlace(), casacore::MArrayMath_global_functions_MArray_mathematical_operations::avdev(), casacore::MArrayMath_global_functions_MArray_mathematical_operations::max(), casacore::MArrayMath_global_functions_MArray_mathematical_operations::min(), casacore::MArrayLogical_global_functions_MArray_logical_operations::nfalse(), casacore::MArrayLogical_global_functions_MArray_logical_operations::ntrue(), casacore::MArrayMath_global_functions_MArray_mathematical_operations::product(), casacore::MArrayMath_global_functions_MArray_mathematical_operations::rms(), casacore::MArrayMath_global_functions_MArray_mathematical_operations::sum(), casacore::MArrayMath_global_functions_MArray_mathematical_operations::sumsqr(), and casacore::MArrayMath_global_functions_MArray_mathematical_operations::variance().
|
protected |
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 110 of file ArrayBase.h.
References nels_p.
Referenced by casacore::MArrayBase::hasMask().
IPosition casacore::ArrayBase::endPosition | ( | ) | const |
|
virtual |
Reimplemented in casacore::Array< T, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< M >, and casacore::Array< casacore::String >.
Referenced by casacore::Adios2StManColumnT< T >::toAdios().
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, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, 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, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< M >, and casacore::Array< casacore::String >.
Referenced by casacore::Adios2StManColumnT< T >::fromAdios(), and casacore::Adios2StManColumnT< T >::toAdios().
|
virtual |
Reimplemented in casacore::Array< T, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, 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, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< M >, and casacore::Array< casacore::String >.
|
protected |
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 |
Resize the array and optionally copy the values.
The default implementation in ArrayBase throws an exception. virtual void resize(const IPosition &newShape, bool copyValues, ArrayInitPolicy policy);
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, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, 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 98 of file ArrayBase.h.
References ndimen_p.
Referenced by casacore::Matrix< T, Alloc >::assign_conforming(), casacore::ArrayMath_global_functions_Array_mathematical_operations::expandArray(), casacore::Cube< T, Alloc >::operator=(), casacore::TableProxy::record2Array(), and casacore::Array< T, Alloc >::setEndIter().
|
inline |
How many elements does this array have? Product of all axis lengths.
Definition at line 103 of file ArrayBase.h.
References nels_p.
Referenced by casacore::areEQ(), casacore::TabVecRep< T >::conform(), casacore::MSSelection::getDDIDList(), casacore::MSSelection::getSPWDDIDList(), casacore::MSSelection::getStateObsModeList(), casacore::ColumnsIndex::isUnique(), casacore::ColumnsIndexArray::isUnique(), casacore::ArrayMath_global_functions_Array_mathematical_operations::madfm(), casacore::ArrayMath_global_functions_Array_mathematical_operations::madfmInPlace(), casacore::ArrayMath_global_functions_Array_mathematical_operations::median(), casacore::ArrayMath_global_functions_Array_mathematical_operations::medianInPlace(), casacore::LCSlicer::ndim(), casacore::FunctionParam< T >::nelements(), and casacore::Vector< T, Alloc >::resize().
|
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::Matrix< T, Alloc >, casacore::Matrix< casacore::SquareMatrix< Complex, 2 > >, casacore::Matrix< Float >, casacore::Matrix< casacore::GaussianBeam >, casacore::Matrix< Double >, casacore::Matrix< T >, casacore::Matrix< Int >, casacore::Matrix< Int64 >, casacore::Matrix< FType >, casacore::Matrix< Bool >, casacore::Matrix< Complex >, casacore::Cube< T, Alloc >, casacore::Cube< Double >, casacore::Cube< casacore::RigidVector< Double, 2 > >, casacore::Array< T, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< M >, casacore::Array< casacore::String >, casacore::Vector< T, Alloc >, casacore::Vector< Quantum< Double > >, casacore::Vector< casacore::SquareMatrix< Complex, 2 > >, casacore::Vector< casacore::MPosition >, casacore::Vector< Float >, casacore::Vector< double >, casacore::Vector< Double >, casacore::Vector< casacore::Vector< Range > >, casacore::Vector< T >, casacore::Vector< Int >, casacore::Vector< casacore::Unit >, casacore::Vector< rownr_t >, casacore::Vector< Int64 >, casacore::Vector< casacore::MDirection >, casacore::Vector< casacore::MFrequency >, casacore::Vector< casacore::RORecordFieldPtr< Double > >, casacore::Vector< size_t >, casacore::Vector< FType >, casacore::Vector< Bool >, casacore::Vector< typename casacore::FunctionTraits< T >::BaseType >, casacore::Vector< typename casacore::FunctionTraits< T >::ArgType >, casacore::Vector< casacore::Slicer * >, casacore::Vector< casacore::Quantum< Double > >, casacore::Vector< casacore::MeasComet * >, casacore::Vector< Domain >, casacore::Vector< casacore::Vector< typename casacore::LSQTraits< typename casacore::FunctionTraits< T >::BaseType >::base > >, casacore::Vector< uInt >, casacore::Vector< ArgType >, and casacore::Vector< casacore::String >.
|
virtual |
Reimplemented in casacore::Array< T, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< M >, and casacore::Array< casacore::String >.
Referenced by casacore::Adios2StManColumnT< T >::fromAdios().
|
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, Alloc >, casacore::Array< Float >, casacore::Array< Double >, casacore::Array< casacore::MVFrequency >, casacore::Array< Short >, casacore::Array< T >, casacore::Array< Int >, casacore::Array< Int64 >, casacore::Array< DComplex >, casacore::Array< Bool >, casacore::Array< FType >, casacore::Array< typename casacore::NumericTraits< FType >::ConjugateType >, casacore::Array< M >, casacore::Array< casacore::String >, casacore::Vector< T, Alloc >, casacore::Vector< Quantum< Double > >, casacore::Vector< casacore::SquareMatrix< Complex, 2 > >, casacore::Vector< casacore::MPosition >, casacore::Vector< Float >, casacore::Vector< double >, casacore::Vector< Double >, casacore::Vector< casacore::Vector< Range > >, casacore::Vector< T >, casacore::Vector< Int >, casacore::Vector< casacore::Unit >, casacore::Vector< rownr_t >, casacore::Vector< Int64 >, casacore::Vector< casacore::MDirection >, casacore::Vector< casacore::MFrequency >, casacore::Vector< casacore::RORecordFieldPtr< Double > >, casacore::Vector< size_t >, casacore::Vector< FType >, casacore::Vector< Bool >, casacore::Vector< typename casacore::FunctionTraits< T >::BaseType >, casacore::Vector< typename casacore::FunctionTraits< T >::ArgType >, casacore::Vector< casacore::Slicer * >, casacore::Vector< casacore::Quantum< Double > >, casacore::Vector< casacore::MeasComet * >, casacore::Vector< Domain >, casacore::Vector< casacore::Vector< typename casacore::LSQTraits< typename casacore::FunctionTraits< T >::BaseType >::base > >, casacore::Vector< uInt >, casacore::Vector< ArgType >, and casacore::Vector< casacore::String >.
|
inline |
The length of each axis.
Definition at line 125 of file ArrayBase.h.
References length_p.
Referenced by casacore::checkArrayShapes(), casacore::ArrayMath_global_functions_Array_mathematical_operations::expandArray(), casacore::MArray< T >::fill(), casacore::ArrayMath_global_functions_Array_mathematical_operations::operator*(), casacore::ArrayMath_global_functions_Array_mathematical_operations::operator/(), casacore::MArrayMath_global_functions_MArray_mathematical_operations::partialArrayMath(), casacore::TableProxy::record2Array(), casacore::LELArray< T >::shape(), and casacore::TableExprNodeSet::toArray().
|
inline |
Definition at line 105 of file ArrayBase.h.
References nels_p.
Referenced by casacore::CoordinateSystem::_downcase(), casacore::ArrayLogical_global_functions_Array_logical_operations::allSame(), casacore::TableParseSelect::doGroupByAggrSingleKey(), and casacore::MArray< T >::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 136 of file ArrayBase.h.
References steps_p.
Referenced by casacore::ArrayMath_global_functions_Array_mathematical_operations::expandArray().
|
protectednoexcept |
void casacore::ArrayBase::validateConformance | ( | const ArrayBase & | ) | const |
Various helper functions.
void casacore::ArrayBase::validateIndex | ( | const IPosition & | ) | const |
Referenced by casacore::Vector< T, Alloc >::operator()().
void casacore::ArrayBase::validateIndex | ( | size_t | index | ) | const |
void casacore::ArrayBase::validateIndex | ( | size_t | index1, |
size_t | index2 | ||
) | const |
void casacore::ArrayBase::validateIndex | ( | size_t | index1, |
size_t | index2, | ||
size_t | index3 | ||
) | const |
|
protected |
Are the data contiguous?
Definition at line 273 of file ArrayBase.h.
Referenced by contiguousStorage(), casacore::Matrix< T, Alloc >::operator()(), casacore::Vector< T, Alloc >::operator[](), and casacore::Array< T, Alloc >::setEndIter().
|
protected |
Definition at line 276 of file ArrayBase.h.
Referenced by casacore::Cube< T, Alloc >::index(), casacore::Cube< T, Alloc >::index_continuous(), casacore::Vector< T, Alloc >::operator()(), casacore::Vector< T, Alloc >::operator[](), casacore::Cube< T, Alloc >::xinc(), casacore::Matrix< T, Alloc >::xinc(), casacore::Cube< T, Alloc >::yinc(), casacore::Matrix< T, Alloc >::yinc(), and casacore::Cube< T, Alloc >::zinc().
|
protected |
Used to hold the shape, increment into the underlying storage and originalLength of the array.
Definition at line 276 of file ArrayBase.h.
Referenced by conform2(), casacore::Cube< T, Alloc >::ncolumn(), casacore::Matrix< T, Alloc >::ncolumn(), casacore::Cube< T, Alloc >::nplane(), casacore::Cube< T, Alloc >::nrow(), casacore::Matrix< T, Alloc >::nrow(), casacore::Array< T, Alloc >::setEndIter(), shape(), casacore::Cube< T, Alloc >::shape(), casacore::Matrix< T, Alloc >::shape(), and casacore::Vector< T, Alloc >::shape().
|
protected |
|
protected |
Number of elements in the array.
Cached rather than computed.
Definition at line 269 of file ArrayBase.h.
Referenced by empty(), nelements(), casacore::Array< T, Alloc >::setEndIter(), and size().
|
protected |
Definition at line 276 of file ArrayBase.h.
Referenced by casacore::Cube< T, Alloc >::index(), casacore::Cube< T, Alloc >::index_continuous(), casacore::Cube< T, Alloc >::yinc(), casacore::Matrix< T, Alloc >::yinc(), and casacore::Cube< T, Alloc >::zinc().
|
protected |
Used to hold the step to next element in each dimension.
Definition at line 278 of file ArrayBase.h.
Referenced by casacore::Array< T, Alloc >::setEndIter(), and steps().