From 2c7d0c6f2c7f81b4d41674887e67289e2c427c13 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Robert=20Kl=C3=B6fkorn?=
 <robertk@mathematik.uni-stuttgart.de>
Date: Mon, 2 Jul 2007 12:08:45 +0000
Subject: [PATCH] before push_back is used, reserve should be called.

git-svn-id: https://dune.mathematik.uni-freiburg.de/svn/alugrid/trunk@939 0d966ed9-3843-0410-af09-ebfb50bd7c74
---
 src/duneinterface/gitter_dune_pll_impl.cc | 422 +++++++++++++++-------
 1 file changed, 296 insertions(+), 126 deletions(-)

diff --git a/src/duneinterface/gitter_dune_pll_impl.cc b/src/duneinterface/gitter_dune_pll_impl.cc
index fc1afe7c9..65205d040 100644
--- a/src/duneinterface/gitter_dune_pll_impl.cc
+++ b/src/duneinterface/gitter_dune_pll_impl.cc
@@ -1174,19 +1174,32 @@ bool GitterDunePll :: refine () {
     // Verfeinern auf gitter nicht mehr stimmen werden. Die Technik
     // ist zul"assig, da keine mehrfache Verfeinerung entstehen kann.
   
-    {for (int l = 0 ; l < nl ; l ++) {
-  //cout << "refinepll \n";
-  LeafIteratorTT < hface_STI > fw (*this,l) ;
-  LeafIteratorTT < hedge_STI > dw (*this,l) ;
-  for (fw.outer ().first () ; ! fw.outer().done () ; fw.outer ().next ())
-    outerFaces [l].push_back (& fw.outer ().item ()) ;
-  for (fw.inner ().first () ; ! fw.inner ().done () ; fw.inner ().next ())
-    innerFaces [l].push_back (& fw.inner ().item ()) ;
-  for (dw.outer ().first () ; ! dw.outer().done () ; dw.outer ().next ())
-    outerEdges [l].push_back (& dw.outer ().item ()) ;
-  for (dw.inner ().first () ; ! dw.inner ().done () ; dw.inner ().next ())
-    innerEdges [l].push_back (& dw.inner ().item ()) ;
-      }}
+    {
+      for (int l = 0 ; l < nl ; l ++) 
+      {
+        //cout << "refinepll \n";
+        LeafIteratorTT < hface_STI > fw (*this,l) ;
+        LeafIteratorTT < hedge_STI > dw (*this,l) ;
+
+        // reserve memory first 
+        outerFaces[l].reserve(fw.outer().size());
+        innerFaces[l].reserve(fw.inner().size());
+        
+        for (fw.outer ().first () ; ! fw.outer().done () ; fw.outer ().next ())
+          outerFaces [l].push_back (& fw.outer ().item ()) ;
+        for (fw.inner ().first () ; ! fw.inner ().done () ; fw.inner ().next ())
+          innerFaces [l].push_back (& fw.inner ().item ()) ;
+
+        // reserve memory first 
+        outerEdges[l].reserve(dw.outer().size());
+        innerEdges[l].reserve(dw.inner().size());
+        
+        for (dw.outer ().first () ; ! dw.outer().done () ; dw.outer ().next ())
+          outerEdges [l].push_back (& dw.outer ().item ()) ;
+        for (dw.inner ().first () ; ! dw.inner ().done () ; dw.inner ().next ())
+          innerEdges [l].push_back (& dw.inner ().item ()) ;
+      }
+    }
     // jetzt normal verfeinern und den Status der Verfeinerung
     // [unvollst"andige / vollst"andige Verfeinerung] sichern.
     
@@ -1208,27 +1221,46 @@ bool GitterDunePll :: refine () {
       {
         vector < ObjectStream > osv (nl) ;
         try {
-    //cout << "refinepll 2 \n";
-    for (int l = 0 ; l < nl ; l ++) {
-            {for (vector < hface_STI * > :: const_iterator i = outerFaces [l].begin () ;
-      i != outerFaces [l].end () ; (*i ++)->accessPllX ().accessOuterPllX ().first->getRefinementRequest (osv [l])) ; }
-            {for (vector < hface_STI * > :: const_iterator i = innerFaces [l].begin () ;
-      i != innerFaces [l].end () ; (*i ++)->accessPllX ().accessOuterPllX ().first->getRefinementRequest (osv [l])) ; }
+          for (int l = 0 ; l < nl ; l ++) 
+          {
+            {
+              vector < hface_STI * > :: const_iterator iEnd = outerFaces[l].end () ;
+              for (vector < hface_STI * > :: const_iterator i = outerFaces [l].begin () ;
+                   i != iEnd; (*i ++)->accessPllX ().accessOuterPllX ().first->getRefinementRequest (osv [l])) ; 
+            }
+            {
+              vector < hface_STI * > :: const_iterator iEnd = innerFaces[l].end () ;
+              for (vector < hface_STI * > :: const_iterator i = innerFaces [l].begin () ;
+                   i != iEnd; (*i ++)->accessPllX ().accessOuterPllX ().first->getRefinementRequest (osv [l])) ; 
+            }
           }
-  } catch (Parallel :: AccessPllException) {
+        } 
+        catch (Parallel :: AccessPllException) 
+        {
           cerr << "**FEHLER (FATAL) AccessPllException in " << __FILE__ << " " << __LINE__ << endl ; abort () ;
         }
   
+        // exchange data 
         osv = mpAccess ().exchange (osv) ;
   
-        try {
-    for (int l = 0 ; l < nl ; l ++) {
-            {for (vector < hface_STI * > :: const_iterator i = innerFaces [l].begin () ;
-      i != innerFaces [l].end () ; repeat |= (*i ++)->accessPllX ().accessOuterPllX ().first->setRefinementRequest (osv [l])) ; }
-            {for (vector < hface_STI * > :: const_iterator i = outerFaces [l].begin () ;
-      i != outerFaces [l].end () ; repeat |= (*i ++)->accessPllX ().accessOuterPllX ().first->setRefinementRequest (osv [l])) ; }
+        try 
+        {
+          for (int l = 0 ; l < nl ; l ++) 
+          {
+            {
+              vector < hface_STI * > :: const_iterator iEnd = innerFaces[l].end () ;
+              for (vector < hface_STI * > :: const_iterator i = innerFaces [l].begin () ;
+                i != iEnd; repeat |= (*i ++)->accessPllX ().accessOuterPllX ().first->setRefinementRequest (osv [l])) ; 
+            }
+            {
+              vector < hface_STI * > :: const_iterator iEnd = outerFaces[l].end () ; 
+              for (vector < hface_STI * > :: const_iterator i = outerFaces [l].begin () ;
+                i != iEnd; repeat |= (*i ++)->accessPllX ().accessOuterPllX ().first->setRefinementRequest (osv [l])) ; 
+            }
           }
-  } catch (Parallel :: AccessPllException) {
+        } 
+        catch (Parallel :: AccessPllException) 
+        {
           cerr << "**FEHLER (FATAL) AccessPllException in " << __FILE__ << " " << __LINE__ << endl ; abort () ;
         }
       }
@@ -1247,26 +1279,49 @@ bool GitterDunePll :: refine () {
 
     {
       vector < ObjectStream > osv (nl) ;
-      {for (int l = 0 ; l < nl ; l ++) 
-    for (vector < hedge_STI * > :: const_iterator i = outerEdges [l].begin () ;
-         i != outerEdges [l].end () ; (*i ++)->accessPllX ().getRefinementRequest (osv [l])) ;
+      {
+        for (int l = 0 ; l < nl ; l ++) 
+        {
+          vector < hedge_STI * > :: const_iterator iEnd = outerEdges[l].end () ;
+          for (vector < hedge_STI * > :: const_iterator i = outerEdges [l].begin () ;
+            i != iEnd; (*i ++)->accessPllX ().getRefinementRequest (osv [l])) ;
+        }
       }
+      
+      // exchange data 
       osv = mpAccess ().exchange (osv) ;
-      {for (int l = 0 ; l < nl ; l ++)
-    for (vector < hedge_STI * > :: const_iterator i = innerEdges [l].begin () ;
-         i != innerEdges [l].end () ; (*i ++)->accessPllX ().setRefinementRequest (osv [l])) ;
+      
+      {
+        for (int l = 0 ; l < nl ; l ++)
+        {
+          vector < hedge_STI * > :: const_iterator iEnd = innerEdges[l].end () ;
+          for (vector < hedge_STI * > :: const_iterator i = innerEdges [l].begin () ;
+            i != iEnd; (*i ++)->accessPllX ().setRefinementRequest (osv [l])) ;
+        }
       }
-    }   // ~vector < ObjectStream > ... 
+    } // ~vector < ObjectStream > ... 
+     
     {
       vector < ObjectStream > osv (nl) ;
-      {for (int l = 0 ; l < nl ; l ++)
-    for (vector < hedge_STI * > :: const_iterator i = innerEdges [l].begin () ;
-         i != innerEdges [l].end () ; (*i ++)->accessPllX ().getRefinementRequest (osv [l])) ;
+      {
+        for (int l = 0 ; l < nl ; l ++)
+        {
+          vector < hedge_STI * > :: const_iterator iEnd = innerEdges[l].end () ;
+          for (vector < hedge_STI * > :: const_iterator i = innerEdges [l].begin () ;
+            i != iEnd; (*i ++)->accessPllX ().getRefinementRequest (osv [l])) ;
+        }
       }
+      
+      // exchange data 
       osv = mpAccess ().exchange (osv) ;
-      {for (int l = 0 ; l < nl ; l ++)
-    for (vector < hedge_STI * > :: const_iterator i = outerEdges [l].begin () ;
-         i != outerEdges [l].end () ; (*i ++)->accessPllX ().setRefinementRequest (osv [l])) ;
+      
+      {
+        for (int l = 0 ; l < nl ; l ++)
+        {
+          vector < hedge_STI * > :: const_iterator iEnd = outerEdges [l].end () ;
+          for (vector < hedge_STI * > :: const_iterator i = outerEdges [l].begin () ;
+            i != iEnd; (*i ++)->accessPllX ().setRefinementRequest (osv [l])) ;
+        }
       }
     }   // ~vector < ObjectStream > ... 
   }
@@ -1343,6 +1398,10 @@ void GitterDunePll :: coarse () {
       // ist zul"assig, weil kein Objekt auf das eine Referenz im 'cache' vorliegt
       // beseitigt werden kann. Sie sind alle ein Niveau darunter.
 
+      // reserve memory first 
+      innerEdges[l].reserve(fwi.size() + dwi.size() + dfi.size());
+      outerEdges[l].reserve(fwo.size() + dwo.size() + dfo.size());
+        
       for (fwi.first () ; ! fwi.done () ; fwi.next ()) innerFaces [l].push_back (& fwi.item ()) ;
       for (fwo.first () ; ! fwo.done () ; fwo.next ()) outerFaces [l].push_back (& fwo.item ()) ;
       for (dwo.first () ; ! dwo.done () ; dwo.next ()) outerEdges [l].push_back (& dwo.item ()) ;
@@ -1350,20 +1409,35 @@ void GitterDunePll :: coarse () {
       for (dwi.first () ; ! dwi.done () ; dwi.next ()) innerEdges [l].push_back (& dwi.item ()) ;
       for (dfi.first () ; ! dfi.done () ; dfi.next ()) innerEdges [l].push_back (& dfi.item ()) ;
     }
-    try {
+
+    try 
+    {
       // Erstmal alles was mehrdeutig ist, gegen die drohende Vergr"oberung sichern.
       // Danach werden sukzessive die Fl"achenlocks aufgehoben, getestet und
       // eventuell vergr"obert, dann das gleiche Spiel mit den Kanten.
 
-      for (int l = 0 ; l < nl ; l ++) {
-        {for (vector < hedge_STI * > :: iterator i = outerEdges [l].begin () ;
-        i != outerEdges [l].end () ; (*i ++)->accessPllX ().lockAndTry ()) ; }
-        {for (vector < hedge_STI * > :: iterator i = innerEdges [l].begin () ;
-        i != innerEdges [l].end () ; (*i ++)->accessPllX ().lockAndTry ()) ; }
-        {for (vector < hface_STI * > :: iterator i = outerFaces [l].begin () ;
-        i != outerFaces [l].end () ; (*i ++)->accessPllX ().accessOuterPllX ().first->lockAndTry ()) ; }
-        {for (vector < hface_STI * > :: iterator i = innerFaces [l].begin () ;
-        i != innerFaces [l].end () ; (*i ++)->accessPllX ().accessOuterPllX ().first->lockAndTry ()) ; }
+      for (int l = 0 ; l < nl ; l ++) 
+      {
+        {
+          vector < hedge_STI * > :: iterator iEnd = outerEdges [l].end () ;
+          for (vector < hedge_STI * > :: iterator i = outerEdges [l].begin () ;
+               i != iEnd; (*i ++)->accessPllX ().lockAndTry ()) ; 
+        }
+        {
+          vector < hedge_STI * > :: iterator iEnd = innerEdges [l].end () ;
+          for (vector < hedge_STI * > :: iterator i = innerEdges [l].begin () ;
+               i != iEnd; (*i ++)->accessPllX ().lockAndTry ()) ; 
+        }
+        {
+          vector < hface_STI * > :: iterator iEnd = outerFaces [l].end () ;
+          for (vector < hface_STI * > :: iterator i = outerFaces [l].begin () ;
+               i != iEnd; (*i ++)->accessPllX ().accessOuterPllX ().first->lockAndTry ()) ; 
+        }
+        {
+          vector < hface_STI * > :: iterator iEnd = innerFaces [l].end () ;
+          for (vector < hface_STI * > :: iterator i = innerFaces [l].begin () ;
+               i != iEnd; (*i ++)->accessPllX ().accessOuterPllX ().first->lockAndTry ()) ; 
+        }
       }
       
       // Gitter :: coarse () ist elementorientiert, d.h. die Vergr"oberung auf Fl"achen und
@@ -1376,11 +1450,14 @@ void GitterDunePll :: coarse () {
       
       Gitter :: coarse () ;
       
-    } catch (Parallel :: AccessPllException) {
+    } 
+    catch (Parallel :: AccessPllException) 
+    {
       cerr << "**FEHLER (FATAL) AccessPllException beim Vergr\"obern der Elementhierarchie oder\n" ;
       cerr << "  beim locken der Fl\"achen- bzw. Kantenb\"aume aufgetreten. In " << __FILE__ << " " << __LINE__ << endl ;
       abort () ;
     }
+    
     try {
     
       // Phase des Fl"achenausgleichs des verteilten Vergr"oberungsalgorithmus
@@ -1394,46 +1471,86 @@ void GitterDunePll :: coarse () {
       vector < vector < int > > clean (nl) ;
       {
         vector < vector < int > > inout (nl) ;
-        {for (int l = 0 ; l < nl ; l ++)
-      for (vector < hface_STI * > :: iterator i = outerFaces [l].begin () ; i != outerFaces [l].end () ; i ++)
-        inout [l].push_back ((*i)->accessPllX ().accessOuterPllX ().first->lockAndTry ()) ;
+        {
+          for (int l = 0 ; l < nl ; l ++)
+          {
+            // reserve memory first 
+            inout[l].reserve( outerFaces [l].size() );
+            // get end iterator 
+            vector < hface_STI * > :: iterator iEnd = outerFaces [l].end () ;
+            for (vector < hface_STI * > :: iterator i = outerFaces [l].begin () ; 
+                 i != iEnd; i ++)
+            {
+              inout [l].push_back ((*i)->accessPllX ().accessOuterPllX ().first->lockAndTry ()) ;
+            }
+          }
         }
+
+        // exchange data 
         inout = mpAccess ().exchange (inout) ;
-        {for (int l = 0 ; l < nl ; l ++) {
-      clean [l] = vector < int > (innerFaces [l].size (), long (true)) ;
-      vector < int > :: iterator j = clean [l].begin (), k = inout [l].begin () ;
-      for (vector < hface_STI * > :: iterator i = innerFaces [l].begin () ; i != innerFaces [l].end () ; i ++, j++, k++) {
-        assert (j != clean [l].end ()) ; assert (k != inout [l].end ()) ;
-        (*j) &= (*k) && (*i)->accessPllX ().accessOuterPllX ().first->lockAndTry () ;
-      }
-    }}
+        
+        {
+          for (int l = 0 ; l < nl ; l ++) 
+          {
+            clean [l] = vector < int > (innerFaces [l].size (), long (true)) ;
+            vector < int > :: iterator j = clean [l].begin (), k = inout [l].begin () ;
+            vector < hface_STI * > :: iterator iEnd = innerFaces [l].end () ;
+            for (vector < hface_STI * > :: iterator i = innerFaces [l].begin () ; 
+                 i != iEnd; i ++, j++, k++) 
+            {
+              assert (j != clean [l].end ()) ; assert (k != inout [l].end ()) ;
+              (*j) &= (*k) && (*i)->accessPllX ().accessOuterPllX ().first->lockAndTry () ;
+            }
+          } 
+        }
       }
+      
       {
         vector < vector < int > > inout (nl) ;
-        {for (int l = 0 ; l < nl ; l ++) {
-      vector < int > :: iterator j = clean [l].begin () ;
-      for (vector < hface_STI * > :: iterator i = innerFaces [l].begin () ; i != innerFaces [l].end () ; i ++, j++) {
-        inout [l].push_back (*j) ;
-        (*i)->accessPllX ().accessOuterPllX ().first->unlockAndResume (bool (*j)) ;
-      }
-    }}
+        {
+          for (int l = 0 ; l < nl ; l ++) 
+          {
+            // reserve memory first 
+            inout[l].reserve( innerFaces [l].size() );
+
+            vector < int > :: iterator j = clean [l].begin () ;
+            vector < hface_STI * > :: iterator iEnd = innerFaces [l].end () ;
+            for (vector < hface_STI * > :: iterator i = innerFaces [l].begin () ; 
+                 i != iEnd; i ++, j++) 
+            {
+              inout [l].push_back (*j) ;
+              (*i)->accessPllX ().accessOuterPllX ().first->unlockAndResume (bool (*j)) ;
+            }
+          }     
+        }
       
+        // exchange data 
         inout = mpAccess ().exchange (inout) ;
       
-        {for (int l = 0 ; l < nl ; l ++) {
-      vector < int > :: iterator j = inout [l].begin () ;
-      for (vector < hface_STI * > :: iterator i = outerFaces [l].begin () ; i != outerFaces [l].end () ; i ++, j++) {
-        assert (j != inout [l].end ()) ;
-        (*i)->accessPllX ().accessOuterPllX ().first->unlockAndResume (bool (*j)) ;
-      }
-    }}
+        {
+          for (int l = 0 ; l < nl ; l ++) 
+          {
+            vector < int > :: iterator j = inout [l].begin () ;
+            vector < hface_STI * > :: iterator iEnd = outerFaces [l].end () ;
+            for (vector < hface_STI * > :: iterator i = outerFaces [l].begin () ; 
+                 i != iEnd; i ++, j++) 
+            {
+              assert (j != inout [l].end ()) ;
+              (*i)->accessPllX ().accessOuterPllX ().first->unlockAndResume (bool (*j)) ;
+            }
+          }     
+        }
       }
-    } catch (Parallel :: AccessPllException) {
+    } 
+    catch (Parallel :: AccessPllException) 
+    {
       cerr << "**FEHLER (FATAL) AccessPllException beim Vergr\"obern der Fl\"achenb\"aume\n" ;
       cerr << "  aufgetreten. In " << __FILE__ << " " << __LINE__ << endl ;
       abort () ;
     }
-    try {
+    
+    try 
+    {
     
       // Phase des Kantenausgleichs im parallelen Vergr"oberungsalgorithmus:
   
@@ -1450,69 +1567,122 @@ void GitterDunePll :: coarse () {
     
       map < hedge_STI *, pair < bool, bool >, less < hedge_STI * > > clean ;
       
-      {for (int l = 0 ; l < nl ; l ++)
-    for (vector < hedge_STI * > :: iterator i = innerEdges [l].begin () ; i != innerEdges [l].end () ; i ++)
-      if (clean.find (*i) == clean.end ()) clean [*i] = pair < bool, bool > ((*i)->accessPllX ().lockAndTry (), true) ;
+      {
+        for (int l = 0 ; l < nl ; l ++)
+        {
+          vector < hedge_STI * > :: iterator iEnd = innerEdges [l].end () ;
+          for (vector < hedge_STI * > :: iterator i = innerEdges [l].begin () ; 
+               i != iEnd; i ++)
+          {
+            if (clean.find (*i) == clean.end ()) 
+            {
+              clean [*i] = pair < bool, bool > ((*i)->accessPllX ().lockAndTry (), true) ;
+            }
+          }
+        }
       }
+      
       {
         vector < vector < int > > inout (nl) ;
-        {for (int l = 0 ; l < nl ; l ++)
-      for (vector < hedge_STI * > :: iterator i = outerEdges [l].begin () ; i != outerEdges [l].end () ; i ++)
-        inout [l].push_back ((*i)->accessPllX ().lockAndTry ()) ;
-  }
+        {
+          for (int l = 0 ; l < nl ; l ++)
+          {
+            // reserve memory first 
+            inout[l].reserve( outerEdges [l].size() );
+            // get end iterator 
+            vector < hedge_STI * > :: iterator iEnd = outerEdges [l].end () ;
+            for (vector < hedge_STI * > :: iterator i = outerEdges [l].begin () ; 
+                 i != iEnd; i ++)
+            {
+              inout [l].push_back ((*i)->accessPllX ().lockAndTry ()) ;
+            }
+          }
+        }
+        
+        // exchange data 
         inout = mpAccess ().exchange (inout) ;
-        {for (int l = 0 ; l < nl ; l ++) {
-      vector < int > :: const_iterator j = inout [l].begin () ;
-      for (vector < hedge_STI * > :: iterator i = innerEdges [l].begin () ; i != innerEdges [l].end () ; i ++, j++) {
-        assert (j != inout [l].end ()) ;
-        assert (clean.find (*i) != clean.end ()) ;
-        if (*j == false) clean [*i] = pair < bool, bool > (false, clean[*i].second) ; 
-      }
-    }}
+        
+        {
+          for (int l = 0 ; l < nl ; l ++) 
+          {
+            vector < int > :: const_iterator j = inout [l].begin () ;
+            // get end iterator 
+            vector < hedge_STI * > :: iterator iEnd = innerEdges [l].end () ;
+            for (vector < hedge_STI * > :: iterator i = innerEdges [l].begin () ; 
+                 i != iEnd; i ++, j++) 
+            {
+              assert (j != inout [l].end ()) ;
+              assert (clean.find (*i) != clean.end ()) ;
+              if (*j == false) clean [*i] = pair < bool, bool > (false, clean[*i].second) ; 
+            }
+          }
+        }
       }
+      
       {
         vector < vector < int > > inout (nl) ;
-        {for (int l = 0 ; l < nl ; l ++) {
-      for (vector < hedge_STI * > :: iterator i = innerEdges [l].begin () ; i != innerEdges [l].end () ; i ++) {
-        assert (clean.find (*i) != clean.end ()) ;
-        pair < bool, bool > & a = clean [*i] ;
-        inout [l].push_back (a.first) ;
-        if (a.second) {
-  
-    // Wenn wir hier sind, kann die Kante tats"achlich vergr"obert werden, genauer gesagt,
-    // sie wird es auch und der R"uckgabewert testet den Vollzug der Aktion. Weil aber nur
-    // einmal vergr"obert werden kann, und die Iteratoren 'innerEdges [l]' aber eventuell
-    // mehrfach "uber eine Kante hinweglaufen, muss diese Vergr"oberung im map 'clean'
-    // vermerkt werden. Dann wird kein zweiter Versuch unternommen.
-  
-    a.second = false ;
+        {
+          for (int l = 0 ; l < nl ; l ++) 
+          {
+            // reserve memory first 
+            inout[l].reserve( innerEdges [l].size() );
+            // get end iterator 
+            vector < hedge_STI * > :: iterator iEnd = innerEdges [l].end () ;
+            for (vector < hedge_STI * > :: iterator i = innerEdges [l].begin () ; 
+                 i != iEnd; i ++) 
+            {
+              assert (clean.find (*i) != clean.end ()) ;
+              pair < bool, bool > & a = clean [*i] ;
+              inout [l].push_back (a.first) ;
+              if (a.second) 
+              {
+                // Wenn wir hier sind, kann die Kante tats"achlich vergr"obert werden, genauer gesagt,
+                // sie wird es auch und der R"uckgabewert testet den Vollzug der Aktion. Weil aber nur
+                // einmal vergr"obert werden kann, und die Iteratoren 'innerEdges [l]' aber eventuell
+                // mehrfach "uber eine Kante hinweglaufen, muss diese Vergr"oberung im map 'clean'
+                // vermerkt werden. Dann wird kein zweiter Versuch unternommen.
+              
+                a.second = false ;
 #ifndef NDEBUG
-    bool b = 
+                bool b = 
 #endif
-      (*i)->accessPllX ().unlockAndResume (a.first) ;
-    assert (b == a.first) ;
+                  (*i)->accessPllX ().unlockAndResume (a.first) ;
+                assert (b == a.first) ;
+              }
+            }
+          }
         }
-      }
-    }}
+        
+        // exchange data 
         inout = mpAccess ().exchange (inout) ;
-        {for (int l = 0 ; l < nl ; l ++) {
-      vector < int > :: iterator j = inout [l].begin () ;
-      for (vector < hedge_STI * > :: iterator i = outerEdges [l].begin () ; i != outerEdges [l].end () ; i ++, j++) {
-        assert (j != inout [l].end ()) ;
-      
-        // Selbe Situation wie oben, aber der Eigent"umer der Kante hat mitgeteilt, dass sie
-        // vergr"obert werden darf und auch wird auf allen Teilgebieten also auch hier. Der
-        // Vollzug der Vergr"oberung wird durch den R"uckgabewert getestet.
+        
+        {
+          for (int l = 0 ; l < nl ; l ++) 
+          {
+            vector < int > :: iterator j = inout [l].begin () ;
+            // get end iterator 
+            vector < hedge_STI * > :: iterator iEnd = outerEdges [l].end () ;
+            for (vector < hedge_STI * > :: iterator i = outerEdges [l].begin () ; 
+                 i != iEnd; i ++, j++) 
+            {
+              assert (j != inout [l].end ()) ;
       
+              // Selbe Situation wie oben, aber der Eigent"umer der Kante hat mitgeteilt, dass sie
+              // vergr"obert werden darf und auch wird auf allen Teilgebieten also auch hier. Der
+              // Vollzug der Vergr"oberung wird durch den R"uckgabewert getestet.
+            
 #ifndef NDEBUG
-        bool b = 
+              bool b = 
 #endif
-    (*i)->accessPllX ().unlockAndResume (bool (*j)) ;
-        assert (b == bool (*j)) ;
-      }
-    }}
+                (*i)->accessPllX ().unlockAndResume (bool (*j)) ;
+              assert (b == bool (*j)) ;
+            }
+          }
+        }
       }
-    } catch (Parallel :: AccessPllException) {
+    } 
+    catch (Parallel :: AccessPllException) 
+    {
       cerr << "**FEHLER (FATAL) AccessPllException beim Vergr\"obern der Kantenb\"aume\n" ;
       cerr << "  aufgetreten. In " << __FILE__ << " " << __LINE__ << endl ;
       abort () ;
-- 
GitLab