From 75ef6f4e50ab6ef0e311a5b8a588949b48a415f0 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Sun, 30 Apr 2017 21:29:24 +0200
Subject: [PATCH] ENH: add labelRange comparison operators and subset methods

- improve interface consistency.
---
 .../test/labelRanges/Test-labelRanges.C       |  28 ++++
 .../primitives/ranges/labelRange/labelRange.C |  62 +++++---
 .../primitives/ranges/labelRange/labelRange.H | 141 +++++++++++-------
 .../ranges/labelRange/labelRangeI.H           |  60 +++-----
 .../ranges/labelRange/labelRanges.C           |   4 +-
 .../ranges/labelRange/labelRanges.H           |  43 +++---
 .../ranges/labelRange/labelRangesI.H          |  28 ++--
 .../ranges/scalarRange/scalarRange.C          |  34 +++--
 .../ranges/scalarRange/scalarRange.H          |  21 +--
 .../ranges/scalarRange/scalarRanges.C         |   2 +-
 .../ranges/scalarRange/scalarRanges.H         |  13 +-
 11 files changed, 248 insertions(+), 188 deletions(-)

diff --git a/applications/test/labelRanges/Test-labelRanges.C b/applications/test/labelRanges/Test-labelRanges.C
index a85d2a14dc1..ec2d1523390 100644
--- a/applications/test/labelRanges/Test-labelRanges.C
+++ b/applications/test/labelRanges/Test-labelRanges.C
@@ -54,6 +54,34 @@ int main(int argc, char *argv[])
         labelRange::debug = 1;
     }
 
+    {
+        Info<<"test sorting" << endl;
+        DynamicList<labelRange> list1(10);
+        list1.append(labelRange(25, 8));
+        list1.append(labelRange(0, 10));
+        list1.append(labelRange(15, 5));
+        list1.append(labelRange(50, -10));
+
+        sort(list1);
+        Info<<"sorted" << list1 << endl;
+    }
+
+    {
+        Info<<"test intersections" << endl;
+        labelRange range1(-15, 25);
+        labelRange range2(7, 8);
+        labelRange range3(-20, 8);
+        labelRange range4(50, 8);
+
+        Info<<range1 << " & " << range2
+            << " = " << range1.subset(range2) << nl;
+
+        Info<< range1 << " & " << range3
+            << " = " << range1.subset(range3) << nl;
+
+        Info<< range2 << " & " << range4
+            << " = " << range2.subset(range4) << nl;
+    }
 
     labelRange range;
     labelRanges ranges;
