casacore
ExprNodeSet.h
Go to the documentation of this file.
1//# ExprNodeSet.h: Classes representing a set in table select expression
2//# Copyright (C) 1997,2000,2001,2002,2003
3//# Associated Universities, Inc. Washington DC, USA.
4//#
5//# This library is free software; you can redistribute it and/or modify it
6//# under the terms of the GNU Library General Public License as published by
7//# the Free Software Foundation; either version 2 of the License, or (at your
8//# option) any later version.
9//#
10//# This library is distributed in the hope that it will be useful, but WITHOUT
11//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
13//# License for more details.
14//#
15//# You should have received a copy of the GNU Library General Public License
16//# along with this library; if not, write to the Free Software Foundation,
17//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
18//#
19//# Correspondence concerning AIPS++ should be addressed as follows:
20//# Internet email: aips2-request@nrao.edu.
21//# Postal address: AIPS++ Project Office
22//# National Radio Astronomy Observatory
23//# 520 Edgemont Road
24//# Charlottesville, VA 22903-2475 USA
25//#
26//# $Id: ExprNodeSet.h 21262 2012-09-07 12:38:36Z gervandiepen $
27
28#ifndef TABLES_EXPRNODESET_H
29#define TABLES_EXPRNODESET_H
30
31//# Includes
32#include <casacore/casa/aips.h>
33#include <casacore/tables/TaQL/ExprNodeRep.h>
34#include <casacore/tables/TaQL/ExprNodeArray.h>
35#include <casacore/casa/Arrays/ArrayFwd.h>
36#include <casacore/casa/Containers/Block.h>
37#include <vector>
38
39namespace casacore { //# NAMESPACE CASACORE - BEGIN
40
41//# Forward Declarations
42class TableExprNode;
43class IPosition;
44class Slicer;
45
46// <summary>
47// Class to hold the table expression nodes for an element in a set.
48// </summary>
49
50// <use visibility=export>
51
52// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="">
53// </reviewed>
54
55// <prerequisite>
56//# Classes you should understand before using this one.
57// <li> TableExprNodeSet
58// <li> TableExprNodeRep
59// </prerequisite>
60
61// <synopsis>
62// This class is used to assemble the table expression nodes
63// representing an element in a set. A set element can be of 3 types:
64// <ol>
65// <li> A single discrete value, which can be of any type.
66// It can be used for 3 purposes:
67// <br>- A function argument.
68// <br>- A single index in an array indexing operation.
69// <br>- A single value in a set (used with the IN operator).
70// This is in fact a bounded discrete interval (see below).
71// <li> A discrete interval consisting of start, end and increment.
72// Each of those has to be an int scalar. Increment defaults to 1.
73// It can be used for 2 purposes:
74// <br>- A slice in an array indexing operation. In that case start
75// defaults to the beginning of the dimension and end defaults to the end.
76// <br>- A discrete interval in a set. Start has to be given.
77// When end is not given, the result is an unbounded discrete interval.
78// For a discrete interval, the type of start and end can also be
79// a datetime scalar.
80// <li> A continuous interval, which can only be used in a set.
81// It consists of a start and/or an end scalar value of type int, double,
82// datetime, or string. The interval can be open or closed on one or
83// both sides.
84// </ol>
85// Note the difference between a discrete and a continuous interval.
86// E.g. the discrete interval 2,6 consists of the five values 2,3,4,5,6.
87// The continuous interval 2,6 consists of all values between them.
88// <br>Further note that a bounded discrete interval is automatically
89// converted to a vector, which makes it possible to apply array
90// functions to it.
91// </synopsis>
92
94{
95public:
96 // Create the object for a single expression node.
97 explicit TableExprNodeSetElem (const TableExprNode& node);
98
99 // Create the object for a discrete interval.
100 // Each of the start, end, and incr pointers can be zero meaning
101 // that they are not given (see the synopsis for an explanation).
102 // Optionally the end is inclusive (C++ and Glish style) or exclusive
103 // (Python style).
105 const TableExprNode* end,
106 const TableExprNode* incr,
107 Bool isEndExcl = False);
108
109 // Create the object for a continuous bounded interval. It can be
110 // open or closed on either side.
113
114 // Create the object for a continuous left-bounded interval.
116
117 // Create the object for a continuous right-bounded interval.
119
120 // Copy constructor (copy semantics).
122
124
125 // Show the node.
126 void show (ostream& os, uInt indent) const;
127
128 // Get the nodes representing an aggregate function.
129 virtual void getAggrNodes (std::vector<TableExprNodeRep*>& aggr);
130
131 // Get the nodes representing a table column.
132 virtual void getColumnNodes (std::vector<TableExprNodeRep*>& cols);
133
134 // Is it a discrete set element.
135 Bool isDiscrete() const;
136
137 // Is a single value given?
138 Bool isSingle() const;
139
140 // Is the interval left or right closed?
141 // <group>
142 Bool isLeftClosed() const;
143 Bool isRightClosed() const;
144 // </group>
145
146 // Get the start, end or increment expression.
147 // Note that the pointer returned can be zero indicating that that
148 // value was not given.
149 // <group>
150 const TENShPtr& start() const;
151 const TENShPtr& end() const;
152 const TENShPtr& increment() const;
153 // </group>
154
155 // Fill a vector with the value(s) from this element by appending them
156 // at the end of the vector; the end is given by argument <src>cnt</src>
157 // which gets incremented with the number of values appended.
158 // This is used by the system to convert a set to a vector.
159 // <group>
160 void fillVector (Vector<Bool>& vec, Int64& cnt,
161 const TableExprId& id) const;
163 const TableExprId& id) const;
165 const TableExprId& id) const;
167 const TableExprId& id) const;
169 const TableExprId& id) const;
171 const TableExprId& id) const;
172 // </group>
173
174 // Set a flag in the match output array if the corresponding element
175 // in the value array is included in this set element.
176 // This is used by the system to implement the IN operator.
177 // <br>Note that it does NOT set match values to False; it is assumed they
178 // are initialized that way.
179 // <group>
180 void matchBool (Bool* match, const Bool* value, size_t nval,
181 const TableExprId& id) const;
182 void matchInt (Bool* match, const Int64* value, size_t nval,
183 const TableExprId& id) const;
184 void matchDouble (Bool* match, const Double* value, size_t nval,
185 const TableExprId& id) const;
186 void matchDComplex (Bool* match, const DComplex* value, size_t nval,
187 const TableExprId& id) const;
188 void matchString (Bool* match, const String* value, size_t nval,
189 const TableExprId& id) const;
190 void matchDate (Bool* match, const MVTime* value, size_t nval,
191 const TableExprId& id) const;
192 // </group>
193
194 // Evaluate the element for the given row and construct a new
195 // (constant) element from it.
196 // This is used by the system to implement a set in a GIVING clause.
198
199 // Get the table of a node and check if the children use the same table.
201
202 // Let a set node convert itself to the given unit.
203 virtual void adaptSetUnits (const Unit&);
204
205private:
206 // A copy of a TableExprNodeSetElem cannot be made.
208
209 // Construct an element from the given parts and take over their pointers.
210 // It is used by evaluate to construct an element in a rather cheap way.
212 const TENShPtr& start, const TENShPtr& end,
213 const TENShPtr& incr);
214
215 // Setup the object for a continuous interval.
218
219
228};
229
230
231
233{
234 return itsDiscrete;
235}
237{
238 return itsSingle;
239}
241{
242 return itsLeftClosed;
243}
245{
246 return itsRightClosed;
247}
249{
250 return itsStart;
251}
253{
254 return itsEnd;
255}
257{
258 return itsIncr;
259}
260
261
262
263//# Define a macro to cast an itsElems to a TableExprNodeSetElem*.
264#define castItsElem(i) static_cast<TableExprNodeSetElem*>(itsElems[i].get())
265#define castSetElem(shptr) static_cast<TableExprNodeSetElem*>(shptr.get())
266
267
268// <summary>
269// Class to hold multiple table expression nodes.
270// </summary>
271
272// <use visibility=export>
273
274// <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="">
275// </reviewed>
276
277// <prerequisite>
278//# Classes you should understand before using this one.
279// <li> TableExprNode
280// <li> TableExprNodeRep
281// <li> TableExprNodeBinary
282// </prerequisite>
283
284// <synopsis>
285// This class is used to assemble several table expression nodes.
286// It is used for 3 purposes:
287// <ol>
288// <li> To hold the arguments of a function.
289// All set elements must be single.
290// <li> To hold the variables of an index for an array slice.
291// All set elements must be of type int scalar and they must
292// represent a discrete interval (which includes single).
293// <li> To hold the elements of a set used with the IN operator.
294// All set elements must be scalars of any type.
295// </ol>
296// The type of all set elements has to be the same.
297// The set consists of
298// <linkto class=TableExprNodeSetElem>TableExprNodeSetElem</linkto>
299// elements. The <src>add</src> function has to be used to
300// add an element to the set.
301// <p>
302// It is possible to construct the object directly from an
303// <linkto class=IPosition>IPosition</linkto> object.
304// In that case all elements are single.
305// Furthermore it is possible to construct it directly from a
306// <linkto class=Slicer>Slicer</linkto> object.
307// In that case all elements represent a discrete interval.
308// </synopsis>
309
311{
312public:
313 // Construct an empty set.
315
316 // Construct from an <src>IPosition</src>.
317 // The number of elements in the set is the number of elements
318 // in the <src>IPosition</src>. All set elements are single values.
320
321 // Construct from a <src>Slicer</src>.
322 // The number of elements in the set is the dimensionality
323 // of the <src>Slicer</src>. All set elements are discrete intervals.
324 // Their start and/or end is undefined if it is was not defined
325 // (i.e. Slicer::MimicSource used) in the <src>Slicer</src> object.
327
328 // Construct a set with n*set.size() elements where n is the number
329 // of rows.
330 // Element i is constructed by evaluating the input element
331 // for row rownr[i].
333
335
337
338 // Add an element to the set.
339 // If adaptType=True, the data type is the highest of the elements added.
340 // Otherwise it is that of the first element.
341 // True is meant for a set of values, False for function arguments.
342 void add (const TableExprNodeSetElem&, Bool adaptType=False);
343
344 // Show the node.
345 void show (ostream& os, uInt indent) const;
346
347 // Get the nodes representing an aggregate function.
348 virtual void getAggrNodes (std::vector<TableExprNodeRep*>& aggr);
349
350 // Get the nodes representing a table column.
351 virtual void getColumnNodes (std::vector<TableExprNodeRep*>& cols);
352
353 // Check if the data type of the set elements are the same.
354 // If not, an exception is thrown.
355 //# Note that if itsCheckTypes is set, the data types are already
356 //# known to be equal.
358
359 // Contains the set only single elements?
360 // Single means that only single values are given (thus end nor incr).
361 Bool isSingle() const;
362
363 // Contains the set only discrete elements?
364 // Discrete means that no continuous ranges are given, but discrete
365 // ranges (using :) are possible.
366 Bool isDiscrete() const;
367
368 // Is the set fully bounded (discrete and no undefined end values)?
369 Bool isBounded() const;
370
371 // Get the number of elements.
372 size_t size() const;
373 // For backward compatibility.
374 size_t nelements() const {return size();}
375
376 // Get the i-th element.
377 const TableExprNodeSetElem& operator[] (size_t index) const;
378
379 // Contains the set array values?
381
382 // Try to convert the set to an array.
383 // If not possible, a copy of the set is returned.
385
386 template<typename T>
387 MArray<T> toArray (const TableExprId& id) const;
388
389 // Get an array value for this bounded set in the given row.
390 // <group>
397 // </group>
398
399 // Does a value occur in the set?
400 // <group>
401 virtual Bool hasBool (const TableExprId& id, Bool value);
402 virtual Bool hasInt (const TableExprId& id, Int64 value);
403 virtual Bool hasDouble (const TableExprId& id, Double value);
404 virtual Bool hasDComplex (const TableExprId& id, const DComplex& value);
405 virtual Bool hasString (const TableExprId& id, const String& value);
406 virtual Bool hasDate (const TableExprId& id, const MVTime& value);
408 const MArray<Bool>& value);
410 const MArray<Int64>& value);
412 const MArray<Double>& value);
414 const MArray<DComplex>& value);
416 const MArray<String>& value);
418 const MArray<MVTime>& value);
419 // </group>
420
421 // Let a set node convert itself to the given unit.
422 virtual void adaptSetUnits (const Unit&);
423
424private:
425 // A copy of a TableExprNodeSet cannot be made.
427
428 // Convert the const set to an array.
430
431 // Get the array in a templated way.
432 // <group>
433 void getArray (MArray<Bool>& marr, const TENShPtr& node,
434 const TableExprId& id) const
435 { marr.reference (node->getArrayBool (id)); }
436 void getArray (MArray<Int64>& marr, const TENShPtr& node,
437 const TableExprId& id) const
438 { marr.reference (node->getArrayInt (id)); }
439 void getArray (MArray<Double>& marr, const TENShPtr& node,
440 const TableExprId& id) const
441 { marr.reference (node->getArrayDouble (id)); }
442 void getArray (MArray<DComplex>& marr, const TENShPtr& node,
443 const TableExprId& id) const
444 { marr.reference (node->getArrayDComplex (id)); }
445 void getArray (MArray<String>& marr, const TENShPtr& node,
446 const TableExprId& id) const
447 { marr.reference (node->getArrayString (id)); }
448 void getArray (MArray<MVTime>& marr, const TENShPtr& node,
449 const TableExprId& id) const
450 { marr.reference (node->getArrayDate (id)); }
451 // </group>
452
453 // Sort and combine intervals.
454 // <group>
458 // </group>
459
460 // Define the functions to find a double, which depend on open/closed-ness.
461 // In this way a test on open/closed is done only once.
462 // <group>
468 void setFindFunc (Bool isLeftClosed, Bool isRightClosed);
469 // </group>
470
471 std::vector<TENShPtr> itsElems;
474 Bool itsBounded; //# Set is discrete and all starts/ends are defined
475 Bool itsCheckTypes; //# True = checking data types is not needed
476 Bool itsAllIntervals; //# True = all elements are const intervals (sorted)
477 Block<Double> itsStart; //# Start values of const intervals
478 Block<Double> itsEnd; //# End values of const intervals
479 FindFuncPtr itsFindFunc; //# Function to find a matching const interval
480};
481
482
484{
485 return itsSingle;
486}
488{
489 return itsDiscrete;
490}
492{
493 return itsBounded;
494}
495inline size_t TableExprNodeSet::size() const
496{
497 return itsElems.size();
498}
499inline const TableExprNodeSetElem&
501{
502 return *castItsElem(index);
503}
504
505
506template<typename T>
508{
511 Int64 n = size();
512 if (hasArrays()) {
513 // Handle a nested array; this is done recursively.
514 MArray<T> marr;
515 getArray (marr, castItsElem(0)->start(), id);
516 if (marr.isNull()) {
517 return marr;
518 }
519 Array<T> result (marr.array());
520 Array<Bool> mask (marr.mask());
521 IPosition shp = result.shape();
522 uInt naxes = shp.size();
523 shp.append (IPosition(1,n));
524 IPosition maskShp(shp);
525 maskShp[maskShp.size()-1] = 1;
526 result.resize (shp, True);
527 if (! mask.empty()) {
528 mask.resize (shp, True);
529 }
530 // Iterate through the remaining arrays.
531 ArrayIterator<T> iter(result, shp.size()-1);
532 IPosition s(shp.size(), 0);
533 IPosition e(shp-1);
534 e[naxes] = 0;
535 for (Int64 i=1; i<n; i++) {
536 iter.next();
537 s[naxes]++;
538 e[naxes]++;
539 MArray<T> marr;
540 getArray (marr, castItsElem(i)->start(), id);
541 if (marr.isNull()) {
542 return marr;
543 }
544 if (! marr.shape().isEqual (iter.array().shape())) {
545 throw TableInvExpr("Shapes of nested arrays do not match");
546 }
547 iter.array() = marr.array();
548 if (marr.hasMask()) {
549 if (mask.empty()) {
550 // The first time a mask was found, so create the resulting mask.
551 mask.resize (shp);
552 mask = False;
553 }
554 mask(s,e) = marr.mask().reform(maskShp);
555 } else if (! mask.empty()) {
556 // This array has no mask, so set to False in resulting mask.
557 mask(s,e) = False;
558 }
559 }
560 return MArray<T>(result, mask);
561 } else {
562 // Combine scalars.
563 Int64 n = size();
564 Int64 cnt = 0;
565 Vector<T> result (n);
566 for (Int64 i=0; i<n; i++) {
567 castItsElem(i)->fillVector (result, cnt, id);
568 }
569 result.resize (cnt, True);
570 return MArray<T>(result);
571 }
572}
573
574
575
576} //# NAMESPACE CASACORE - END
577
578#endif
#define DebugAssert(expr, exception)
Definition: Assert.h:185
#define castItsElem(i)
Definition: ExprNodeSet.h:264
const IPosition & shape() const
The length of each axis.
Definition: ArrayBase.h:125
Array< T, Alloc > & array()
Return the cursor.
Definition: ArrayIter.h:115
virtual void next() override
Move the cursor to the next position.
void resize()
Make this array a different shape.
Array< T, Alloc > reform(const IPosition &shape) const
It is occasionally useful to have an array which access the same storage appear to have a different s...
size_t size() const
Definition: IPosition.h:572
bool isEqual(const IPosition &other) const
Element-by-element comparison for equality.
void append(const IPosition &other)
Append this IPosition with another one (causing a resize).
Bool isNull() const
Is the array null?
Definition: MArrayBase.h:111
const Array< Bool > & mask() const
Get the mask.
Definition: MArrayBase.h:126
Bool hasMask() const
Is there a mask?
Definition: MArrayBase.h:119
const IPosition & shape() const
Get the shape.
Definition: MArrayBase.h:147
void reference(const MArray< T > &other)
Reference another array.
Definition: MArray.h:114
const Array< T > & array() const
Get access to the array.
Definition: MArray.h:153
String: the storage and methods of handling collections of characters.
Definition: String.h:225
Abstract base class for a node in a table column expression tree.
Definition: ExprNodeRep.h:158
virtual MArray< Double > getArrayDouble(const TableExprId &id)
virtual MArray< DComplex > getArrayDComplex(const TableExprId &id)
virtual MArray< MVTime > getArrayDate(const TableExprId &id)
virtual MArray< String > getArrayString(const TableExprId &id)
virtual MArray< Bool > getArrayBool(const TableExprId &id)
Get an array value for this node in the given row.
virtual MArray< Int64 > getArrayInt(const TableExprId &id)
TableExprNodeSetElem(const TableExprNodeSetElem &)
Copy constructor (copy semantics).
TableExprNodeSetElem(Bool isLeftClosed, const TableExprNode &start, const TableExprNode &end, Bool isRightClosed)
Create the object for a continuous bounded interval.
TableExprNodeSetElem(const TableExprNode &end, Bool isRightClosed)
Create the object for a continuous right-bounded interval.
void matchBool(Bool *match, const Bool *value, size_t nval, const TableExprId &id) const
Set a flag in the match output array if the corresponding element in the value array is included in t...
void fillVector(Vector< Double > &vec, Int64 &cnt, const TableExprId &id) const
virtual void getColumnNodes(std::vector< TableExprNodeRep * > &cols)
Get the nodes representing a table column.
void matchDate(Bool *match, const MVTime *value, size_t nval, const TableExprId &id) const
void checkTable()
Get the table of a node and check if the children use the same table.
void setup(Bool isLeftClosed, const TableExprNode *start, const TableExprNode *end, Bool isRightClosed)
Setup the object for a continuous interval.
TableExprNodeSetElem * evaluate(const TableExprId &id) const
Evaluate the element for the given row and construct a new (constant) element from it.
void fillVector(Vector< String > &vec, Int64 &cnt, const TableExprId &id) const
TableExprNodeSetElem & operator=(const TableExprNodeSetElem &)
A copy of a TableExprNodeSetElem cannot be made.
const TENShPtr & end() const
Definition: ExprNodeSet.h:252
void fillVector(Vector< DComplex > &vec, Int64 &cnt, const TableExprId &id) const
void fillVector(Vector< MVTime > &vec, Int64 &cnt, const TableExprId &id) const
TableExprNodeSetElem(const TableExprNode *start, const TableExprNode *end, const TableExprNode *incr, Bool isEndExcl=False)
Create the object for a discrete interval.
void matchDComplex(Bool *match, const DComplex *value, size_t nval, const TableExprId &id) const
void matchInt(Bool *match, const Int64 *value, size_t nval, const TableExprId &id) const
Bool isDiscrete() const
Is it a discrete set element.
Definition: ExprNodeSet.h:232
const TENShPtr & increment() const
Definition: ExprNodeSet.h:256
TableExprNodeSetElem(const TableExprNodeSetElem &that, const TENShPtr &start, const TENShPtr &end, const TENShPtr &incr)
Construct an element from the given parts and take over their pointers.
void fillVector(Vector< Bool > &vec, Int64 &cnt, const TableExprId &id) const
Fill a vector with the value(s) from this element by appending them at the end of the vector; the end...
void matchDouble(Bool *match, const Double *value, size_t nval, const TableExprId &id) const
Bool isSingle() const
Is a single value given?
Definition: ExprNodeSet.h:236
virtual void adaptSetUnits(const Unit &)
Let a set node convert itself to the given unit.
Bool isLeftClosed() const
Is the interval left or right closed?
Definition: ExprNodeSet.h:240
void show(ostream &os, uInt indent) const
Show the node.
virtual void getAggrNodes(std::vector< TableExprNodeRep * > &aggr)
Get the nodes representing an aggregate function.
void matchString(Bool *match, const String *value, size_t nval, const TableExprId &id) const
const TENShPtr & start() const
Get the start, end or increment expression.
Definition: ExprNodeSet.h:248
TableExprNodeSetElem(const TableExprNode &node)
Create the object for a single expression node.
TableExprNodeSetElem(Bool isLeftClosed, const TableExprNode &start)
Create the object for a continuous left-bounded interval.
void fillVector(Vector< Int64 > &vec, Int64 &cnt, const TableExprId &id) const
Class to hold multiple table expression nodes.
Definition: ExprNodeSet.h:311
TableExprNodeSet(const Vector< rownr_t > &rownrs, const TableExprNodeSet &)
Construct a set with n*set.size() elements where n is the number of rows.
Block< Double > itsStart
Definition: ExprNodeSet.h:477
Bool(TableExprNodeSet::* FindFuncPtr)(Double value)
Define the functions to find a double, which depend on open/closed-ness.
Definition: ExprNodeSet.h:463
void add(const TableExprNodeSetElem &, Bool adaptType=False)
Add an element to the set.
virtual Bool hasInt(const TableExprId &id, Int64 value)
TENShPtr toConstArray() const
Convert the const set to an array.
void show(ostream &os, uInt indent) const
Show the node.
virtual MArray< String > getArrayString(const TableExprId &id)
void getArray(MArray< DComplex > &marr, const TENShPtr &node, const TableExprId &id) const
Definition: ExprNodeSet.h:442
Bool findOpenClosed(Double value)
virtual MArray< Double > getArrayDouble(const TableExprId &id)
void checkEqualDataTypes() const
Check if the data type of the set elements are the same.
virtual MArray< Bool > hasArrayInt(const TableExprId &id, const MArray< Int64 > &value)
TableExprNodeSet & operator=(const TableExprNodeSet &)
A copy of a TableExprNodeSet cannot be made.
TableExprNodeSet(const TableExprNodeSet &)
Bool isSingle() const
Contains the set only single elements? Single means that only single values are given (thus end nor i...
Definition: ExprNodeSet.h:483
Block< Double > itsEnd
Definition: ExprNodeSet.h:478
void setFindFunc(Bool isLeftClosed, Bool isRightClosed)
Bool findClosedOpen(Double value)
void combineIntIntervals()
Sort and combine intervals.
virtual MArray< Int64 > getArrayInt(const TableExprId &id)
virtual MArray< Bool > hasArrayString(const TableExprId &id, const MArray< String > &value)
virtual MArray< Bool > hasArrayDouble(const TableExprId &id, const MArray< Double > &value)
Bool findClosedClosed(Double value)
void getArray(MArray< Int64 > &marr, const TENShPtr &node, const TableExprId &id) const
Definition: ExprNodeSet.h:436
Bool findOpenOpen(Double value)
virtual Bool hasDate(const TableExprId &id, const MVTime &value)
const TableExprNodeSetElem & operator[](size_t index) const
Get the i-th element.
Definition: ExprNodeSet.h:500
virtual Bool hasDComplex(const TableExprId &id, const DComplex &value)
virtual MArray< Bool > hasArrayBool(const TableExprId &id, const MArray< Bool > &value)
virtual Bool hasBool(const TableExprId &id, Bool value)
Does a value occur in the set?
virtual MArray< MVTime > getArrayDate(const TableExprId &id)
TableExprNodeSet(const Slicer &)
Construct from a Slicer.
virtual MArray< Bool > getArrayBool(const TableExprId &id)
Get an array value for this bounded set in the given row.
void getArray(MArray< Double > &marr, const TENShPtr &node, const TableExprId &id) const
Definition: ExprNodeSet.h:439
void getArray(MArray< String > &marr, const TENShPtr &node, const TableExprId &id) const
Definition: ExprNodeSet.h:445
virtual void getColumnNodes(std::vector< TableExprNodeRep * > &cols)
Get the nodes representing a table column.
virtual void getAggrNodes(std::vector< TableExprNodeRep * > &aggr)
Get the nodes representing an aggregate function.
virtual MArray< Bool > hasArrayDComplex(const TableExprId &id, const MArray< DComplex > &value)
virtual void adaptSetUnits(const Unit &)
Let a set node convert itself to the given unit.
Bool isDiscrete() const
Contains the set only discrete elements? Discrete means that no continuous ranges are given,...
Definition: ExprNodeSet.h:487
Bool hasArrays() const
Contains the set array values?
void getArray(MArray< Bool > &marr, const TENShPtr &node, const TableExprId &id) const
Get the array in a templated way.
Definition: ExprNodeSet.h:433
Bool isBounded() const
Is the set fully bounded (discrete and no undefined end values)?
Definition: ExprNodeSet.h:491
virtual Bool hasString(const TableExprId &id, const String &value)
virtual MArray< Bool > hasArrayDate(const TableExprId &id, const MArray< MVTime > &value)
virtual MArray< DComplex > getArrayDComplex(const TableExprId &id)
MArray< T > toArray(const TableExprId &id) const
Definition: ExprNodeSet.h:507
size_t nelements() const
For backward compatibility.
Definition: ExprNodeSet.h:374
size_t size() const
Get the number of elements.
Definition: ExprNodeSet.h:495
virtual Bool hasDouble(const TableExprId &id, Double value)
std::vector< TENShPtr > itsElems
Definition: ExprNodeSet.h:471
void getArray(MArray< MVTime > &marr, const TENShPtr &node, const TableExprId &id) const
Definition: ExprNodeSet.h:448
TENShPtr setOrArray() const
Try to convert the set to an array.
TableExprNodeSet(const IPosition &)
Construct from an IPosition.
TableExprNodeSet()
Construct an empty set.
Table error; invalid select expression.
Definition: TableError.h:460
void resize(size_t len, bool copyValues=false)
Definition: Vector.h:168
const Double e
e and functions thereof:
this file contains all the compiler specific defines
Definition: mainpage.dox:28
const Bool False
Definition: aipstype.h:44
unsigned int uInt
Definition: aipstype.h:51
LatticeExprNode mask(const LatticeExprNode &expr)
This function returns the mask of the given expression.
long long Int64
Define the extra non-standard types used by Casacore (like proposed uSize, Size)
Definition: aipsxtype.h:38
bool Bool
Define the standard types used by Casacore.
Definition: aipstype.h:42
LatticeExprNode value(const LatticeExprNode &expr)
This function returns the value of the expression without a mask.
const Bool True
Definition: aipstype.h:43
double Double
Definition: aipstype.h:55