casacore
|
Class to hold multiple table expression nodes. More...
#include <ExprNodeSet.h>
Public Member Functions | |
TableExprNodeSet () | |
Construct an empty set. More... | |
TableExprNodeSet (const IPosition &) | |
Construct from an IPosition . More... | |
TableExprNodeSet (const Slicer &) | |
Construct from a Slicer . More... | |
TableExprNodeSet (const Vector< rownr_t > &rownrs, const TableExprNodeSet &) | |
Construct a set with n*set.size() elements where n is the number of rows. More... | |
TableExprNodeSet (const TableExprNodeSet &) | |
~TableExprNodeSet () | |
void | add (const TableExprNodeSetElem &, Bool adaptType=False) |
Add an element to the set. More... | |
void | show (ostream &os, uInt indent) const |
Show the node. More... | |
virtual void | getAggrNodes (std::vector< TableExprNodeRep * > &aggr) |
Get the nodes representing an aggregate function. More... | |
virtual void | getColumnNodes (std::vector< TableExprNodeRep * > &cols) |
Get the nodes representing a table column. More... | |
void | checkEqualDataTypes () const |
Check if the data type of the set elements are the same. More... | |
Bool | isSingle () const |
Contains the set only single elements? Single means that only single values are given (thus end nor incr). More... | |
Bool | isDiscrete () const |
Contains the set only discrete elements? Discrete means that no continuous ranges are given, but discrete ranges (using :) are possible. More... | |
Bool | isBounded () const |
Is the set fully bounded (discrete and no undefined end values)? More... | |
size_t | size () const |
Get the number of elements. More... | |
size_t | nelements () const |
For backward compatibility. More... | |
const TableExprNodeSetElem & | operator[] (size_t index) const |
Get the i-th element. More... | |
Bool | hasArrays () const |
Contains the set array values? More... | |
TENShPtr | setOrArray () const |
Try to convert the set to an array. More... | |
template<typename T > | |
MArray< T > | toArray (const TableExprId &id) const |
virtual MArray< Bool > | getArrayBool (const TableExprId &id) |
Get an array value for this bounded set in the given row. More... | |
virtual MArray< Int64 > | getArrayInt (const TableExprId &id) |
virtual MArray< Double > | getArrayDouble (const TableExprId &id) |
virtual MArray< DComplex > | getArrayDComplex (const TableExprId &id) |
virtual MArray< String > | getArrayString (const TableExprId &id) |
virtual MArray< MVTime > | getArrayDate (const TableExprId &id) |
virtual Bool | hasBool (const TableExprId &id, Bool value) |
Does a value occur in the set? More... | |
virtual Bool | hasInt (const TableExprId &id, Int64 value) |
virtual Bool | hasDouble (const TableExprId &id, Double value) |
virtual Bool | hasDComplex (const TableExprId &id, const DComplex &value) |
virtual Bool | hasString (const TableExprId &id, const String &value) |
virtual Bool | hasDate (const TableExprId &id, const MVTime &value) |
virtual MArray< Bool > | hasArrayBool (const TableExprId &id, const MArray< Bool > &value) |
virtual MArray< Bool > | hasArrayInt (const TableExprId &id, const MArray< Int64 > &value) |
virtual MArray< Bool > | hasArrayDouble (const TableExprId &id, const MArray< Double > &value) |
virtual MArray< Bool > | hasArrayDComplex (const TableExprId &id, const MArray< DComplex > &value) |
virtual MArray< Bool > | hasArrayString (const TableExprId &id, const MArray< String > &value) |
virtual MArray< Bool > | hasArrayDate (const TableExprId &id, const MArray< MVTime > &value) |
virtual void | adaptSetUnits (const Unit &) |
Let a set node convert itself to the given unit. More... | |
Public Member Functions inherited from casacore::TableExprNodeRep | |
TableExprNodeRep (NodeDataType, ValueType, OperType, ArgType, ExprType, Int ndim, const IPosition &shape, const Table &table) | |
Construct a node. More... | |
TableExprNodeRep (NodeDataType, ValueType, OperType, const Table &) | |
This constructor is called from the derived TableExprNodeRep. More... | |
TableExprNodeRep (const TableExprNodeRep &) | |
Copy constructor. More... | |
virtual | ~TableExprNodeRep () |
The destructor deletes all the underlying TableExprNode objects. More... | |
virtual void | disableApplySelection () |
Do not apply the selection. More... | |
virtual void | applySelection (const Vector< rownr_t > &rownrs) |
Re-create the column object for a selection of rows. More... | |
virtual Double | getUnitFactor () const |
Get the unit conversion factor. More... | |
void | checkAggrFuncs () |
Throw an exception if an aggregate function is used in the expression node or its children. More... | |
virtual CountedPtr < TableExprGroupFuncBase > | makeGroupAggrFunc () |
Create the correct immediate aggregate function object. More... | |
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). More... | |
virtual Bool | getBool (const TableExprId &id) |
Get a scalar value for this node in the given row. More... | |
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. More... | |
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. More... | |
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 () const |
Get the number of rows in the table associated with this expression. More... | |
virtual Bool | getColumnDataType (DataType &) const |
Get the data type of the column. More... | |
virtual Array< Bool > | getColumnBool (const Vector< rownr_t > &rownrs) |
Get the value of the expression evaluated for the entire column. More... | |
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. More... | |
NodeDataType | dataType () const |
Get the data type of the derived TableExprNode object. More... | |
Bool | isReal () const |
Is the data type real (i.e., integer or double)? More... | |
ValueType | valueType () const |
Get the value type. More... | |
void | setValueType (ValueType vtype) |
Set the value type. More... | |
OperType | operType () const |
Get the operator type. More... | |
ExprType | exprType () const |
Get the expression type. More... | |
Bool | isConstant () const |
Is the expression a constant? More... | |
const Unit & | unit () const |
Get the unit. More... | |
void | setUnit (const Unit &unit) |
Set the unit. More... | |
const Record & | attributes () const |
Get the attributes. More... | |
void | setAttributes (const Record &) |
Set the attributes. More... | |
Int | ndim () const |
Get the fixed dimensionality (same for all rows). More... | |
const IPosition & | shape () const |
Get the fixed shape (same for all rows). More... | |
const IPosition & | shape (const TableExprId &id) |
Get the shape for the given row. More... | |
virtual Bool | isDefined (const TableExprId &id) |
Is the value in the given row defined? The default implementation returns True. More... | |
Table & | table () |
Get table. More... | |
const Table & | table () const |
Private Types | |
typedef Bool(TableExprNodeSet::* | FindFuncPtr )(Double value) |
Define the functions to find a double, which depend on open/closed-ness. More... | |
Private Member Functions | |
TableExprNodeSet & | operator= (const TableExprNodeSet &) |
A copy of a TableExprNodeSet cannot be made. More... | |
TENShPtr | toConstArray () const |
Convert the const set to an array. More... | |
void | getArray (MArray< Bool > &marr, const TENShPtr &node, const TableExprId &id) const |
Get the array in a templated way. More... | |
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 |
void | combineIntIntervals () |
Sort and combine intervals. More... | |
void | combineDoubleIntervals () |
void | combineDateIntervals () |
Bool | findOpenOpen (Double value) |
Bool | findOpenClosed (Double value) |
Bool | findClosedOpen (Double value) |
Bool | findClosedClosed (Double value) |
void | setFindFunc (Bool isLeftClosed, Bool isRightClosed) |
Private Attributes | |
std::vector< TENShPtr > | itsElems |
Bool | itsSingle |
Bool | itsDiscrete |
Bool | itsBounded |
Bool | itsCheckTypes |
Bool | itsAllIntervals |
Block< Double > | itsStart |
Block< Double > | itsEnd |
FindFuncPtr | itsFindFunc |
Additional Inherited Members | |
Public Types inherited from casacore::TableExprNodeRep | |
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 Public Member Functions inherited from casacore::TableExprNodeRep | |
static TENShPtr | replaceConstNode (const TENShPtr &node) |
Replace a node with a constant expression by node with its value. More... | |
static void | createRange (Block< TableExprRange > &, TableExprNodeColumn *, Double start, Double end) |
Create a range object from a column and an interval. More... | |
static void | createRange (Block< TableExprRange > &) |
Create a empty range object. More... | |
static String | typeString (NodeDataType) |
Convert a NodeDataType to a string. More... | |
static String | typeString (ValueType) |
Convert a ValueType to a string. More... | |
Protected Member Functions inherited from casacore::TableExprNodeRep | |
virtual const IPosition & | getShape (const TableExprId &id) |
Get the shape for the given row. More... | |
virtual void | convertConstChild () |
If one of the children is a constant, convert its data type to that of the other operand (if appropriate). More... | |
void | checkTablePtr (const TENShPtr &node) |
Check if this node uses the same table pointer. More... | |
void | fillExprType (const TENShPtr &node) |
Set expression type to Variable if node is Variable. More... | |
Static Protected Member Functions inherited from casacore::TableExprNodeRep | |
static void | checkTablePtr (Table &table, const TENShPtr &node) |
static void | fillExprType (ExprType &, const TENShPtr &node) |
static TENShPtr | convertNode (const TENShPtr &thisNode, Bool convertConstType) |
If the node is constant, it is evaluated and replaced by the appropriate TableExprNodeConst object. More... | |
Protected Attributes inherited from casacore::TableExprNodeRep | |
Table | table_p |
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 310 of file ExprNodeSet.h.
Define the functions to find a double, which depend on open/closed-ness.
In this way a test on open/closed is done only once.
Definition at line 463 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 | ( | ) |
|
virtual |
Let a set node convert itself to the given unit.
Reimplemented from casacore::TableExprNodeRep.
void casacore::TableExprNodeSet::add | ( | const TableExprNodeSetElem & | , |
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.
void casacore::TableExprNodeSet::checkEqualDataTypes | ( | ) | const |
Check if the data type of the set elements are the same.
If not, an exception is thrown.
|
private |
|
private |
|
private |
Sort and combine intervals.
|
virtual |
Get the nodes representing an aggregate function.
Reimplemented from casacore::TableExprNodeRep.
|
inlineprivate |
Get the array in a templated way.
Definition at line 433 of file ExprNodeSet.h.
References casacore::TableExprNodeRep::getArrayBool(), and casacore::MArray< T >::reference().
Referenced by toArray().
|
inlineprivate |
Definition at line 436 of file ExprNodeSet.h.
References casacore::TableExprNodeRep::getArrayInt(), and casacore::MArray< T >::reference().
|
inlineprivate |
Definition at line 439 of file ExprNodeSet.h.
References casacore::TableExprNodeRep::getArrayDouble(), and casacore::MArray< T >::reference().
|
inlineprivate |
Definition at line 442 of file ExprNodeSet.h.
References casacore::TableExprNodeRep::getArrayDComplex(), and casacore::MArray< T >::reference().
|
inlineprivate |
Definition at line 445 of file ExprNodeSet.h.
References casacore::TableExprNodeRep::getArrayString(), and casacore::MArray< T >::reference().
|
inlineprivate |
Definition at line 448 of file ExprNodeSet.h.
References casacore::TableExprNodeRep::getArrayDate(), and casacore::MArray< T >::reference().
|
virtual |
Get an array value for this bounded set in the given row.
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Get the nodes representing a table column.
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
Bool casacore::TableExprNodeSet::hasArrays | ( | ) | const |
Contains the set array values?
Referenced by toArray().
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Does a value occur in the set?
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
virtual |
Reimplemented from casacore::TableExprNodeRep.
|
inline |
Is the set fully bounded (discrete and no undefined end values)?
Definition at line 491 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 487 of file ExprNodeSet.h.
References itsDiscrete.
|
inline |
Contains the set only single elements? Single means that only single values are given (thus end nor incr).
Definition at line 483 of file ExprNodeSet.h.
References itsSingle.
|
inline |
|
private |
A copy of a TableExprNodeSet cannot be made.
|
inline |
TENShPtr casacore::TableExprNodeSet::setOrArray | ( | ) | const |
Try to convert the set to an array.
If not possible, a copy of the set is returned.
|
virtual |
Show the node.
Reimplemented from casacore::TableExprNodeRep.
|
inline |
Get the number of elements.
Definition at line 495 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 507 of file ExprNodeSet.h.
References casacore::MArray< T >::array(), castItsElem, DebugAssert, casacore::C::e, casacore::False, getArray(), hasArrays(), casacore::MArrayBase::hasMask(), casacore::MArrayBase::isNull(), itsBounded, casacore::MArrayBase::mask(), casacore::mask(), casacore::ArrayIterator< T, Alloc >::next(), casacore::Array< T, Alloc >::reform(), casacore::Vector< T, Alloc >::resize(), casacore::IPosition::resize(), casacore::MArrayBase::shape(), casacore::ArrayBase::size(), casacore::IPosition::size(), size(), and casacore::True.
|
private |
Convert the const set to an array.
|
private |
Definition at line 476 of file ExprNodeSet.h.
|
private |
Definition at line 474 of file ExprNodeSet.h.
Referenced by isBounded(), and toArray().
|
private |
Definition at line 475 of file ExprNodeSet.h.
|
private |
Definition at line 473 of file ExprNodeSet.h.
Referenced by isDiscrete().
|
private |
Definition at line 471 of file ExprNodeSet.h.
Referenced by size().
Definition at line 478 of file ExprNodeSet.h.
|
private |
Definition at line 479 of file ExprNodeSet.h.
|
private |
Definition at line 472 of file ExprNodeSet.h.
Referenced by isSingle().
Definition at line 477 of file ExprNodeSet.h.