diff --git a/src/OpenFOAM/primitives/ranges/labelRange/labelRange.C b/src/OpenFOAM/primitives/ranges/labelRange/labelRange.C
index 2bf9810f6c6..74ccf4140d8 100644
--- a/src/OpenFOAM/primitives/ranges/labelRange/labelRange.C
+++ b/src/OpenFOAM/primitives/ranges/labelRange/labelRange.C
@@ -29,7 +29,10 @@ License
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
-int Foam::labelRange::debug(::Foam::debug::debugSwitch("labelRange", 0));
+namespace Foam
+{
+int labelRange::debug(debug::debugSwitch("labelRange", 0));
+}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
@@ -66,8 +69,7 @@ bool Foam::labelRange::overlaps(const labelRange& range, bool touches) const
 
     return
     (
-        this->size()
-     && range.size()
+        this->size() && range.size()
      &&
         (
             (
@@ -91,35 +93,59 @@ Foam::labelRange Foam::labelRange::join(const labelRange& range) const
     {
         return *this;
     }
-    else if (!range.size_)
+    else if (!range.size())
     {
         return range;
     }
 
     const label lower = Foam::min(this->first(), range.first());
     const label upper = Foam::max(this->last(),  range.last());
-    const label sz = upper - lower + 1;
+    const label total = upper+1 - lower;
+    // last = start+size-1
+    // size = last+1-start
 
-    return labelRange(lower, sz);
+    return labelRange(lower, total);
 }
 
 
-// * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
-
-void Foam::labelRange::operator+=(const labelRange& rhs)
+Foam::labelRange Foam::labelRange::subset(const labelRange& range) const
 {
-    if (!size_)
+    const label lower = Foam::max(this->first(), range.first());
+    const label upper = Foam::min(this->last(),  range.last());
+    const label total = upper+1 - lower;
+    // last = start+size-1
+    // size = last+1-start
+
+    if (total > 0)
     {
-        // trivial case
-        operator=(rhs);
+        return labelRange(lower, total);
     }
-    else if (rhs.size_)
+    else
     {
-        const label lower = Foam::min(this->first(), rhs.first());
-        const label upper = Foam::max(this->last(),  rhs.last());
+        return labelRange();
+    }
+}
 
-        start_ = lower;
-        size_  = upper - lower + 1;
+
+Foam::labelRange Foam::labelRange::subset
+(
+    const label start,
+    const label size
+) const
+{
+    const label lower = Foam::max(this->start(), start);
+    const label upper = Foam::min(this->last(),  start+Foam::max(0,size)-1);
+    const label total = upper+1 - lower;
+    // last = start+size-1
+    // size = last+1-start
+
+    if (total > 0)
+    {
+        return labelRange(lower, total);
+    }
+    else
+    {
+        return labelRange();
     }
 }
 
@@ -148,7 +174,7 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const labelRange& range)
 {
     // Write ASCII only for now
     os  << token::BEGIN_LIST
-        << range.start_ << token::SPACE << range.size_
+        << range.start() << token::SPACE << range.size()
         << token::END_LIST;
 
     os.check("operator<<(Ostream&, const labelRange&)");
diff --git a/src/OpenFOAM/primitives/ranges/labelRange/labelRange.H b/src/OpenFOAM/primitives/ranges/labelRange/labelRange.H
index 3fa69c4ff37..8452e959360 100644
--- a/src/OpenFOAM/primitives/ranges/labelRange/labelRange.H
+++ b/src/OpenFOAM/primitives/ranges/labelRange/labelRange.H
@@ -25,7 +25,7 @@ Class
     Foam::labelRange
 
 Description
-    A range of labels.
+    A range of labels defined by a start and a size.
 
 SourceFiles
     labelRange.C
@@ -66,28 +66,13 @@ public:
     static int debug;
 
 
-    // Public classes
-
-        //- Less function class for sorting labelRange
-        class less
-        {
-        public:
-
-            bool operator()(const labelRange& a, const labelRange& b)
-            {
-                return a.operator<(b);
-            }
-        };
-
-
     // Constructors
 
-        //- Construct an empty range with zero as start and size.
+        //- An empty range with zero for start/size.
         inline labelRange();
 
-        //- Construct a range from start and size.
+        //- Construct a range from start and size, enforcing non-negative size.
         //  Optionally adjust the start to avoid any negative indices.
-        //  Always reduce a negative size to zero.
         inline labelRange
         (
             const label start,
@@ -116,21 +101,23 @@ public:
         //- Adjust the start to avoid any negative indices
         void adjust();
 
-        //- Is the range valid (non-empty)?
+        //- Is the range non-empty?
         inline bool valid() const;
 
-        //- Return the effective size of the range
+        //- The (inclusive) lower value of the range
+        inline label start() const;
+
+        //- The effective size of the range
         inline label size() const;
 
-        //- The (inclusive) lower value of the range
+        //- The (inclusive) lower value of the range - same as start
         inline label first() const;
 
         //- The (inclusive) upper value of the range
         inline label last() const;
 
-        //- Reset start and size.
+        //- Reset start and size, enforcing non-negative size.
         //  Optionally adjust the start to avoid any negative indices.
-        //  Always reduce a negative size to zero.
         //  Return true if the updated range valid (non-empty).
         inline bool reset
         (
@@ -139,8 +126,8 @@ public:
             const bool adjustStart = false
         );
 
-        //- Return true if the value is within the range
-        inline bool contains(const label value) const;
+        //- Return true if the value is located the range
+        inline bool found(const label value) const;
 
         //- Return true if the ranges overlap.
         //  Optional test for ranges that also just touch each other
@@ -150,22 +137,21 @@ public:
         //  A prior overlaps() check can be used to avoid squashing gaps.
         labelRange join(const labelRange& range) const;
 
+        //- Calculate the intersection of the range with another.
+        //  If there is no intersection, it returns an empty range with zero
+        //  for start/size.
+        labelRange subset(const labelRange& range) const;
 
-    // Member Operators
-
-        //- Return element in range, no bounds checking
-        inline label operator[](const label i) const;
+        //- Calculate the intersection of the range with another.
+        //  If there is no intersection, it returns an empty range with zero
+        //  for start/size.
+        labelRange subset(const label start, const label size) const;
 
-        //- Comparison function for sorting, compares the start.
-        //  If the start values are equal, also compares the size.
-        inline bool operator<(const labelRange& rhs) const;
 
-        //- Join ranges, squashing any gaps in between
-        //  A prior overlaps() check can be used to avoid squashing gaps.
-        void operator+=(const labelRange& rhs);
+    // Member Operators
 
-        inline bool operator==(const labelRange& rhs) const;
-        inline bool operator!=(const labelRange& rhs) const;
+        //- Return element in the range, no bounds checking
+        inline label operator[](const label localIndex) const;
 
 
     // STL iterator
@@ -175,36 +161,32 @@ public:
         {
             friend class labelRange;
 
-            // Private data
+          // Private data
 
-                //- Reference to the range for which this is an iterator
-                const labelRange& range_;
+            //- Reference to the range for which this is an iterator
+            const labelRange* range_;
 
-                //- Current index
-                label index_;
+            //- Current index, relative to the start
+            label index_;
 
+          // Constructors
 
-            // Constructors
-
-                //- Construct from range at 'begin' or 'end' position
-                inline const_iterator
-                (
-                    const labelRange& range,
-                    const bool endIter = false
-                );
+            //- Construct from range at given index.
+            //  A negative index signals the 'end' position
+            inline const_iterator(const labelRange* range, const label i);
 
         public:
 
-            // Member operators
+          // Member operators
 
-                inline bool operator==(const const_iterator& iter) const;
-                inline bool operator!=(const const_iterator& iter) const;
+            inline bool operator==(const const_iterator& iter) const;
+            inline bool operator!=(const const_iterator& iter) const;
 
-                inline label operator*() const;
-                inline label operator()() const;
+            //- Return the current label
+            inline label operator*() const;
 
-                inline const_iterator& operator++();
-                inline const_iterator operator++(int);
+            inline const_iterator& operator++();
+            inline const_iterator operator++(int);
         };
 
 
@@ -229,6 +211,51 @@ public:
 };
 
 
+// Global Operators
+
+inline bool operator==(const labelRange& a, const labelRange& b)
+{
+    return (a.first() == b.first() && a.size() == b.size());
+}
+
+inline bool operator!=(const labelRange& a, const labelRange& b)
+{
+    return !(a == b);
+}
+
+
+//- Comparison function for sorting, compares the start.
+//  If the start values are equal, also compares the size.
+inline bool operator<(const labelRange& a, const labelRange& b)
+{
+    return
+    (
+        a.first() < b.first()
+     ||
+        (
+            !(b.first() < a.first())
+         && a.size() < b.size()
+        )
+    );
+}
+
+inline bool operator<=(const labelRange& a, const labelRange& b)
+{
+    return !(b < a);
+}
+
+
+inline bool operator>(const labelRange& a, const labelRange& b)
+{
+    return (b < a);
+}
+
+inline bool operator>=(const labelRange& a, const labelRange& b)
+{
+    return !(a < b);
+}
+
+
 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
 
 } // End namespace Foam
diff --git a/src/OpenFOAM/primitives/ranges/labelRange/labelRangeI.H b/src/OpenFOAM/primitives/ranges/labelRange/labelRangeI.H
index 927a6f57a08..ddf53bd9c74 100644
--- a/src/OpenFOAM/primitives/ranges/labelRange/labelRangeI.H
+++ b/src/OpenFOAM/primitives/ranges/labelRange/labelRangeI.H
@@ -60,12 +60,12 @@ inline Foam::labelRange::labelRange
 
 inline Foam::labelRange::const_iterator::const_iterator
 (
-    const labelRange& range,
-    const bool endIter
+    const labelRange* range,
+    const label i
 )
 :
-   range_(range),
-   index_(endIter ? range_.size() : 0)
+    range_(range),
+    index_(i < 0 ? range->size() : i)
 {}
 
 
@@ -89,13 +89,7 @@ inline bool Foam::labelRange::const_iterator::operator!=
 
 inline Foam::label Foam::labelRange::const_iterator::operator*() const
 {
-    return range_[index_];
-}
-
-
-inline Foam::label Foam::labelRange::const_iterator::operator()() const
-{
-    return range_[index_];
+    return range_->start_ + index_;
 }
 
 
@@ -118,25 +112,25 @@ Foam::labelRange::const_iterator::operator++(int)
 
 inline Foam::labelRange::const_iterator Foam::labelRange::cbegin() const
 {
-    return const_iterator(*this);
+    return const_iterator(this, 0);
 }
 
 
 inline const Foam::labelRange::const_iterator Foam::labelRange::cend() const
 {
-    return const_iterator(*this, true);
+    return const_iterator(this, -1);
 }
 
 
 inline Foam::labelRange::const_iterator Foam::labelRange::begin() const
 {
-    return const_iterator(*this);
+    return const_iterator(this, 0);
 }
 
 
 inline const Foam::labelRange::const_iterator Foam::labelRange::end() const
 {
-    return const_iterator(*this, true);
+    return const_iterator(this, -1);
 }
 
 
@@ -183,6 +177,12 @@ inline Foam::label Foam::labelRange::size() const
 }
 
 
