casa::ArrayLogical_global_functions_Array_logical_operations Struct Reference
[Arrays]

#include <ArrayLogical.h>

List of all members.


Detailed Description

Logical operations for Arrays.

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
Test programs:
tArrayLogical

Prerequisite

Etymology

This file contains global functions which perform element by element logical operations on arrays.

Synopsis

These functions perform element by element logical operations on arrays. The two arrays must conform, except for allEQ which returns False if the arrays do not conform.

There are two classes of functions. One class returns a LogicalArray. In these functions, the value of an element of the LogicalArray is the value of the logical operation applied to the corresponding elements of the input Arrays. The other class of functions returns a single Bool. The return value is True if the logical operation returns True for all elements of the input arrays for the "all" functions (e.g. allLE()), and returns True if the logical operation returns True for any elements of the input arrays for the "any" functions (e.g. anyLE()).

For instance allLE (a, b) implies that every element of a is less than or equal to every element of b. Note that with this definition allLE (a, b) and allGE (a, b) can both be false (e.g. a = [1,0] b = [0,1]).

Caution: Comparison between two zero-sized arrays is not defined (should it throw an exception?).

Example

      Vector<Int> a(10);
      Vector<Int> b(10);
      LogicalVector l(10);
         . . .
      l = a < b;
This example sets the elements of l (a<b). The result of the comparison is a LogicalArray.

Example

      Vector<Int> a(10);
      Vector<Int> b(10);
      Bool result;
         . . .
      result = allLT (a, b);
This example sets result to True if, for all elements, a<b.

Motivation

One wants to be able to perform logical operations on arrays.

To Do

<linkfrom anchor="Array logical operations" classes="Array Vector Matrix Cube"> <here>Array logical operations</here> -- Logical operations for Arrays. </linkfrom>

Definition at line 119 of file ArrayLogical.h.

Public Member Functions

template<class T>
LogicalArray operator! (const Array< T > &l)
 Logical negation of an array.
Bool allTrue (const Array< Bool > &array)
 Are all elements true?
Bool anyTrue (const Array< Bool > &array)
 Is any all element true?
template<class T>
Bool allLE (const Array< T > &l, const Array< T > &r)
 Element by element comparisons between the "l" and "r" arrays.
template<class T>
Bool allLT (const Array< T > &l, const Array< T > &r)
template<class T>
Bool allGE (const Array< T > &l, const Array< T > &r)
template<class T>
Bool allGT (const Array< T > &l, const Array< T > &r)
template<class T>
Bool allEQ (const Array< T > &l, const Array< T > &r)
template<class T>
Bool allNE (const Array< T > &l, const Array< T > &r)
template<class T>
Bool allNear (const Array< T > &l, const Array< T > &r, Double tol)
template<class T>
Bool allNearAbs (const Array< T > &l, const Array< T > &r, Double tol)
template<class T>
Bool allAND (const Array< T > &l, const Array< T > &r)
 This only makes sense if the array element type is logical valued.
template<class T>
Bool allOR (const Array< T > &l, const Array< T > &r)
template<class T>
LogicalArray operator<= (const Array< T > &l, const Array< T > &r)
 Element by element comparisons between the "l" and "r" arrays.
template<class T>
LogicalArray operator< (const Array< T > &l, const Array< T > &r)
template<class T>
LogicalArray operator>= (const Array< T > &l, const Array< T > &r)
template<class T>
LogicalArray operator> (const Array< T > &l, const Array< T > &r)
template<class T>
LogicalArray operator== (const Array< T > &l, const Array< T > &r)
template<class T>
LogicalArray operator!= (const Array< T > &l, const Array< T > &r)
template<class T>
LogicalArray near (const Array< T > &l, const Array< T > &r, Double tol)
template<class T>
LogicalArray nearAbs (const Array< T > &l, const Array< T > &r, Double tol)
template<class T>
LogicalArray operator && (const Array< T > &l, const Array< T > &r)
 This only makes sense if the array element type is logical valued.
template<class T>
LogicalArray operator|| (const Array< T > &l, const Array< T > &r)
template<class T>
Bool allLE (const Array< T > &array, const T &val)
 Element by element comparisons between an array and a scalar, which behaves as if it were a conformant array filled with the value "val." The result is true only if the comparison is true for every element of the array.
template<class T>
Bool allLE (const T &val, const Array< T > &array)
template<class T>
Bool allLT (const Array< T > &array, const T &val)
template<class T>
Bool allLT (const T &val, const Array< T > &array)
template<class T>
Bool allGE (const Array< T > &array, const T &val)
template<class T>
Bool allGE (const T &val, const Array< T > &array)
template<class T>
Bool allGT (const Array< T > &array, const T &val)
template<class T>
Bool allGT (const T &val, const Array< T > &array)
template<class T>
Bool allEQ (const Array< T > &array, const T &val)
template<class T>
Bool allEQ (const T &val, const Array< T > &array)
template<class T>
Bool allNE (const Array< T > &array, const T &val)
template<class T>
Bool allNE (const T &val, const Array< T > &array)
template<class T>
Bool allNear (const Array< T > &array, const T &val, Double tol)
template<class T>
Bool allNear (const T &val, const Array< T > &array, Double tol)
template<class T>
Bool allNearAbs (const Array< T > &array, const T &val, Double tol)
template<class T>
Bool allNearAbs (const T &val, const Array< T > &array, Double tol)
template<class T>
Bool allAND (const Array< T > &array, const T &val)
 This only makes sense if the array element type is logical valued.
