casacore
|
#include <ExprNodeSet.h>
Public Member Functions | |
TableExprNodeSet () | |
Construct an empty set. | |
TableExprNodeSet (const IPosition &) | |
Construct from an IPosition . | |
TableExprNodeSet (const Slicer &) | |
Construct from a Slicer . | |
TableExprNodeSet (const Vector< rownr_t > &rownrs, const TableExprNodeSet &) | |
Construct a set with n*set.size() elements where n is the number of rows. | |
TableExprNodeSet (const TableExprNodeSet &) | |
~TableExprNodeSet () | |
TableExprNodeSet & | operator= (const TableExprNodeSet &)=delete |
A copy of a TableExprNodeSet cannot be assigned. | |
void | add (const TENSEBShPtr &, Bool adaptType=False) |
Add an element to the set. | |
void | add (const TableExprNodeSetElem &elem, Bool adaptType=False) |
void | show (ostream &os, uInt indent) const override |
Show the node. | |
virtual void | flattenTree (std::vector< TableExprNodeRep * > &) override |
Flatten the node tree by adding the node and its children to the vector. | |
void | checkEqualDataTypes () const |
Check if the data type of the set elements are the same. | |
Bool | isSingle () const |
Contains the set only single elements? Single means that only single values are given (thus no end nor incr). | |
Bool | isDiscrete () const |
Contains the set only discrete elements? Discrete means that no continuous ranges are given, but discrete ranges (using :) are possible. | |
Bool | isBounded () const |
Is the set fully bounded (discrete and no undefined end values)? | |
size_t | size () const |
Get the number of elements. | |
size_t | nelements () const |
For backward compatibility. | |
const TENSEBShPtr & | operator[] (size_t index) const |
Get the i-th element. | |
Bool | hasArrays () const |
Contains the set array values? | |
TENShPtr | setOrArray () const |
Try to convert the set to an array. | |
template<typename T > | |
MArray< T > | toArray (const TableExprId &id) const |
MArray< Bool > | getArrayBool (const TableExprId &id) override |
Get an array value for this bounded set in the given row. | |
MArray< Int64 > | getArrayInt (const TableExprId &id) override |
MArray< Double > | getArrayDouble (const TableExprId &id) override |
MArray< DComplex > | getArrayDComplex (const TableExprId &id) override |
MArray< String > | getArrayString (const TableExprId &id) override |
MArray< MVTime > | getArrayDate (const TableExprId &id) override |
Bool | contains (const TableExprId &id, Bool value) override |
Does a value occur in the set? | |
Bool | contains (const TableExprId &id, Int64 value) override |
Bool | contains (const TableExprId &id, Double value) override |
Bool | contains (const TableExprId &id, DComplex value) override |
Bool | contains (const TableExprId &id, String value) override |
Bool | contains (const TableExprId &id, MVTime value) override |
MArray< Bool > | contains (const TableExprId &id, const MArray< Bool > &value) override |
MArray< Bool > | contains (const TableExprId &id, const MArray< Int64 > &value) override |
MArray< Bool > | contains (const TableExprId &id, const MArray< Double > &value) override |
MArray< Bool > | contains (const TableExprId &id, const MArray< DComplex > &value) override |
MArray< Bool > | contains (const TableExprId &id, const MArray< String > &value) override |
MArray< Bool > | contains (const TableExprId &id, const MArray< MVTime > &value) override |
Bool | contains (const TableExprId &id, int value) |
Useful to make overloading clearer (mainly for test programs). | |
Bool | contains (const TableExprId &id, const char *value) |
void | adaptSetUnits (const Unit &) override |
Let a set node convert itself to the given unit. | |
void | setShape () |
Try to set the set's shape for a bounded set with single elements. | |
![]() | |
TableExprNodeRep (NodeDataType, ValueType, OperType, ArgType, ExprType, Int ndim, const IPosition &shape) | |
Construct a node. | |
TableExprNodeRep (NodeDataType, ValueType, OperType, ExprType) | |
This constructor is called from the derived TableExprNodeRep. | |
TableExprNodeRep (const TableExprNodeRep &)=default | |
Copy constructor. | |
TableExprNodeRep & | operator= (const TableExprNodeRep &)=delete |
Assign to a TableExprNodeRep cannot be done. | |
virtual | ~TableExprNodeRep ()=default |
The destructor deletes all the underlying TableExprNode objects. | |
virtual Bool | isAggregate () const |
Is the node an aggegation node. | |
virtual TableExprInfo | getTableInfo () const |
Get the table info. | |
virtual void | optimize () |
Try to optimize the node (meant for the right hand of the IN operator). | |
virtual void | disableApplySelection () |
Do not apply the selection. | |
virtual void | applySelection (const Vector< rownr_t > &rownrs) |
Re-create the column object for a selection of rows. | |
virtual Double | getUnitFactor () const |
Get the unit conversion factor. | |
virtual std::shared_ptr< TableExprGroupFuncBase > | makeGroupAggrFunc () |
Create the correct immediate aggregate function object. | |
virtual Bool | isLazyAggregate () const |
Is the aggregate function a lazy or an immediate one? The default implementation returns True (because all UDF aggregate functions have to be lazy). | |
virtual Bool | getBool (const TableExprId &id) |
Get a scalar value for this node in the given row. | |
virtual Int64 | getInt (const TableExprId &id) |
virtual Double | getDouble (const TableExprId &id) |
virtual DComplex | getDComplex (const TableExprId &id) |
virtual String | getString (const TableExprId &id) |
virtual TaqlRegex | getRegex (const TableExprId &id) |
virtual MVTime | getDate (const TableExprId &id) |
void | get (const TableExprId &id, Bool &value) |
General get functions for template purposes. | |
void | get (const TableExprId &id, Int64 &value) |
void | get (const TableExprId &id, Double &value) |
void | get (const TableExprId &id, DComplex &value) |
void | get (const TableExprId &id, MVTime &value) |
void | get (const TableExprId &id, String &value) |
void | get (const TableExprId &id, MArray< Bool > &value) |
void | get (const TableExprId &id, MArray< Int64 > &value) |
void | get (const TableExprId &id, MArray< Double > &value) |
void | get (const TableExprId &id, MArray< DComplex > &value) |
void | get (const TableExprId &id, MArray< MVTime > &value) |
void | get (const TableExprId &id, MArray< String > &value) |
MArray< Bool > | getBoolAS (const TableExprId &id) |
Get a value as an array, even it it is a scalar. | |
MArray< Int64 > | getIntAS (const TableExprId &id) |
MArray< Double > | getDoubleAS (const TableExprId &id) |
MArray< DComplex > | getDComplexAS (const TableExprId &id) |
MArray< String > | getStringAS (const TableExprId &id) |
MArray< MVTime > | getDateAS (const TableExprId &id) |
rownr_t | nrow () |
Get the number of rows in the table associated with this expression. | |
virtual Bool | getColumnDataType (DataType &) const |
Get the data type of the column. | |
virtual Array< Bool > | getColumnBool (const Vector< rownr_t > &rownrs) |
Get the value of the expression evaluated for the entire column. | |
virtual Array< uChar > | getColumnuChar (const Vector< rownr_t > &rownrs) |
virtual Array< Short > | getColumnShort (const Vector< rownr_t > &rownrs) |
virtual Array< uShort > | getColumnuShort (const Vector< rownr_t > &rownrs) |
virtual Array< Int > | getColumnInt (const Vector< rownr_t > &rownrs) |
virtual Array< uInt > | getColumnuInt (const Vector< rownr_t > &rownrs) |
virtual Array< Int64 > | getColumnInt64 (const Vector< rownr_t > &rownrs) |
virtual Array< Float > | getColumnFloat (const Vector< rownr_t > &rownrs) |
virtual Array< Double > | getColumnDouble (const Vector< rownr_t > &rownrs) |
virtual Array< Complex > | getColumnComplex (const Vector< rownr_t > &rownrs) |
virtual Array< DComplex > | getColumnDComplex (const Vector< rownr_t > &rownrs) |
virtual Array< String > | getColumnString (const Vector< rownr_t > &rownrs) |
virtual void | ranges (Block< TableExprRange > &) |
Convert the tree to a number of range vectors which at least select the same things. | |
NodeDataType | dataType () const |
Get the data type of the derived TableExprNode object. | |
Bool | isReal () const |
Is the data type real (i.e., integer or double)? | |
ValueType | valueType () const |
Get the value type. | |
void | setValueType (ValueType vtype) |
Set the value type. | |
OperType | operType () const |
Get the operator type. | |
ExprType | exprType () const |
Get the expression type. | |
Bool | isConstant () const |
Is the expression a constant? | |
const Unit & | unit () const |
Get the unit. | |
void | setUnit (const Unit &unit) |
Set the unit. | |
const Record & | attributes () const |
Get the attributes. | |
void | setAttributes (const Record &) |
Set the attributes. | |
Int | ndim () const |
Get the fixed dimensionality (same for all rows). | |
const IPosition & | shape () const |
Get the fixed shape (same for all rows). | |
const IPosition & | shape (const TableExprId &id) |
Get the shape for the given row. | |
virtual Bool | isDefined (const TableExprId &id) |
Is the value in the given row defined? The default implementation returns True. | |
Private Member Functions | |
TENShPtr | toConstArray () const |
Convert the const set to an array. | |
void | getArray (MArray< Bool > &marr, const TENShPtr &node, const TableExprId &id) const |
Get the array in a templated way. | |
void | getArray (MArray< Int64 > &marr, const TENShPtr &node, const TableExprId &id) const |
void | getArray (MArray< Double > &marr, const TENShPtr &node, const TableExprId &id) const |
void | getArray (MArray< DComplex > &marr, const TENShPtr &node, const TableExprId &id) const |
void | getArray (MArray< String > &marr, const TENShPtr &node, const TableExprId &id) const |
void | getArray (MArray< MVTime > &marr, const TENShPtr &node, const TableExprId &id) const |
Private Attributes | |
std::vector< TENSEBShPtr > | itsElems |
Bool | itsSingle |
Bool | itsDiscrete |
Bool | itsBounded |
Bool | itsCheckTypes |
Additional Inherited Members | |
![]() | |
enum | NodeDataType { NTBool , NTInt , NTDouble , NTComplex , NTString , NTRegex , NTDate , NTReal , NTDouCom , NTNumeric , NTAny } |
Define the data types of a node. More... | |
enum | ValueType { VTScalar , VTArray , VTRecord , VTSetElem , VTSet , VTIndex } |
Define the value types. More... | |
enum | OperType { OtPlus , OtMinus , OtTimes , OtDivide , OtModulo , OtBitAnd , OtBitOr , OtBitXor , OtBitNegate , OtEQ , OtGE , OtGT , OtNE , OtIN , OtAND , OtOR , OtNOT , OtMIN , OtColumn , OtField , OtLiteral , OtFunc , OtSlice , OtUndef , OtRownr , OtRandom } |
Define the operator types. More... | |
enum | ArgType { NoArr , ArrArr , ArrSca , ScaArr } |
Define the value types of the 2 arguments when arrays are involved. More... | |
enum | ExprType { Constant , Variable } |
Define (sub-)expression type. More... | |
![]() | |
static TENShPtr | replaceConstNode (const TENShPtr &node) |
Replace a node with a constant expression by node with its value. | |
static void | createRange (Block< TableExprRange > &, TableExprNodeColumn *, Double start, Double end) |
Create a range object from a column and an interval. | |
static void | createRange (Block< TableExprRange > &) |
Create a empty range object. | |
static String | typeString (NodeDataType) |
Convert a NodeDataType to a string. | |
static String | typeString (ValueType) |
Convert a ValueType to a string. | |
![]() | |
virtual const IPosition & | getShape (const TableExprId &id) |
Get the shape for the given row. | |
void | fillExprType (const TableExprNodeRep *node) |
Set expression type to Variable if node is Variable. | |
![]() | |
static TENShPtr | convertNode (const TENShPtr &thisNode, Bool convertConstType) |
If the node is constant, it is evaluated and replaced by the appropriate TableExprNodeConst object. | |
![]() | |
NodeDataType | dtype_p |
ValueType | vtype_p |
OperType | optype_p |
ArgType | argtype_p |
ExprType | exprtype_p |
Int | ndim_p |
IPosition | shape_p |
Unit | unit_p |
Record | attributes_p |
Class to hold multiple table expression nodes.
Public interface
This class is used to assemble several table expression nodes. It is used for 3 purposes:
The type of all set elements has to be the same. The set consists of TableExprNodeSetElem elements. The add
function has to be used to add an element to the set.
It is possible to construct the object directly from an IPosition object. In that case all elements are single. Furthermore it is possible to construct it directly from a Slicer object. In that case all elements represent a discrete interval.
Definition at line 86 of file ExprNodeSet.h.
casacore::TableExprNodeSet::TableExprNodeSet | ( | ) |
Construct an empty set.
casacore::TableExprNodeSet::TableExprNodeSet | ( | const IPosition & | ) |
casacore::TableExprNodeSet::TableExprNodeSet | ( | const Slicer & | ) |
Construct from a Slicer
.
The number of elements in the set is the dimensionality of the Slicer
. All set elements are discrete intervals. Their start and/or end is undefined if it is was not defined (i.e. Slicer::MimicSource used) in the Slicer
object.
casacore::TableExprNodeSet::TableExprNodeSet | ( | const Vector< rownr_t > & | rownrs, |
const TableExprNodeSet & | |||
) |
Construct a set with n*set.size() elements where n is the number of rows.
Element i is constructed by evaluating the input element for row rownr[i].
casacore::TableExprNodeSet::TableExprNodeSet | ( | const TableExprNodeSet & | ) |
casacore::TableExprNodeSet::~TableExprNodeSet | ( | ) |
|
overridevirtual |
Let a set node convert itself to the given unit.
Reimplemented from casacore::TableExprNodeRep.
|
inline |
Definition at line 125 of file ExprNodeSet.h.
References add(), and casacore::TableExprNodeSetElem::getElem().
void casacore::TableExprNodeSet::add | ( | const TENSEBShPtr & | , |
Bool | adaptType = False |
||
) |
Add an element to the set.
If adaptType=True, the data type is the highest of the elements added. Otherwise it is that of the first element. True is meant for a set of values, False for function arguments.
A constant mid-width interval is added as a normal interval. In this way constant intervals can never be mid-width which makes optimization easier.
Referenced by add().
void casacore::TableExprNodeSet::checkEqualDataTypes | ( | ) | const |
Check if the data type of the set elements are the same.
If not, an exception is thrown.
|
overridevirtual |
Does a value occur in the set?
Reimplemented from casacore::TableExprNodeRep.
Referenced by contains(), and contains().
|
inline |
Definition at line 205 of file ExprNodeSet.h.
References contains(), and casacore::value().
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
inline |
Useful to make overloading clearer (mainly for test programs).
Definition at line 203 of file ExprNodeSet.h.
References contains(), and casacore::value().
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Flatten the node tree by adding the node and its children to the vector.
Reimplemented from casacore::TableExprNodeRep.
|
inlineprivate |
Get the array in a templated way.
Definition at line 220 of file ExprNodeSet.h.
References casacore::MArray< T >::reference().
Referenced by toArray().
|
inlineprivate |
Definition at line 229 of file ExprNodeSet.h.
References casacore::MArray< T >::reference().
|
inlineprivate |
Definition at line 226 of file ExprNodeSet.h.
References casacore::MArray< T >::reference().
|
inlineprivate |
Definition at line 223 of file ExprNodeSet.h.
References casacore::MArray< T >::reference().
|
inlineprivate |
Definition at line 235 of file ExprNodeSet.h.
References casacore::MArray< T >::reference().
|
inlineprivate |
Definition at line 232 of file ExprNodeSet.h.
References casacore::MArray< T >::reference().
|
overridevirtual |
Get an array value for this bounded set in the given row.
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
|
overridevirtual |
Reimplemented from casacore::TableExprNodeRep.
Bool casacore::TableExprNodeSet::hasArrays | ( | ) | const |
Contains the set array values?
Referenced by toArray().
|
inline |
Is the set fully bounded (discrete and no undefined end values)?
Definition at line 257 of file ExprNodeSet.h.
References itsBounded.
|
inline |
Contains the set only discrete elements? Discrete means that no continuous ranges are given, but discrete ranges (using :) are possible.
Definition at line 253 of file ExprNodeSet.h.
References itsDiscrete.
|
inline |
Contains the set only single elements? Single means that only single values are given (thus no end nor incr).
Definition at line 249 of file ExprNodeSet.h.
References itsSingle.
|
inline |
|
delete |
A copy of a TableExprNodeSet cannot be assigned.
|
inline |
TENShPtr casacore::TableExprNodeSet::setOrArray | ( | ) | const |
Try to convert the set to an array.
If not possible, a copy of the set is returned.
void casacore::TableExprNodeSet::setShape | ( | ) |
Try to set the set's shape for a bounded set with single elements.
|
overridevirtual |
Show the node.
Reimplemented from casacore::TableExprNodeRep.
|
inline |
Get the number of elements.
Definition at line 261 of file ExprNodeSet.h.
References itsElems.
Referenced by nelements(), and toArray().
MArray< T > casacore::TableExprNodeSet::toArray | ( | const TableExprId & | id | ) | const |
TODO: align possible units
Handle a nested array; this is done recursively.
Iterate through the remaining arrays.
The first time a mask was found, so create the resulting mask.
This array has no mask, so set to False in resulting mask.
Combine scalars.
Definition at line 272 of file ExprNodeSet.h.
References casacore::IPosition::append(), casacore::ArrayIterator< T >::array(), casacore::MArray< T >::array(), DebugAssert, casacore::False, getArray(), hasArrays(), casacore::MArrayBase::hasMask(), casacore::IPosition::isEqual(), casacore::MArrayBase::isNull(), itsBounded, itsElems, casacore::MArrayBase::mask(), casacore::mask(), casacore::ArrayIterator< T >::next(), casacore::Array< T >::reform(), casacore::Array< T >::resize(), casacore::Vector< T >::resize(), casacore::ArrayBase::shape(), casacore::MArrayBase::shape(), casacore::IPosition::size(), size(), casacore::True, casacore::TableExprNodeRep::valueType(), and casacore::TableExprNodeRep::VTArray.
|
private |
Convert the const set to an array.
|
private |
Definition at line 244 of file ExprNodeSet.h.
Referenced by isBounded(), and toArray().
|
private |
Definition at line 245 of file ExprNodeSet.h.
|
private |
Definition at line 243 of file ExprNodeSet.h.
Referenced by isDiscrete().
|
private |
Definition at line 241 of file ExprNodeSet.h.
Referenced by operator[](), size(), and toArray().
|
private |
Definition at line 242 of file ExprNodeSet.h.
Referenced by isSingle().