A min/max value pair with additional methods. In addition to conveniently storing values, it can be used for logic operations or to modify data. A few global functions and functors are also provided.
More...
|
| MinMax () |
| Construct inverted range. More...
|
|
| MinMax (const T &minVal, const T &maxVal) |
| Copy construct from components. More...
|
|
| MinMax (const std::pair< T, T > &range) |
| Copy construct from components. More...
|
|
| MinMax (const Pair< T > &range) |
| Copy construct from components. More...
|
|
| MinMax (const Foam::zero) |
| Construct with a single zero value. More...
|
|
| MinMax (const T &val) |
| Construct with a single initial value. More...
|
|
| MinMax (const UList< T > &vals) |
| Construct from list of values. More...
|
|
const T & | min () const noexcept |
| The min value (first) More...
|
|
T & | min () noexcept |
| The min value (first) More...
|
|
const T & | max () const noexcept |
| The max value (second) More...
|
|
T & | max () noexcept |
| The max value (second) More...
|
|
T | centre () const |
| The min/max average value. More...
|
|
T | span () const |
| The min to max span. Zero if the range is invalid. More...
|
|
scalar | mag () const |
| The magnitude of the min to max span. Zero if the range is invalid. More...
|
|
bool | empty () const |
| Range is empty if it is inverted. More...
|
|
bool | good () const |
| Range is non-inverted. More...
|
|
bool | valid () const |
| Range is non-inverted. More...
|
|
void | reset () |
| Reset to an inverted (invalid) range. More...
|
|
void | reset (const T &val) |
| Reset min/max to be identical to the specified value. More...
|
|
void | reset (const T &minVal, const T &maxVal) |
| Reset min/max to specified values. More...
|
|
void | clear () |
| Same as reset() - reset to an inverted (invalid) range. More...
|
|
bool | intersects (const MinMax< T > &b) const |
| Test if the ranges intersect (exclusive check) More...
|
|
bool | overlaps (const MinMax< T > &b) const |
| Test if ranges overlap/touch (inclusive check) More...
|
|
int | compare (const T &val) const |
| Compares the min/max range with the specified value. More...
|
|
bool | contains (const T &val) const |
| True if the value is within the range (inclusive check) More...
|
|
const T & | clip (const T &val) const |
| If out of range, return the respective min/max limits, otherwise return the value itself. More...
|
|
bool | inplaceClip (T &val) const |
| Inplace clip value by the min/max limits. More...
|
|
MinMax< T > & | add (const MinMax &other) |
| Extend the range to include the other min/max range. More...
|
|
MinMax< T > & | add (const T &val) |
| Include the value into the range. More...
|
|
MinMax< T > & | add (const UList< T > &vals) |
| Include the values into the range. More...
|
|
bool | operator() (const T &val) const |
| Identical to contains(), for use as a predicate. More...
|
|
MinMax< T > & | operator &= (const MinMax< T > &b) |
| Restrict min/max range to union with other range. More...
|
|
MinMax< T > & | operator+= (const MinMax< T > &b) |
| Extend min/max range to include other range. More...
|
|
MinMax< T > & | operator+= (const T &val) |
| Extend min/max range to include value. More...
|
|
MinMax< T > & | operator+= (const UList< T > &vals) |
| Extend min/max range to include all values. More...
|
|
MinMax< T > & | operator*= (const scalar &s) |
| Multiply range by scalar factor. More...
|
|
MinMax< T > & | operator/= (const scalar &s) |
| Divide range by scalar factor. More...
|
|
| Tuple2 ()=default |
| Default construct. More...
|
|
| Tuple2 (const T &f, const T &s) |
| Copy construct from components. More...
|
|
| Tuple2 (T &&f, T &&s) |
| Move construct from components. More...
|
|
| Tuple2 (const std::pair< T, T > &vals) |
| Copy construct from std::pair. More...
|
|
| Tuple2 (std::pair< T, T > &&vals) |
| Move construct from std::pair. More...
|
|
| Tuple2 (Istream &is) |
| Construct from Istream. More...
|
|
const T & | first () const noexcept |
| Access the first element. More...
|
|
T & | first () noexcept |
| Access the first element. More...
|
|
const T & | second () const noexcept |
| Access the second element. More...
|
|
T & | second () noexcept |
| Access the second element. More...
|
|
template<class T>
class Foam::MinMax< T >
A min/max value pair with additional methods. In addition to conveniently storing values, it can be used for logic operations or to modify data. A few global functions and functors are also provided.
Examples of use.
Determine min/max limits from a List of values:
List<scalar> values = ...;
// on construction
MinMax<scalar> range(values);
range.clear();
range += val;
// global minMax() function
Info<< minMax(values) << nl;
General comparison operations
scalar val;
if (val < range) ... value is below range min
if (range.contains(val)) ... value within range
if (range.compare(val) > 0) ... value is above range max
if (range(val)) ... value within range - as predicate
Since the range has a predicate form, it can be used as a filter method. For example,
Info<< "values in range: " << subsetList(values, range) << nl;
boolList mask = ListOps::create<bool>(values, range);
Info<< "values values in range " << mask << nl;
One particular advantage offered by MinMax is to clip or limit values to a particular range. For example,
scalarMinMax range(lower, upper);
scalar val;
val = range.clip(val) .. return clip values
// vs.
val = min(max(value, lower, upper))
Or when working on lists, the values can be limited in a single pass of the data without intermediate memory allocation.
scalarField values = ...;
for (scalar& val : values)
{
range.inplaceClip(val);
}
// vs.
values = min(max(values, lower, upper))
Definition at line 72 of file HashSet.H.