template<class T>
Bool allAND (const T &val, const Array< T > &array)
template<class T>
Bool allOR (const Array< T > &array, const T &val)
template<class T>
Bool allOR (const T &val, const Array< T > &array)
template<class T>
LogicalArray operator<= (const Array< T > &array, const T &val)
 Element by element comparisons between an array and a scalar, which behaves as if it were a conformant array filled with the value "val." The result is a LogicalArray.
template<class T>
LogicalArray operator<= (const T &val, const Array< T > &array)
template<class T>
LogicalArray operator< (const Array< T > &array, const T &val)
template<class T>
LogicalArray operator< (const T &val, const Array< T > &array)
template<class T>
LogicalArray operator>= (const Array< T > &array, const T &val)
template<class T>
LogicalArray operator>= (const T &val, const Array< T > &array)
template<class T>
LogicalArray operator> (const Array< T > &array, const T &val)
template<class T>
LogicalArray operator> (const T &val, const Array< T > &array)
template<class T>
LogicalArray operator== (const Array< T > &array, const T &val)
template<class T>
LogicalArray operator== (const T &val, const Array< T > &array)
template<class T>
LogicalArray operator!= (const Array< T > &array, const T &val)
template<class T>
LogicalArray operator!= (const T &val, const Array< T > &array)
template<class T>
LogicalArray near (const Array< T > &array, const T &val, Double tol)
template<class T>
LogicalArray near (const T &val, const Array< T > &array, Double tol)
template<class T>
LogicalArray nearAbs (const Array< T > &array, const T &val, Double tol)
template<class T>
LogicalArray nearAbs (const T &val, const Array< T > &array, Double tol)
template<class T>
LogicalArray operator && (const Array< T > &array, const T &val)
 This only makes sense if the array element type is logical valued.
template<class T>
LogicalArray operator && (const T &val, const Array< T > &array)
template<class T>
LogicalArray operator|| (const Array< T > &array, const T &val)
template<class T>
LogicalArray operator|| (const T &val, const Array< T > &array)
template<class T>
Bool anyLE (const Array< T > &l, const Array< T > &r)
 Element by element comparisons between the "l" and "r" arrays.
template<class T>
Bool anyLT (const Array< T > &l, const Array< T > &r)
template<class T>
Bool anyGE (const Array< T > &l, const Array< T > &r)
template<class T>
Bool anyGT (const Array< T > &l, const Array< T > &r)
template<class T>
Bool anyEQ (const Array< T > &l, const Array< T > &r)
template<class T>
Bool anyNE (const Array< T > &l, const Array< T > &r)
template<class T>
Bool anyNear (const Array< T > &l, const Array< T > &r, Double tol)
template<class T>
Bool anyNearAbs (const Array< T > &l, const Array< T > &r, Double tol)
template<class T>
Bool anyAND (const Array< T > &l, const Array< T > &r)
 This only makes sense if the array element type is logical valued.
template<class T>
Bool anyOR (const Array< T > &l, const Array< T > &r)
template<class T>
Bool anyLE (const Array< T > &array, const T &val)
 Element by element comparisons between an array and a scalar, which behaves as if it were a conformant array filled with the value "val." The result is true if the comparison is true for some element of the array.
template<class T>
Bool anyLE (const T &val, const Array< T > &array)
template<class T>
Bool anyLT (const Array< T > &array, const T &val)
template<class T>
Bool anyLT (const T &val, const Array< T > &array)
template<class T>
Bool anyGE (const Array< T > &array, const T &val)
template<class T>
Bool anyGE (const T &val, const Array< T > &array)
template<class T>
Bool anyGT (const Array< T > &array, const T &val)
template<class T>
Bool anyGT (const T &val, const Array< T > &array)
template<class T>
Bool anyEQ (const Array< T > &array, const T &val)
template<class T>
Bool anyEQ (const T &val, const Array< T > &array)
template<class T>
Bool anyNE (const Array< T > &array, const T &val)
template<class T>
Bool anyNE (const T &val, const Array< T > &array)
template<class T>
Bool anyNear (const Array< T > &array, const T &val, Double tol)
template<class T>
Bool anyNear (const T &val, const Array< T > &array, Double tol)
template<class T>
Bool anyNearAbs (const Array< T > &array, const T &val, Double tol)
template<class T>
Bool anyNearAbs (const T &val, const Array< T > &array, Double tol)
template<class T>
Bool anyAND (const Array< T > &array, const T &val)
 This only makes sense if the array element type is logical valued.
