From b50f282ec7f1c79703ce8e779822a016c6c907ae Mon Sep 17 00:00:00 2001
From: Mark Olesen <Mark.Olesen@esi-group.com>
Date: Mon, 6 Mar 2017 18:32:48 +0100
Subject: [PATCH] STYLE: minor simplification of coding in dictionary

---
 src/OpenFOAM/db/dictionary/dictionary.C | 159 +++++++++++-------------
 1 file changed, 72 insertions(+), 87 deletions(-)

diff --git a/src/OpenFOAM/db/dictionary/dictionary.C b/src/OpenFOAM/db/dictionary/dictionary.C
index 6b732e30f5..07c2eb4b2d 100644
--- a/src/OpenFOAM/db/dictionary/dictionary.C
+++ b/src/OpenFOAM/db/dictionary/dictionary.C
@@ -60,114 +60,101 @@ const Foam::entry* Foam::dictionary::lookupScopedSubEntryPtr
         // Non-scoped lookup
         return lookupEntryPtr(keyword, recursive, patternMatch);
     }
-    else
+    else if (dotPos == 0)
     {
-        if (dotPos == 0)
-        {
-            // Starting with a '.'. Go up for every 2nd '.' found
+        // Starting with a '.' -> go up for every further '.' found
+        ++dotPos;
 
-            const dictionary* dictPtr = this;
-
-            string::size_type begVar = dotPos + 1;
-            string::const_iterator iter = keyword.begin() + begVar;
-            string::size_type endVar = begVar;
-            while (iter != keyword.end() && *iter == '.')
+        const dictionary* dictPtr = this;
+        for
+        (
+            string::const_iterator it = keyword.begin()+1;
+            it != keyword.end() && *it == '.';
+            ++dotPos, ++it
+        )
+        {
+            // Go to parent
+            if (&dictPtr->parent_ != &dictionary::null)
             {
-                ++iter;
-                ++endVar;
-
-                // Go to parent
-                if (&dictPtr->parent_ == &dictionary::null)
-                {
-                    FatalIOErrorInFunction
-                    (
-                        *this
-                    )   << "No parent of current dictionary"
-                        << " when searching for "
-                        << keyword.substr(begVar, keyword.size()-begVar)
-                        << exit(FatalIOError);
-                }
                 dictPtr = &dictPtr->parent_;
             }
+            else
+            {
+                FatalIOErrorInFunction
+                (
+                    *this
+                )   << "No parent of current dictionary when searching for "
+                    << keyword.substr(1)
+                    << exit(FatalIOError);
 
-            return dictPtr->lookupScopedSubEntryPtr
-            (
-                keyword.substr(endVar),
-                false,
-                patternMatch
-            );
+                return nullptr;
+            }
         }
-        else
-        {
-            // Extract the first word
-            const word firstWord = keyword.substr(0, dotPos);
 
-            const entry* entPtr = lookupScopedSubEntryPtr
-            (
-                firstWord,
-                false,          //recursive
-                patternMatch
-            );
+        return dictPtr->lookupScopedSubEntryPtr
+        (
+            keyword.substr(dotPos),
+            false,
+            patternMatch
+        );
+    }
+    else
+    {
+        // The first word
+        const entry* entPtr = lookupScopedSubEntryPtr
+        (
+            keyword.substr(0, dotPos),
+            false,
+            patternMatch
+        );
+
+        if (!entPtr)
+        {
+            // Fall back to finding key with '.' so e.g. if keyword is
+            // a.b.c.d it would try
+            // a.b, a.b.c, a.b.c.d
 
-            if (!entPtr)
+            while (true)
             {
-                // Fall back to finding key with '.' so e.g. if keyword is
-                // a.b.c.d it would try
-                // a.b, a.b.c, a.b.c.d
+                dotPos = keyword.find('.', dotPos+1);
 
-                string::size_type nextDotPos = keyword.find
+                entPtr = lookupEntryPtr
                 (
-                    '.',
-                    dotPos+1
+                    keyword.substr(0, dotPos),
+                    false,
+                    patternMatch
                 );
 
-                while (true)
+                if (dotPos == string::npos)
+                {
+                    // Parsed the whole word. Return entry or null.
+                    return entPtr;
+                }
+
+                if (entPtr && entPtr->isDict())
                 {
-                    const entry* subEntPtr = lookupEntryPtr
+                    return entPtr->dict().lookupScopedSubEntryPtr
                     (
-                        keyword.substr(0, nextDotPos),
+                        keyword.substr(dotPos),
                         false,
                         patternMatch
                     );
-                    if (nextDotPos == string::npos)
-                    {
-                        // Parsed the whole word. Return entry or null.
-                        return subEntPtr;
-                    }
-
-                    if (subEntPtr && subEntPtr->isDict())
-                    {
-                        return subEntPtr->dict().lookupScopedSubEntryPtr
-                        (
-                            keyword.substr
-                            (
-                                nextDotPos,
-                                keyword.size()-nextDotPos
-                            ),
-                            false,
-                            patternMatch
-                        );
-                    }
-
-                    nextDotPos = keyword.find('.', nextDotPos+1);
                 }
             }
+        }
 
-            if (entPtr->isDict())
-            {
-                return entPtr->dict().lookupScopedSubEntryPtr
-                (
-                    keyword.substr(dotPos, keyword.size()-dotPos),
-                    false,
-                    patternMatch
-                );
-            }
-            else
-            {
-                return nullptr;
-            }
+        if (entPtr->isDict())
+        {
+            return entPtr->dict().lookupScopedSubEntryPtr
+            (
+                keyword.substr(dotPos),
+                false,
+                patternMatch
+            );
         }
     }
+
+    return nullptr;
 }
 
 
@@ -597,10 +584,9 @@ const Foam::entry* Foam::dictionary::lookupScopedEntryPtr
             dictPtr = &dictPtr->parent_;
         }
 
-        // At top. Recurse to find entries
         return dictPtr->lookupScopedSubEntryPtr
         (
-            keyword.substr(1, keyword.size()-1),
+            keyword.substr(1),
             false,
             patternMatch
         );
@@ -1038,7 +1024,6 @@ bool Foam::dictionary::changeKeyword
             IDLList<entry>::replace(iter2(), iter());
             delete iter2();
             hashedEntries_.erase(iter2);
-
         }
         else
         {
-- 
GitLab