From e105e30bfb7945c7ef7f747e5f3c1560a96c3817 Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Thu, 4 May 2017 02:42:50 +0200
Subject: [PATCH] STYLE: add edge(labelPair) constructor, debug info etc.

---
 applications/test/SLList/Test-SLList.C      |  4 +-
 applications/test/edges/Test-edges.C        | 11 ++++
 src/OpenFOAM/meshes/meshShapes/edge/edge.H  | 32 +++++----
 src/OpenFOAM/meshes/meshShapes/edge/edgeI.H | 73 +++++++++++++++++----
 4 files changed, 91 insertions(+), 29 deletions(-)

diff --git a/applications/test/SLList/Test-SLList.C b/applications/test/SLList/Test-SLList.C
index d46fbf6e8e9..2a6ef7a245b 100644
--- a/applications/test/SLList/Test-SLList.C
+++ b/applications/test/SLList/Test-SLList.C
@@ -52,7 +52,7 @@ int main(int argc, char *argv[])
 
     Info<< nl << "And again using STL iterator: " << nl << endl;
 
-    for (auto const& val : myList)
+    for (const auto& val : myList)
     {
         Info<< "element:" << val << endl;
     }
@@ -72,7 +72,7 @@ int main(int argc, char *argv[])
         myList.remove(iter);
     }
 
-    for (auto const& val : const_myList)
+    for (const auto& val : const_myList)
     {
         Info<< "element:" << val << endl;
     }
diff --git a/applications/test/edges/Test-edges.C b/applications/test/edges/Test-edges.C
index eda9ae0dd9f..51da417de3e 100644
--- a/applications/test/edges/Test-edges.C
+++ b/applications/test/edges/Test-edges.C
@@ -67,6 +67,17 @@ int main(int argc, char *argv[])
 
     Info<< e3 << " connects " << e2 << " => " << e2.connects(e3) << endl;
 
+    labelPair labels(e3);
+
+    Info<< "as labelPair: " << labels << endl;
+
+    edge e5;
+    // Good: this fails (explicit constructor):   printInfo(labels);
+    // Good: this also fails (no assignment operator): e5 = labels;
+
+    // OK: explicit
+    edge e6(labels);
+
     Info<< nl << "hash-like functionality" << nl;
 
     // doesn't work e4 = -1;
diff --git a/src/OpenFOAM/meshes/meshShapes/edge/edge.H b/src/OpenFOAM/meshes/meshShapes/edge/edge.H
index f373186a548..52bf97cb7cf 100644
--- a/src/OpenFOAM/meshes/meshShapes/edge/edge.H
+++ b/src/OpenFOAM/meshes/meshShapes/edge/edge.H
@@ -45,6 +45,7 @@ SourceFiles
 #define edge_H
 
 #include "FixedList.H"
+#include "labelPair.H"
 #include "pointField.H"
 #include "linePointRef.H"
 
@@ -65,7 +66,7 @@ class edge
 
         //- Insert values, using begin/end iterators.
         template<class InputIter>
