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 CASA_ARRAYLOGICAL_H
00029 #define CASA_ARRAYLOGICAL_H
00030
00031
00032 #include <casacore/casa/aips.h>
00033 #include <casacore/casa/Arrays/Array.h>
00034 #include <casacore/casa/Arrays/LogiArray.h>
00035 #include <casacore/casa/Arrays/ArrayMathBase.h>
00036
00037 namespace casacore {
00038
00039
00040 template <class T> class Vector;
00041 template <class T> class Matrix;
00042 template <class T> class Cube;
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124 template<typename T, typename CompareOperator>
00125 bool arrayCompareAll (const Array<T>& left, const Array<T>& right,
00126 CompareOperator op);
00127 template<typename T, typename CompareOperator>
00128 bool arrayCompareAll (const Array<T>& left, T right,
00129 CompareOperator op);
00130 template<typename T, typename CompareOperator>
00131 bool arrayCompareAll (T left, const Array<T>& right,
00132 CompareOperator op);
00133
00134
00135
00136
00137 template<typename T, typename CompareOperator>
00138 bool arrayCompareAny (const Array<T>& left, const Array<T>& right,
00139 CompareOperator op);
00140 template<typename T, typename CompareOperator>
00141 bool arrayCompareAny (const Array<T>& left, T right,
00142 CompareOperator op);
00143 template<typename T, typename CompareOperator>
00144 bool arrayCompareAny (T left, const Array<T>& right,
00145 CompareOperator op);
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164 template<class T> Bool allLE (const Array<T> &l, const Array<T> &r);
00165 template<class T> Bool allLT (const Array<T> &l, const Array<T> &r);
00166 template<class T> Bool allGE (const Array<T> &l, const Array<T> &r);
00167 template<class T> Bool allGT (const Array<T> &l, const Array<T> &r);
00168 template<class T> Bool allEQ (const Array<T> &l, const Array<T> &r);
00169 template<class T> Bool allNE (const Array<T> &l, const Array<T> &r);
00170 template<class T> Bool allNear (const Array<T> &l, const Array<T> &r,
00171 Double tol);
00172 template<class T> Bool allNearAbs (const Array<T> &l, const Array<T> &r,
00173 Double tol);
00174
00175
00176
00177 template<class T> Bool allAND (const Array<T> &l, const Array<T> &r);
00178 template<class T> Bool allOR (const Array<T> &l, const Array<T> &r);
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194 template<class T> LogicalArray operator <= (const Array<T> &l,
00195 const Array<T> &r);
00196 template<class T> LogicalArray operator < (const Array<T> &l,
00197 const Array<T> &r);
00198 template<class T> LogicalArray operator >= (const Array<T> &l,
00199 const Array<T> &r);
00200 template<class T> LogicalArray operator > (const Array<T> &l,
00201 const Array<T> &r);
00202 template<class T> LogicalArray operator == (const Array<T> &l,
00203 const Array<T> &r);
00204 template<class T> LogicalArray operator != (const Array<T> &l,
00205 const Array<T> &r);
00206
00207 template<class T> LogicalArray near(const Array<T> &l, const Array<T> &r,
00208 Double tol);
00209 template<class T> LogicalArray nearAbs(const Array<T> &l, const Array<T> &r,
00210 Double tol);
00211
00212
00213
00214 template<class T> LogicalArray operator && (const Array<T> &l, const Array<T> &r);
00215 template<class T> LogicalArray operator || (const Array<T> &l, const Array<T> &r);
00216
00217
00218
00219
00220
00221
00222
00223
00224 template<class T> LogicalArray operator ! (const Array<T> &l);
00225
00226
00227
00228
00229
00230
00231
00232
00233 template<class T> Bool allLE (const Array<T> &array, const T &val);
00234 template<class T> Bool allLE (const T &val, const Array<T> &array);
00235 template<class T> Bool allLT (const Array<T> &array, const T &val);
00236 template<class T> Bool allLT (const T &val, const Array<T> &array);
00237 template<class T> Bool allGE (const Array<T> &array, const T &val);
00238 template<class T> Bool allGE (const T &val, const Array<T> &array);
00239 template<class T> Bool allGT (const Array<T> &array, const T &val);
00240 template<class T> Bool allGT (const T &val, const Array<T> &array);
00241 template<class T> Bool allEQ (const Array<T> &array, const T &val);
00242 template<class T> Bool allEQ (const T &val, const Array<T> &array);
00243 template<class T> Bool allNE (const Array<T> &array, const T &val);
00244 template<class T> Bool allNE (const T &val, const Array<T> &array);
00245 template<class T> Bool allNear (const Array<T> &array, const T &val, Double tol);
00246 template<class T> Bool allNear (const T &val, const Array<T> &array, Double tol);
00247 template<class T> Bool allNearAbs (const Array<T> &array, const T &val,
00248 Double tol);
00249 template<class T> Bool allNearAbs (const T &val, const Array<T> &array,
00250 Double tol);
00251
00252
00253
00254 template<class T> Bool allAND (const Array<T> &array, const T &val);
00255 template<class T> Bool allAND (const T &val, const Array<T> &array);
00256 template<class T> Bool allOR (const Array<T> &array, const T &val);
00257 template<class T> Bool allOR (const T &val, const Array<T> &array);
00258
00259
00260
00261
00262
00263
00264 template<class T> Bool allSame (const Array<T> &a)
00265 { return a.size() <= 1 || allEQ(*a.data(), a); }
00266
00267
00268
00269
00270 template<class T> LogicalArray isNaN (const Array<T> &array);
00271 template<class T> LogicalArray isInf (const Array<T> &array);
00272 template<class T> LogicalArray isFinite (const Array<T> &array);
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285 template<class T> LogicalArray operator <= (const Array<T> &array, const T &val);
00286 template<class T> LogicalArray operator <= (const T &val, const Array<T> &array);
00287 template<class T> LogicalArray operator < (const Array<T> &array, const T &val);
00288 template<class T> LogicalArray operator < (const T &val, const Array<T> &array);
00289 template<class T> LogicalArray operator >= (const Array<T> &array, const T &val);
00290 template<class T> LogicalArray operator >= (const T &val, const Array<T> &array);
00291 template<class T> LogicalArray operator > (const Array<T> &array, const T &val);
00292 template<class T> LogicalArray operator > (const T &val, const Array<T> &array);
00293 template<class T> LogicalArray operator == (const Array<T> &array, const T &val);
00294 template<class T> LogicalArray operator == (const T &val, const Array<T> &array);
00295 template<class T> LogicalArray operator != (const Array<T> &array, const T &val);
00296 template<class T> LogicalArray operator != (const T &val, const Array<T> &array);
00297 template<class T> LogicalArray near (const Array<T> &array, const T &val,
00298 Double tol);
00299 template<class T> LogicalArray near (const T &val, const Array<T> &array,
00300 Double tol);
00301 template<class T> LogicalArray nearAbs (const Array<T> &array, const T &val,
00302 Double tol);
00303 template<class T> LogicalArray nearAbs (const T &val, const Array<T> &array,
00304 Double tol);
00305
00306
00307
00308 template<class T> LogicalArray operator && (const Array<T> &array, const T &val);
00309 template<class T> LogicalArray operator && (const T &val, const Array<T> &array);
00310 template<class T> LogicalArray operator || (const Array<T> &array, const T &val);
00311 template<class T> LogicalArray operator || (const T &val, const Array<T> &array);
00312
00313
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328
00329
00330
00331
00332
00333 template<class T> Bool anyLE (const Array<T> &l, const Array<T> &r);
00334 template<class T> Bool anyLT (const Array<T> &l, const Array<T> &r);
00335 template<class T> Bool anyGE (const Array<T> &l, const Array<T> &r);
00336 template<class T> Bool anyGT (const Array<T> &l, const Array<T> &r);
00337 template<class T> Bool anyEQ (const Array<T> &l, const Array<T> &r);
00338 template<class T> Bool anyNE (const Array<T> &l, const Array<T> &r);
00339 template<class T> Bool anyNear (const Array<T> &l, const Array<T> &r,
00340 Double tol);
00341 template<class T> Bool anyNearAbs (const Array<T> &l, const Array<T> &r,
00342 Double tol);
00343
00344
00345
00346 template<class T> Bool anyAND (const Array<T> &l, const Array<T> &r);
00347 template<class T> Bool anyOR (const Array<T> &l, const Array<T> &r);
00348
00349
00350
00351
00352
00353
00354
00355
00356
00357
00358
00359
00360 template<class T> Bool anyLE (const Array<T> &array, const T &val);
00361 template<class T> Bool anyLE (const T &val, const Array<T> &array);
00362 template<class T> Bool anyLT (const Array<T> &array, const T &val);
00363 template<class T> Bool anyLT (const T &val, const Array<T> &array);
00364 template<class T> Bool anyGE (const Array<T> &array, const T &val);
00365 template<class T> Bool anyGE (const T &val, const Array<T> &array);
00366 template<class T> Bool anyGT (const Array<T> &array, const T &val);
00367 template<class T> Bool anyGT (const T &val, const Array<T> &array);
00368 template<class T> Bool anyEQ (const Array<T> &array, const T &val);
00369 template<class T> Bool anyEQ (const T &val, const Array<T> &array);
00370 template<class T> Bool anyNE (const Array<T> &array, const T &val);
00371 template<class T> Bool anyNE (const T &val, const Array<T> &array);
00372 template<class T> Bool anyNear (const Array<T> &array, const T &val, Double tol);
00373 template<class T> Bool anyNear (const T &val, const Array<T> &array, Double tol);
00374 template<class T> Bool anyNearAbs (const Array<T> &array, const T &val,
00375 Double tol);
00376 template<class T> Bool anyNearAbs (const T &val, const Array<T> &array,
00377 Double tol);
00378
00379
00380
00381 template<class T> Bool anyAND (const Array<T> &array, const T &val);
00382 template<class T> Bool anyAND (const T &val, const Array<T> &array);
00383 template<class T> Bool anyOR (const Array<T> &array, const T &val);
00384 template<class T> Bool anyOR (const T &val, const Array<T> &array);
00385
00386
00387
00388
00389
00390
00391 inline Bool allTrue (const Array<Bool>& array)
00392 { return allEQ (array, True); }
00393
00394
00395 inline Bool anyTrue (const Array<Bool>& array)
00396 { return anyEQ (array, True); }
00397
00398
00399 Array<Bool> partialAllTrue (const Array<Bool>& array,
00400 const IPosition& collapseAxes);
00401 Array<Bool> partialAnyTrue (const Array<Bool>& array,
00402 const IPosition& collapseAxes);
00403
00404
00405
00406
00407
00408
00409
00410
00411 template<class T> size_t nfalse (const Array<T> &array);
00412 template<class T> size_t ntrue (const Array<T> &array)
00413 { return array.nelements() - nfalse(array); }
00414
00415
00416
00417
00418
00419
00420
00421
00422
00423
00424
00425 template<class T> Array<uInt> partialNTrue (const Array<T>& array,
00426 const IPosition& collapseAxes);
00427 template<class T> Array<uInt> partialNFalse (const Array<T>& array,
00428 const IPosition& collapseAxes);
00429
00430
00431
00432
00433
00434
00435
00436
00437 template<typename T> class AllFunc : public ArrayFunctorBase<T,Bool> {
00438 public:
00439 virtual ~AllFunc() {}
00440 virtual Bool operator() (const Array<T>& arr) const { return allTrue(arr); }
00441 };
00442 template<typename T> class AnyFunc : public ArrayFunctorBase<T,Bool> {
00443 public:
00444 virtual ~AnyFunc() {}
00445 virtual Bool operator() (const Array<T>& arr) const { return anyTrue(arr); }
00446 };
00447
00448 template<typename T> class NTrueFunc : public ArrayFunctorBase<T,uInt> {
00449 public:
00450 virtual uInt operator() (const Array<T>& arr) const { return ntrue(arr); }
00451 };
00452 template<typename T> class NFalseFunc : public ArrayFunctorBase<T,uInt> {
00453 public:
00454 virtual uInt operator() (const Array<T>& arr) const { return nfalse(arr); }
00455 };
00456
00457
00458
00459 }
00460
00461 #ifndef CASACORE_NO_AUTO_TEMPLATES
00462 #include <casacore/casa/Arrays/ArrayLogical.tcc>
00463 #endif //# CASACORE_NO_AUTO_TEMPLATES
00464 #endif