00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef TABLES_EXPRNODEARRAY_H
00029 #define TABLES_EXPRNODEARRAY_H
00030
00031
00032 #include <casacore/tables/TaQL/ExprNodeRep.h>
00033 #include <casacore/tables/TaQL/TaQLStyle.h>
00034 #include <casacore/tables/Tables/Table.h>
00035 #include <casacore/tables/Tables/ArrayColumn.h>
00036 #include <casacore/casa/Arrays/Slicer.h>
00037
00038 namespace casacore {
00039
00040
00041 class TableExprNodeSet;
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 class TableExprNodeArray : public TableExprNodeBinary
00066 {
00067 public:
00068
00069
00070 TableExprNodeArray (NodeDataType, OperType);
00071 TableExprNodeArray (const TableExprNodeRep& node, NodeDataType, OperType);
00072 TableExprNodeArray (NodeDataType, OperType, const IPosition& shape);
00073
00074
00075 ~TableExprNodeArray();
00076
00077
00078
00079
00080 virtual TableExprNodeRep* makeConstantScalar();
00081
00082
00083
00084 IPosition validateIndex (const IPosition& index,
00085 const ArrayBase& arr) const;
00086
00087
00088
00089 virtual const IPosition& getShape (const TableExprId& id);
00090
00091
00092
00093 virtual MArray<Double> getArrayDouble (const TableExprId& id);
00094
00095
00096
00097 virtual MArray<DComplex> getArrayDComplex (const TableExprId& id);
00098
00099
00100
00101 virtual Bool hasBool (const TableExprId& id, Bool value);
00102 virtual Bool hasInt (const TableExprId& id, Int64 value);
00103 virtual Bool hasDouble (const TableExprId& id, Double value);
00104 virtual Bool hasDComplex (const TableExprId& id, const DComplex& value);
00105 virtual Bool hasString (const TableExprId& id, const String& value);
00106 virtual Bool hasDate (const TableExprId& id, const MVTime& value);
00107 virtual MArray<Bool> hasArrayBool (const TableExprId& id,
00108 const MArray<Bool>& value);
00109 virtual MArray<Bool> hasArrayInt (const TableExprId& id,
00110 const MArray<Int64>& value);
00111 virtual MArray<Bool> hasArrayDouble (const TableExprId& id,
00112 const MArray<Double>& value);
00113 virtual MArray<Bool> hasArrayDComplex (const TableExprId& id,
00114 const MArray<DComplex>& value);
00115 virtual MArray<Bool> hasArrayString (const TableExprId& id,
00116 const MArray<String>& value);
00117 virtual MArray<Bool> hasArrayDate (const TableExprId& id,
00118 const MArray<MVTime>& value);
00119
00120
00121
00122
00123 virtual Bool getElemBool (const TableExprId& id,
00124 const Slicer& index);
00125 virtual Int64 getElemInt (const TableExprId& id,
00126 const Slicer& index);
00127 virtual Double getElemDouble (const TableExprId& id,
00128 const Slicer& index);
00129 virtual DComplex getElemDComplex (const TableExprId& id,
00130 const Slicer& index);
00131 virtual String getElemString (const TableExprId& id,
00132 const Slicer& index);
00133 virtual MVTime getElemDate (const TableExprId& id,
00134 const Slicer& index);
00135
00136
00137
00138
00139 virtual MArray<Bool> getSliceBool (const TableExprId& id,
00140 const Slicer&);
00141 virtual MArray<Int64> getSliceInt (const TableExprId& id,
00142 const Slicer&);
00143 virtual MArray<Double> getSliceDouble (const TableExprId& id,
00144 const Slicer&);
00145 virtual MArray<DComplex> getSliceDComplex (const TableExprId& id,
00146 const Slicer&);
00147 virtual MArray<String> getSliceString (const TableExprId& id,
00148 const Slicer&);
00149 virtual MArray<MVTime> getSliceDate (const TableExprId& id,
00150 const Slicer&);
00151
00152
00153
00154
00155 virtual Array<Bool> getElemColumnBool (const Vector<uInt>& rownrs,
00156 const Slicer&);
00157 virtual Array<uChar> getElemColumnuChar (const Vector<uInt>& rownrs,
00158 const Slicer&);
00159 virtual Array<Short> getElemColumnShort (const Vector<uInt>& rownrs,
00160 const Slicer&);
00161 virtual Array<uShort> getElemColumnuShort (const Vector<uInt>& rownrs,
00162 const Slicer&);
00163 virtual Array<Int> getElemColumnInt (const Vector<uInt>& rownrs,
00164 const Slicer&);
00165 virtual Array<uInt> getElemColumnuInt (const Vector<uInt>& rownrs,
00166 const Slicer&);
00167 virtual Array<Float> getElemColumnFloat (const Vector<uInt>& rownrs,
00168 const Slicer&);
00169 virtual Array<Double> getElemColumnDouble (const Vector<uInt>& rownrs,
00170 const Slicer&);
00171 virtual Array<Complex> getElemColumnComplex (const Vector<uInt>& rownrs,
00172 const Slicer&);
00173 virtual Array<DComplex> getElemColumnDComplex (const Vector<uInt>& rownrs,
00174 const Slicer&);
00175 virtual Array<String> getElemColumnString (const Vector<uInt>& rownrs,
00176 const Slicer&);
00177
00178
00179
00180 static MArray<Int64> makeArray (const IPosition& shape, Int64 value);
00181 static MArray<Double> makeArray (const IPosition& shape, Double value);
00182 static MArray<DComplex> makeArray (const IPosition& shape,
00183 const DComplex& value);
00184
00185 protected:
00186 IPosition varShape_p;
00187 };
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210 class TableExprNodeArrayColumn : public TableExprNodeArray
00211 {
00212 public:
00213
00214 TableExprNodeArrayColumn (const TableColumn& tablecol,
00215 const Table& table);
00216
00217 ~TableExprNodeArrayColumn();
00218
00219
00220 virtual void getColumnNodes (vector<TableExprNodeRep*>& cols);
00221
00222
00223 virtual void disableApplySelection();
00224
00225
00226 virtual void applySelection (const Vector<uInt>& rownrs);
00227
00228
00229 const TableColumn& getColumn() const;
00230
00231
00232 virtual const IPosition& getShape (const TableExprId& id);
00233
00234
00235 virtual Bool isDefined (const TableExprId& id);
00236
00237
00238
00239 virtual Bool getColumnDataType (DataType&) const;
00240
00241 protected:
00242 Table selTable_p;
00243 TableColumn tabCol_p;
00244 Bool applySelection_p;
00245 };
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267 class TableExprNodeArrayColumnBool : public TableExprNodeArrayColumn
00268 {
00269 public:
00270 TableExprNodeArrayColumnBool (const TableColumn&,
00271 const Table&);
00272 ~TableExprNodeArrayColumnBool();
00273
00274
00275 virtual void applySelection (const Vector<uInt>& rownrs);
00276
00277 virtual Bool getElemBool (const TableExprId& id, const Slicer& index);
00278 virtual MArray<Bool> getArrayBool (const TableExprId& id);
00279 virtual MArray<Bool> getSliceBool (const TableExprId& id, const Slicer&);
00280 virtual Array<Bool> getElemColumnBool (const Vector<uInt>& rownrs,
00281 const Slicer&);
00282 protected:
00283 ArrayColumn<Bool> col_p;
00284 };
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303
00304
00305 class TableExprNodeArrayColumnuChar : public TableExprNodeArrayColumn
00306 {
00307 public:
00308 TableExprNodeArrayColumnuChar (const TableColumn&,
00309 const Table&);
00310 ~TableExprNodeArrayColumnuChar();
00311
00312
00313 virtual void applySelection (const Vector<uInt>& rownrs);
00314
00315 virtual Int64 getElemInt (const TableExprId& id, const Slicer& index);
00316 virtual MArray<Int64> getArrayInt (const TableExprId& id);
00317 virtual MArray<Int64> getSliceInt (const TableExprId& id,
00318 const Slicer&);
00319 virtual Array<uChar> getElemColumnuChar (const Vector<uInt>& rownrs,
00320 const Slicer&);
00321 protected:
00322 ArrayColumn<uChar> col_p;
00323 };
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336
00337
00338
00339
00340
00341
00342
00343
00344 class TableExprNodeArrayColumnShort : public TableExprNodeArrayColumn
00345 {
00346 public:
00347 TableExprNodeArrayColumnShort (const TableColumn&,
00348 const Table&);
00349 ~TableExprNodeArrayColumnShort();
00350
00351
00352 virtual void applySelection (const Vector<uInt>& rownrs);
00353
00354 virtual Int64 getElemInt (const TableExprId& id, const Slicer& index);
00355 virtual MArray<Int64> getArrayInt (const TableExprId& id);
00356 virtual MArray<Int64> getSliceInt (const TableExprId& id,
00357 const Slicer&);
00358 virtual Array<Short> getElemColumnShort (const Vector<uInt>& rownrs,
00359 const Slicer&);
00360 protected:
00361 ArrayColumn<Short> col_p;
00362 };
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383 class TableExprNodeArrayColumnuShort : public TableExprNodeArrayColumn
00384 {
00385 public:
00386 TableExprNodeArrayColumnuShort (const TableColumn&,
00387 const Table&);
00388 ~TableExprNodeArrayColumnuShort();
00389
00390
00391 virtual void applySelection (const Vector<uInt>& rownrs);
00392
00393 virtual Int64 getElemInt (const TableExprId& id, const Slicer& index);
00394 virtual MArray<Int64> getArrayInt (const TableExprId& id);
00395 virtual MArray<Int64> getSliceInt (const TableExprId& id,
00396 const Slicer&);
00397 virtual Array<uShort> getElemColumnuShort (const Vector<uInt>& rownrs,
00398 const Slicer&);
00399 protected:
00400 ArrayColumn<uShort> col_p;
00401 };
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417
00418
00419
00420
00421
00422 class TableExprNodeArrayColumnInt : public TableExprNodeArrayColumn
00423 {
00424 public:
00425 TableExprNodeArrayColumnInt (const TableColumn&,
00426 const Table&);
00427 ~TableExprNodeArrayColumnInt();
00428
00429
00430 virtual void applySelection (const Vector<uInt>& rownrs);
00431
00432 virtual Int64 getElemInt (const TableExprId& id, const Slicer& index);
00433 virtual MArray<Int64> getArrayInt (const TableExprId& id);
00434 virtual MArray<Int64> getSliceInt (const TableExprId& id,
00435 const Slicer&);
00436 virtual Array<Int> getElemColumnInt (const Vector<uInt>& rownrs,
00437 const Slicer&);
00438 protected:
00439 ArrayColumn<Int> col_p;
00440 };
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00460
00461 class TableExprNodeArrayColumnuInt : public TableExprNodeArrayColumn
00462 {
00463 public:
00464 TableExprNodeArrayColumnuInt (const TableColumn&,
00465 const Table&);
00466 ~TableExprNodeArrayColumnuInt();
00467
00468
00469 virtual void applySelection (const Vector<uInt>& rownrs);
00470
00471 virtual Int64 getElemInt (const TableExprId& id, const Slicer& index);
00472 virtual MArray<Int64> getArrayInt (const TableExprId& id);
00473 virtual MArray<Int64> getSliceInt (const TableExprId& id,
00474 const Slicer&);
00475 virtual Array<uInt> getElemColumnuInt (const Vector<uInt>& rownrs,
00476 const Slicer&);
00477 protected:
00478 ArrayColumn<uInt> col_p;
00479 };
00480
00481
00482
00483
00484
00485
00486
00487
00488
00489
00490
00491
00492
00493
00494
00495
00496
00497
00498
00499
00500 class TableExprNodeArrayColumnFloat : public TableExprNodeArrayColumn
00501 {
00502 public:
00503 TableExprNodeArrayColumnFloat (const TableColumn&,
00504 const Table&);
00505 ~TableExprNodeArrayColumnFloat();
00506
00507
00508 virtual void applySelection (const Vector<uInt>& rownrs);
00509
00510 virtual Double getElemDouble (const TableExprId& id, const Slicer& index);
00511 virtual MArray<Double> getArrayDouble (const TableExprId& id);
00512 virtual MArray<Double> getSliceDouble (const TableExprId& id,
00513 const Slicer&);
00514 virtual Array<Float> getElemColumnFloat (const Vector<uInt>& rownrs,
00515 const Slicer&);
00516 protected:
00517 ArrayColumn<Float> col_p;
00518 };
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539 class TableExprNodeArrayColumnDouble : public TableExprNodeArrayColumn
00540 {
00541 public:
00542 TableExprNodeArrayColumnDouble (const TableColumn&,
00543 const Table&);
00544 ~TableExprNodeArrayColumnDouble();
00545
00546
00547 virtual void applySelection (const Vector<uInt>& rownrs);
00548
00549 virtual Double getElemDouble (const TableExprId& id, const Slicer& index);
00550 virtual MArray<Double> getArrayDouble (const TableExprId& id);
00551 virtual MArray<Double> getSliceDouble (const TableExprId& id,
00552 const Slicer&);
00553 virtual Array<Double> getElemColumnDouble (const Vector<uInt>& rownrs,
00554 const Slicer&);
00555 protected:
00556 ArrayColumn<Double> col_p;
00557 };
00558
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578 class TableExprNodeArrayColumnComplex : public TableExprNodeArrayColumn
00579 {
00580 public:
00581 TableExprNodeArrayColumnComplex (const TableColumn&,
00582 const Table&);
00583 ~TableExprNodeArrayColumnComplex();
00584
00585
00586 virtual void applySelection (const Vector<uInt>& rownrs);
00587
00588 virtual DComplex getElemDComplex (const TableExprId& id, const Slicer& index);
00589 virtual MArray<DComplex> getArrayDComplex (const TableExprId& id);
00590 virtual MArray<DComplex> getSliceDComplex (const TableExprId& id,
00591 const Slicer&);
00592 virtual Array<Complex> getElemColumnComplex (const Vector<uInt>& rownrs,
00593 const Slicer&);
00594 protected:
00595 ArrayColumn<Complex> col_p;
00596 };
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617 class TableExprNodeArrayColumnDComplex : public TableExprNodeArrayColumn
00618 {
00619 public:
00620 TableExprNodeArrayColumnDComplex (const TableColumn&,
00621 const Table&);
00622 ~TableExprNodeArrayColumnDComplex();
00623
00624
00625 virtual void applySelection (const Vector<uInt>& rownrs);
00626
00627 virtual DComplex getElemDComplex (const TableExprId& id, const Slicer& index);
00628 virtual MArray<DComplex> getArrayDComplex (const TableExprId& id);
00629 virtual MArray<DComplex> getSliceDComplex (const TableExprId& id,
00630 const Slicer&);
00631 virtual Array<DComplex> getElemColumnDComplex (const Vector<uInt>& rownrs,
00632 const Slicer&);
00633 protected:
00634 ArrayColumn<DComplex> col_p;
00635 };
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656 class TableExprNodeArrayColumnString : public TableExprNodeArrayColumn
00657 {
00658 public:
00659 TableExprNodeArrayColumnString (const TableColumn&,
00660 const Table&);
00661 ~TableExprNodeArrayColumnString();
00662
00663
00664 virtual void applySelection (const Vector<uInt>& rownrs);
00665
00666 virtual String getElemString (const TableExprId& id, const Slicer& index);
00667 virtual MArray<String> getArrayString (const TableExprId& id);
00668 virtual MArray<String> getSliceString (const TableExprId& id,
00669 const Slicer&);
00670 virtual Array<String> getElemColumnString (const Vector<uInt>& rownrs,
00671 const Slicer&);
00672 protected:
00673 ArrayColumn<String> col_p;
00674 };
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
00709
00710
00711
00712
00713 class TableExprNodeIndex : public TableExprNodeMulti
00714 {
00715 public:
00716
00717 explicit TableExprNodeIndex (const TableExprNodeSet& indices,
00718 const TaQLStyle& = TaQLStyle(0));
00719
00720
00721 virtual ~TableExprNodeIndex();
00722
00723
00724
00725 void fillIndex (const TableExprNodeSet& indices);
00726
00727
00728
00729 void checkIndexValues (const TableExprNodeRep* arrayNode);
00730
00731
00732 const Slicer& getConstantSlicer() const;
00733
00734
00735 const Slicer& getSlicer (const TableExprId& id);
00736
00737
00738 Bool isSingle() const;
00739
00740 protected:
00741 Int origin_p;
00742 Int endMinus_p;
00743 Bool isCOrder_p;
00744 IPosition start_p;
00745 IPosition end_p;
00746 IPosition incr_p;
00747 Slicer slicer_p;
00748 Block<Bool> varIndex_p;
00749 Bool isSingle_p;
00750
00751
00752 void convertConstIndex();
00753
00754
00755 void fillSlicer (const TableExprId& id);
00756
00757
00758 IPosition getNodeShape (const TableExprNodeRep* arrayNode) const;
00759 };
00760
00761
00762
00763
00764
00765
00766
00767
00768
00769
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
00781
00782
00783
00784
00785
00786 class TableExprNodeArrayPart : public TableExprNodeArray
00787 {
00788 public:
00789 TableExprNodeArrayPart (TableExprNodeRep* arrayNode, TableExprNodeIndex*);
00790 ~TableExprNodeArrayPart();
00791
00792
00793 void show (ostream& os, uInt indent) const;
00794
00795 Bool getBool (const TableExprId& id);
00796 Int64 getInt (const TableExprId& id);
00797 Double getDouble (const TableExprId& id);
00798 DComplex getDComplex (const TableExprId& id);
00799 String getString (const TableExprId& id);
00800 MVTime getDate (const TableExprId& id);
00801
00802 MArray<Bool> getArrayBool (const TableExprId& id);
00803 MArray<Int64> getArrayInt (const TableExprId& id);
00804 MArray<Double> getArrayDouble (const TableExprId& id);
00805 MArray<DComplex> getArrayDComplex (const TableExprId& id);
00806 MArray<String> getArrayString (const TableExprId& id);
00807 MArray<MVTime> getArrayDate (const TableExprId& id);
00808
00809
00810
00811
00812 Bool getColumnDataType (DataType&) const;
00813
00814 Array<Bool> getColumnBool (const Vector<uInt>& rownrs);
00815 Array<uChar> getColumnuChar (const Vector<uInt>& rownrs);
00816 Array<Short> getColumnShort (const Vector<uInt>& rownrs);
00817 Array<uShort> getColumnuShort (const Vector<uInt>& rownrs);
00818 Array<Int> getColumnInt (const Vector<uInt>& rownrs);
00819 Array<uInt> getColumnuInt (const Vector<uInt>& rownrs);
00820 Array<Float> getColumnFloat (const Vector<uInt>& rownrs);
00821 Array<Double> getColumnDouble (const Vector<uInt>& rownrs);
00822 Array<Complex> getColumnComplex (const Vector<uInt>& rownrs);
00823 Array<DComplex> getColumnDComplex (const Vector<uInt>& rownrs);
00824 Array<String> getColumnString (const Vector<uInt>& rownrs);
00825
00826
00827 const TableExprNodeIndex* getIndexNode() const;
00828
00829
00830
00831 const TableExprNodeArrayColumn* getColumnNode() const;
00832
00833 private:
00834 TableExprNodeIndex* indexNode_p;
00835 TableExprNodeArray* arrNode_p;
00836 TableExprNodeArrayColumn* colNode_p;
00837 };
00838
00839
00840
00841
00842 inline Bool TableExprNodeIndex::isSingle() const
00843 {
00844 return isSingle_p;
00845 }
00846 inline const Slicer& TableExprNodeIndex::getConstantSlicer() const
00847 {
00848 return slicer_p;
00849 }
00850 inline const Slicer& TableExprNodeIndex::getSlicer (const TableExprId& id)
00851 {
00852 if (!isConstant()) {
00853 fillSlicer (id);
00854 }
00855 return slicer_p;
00856 }
00857
00858 inline const TableColumn& TableExprNodeArrayColumn::getColumn() const
00859 {
00860 return tabCol_p;
00861 }
00862
00863 inline const TableExprNodeIndex* TableExprNodeArrayPart::getIndexNode() const
00864 {
00865 return indexNode_p;
00866 }
00867
00868 inline const TableExprNodeArrayColumn*
00869 TableExprNodeArrayPart::getColumnNode() const
00870 {
00871 return colNode_p;
00872 }
00873
00874
00875
00876 }
00877
00878 #endif
00879