template<class T>
Bool anyAND (const T &val, const Array< T > &array)
template<class T>
Bool anyOR (const Array< T > &array, const T &val)
template<class T>
Bool anyOR (const T &val, const Array< T > &array)
template<class T>
uInt ntrue (const Array< T > &array)
 Determine it for the full array.
template<class T>
uInt nfalse (const Array< T > &array)
template<class T>
Array< uIntpartialNTrue (const Array< T > &array, const IPosition &collapseAxes)
 The same functions as above, but determine ntrue and nfalse for the given axes only.
template<class T>
Array< uIntpartialNFalse (const Array< T > &array, const IPosition &collapseAxes)


Member Function Documentation

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allLE ( const Array< T > &  l,
const Array< T > &  r 
)

Element by element comparisons between the "l" and "r" arrays.

The result is true only if the comparison is true for every element of the arrays.

The operator forms of array logical operations which return a single Bool have been replaced by these "all" functions. The operator forms of array logical operations now return a LogicalArray.

The arrays must conform except for allEQ, which will return False if the arrays have different shapes.

Thrown Exceptions

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allLT ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allGE ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allGT ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allEQ ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNE ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNear ( const Array< T > &  l,
const Array< T > &  r,
Double  tol 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNearAbs ( const Array< T > &  l,
const Array< T > &  r,
Double  tol 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allAND ( const Array< T > &  l,
const Array< T > &  r 
)

This only makes sense if the array element type is logical valued.

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allOR ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator<= ( const Array< T > &  l,
const Array< T > &  r 
)

Element by element comparisons between the "l" and "r" arrays.

The result is a LogicalArray. The arrays must conform or an exception is thrown.

The Vector, Matrix and Cube version are present to bypass the problems due to the existence of automatic comparison inline templates in standard algorithm library, producing a single Bool value.

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator< ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator>= ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator> ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator== ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator!= ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::near ( const Array< T > &  l,
const Array< T > &  r,
Double  tol 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::nearAbs ( const Array< T > &  l,
const Array< T > &  r,
Double  tol 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator && ( const Array< T > &  l,
const Array< T > &  r 
)

This only makes sense if the array element type is logical valued.

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator|| ( const Array< T > &  l,
const Array< T > &  r 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator! ( const Array< T > &  l  ) 

Logical negation of an array.

This only makes sense if the array element type is logical valued.

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allLE ( const Array< T > &  array,
const T &  val 
)

Element by element comparisons between an array and a scalar, which behaves as if it were a conformant array filled with the value "val." The result is true only if the comparison is true for every element of the array.

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allLE ( const T &  val,
const Array< T > &  array 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allLT ( const Array< T > &  array,
const T &  val 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allLT ( const T &  val,
const Array< T > &  array 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allGE ( const Array< T > &  array,
const T &  val 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allGE ( const T &  val,
const Array< T > &  array 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allGT ( const Array< T > &  array,
const T &  val 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allGT ( const T &  val,
const Array< T > &  array 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allEQ ( const Array< T > &  array,
const T &  val 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allEQ ( const T &  val,
const Array< T > &  array 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNE ( const Array< T > &  array,
const T &  val 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNE ( const T &  val,
const Array< T > &  array 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNear ( const Array< T > &  array,
const T &  val,
Double  tol 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNear ( const T &  val,
const Array< T > &  array,
Double  tol 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNearAbs ( const Array< T > &  array,
const T &  val,
Double  tol 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allNearAbs ( const T &  val,
const Array< T > &  array,
Double  tol 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allAND ( const Array< T > &  array,
const T &  val 
)

This only makes sense if the array element type is logical valued.

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allAND ( const T &  val,
const Array< T > &  array 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allOR ( const Array< T > &  array,
const T &  val 
)

template<class T>
Bool casa::ArrayLogical_global_functions_Array_logical_operations::allOR ( const T &  val,
const Array< T > &  array 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator<= ( const Array< T > &  array,
const T &  val 
)

Element by element comparisons between an array and a scalar, which behaves as if it were a conformant array filled with the value "val." The result is a LogicalArray.

Thrown Exceptions

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator<= ( const T &  val,
const Array< T > &  array 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator< ( const Array< T > &  array,
const T &  val 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator< ( const T &  val,
const Array< T > &  array 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator>= ( const Array< T > &  array,
const T &  val 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator>= ( const T &  val,
const Array< T > &  array 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator> ( const Array< T > &  array,
const T &  val 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator> ( const T &  val,
const Array< T > &  array 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator== ( const Array< T > &  array,
const T &  val 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator== ( const T &  val,
const Array< T > &  array 
)

template<class T>
LogicalArray casa::ArrayLogical_global_functions_Array_logical_operations::operator!= ( const Array< T > &  array,
const T &  val