[PATCH] Simplify SwPaM::GetTxt
Matteo Casalin (via Code Review)
gerrit at gerrit.libreoffice.org
Sun Jun 9 06:36:52 PDT 2013
Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/4213
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/13/4213/1
Simplify SwPaM::GetTxt
Change-Id: Ic8905ff02852dab7f699c2a9f02a6252a5c42c7f
---
M sw/source/core/crsr/pam.cxx
1 file changed, 24 insertions(+), 22 deletions(-)
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 @@
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();
+ // 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(Start()->nContent.GetIndex(),
- nEnd - Start()->nContent.GetIndex()) ;
+ 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;
}
--
To view, visit https://gerrit.libreoffice.org/4213
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic8905ff02852dab7f699c2a9f02a6252a5c42c7f
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Matteo Casalin <matteo.casalin at yahoo.com>
More information about the LibreOffice
mailing list