+inline Foam::label Foam::labelRange::start() const
+{
+    return start_;
+}
+
+
 inline Foam::label Foam::labelRange::first() const
 {
     return start_;
@@ -220,39 +220,17 @@ inline bool Foam::labelRange::reset
 }
 
 
-inline bool Foam::labelRange::contains(const label value) const
+inline bool Foam::labelRange::found(const label value) const
 {
-    return value >= this->first() && value <= this->last();
+    return (value >= this->first() && value <= this->last());
 }
 
 
 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
 
-inline Foam::label Foam::labelRange::operator[](const label i) const
-{
-    return start_ + i;
-}
-
-
-inline bool Foam::labelRange::operator<(const labelRange& rhs) const
-{
-    return
-    (
-        this->first() < rhs.first()
-     || (this->first() == rhs.first() && this->size() < rhs.size())
-    );
-}
-
-
-inline bool Foam::labelRange::operator==(const labelRange& rhs) const
-{
-    return start_ == rhs.start_ && size_ == rhs.size_;
-}
-
-
-inline bool Foam::labelRange::operator!=(const labelRange& rhs) const
+inline Foam::label Foam::labelRange::operator[](const label localIndex) const
 {
-    return !(operator==(rhs));
+    return start_ + localIndex;
 }
 
 