-        inline int insertMultiple
+        inline label insertMultiple
         (
             const InputIter begIter,
             const InputIter endIter
@@ -73,7 +74,7 @@ class edge
 
         //- Remove values, using begin/end iterators.
         template<class InputIter>
-        inline int eraseMultiple
+        inline label eraseMultiple
         (
             const InputIter begIter,
             const InputIter endIter
@@ -98,6 +99,9 @@ public:
         //- Construct, optionally sorted with start less-than end
         inline edge(const label from, const label to, const bool doSort);
 
+        //- Construct from two labels
+        inline edge(const labelPair& pair);
+
         //- Construct from FixedList
         inline edge(const FixedList<label, 2>& lst);
 
@@ -165,7 +169,7 @@ public:
         //- 'Collapse' edge by marking duplicate point labels as '-1',
         //  the lower vertex is retained.
         //  Return the effective size after collapsing.
-        inline int collapse();
+        inline label collapse();
 
         //- Flip the edge in-place.
         //  No special handling of negative point labels.
@@ -180,7 +184,7 @@ public:
 
         //- Return the number of unique, valid (non -1) point labels.
         //  Similar to a HashTable::size().
-        inline int count() const;
+        inline label count() const;
 
         //- Return true if edge has no valid point labels.
         inline bool empty() const;
@@ -194,41 +198,41 @@ public:
         inline bool insert(const label index);
 
         //- Fill open slots with the indices if they did not previously exist.
-        //  Returns true on success. Negative labels never inserts.
+        //  Returns true on success. Negative labels never insert.
         //  Return the number of slots filled.
         //  Similar to a HashTable::insert().
-        inline int insert(const UList<label>& lst);
+        inline label insert(const UList<label>& lst);
 
         //- Fill open slots with the indices if they did not previously exist.
-        //  Returns true on success. Negative labels never inserts.
+        //  Returns true on success. Negative labels never insert.
         //  Return the number of slots filled.
         //  Similar to a HashTable::insert().
         template<unsigned AnySize>
-        inline int insert(const FixedList<label, AnySize>& lst);
+        inline label insert(const FixedList<label, AnySize>& lst);
 
         //- Fill open slots with the indices if they did not previously exist.
-        //  Returns true on success. Negative labels never inserts.
+        //  Returns true on success. Negative labels never insert.
         //  Return the number of slots filled.
         //  Similar to a HashTable::insert().
-        inline int insert(std::initializer_list<label> lst);
+        inline label insert(std::initializer_list<label> lst);
 
         //- Remove an existing index from the edge and set its location to '-1'.
         //  Returns the number of changes. A negative label never removes.
         //  Similar to a HashTable::erase().
-        inline int erase(const label index);
+        inline label erase(const label index);
 
         //- Remove existing indices from the edge and set locations to '-1'.
         //  Returns the number of changes.
-        inline int erase(const UList<label>& lst);
+        inline label erase(const UList<label>& lst);
 
         //- Remove existing indices from the edge and set locations to '-1'.
         //  Returns the number of changes.
         template<unsigned AnySize>
-        inline int erase(const FixedList<label, AnySize>& lst);
+        inline label erase(const FixedList<label, AnySize>& lst);
 
         //- Remove existing indices from the edge and set locations to '-1'.
         //  Returns the number of changes.
-        inline int erase(std::initializer_list<label> lst);
+        inline label erase(std::initializer_list<label> lst);
 
 
      // Geometric functions
diff --git a/src/OpenFOAM/meshes/meshShapes/edge/edgeI.H b/src/OpenFOAM/meshes/meshShapes/edge/edgeI.H
index 22cc06d05c6..75a5ba23655 100644
--- a/src/OpenFOAM/meshes/meshShapes/edge/edgeI.H
+++ b/src/OpenFOAM/meshes/meshShapes/edge/edgeI.H
@@ -48,7 +48,7 @@ inline int Foam::edge::compare(const edge& a, const edge& b)
 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
 
 template<class InputIter>
-inline int Foam::edge::insertMultiple
+inline Foam::label Foam::edge::insertMultiple
 (
     const InputIter begIter,
     const InputIter endIter
@@ -78,7 +78,7 @@ inline int Foam::edge::insertMultiple
 
 
 template<class InputIter>
-inline int Foam::edge::eraseMultiple
+inline Foam::label Foam::edge::eraseMultiple
 (
     const InputIter begIter,
     const InputIter endIter
@@ -135,6 +135,13 @@ inline Foam::edge::edge(const label from, const label to, const bool doSort)
 }
 
 
+inline Foam::edge::edge(const labelPair& pair)
+{
+    start() = pair.first();
+    end()   = pair.second();
+}
+
+
 inline Foam::edge::edge(const FixedList<label, 2>& lst)
 {
     start() = lst[0];
@@ -248,13 +255,13 @@ inline Foam::label Foam::edge::otherVertex(const label index) const
 }
 
 
-inline int Foam::edge::collapse()
+inline Foam::label Foam::edge::collapse()
 {
     // Cannot resize FixedList, so mark duplicates with '-1'
     // (the lower vertex is retained)
     // catch any '-1' (eg, if called multiple times)
 
-    int n = 2;
+    label n = 2;
     if (start() == end() || end() < 0)
     {
         end() = -1;
@@ -303,7 +310,7 @@ inline void Foam::edge::clear()
 }
 
 
-inline int Foam::edge::count() const
+inline Foam::label Foam::edge::count() const
 {
     label n = 2;
     if (start() == end() || end() < 0)
@@ -356,24 +363,26 @@ inline bool Foam::edge::insert(const label index)
 }
 
 
-inline int Foam::edge::insert(const UList<label>& lst)
+inline Foam::label Foam::edge::insert(const UList<label>& lst)
 {
     return insertMultiple(lst.begin(), lst.end());
 }
 
+
 template<unsigned AnySize>
-inline int Foam::edge::insert(const FixedList<label, AnySize>& lst)
+inline Foam::label Foam::edge::insert(const FixedList<label, AnySize>& lst)
 {
     return insertMultiple(lst.begin(), lst.end());
 }
 
-inline int Foam::edge::insert(std::initializer_list<label> lst)
+
+inline Foam::label Foam::edge::insert(std::initializer_list<label> lst)
 {
     return insertMultiple(lst.begin(), lst.end());
 }
 
 
-inline int Foam::edge::erase(const label index)
+inline Foam::label Foam::edge::erase(const label index)
 {
     if (index < 0)
     {
@@ -381,7 +390,7 @@ inline int Foam::edge::erase(const label index)
         return 0;
     }
 
-    int n = 0;
+    label n = 0;
     if (index == start())
     {
         start() = -1;
@@ -399,18 +408,20 @@ inline int Foam::edge::erase(const label index)
 }
 
 
-inline int Foam::edge::erase(const UList<label>& lst)
+inline Foam::label Foam::edge::erase(const UList<label>& lst)
 {
     return eraseMultiple(lst.begin(), lst.end());
 }
 
+
 template<unsigned AnySize>
-inline int Foam::edge::erase(const FixedList<label, AnySize>& lst)
+inline Foam::label Foam::edge::erase(const FixedList<label, AnySize>& lst)
 {
     return eraseMultiple(lst.begin(), lst.end());
 }
 
-inline int Foam::edge::erase(std::initializer_list<label> lst)
+
+inline Foam::label Foam::edge::erase(std::initializer_list<label> lst)
 {
     return eraseMultiple(lst.begin(), lst.end());
 }
@@ -420,18 +431,45 @@ inline int Foam::edge::erase(std::initializer_list<label> lst)
 
 inline Foam::point Foam::edge::centre(const UList<point>& pts) const
 {
+    #ifdef FULLDEBUG
+    if (start() < 0 || end() < 0)
+    {
+        FatalErrorInFunction
+            << "negative point index on edge " << *this
+            << abort(FatalError);
+    }
+    #endif
+
     return 0.5*(pts[start()] + pts[end()]);
 }
 
 
 inline Foam::vector Foam::edge::vec(const UList<point>& pts) const
 {
+    #ifdef FULLDEBUG
+    if (start() < 0 || end() < 0)
+    {
+        FatalErrorInFunction
+            << "negative point index on edge " << *this
+            << abort(FatalError);
+    }
+    #endif
+
     return pts[end()] - pts[start()];
 }
 
 
 inline Foam::vector Foam::edge::unitVec(const UList<point>& pts) const
 {
+    #ifdef FULLDEBUG
+    if (start() < 0 || end() < 0)
+    {
+        FatalErrorInFunction
+            << "negative point index on edge " << *this
+            << abort(FatalError);
+    }
+    #endif
+
     Foam::vector v = pts[end()] - pts[start()];
     v /= ::Foam::mag(v) + VSMALL;
 
@@ -447,6 +485,15 @@ inline Foam::scalar Foam::edge::mag(const UList<point>& pts) const
 
 inline Foam::linePointRef Foam::edge::line(const UList<point>& pts) const
 {
+    #ifdef FULLDEBUG
+    if (start() < 0 || end() < 0)
+    {
+        FatalErrorInFunction
+            << "negative point index on edge " << *this
+            << abort(FatalError);
+    }
+    #endif
+
     return linePointRef(pts[start()], pts[end()]);
 }
 
-- 
GitLab