[Libreoffice-commits] core.git: sw/source

Matteo Casalin matteo.casalin at yahoo.com
Sun Jun 16 08:45:28 PDT 2013


 sw/source/core/crsr/pam.cxx |   48 ++++++++++++++++++++++----------------------
 1 file changed, 25 insertions(+), 23 deletions(-)

New commits:
commit 21e43f598eb8ff7347876d8a61d7b2de29b8e7fe
Author: Matteo Casalin <matteo.casalin at yahoo.com>
Date:   Sun Jun 9 12:05:10 2013 +0200

    Simplify SwPaM::GetTxt
    
    Change-Id: Ic8905ff02852dab7f699c2a9f02a6252a5c42c7f
    Reviewed-on: https://gerrit.libreoffice.org/4213
    Reviewed-by: Michael Stahl <mstahl at redhat.com>
    Tested-by: Michael Stahl <mstahl at redhat.com>

diff --git a/sw/source/core/crsr/pam.cxx b/sw/source/core/crsr/pam.cxx
index c1b059b..9d7761d 100644
--- a/sw/source/core/crsr/pam.cxx
+++ b/sw/source/core/crsr/pam.cxx
@@ -1066,42 +1066,44 @@ OUString SwPaM::GetTxt() const
     SwNodeIndex aNodeIndex = Start()->nNode;
 
     // The first node can be already the end node.
-    // A first end node must be handled, too. Therefore do-while and no
-    // incrementing of aNodeIndex in the first pass.
-    bool bFirst = true;
-    do
+    // Use a "forever" loop with an exit condition in the middle
+    // of its body, in order to correctly handle all cases.
+    bool bIsStartNode = true;
+    for (;;)
     {
-        if (! bFirst)
-        {
-            ++aNodeIndex;
-        }
-
-        bFirst = false;
-
+        const bool bIsEndNode = aNodeIndex == End()->nNode;
         SwTxtNode * pTxtNode = aNodeIndex.GetNode().GetTxtNode();
 
         if (pTxtNode != NULL)
         {
             const OUString aTmpStr = pTxtNode->GetTxt();
 
-            if (aNodeIndex == Start()->nNode)
+            if (bIsStartNode || bIsEndNode)
             {
-                xub_StrLen nEnd;
-                if (End()->nNode == aNodeIndex)
-                    nEnd = End()->nContent.GetIndex();
-                else
-                    nEnd = aTmpStr.getLength();
-
-                aResult += aTmpStr.copy(Start()->nContent.GetIndex(),
-                                        nEnd - Start()->nContent.GetIndex()) ;
+                // Handle corner cases of start/end node(s)
+                const sal_Int32 nStart = bIsStartNode
+                    ? static_cast<sal_Int32>(Start()->nContent.GetIndex())
+                    : 0;
+                const sal_Int32 nEnd = bIsEndNode
+                    ? static_cast<sal_Int32>(End()->nContent.GetIndex())
+                    : aTmpStr.getLength();
+
+                aResult += aTmpStr.copy(nStart, nEnd-nStart);
             }
-            else if (aNodeIndex == End()->nNode)
-                aResult += aTmpStr.copy(0, End()->nContent.GetIndex());
             else
+            {
                 aResult += aTmpStr;
+            }
         }
+
+        if (bIsEndNode)
+        {
+            break;
+        }
+
+        ++aNodeIndex;
+        bIsStartNode = false;
     }
-    while (aNodeIndex != End()->nNode);
 
     return aResult;
 }


More information about the Libreoffice-commits mailing list