diff --git a/src/OpenFOAM/primitives/ranges/labelRange/labelRanges.C b/src/OpenFOAM/primitives/ranges/labelRange/labelRanges.C
index d9edff0e47a..6c070d4c433 100644
--- a/src/OpenFOAM/primitives/ranges/labelRange/labelRanges.C
+++ b/src/OpenFOAM/primitives/ranges/labelRange/labelRanges.C
@@ -139,7 +139,7 @@ bool Foam::labelRanges::add(const labelRange& range)
         if (currRange.overlaps(range, true))
         {
             // absorb into the existing (adjacent/overlapping) range
-            currRange += range;
+            currRange.join(range);
 
             // might connect with the next following range(s)
             for (; elemI < this->size()-1; ++elemI)
@@ -147,7 +147,7 @@ bool Foam::labelRanges::add(const labelRange& range)
                 labelRange& nextRange = ParentType::operator[](elemI+1);
                 if (currRange.overlaps(nextRange, true))
                 {
-                    currRange += nextRange;
+                    currRange.join(nextRange);
                     nextRange.clear();
                 }
                 else
diff --git a/src/OpenFOAM/primitives/ranges/labelRange/labelRanges.H b/src/OpenFOAM/primitives/ranges/labelRange/labelRanges.H
index 134acb04820..7dc3251920f 100644
--- a/src/OpenFOAM/primitives/ranges/labelRange/labelRanges.H
+++ b/src/OpenFOAM/primitives/ranges/labelRange/labelRanges.H
@@ -99,8 +99,8 @@ public:
         //- Return true if the list is empty
         using DynamicList<labelRange>::empty;
 
-        //- Return true if the value is within any of the ranges
-        inline bool contains(const label value) const;
+        //- Return true if the value is found any of the sub-ranges
+        inline bool found(const label value) const;
 
         //- Add the range to the list
         bool add(const labelRange& range);
@@ -116,38 +116,35 @@ public:
         {
             friend class labelRanges;
 
-            // Private data
+          // Private data
 
-                //- Reference to the list for which this is an iterator
-                const labelRanges& list_;
+            //- Reference to the list for which this is an iterator
+            const labelRanges* list_;
 
-                //- Current list index
-                label index_;
+            //- Current list-index
+            label index_;
 
-                //- Index of current element at listIndex
-                label subIndex_;
+            //- Index of current element at list-index
+            label subIndex_;
 
-            // Constructors
+          // Constructors
 
-                //- Construct from ranges at 'begin' or 'end' position
-                inline const_iterator
-                (
-                    const labelRanges& lst,
-                    const bool endIter = false
-                );
+            //- Construct from ranges at given index.
+            //  A negative index signals the 'end' position
+            inline const_iterator(const labelRanges* lst, const label i);
 
         public:
 
-            // Member operators
+          // Member operators
 
-                inline bool operator==(const const_iterator& iter) const;
-                inline bool operator!=(const const_iterator& iter) const;
+            inline bool operator==(const const_iterator& iter) const;
+            inline bool operator!=(const const_iterator& iter) const;
 
-                inline label operator*();
-                inline label operator()();
+            //- Return the current label
+            inline label operator*();
 
-                inline const_iterator& operator++();
-                inline const_iterator operator++(int);
+            inline const_iterator& operator++();
+            inline const_iterator operator++(int);
         };
 
 
diff --git a/src/OpenFOAM/primitives/ranges/labelRange/labelRangesI.H b/src/OpenFOAM/primitives/ranges/labelRange/labelRangesI.H
index 9ccad0e300c..28d485f96da 100644
--- a/src/OpenFOAM/primitives/ranges/labelRange/labelRangesI.H
+++ b/src/OpenFOAM/primitives/ranges/labelRange/labelRangesI.H
@@ -42,12 +42,12 @@ inline Foam::labelRanges::labelRanges(const label nElem)
 
 inline Foam::labelRanges::const_iterator::const_iterator
 (
-    const labelRanges& lst,
-    const bool endIter
+    const labelRanges* lst,
+    const label i
 )
 :
     list_(lst),
-    index_(endIter ? lst.size() : 0),
+    index_(i < 0 ? lst->size() : i),
     subIndex_(0)
 {}
 
@@ -76,20 +76,14 @@ inline bool Foam::labelRanges::const_iterator::operator!=
 
 inline Foam::label Foam::labelRanges::const_iterator::operator*()
 {
-    return list_[index_][subIndex_];
-}
-
-
-inline Foam::label Foam::labelRanges::const_iterator::operator()()
-{
-    return list_[index_][subIndex_];
+    return list_->operator[](index_)[subIndex_];
 }
 
 
 inline Foam::labelRanges::const_iterator&
 Foam::labelRanges::const_iterator::operator++()
 {
-    if (++subIndex_ >= list_[index_].size())
+    if (++subIndex_ >= list_->operator[](index_).size())
     {
         // Next sub-list
         ++index_;
@@ -111,35 +105,35 @@ Foam::labelRanges::const_iterator::operator++(int)
 
 inline Foam::labelRanges::const_iterator Foam::labelRanges::cbegin() const
 {
-    return const_iterator(*this);
+    return const_iterator(this, 0);
 }
 
 
 inline const Foam::labelRanges::const_iterator Foam::labelRanges::cend() const
 {
-    return const_iterator(*this, true);
+    return const_iterator(this, -1);
 }
 
 
 inline Foam::labelRanges::const_iterator Foam::labelRanges::begin() const
 {
-    return const_iterator(*this);
+    return const_iterator(this, 0);
 }
 
 
 inline const Foam::labelRanges::const_iterator Foam::labelRanges::end() const
 {
-    return const_iterator(*this, true);
+    return const_iterator(this, -1);
 }
 
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
-inline bool Foam::labelRanges::contains(const label value) const
+inline bool Foam::labelRanges::found(const label value) const
 {
     forAll(*this, i)
     {
-        if (this->ParentType::operator[](i).contains(value))
+        if (ParentType::operator[](i).found(value))
         {
             return true;
         }
diff --git a/src/OpenFOAM/primitives/ranges/scalarRange/scalarRange.C b/src/OpenFOAM/primitives/ranges/scalarRange/scalarRange.C
index 20220711013..83a946bf77b 100644
--- a/src/OpenFOAM/primitives/ranges/scalarRange/scalarRange.C
+++ b/src/OpenFOAM/primitives/ranges/scalarRange/scalarRange.C
@@ -28,7 +28,10 @@ License
 
 // * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * //
 
-int Foam::scalarRange::debug(::Foam::debug::debugSwitch("scalarRange", 0));
+namespace Foam
+{
+int scalarRange::debug(debug::debugSwitch("scalarRange", 0));
+}
 
 
 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
@@ -47,11 +50,9 @@ Foam::scalarRange::scalarRange(const scalar lower, const scalar upper)
     value_(lower),
     value2_(upper)
 {
-    // mark invalid range as empty
     if (lower > upper)
     {
-        type_ = EMPTY;
-        value_ = value2_ = 0;
+        clear();  // Mark invalid range as empty
     }
 }
 
@@ -73,6 +74,14 @@ Foam::scalarRange::scalarRange(Istream& is)
 
 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
 
+void Foam::scalarRange::clear()
+{
+    type_   = scalarRange::EMPTY;
+    value_  = 0;
+    value2_ = 0;
+}
+
+
 bool Foam::scalarRange::empty() const
 {
     return type_ == EMPTY;
@@ -210,15 +219,14 @@ Foam::Istream& Foam::operator>>(Istream& is, scalarRange& range)
     // a number is now required
     if (!toks[nTok-1].isNumber())
     {
-        is.setBad();
-        range.type_ = scalarRange::EMPTY;
-        range.value_ = range.value2_ = 0;
+        range.clear();  // Mark invalid range as empty
         Info<< "rejected ill-formed or empty range:";
         for (label i=0; i<nTok; ++i)
         {
             Info<< " " << toks[i];
         }
         Info<< endl;
+        is.setBad();
         return is;
     }
 
@@ -245,15 +253,14 @@ Foam::Istream& Foam::operator>>(Istream& is, scalarRange& range)
     {
         if (range.type_ == scalarRange::UPPER)
         {
-            is.setBad();
-            range.type_ = scalarRange::EMPTY;
-            range.value_ = range.value2_ = 0;
+            range.clear();  // Mark invalid range as empty
             Info<< "rejected ill-formed range:";
             for (label i=0; i<nTok; ++i)
             {
                 Info<< " " << toks[i];
             }
             Info<< endl;
+            is.setBad();
             return is;
         }
 
@@ -308,16 +315,15 @@ Foam::Istream& Foam::operator>>(Istream& is, scalarRange& range)
         )
     )
     {
-        is.setBad();
-        range.type_ = scalarRange::EMPTY;
-        range.value_ = range.value2_ = 0;
-
+        range.clear();  // Mark invalid range as empty
         Info<< "rejected ill-formed range:";
         for (label i=0; i<nTok; ++i)
         {
             Info<< " " << toks[i];
         }
         Info<< endl;
+        is.setBad();
+        return is;
     }
 
     return is;
diff --git a/src/OpenFOAM/primitives/ranges/scalarRange/scalarRange.H b/src/OpenFOAM/primitives/ranges/scalarRange/scalarRange.H
index 7b5a62a8062..71d855e7661 100644
--- a/src/OpenFOAM/primitives/ranges/scalarRange/scalarRange.H
+++ b/src/OpenFOAM/primitives/ranges/scalarRange/scalarRange.H
@@ -52,8 +52,8 @@ class Ostream;
 
 // Forward declaration of friend functions and operators
 class scalarRange;
-Istream& operator>>(Istream&, scalarRange&);
-Ostream& operator<<(Ostream&, const scalarRange&);
+Istream& operator>>(Istream& is, scalarRange& range);
+Ostream& operator<<(Ostream& os, const scalarRange& range);
 
 
 /*---------------------------------------------------------------------------*\
@@ -73,7 +73,7 @@ class scalarRange
     };
 
 
-    // Private data
+    // Private Member Data
 
         enum rangeType type_;
         scalar value_;
@@ -96,11 +96,14 @@ public:
         //- Construct from Istream.
         //  Since commas can be used as list delimiters,
         //  leading and trailing commas are ignored.
-        scalarRange(Istream&);
+        scalarRange(Istream& is);
 
 
     // Member Functions
 
+        //- Reset to an empty range.
+        void clear();
+
         //- Is the range empty?
         bool empty() const;
 
@@ -121,19 +124,19 @@ public:
         scalar upper() const;
 
         //- Return true if the value is within the range
-        bool selected(const scalar) const;
+        bool selected(const scalar value) const;
 
 
     // Member Operators
 
-        bool operator==(const scalarRange&) const;
-        bool operator!=(const scalarRange&) const;
+        bool operator==(const scalarRange& range) const;
+        bool operator!=(const scalarRange& range) const;
 
 
     // IOstream Operators
 
-        friend Istream& operator>>(Istream&, scalarRange&);
-        friend Ostream& operator<<(Ostream&, const scalarRange&);
+        friend Istream& operator>>(Istream& is, scalarRange& range);
+        friend Ostream& operator<<(Ostream& os, const scalarRange& range);
 };
 
 
diff --git a/src/OpenFOAM/primitives/ranges/scalarRange/scalarRanges.C b/src/OpenFOAM/primitives/ranges/scalarRange/scalarRanges.C
index 819e615934f..429efdca0ae 100644
--- a/src/OpenFOAM/primitives/ranges/scalarRange/scalarRanges.C
+++ b/src/OpenFOAM/primitives/ranges/scalarRange/scalarRanges.C
@@ -72,7 +72,7 @@ bool Foam::scalarRanges::selected(const scalar value) const
 
 Foam::List<bool> Foam::scalarRanges::selected
 (
-    const List<scalar>& values
+    const UList<scalar>& values
 ) const
 {
     List<bool> lst(values.size(), false);
diff --git a/src/OpenFOAM/primitives/ranges/scalarRange/scalarRanges.H b/src/OpenFOAM/primitives/ranges/scalarRange/scalarRanges.H
index 99f9e5e01b3..f82312b6125 100644
--- a/src/OpenFOAM/primitives/ranges/scalarRange/scalarRanges.H
+++ b/src/OpenFOAM/primitives/ranges/scalarRange/scalarRanges.H
@@ -55,27 +55,28 @@ public:
 
     // Constructors
 
-        //- Construct Null
+        //- Construct null
         scalarRanges();
 
         //- Construct from Istream.
         //  The list items are comma-delimited.
-        scalarRanges(Istream&);
+        scalarRanges(Istream& is);
+
 
     // Member Functions
 
         //- Return true if the given value is within the ranges
-        bool selected(const scalar) const;
+        bool selected(const scalar value) const;
 
         //- Return the set of selected entries in the given list
         //  that are within the ranges
-        List<bool> selected(const List<scalar>&) const;
+        List<bool> selected(const UList<scalar>& values) const;
 
         //- Select a list of values that are within the ranges
-        List<scalar> select(const List<scalar>&) const;
+        List<scalar> select(const List<scalar>& values) const;
 
         //- Select a list of values that are within the ranges
-        void inplaceSelect(List<scalar>&) const;
+        void inplaceSelect(List<scalar>& values) const;
 };
 
 
-- 
GitLab