Kaydet (Commit) 0bb1d92c authored tarafından Matteo Casalin's avatar Matteo Casalin

Avoid copying containers for local helper functions

Change-Id: I9ba47e8a53a37cbeb2e8d0e197094531edbaeb4c
üst 6327919b
...@@ -40,13 +40,13 @@ namespace { ...@@ -40,13 +40,13 @@ namespace {
/// Get a sorted list of the used footnote reference numbers. /// Get a sorted list of the used footnote reference numbers.
/// @param[in] rDoc The active document. /// @param[in] rDoc The active document.
/// @param[in] pExclude A footnote whose reference number should be excluded from the set. /// @param[in] pExclude A footnote whose reference number should be excluded from the set.
/// @param[out] rUsedRef The set of used reference numbers.
/// @param[out] rInvalid A returned list of all items that had an invalid reference number. /// @param[out] rInvalid A returned list of all items that had an invalid reference number.
/// @returns The set of used reference numbers. static void lcl_FillUsedFtnRefNumbers(SwDoc &rDoc,
static std::set<sal_uInt16> lcl_GetUsedFtnRefNumbers(SwDoc &rDoc, SwTxtFtn *pExclude,
SwTxtFtn *pExclude, std::set<sal_uInt16> &rUsedRef,
std::vector<SwTxtFtn*> &rInvalid) std::vector<SwTxtFtn*> &rInvalid)
{ {
std::set<sal_uInt16> aArr;
SwFtnIdxs& ftnIdxs = rDoc.GetFtnIdxs(); SwFtnIdxs& ftnIdxs = rDoc.GetFtnIdxs();
rInvalid.clear(); rInvalid.clear();
...@@ -62,11 +62,10 @@ namespace { ...@@ -62,11 +62,10 @@ namespace {
} }
else else
{ {
aArr.insert( pTxtFtn->GetSeqRefNo() ); rUsedRef.insert( pTxtFtn->GetSeqRefNo() );
} }
} }
} }
return aArr;
} }
/// Check whether a requested reference number is available. /// Check whether a requested reference number is available.
...@@ -84,13 +83,13 @@ namespace { ...@@ -84,13 +83,13 @@ namespace {
} }
/// Get the first few unused sequential reference numbers. /// Get the first few unused sequential reference numbers.
/// @param[out] rLowestUnusedNums The lowest unused sequential reference numbers.
/// @param[in] rUsedNums The set of used sequential reference numbers. /// @param[in] rUsedNums The set of used sequential reference numbers.
/// @param[in] numRequired The number of reference number required. /// @param[in] numRequired The number of reference number required.
/// @returns The lowest unused sequential reference numbers. static void lcl_FillUnusedSeqRefNums(std::vector<sal_uInt16> &rLowestUnusedNums,
static std::vector<sal_uInt16> lcl_GetUnusedSeqRefNums(std::set<sal_uInt16> &rUsedNums, const std::set<sal_uInt16> &rUsedNums,
size_t numRequired) size_t numRequired)
{ {
std::vector<sal_uInt16> unusedNums;
sal_uInt16 newNum = 0; sal_uInt16 newNum = 0;
std::set<sal_uInt16>::iterator it; std::set<sal_uInt16>::iterator it;
//Start by using numbers from gaps in rUsedNums //Start by using numbers from gaps in rUsedNums
...@@ -98,19 +97,17 @@ namespace { ...@@ -98,19 +97,17 @@ namespace {
{ {
while ( newNum < *it ) while ( newNum < *it )
{ {
unusedNums.push_back( newNum++ ); rLowestUnusedNums.push_back( newNum++ );
if ( unusedNums.size() >= numRequired ) if ( rLowestUnusedNums.size() >= numRequired )
return unusedNums; return;
} }
newNum++; newNum++;
} }
//Filled in all gaps. Fill the rest of the list with new numbers. //Filled in all gaps. Fill the rest of the list with new numbers.
while ( unusedNums.size() < numRequired ) while ( rLowestUnusedNums.size() < numRequired )
{ {
unusedNums.push_back( newNum++ ); rLowestUnusedNums.push_back( newNum++ );
} }
return unusedNums;
} }
} }
...@@ -504,11 +501,13 @@ sal_uInt16 SwTxtFtn::SetSeqRefNo() ...@@ -504,11 +501,13 @@ sal_uInt16 SwTxtFtn::SetSeqRefNo()
if( pDoc->IsInReading() ) if( pDoc->IsInReading() )
return USHRT_MAX; return USHRT_MAX;
std::set<sal_uInt16> aUsedNums;
std::vector<SwTxtFtn*> badRefNums; std::vector<SwTxtFtn*> badRefNums;
std::set<sal_uInt16> aUsedNums = ::lcl_GetUsedFtnRefNumbers(*pDoc, this, badRefNums); ::lcl_FillUsedFtnRefNumbers(*pDoc, this, aUsedNums, badRefNums);
if ( ::lcl_IsRefNumAvailable(aUsedNums, m_nSeqNo) ) if ( ::lcl_IsRefNumAvailable(aUsedNums, m_nSeqNo) )
return m_nSeqNo; return m_nSeqNo;
std::vector<sal_uInt16> unused = ::lcl_GetUnusedSeqRefNums(aUsedNums, 1); std::vector<sal_uInt16> unused;
::lcl_FillUnusedSeqRefNums(unused, aUsedNums, 1);
return m_nSeqNo = unused[0]; return m_nSeqNo = unused[0];
} }
...@@ -516,13 +515,15 @@ sal_uInt16 SwTxtFtn::SetSeqRefNo() ...@@ -516,13 +515,15 @@ sal_uInt16 SwTxtFtn::SetSeqRefNo()
/// @param[in] rDoc The document to be processed. /// @param[in] rDoc The document to be processed.
void SwTxtFtn::SetUniqueSeqRefNo( SwDoc& rDoc ) void SwTxtFtn::SetUniqueSeqRefNo( SwDoc& rDoc )
{ {
std::set<sal_uInt16> aUsedNums;
std::vector<SwTxtFtn*> badRefNums; std::vector<SwTxtFtn*> badRefNums;
std::set<sal_uInt16> aUsedNums = ::lcl_GetUsedFtnRefNumbers(rDoc, NULL, badRefNums); ::lcl_FillUsedFtnRefNumbers(rDoc, NULL, aUsedNums, badRefNums);
std::vector<sal_uInt16> unused = ::lcl_GetUnusedSeqRefNums(aUsedNums, badRefNums.size()); std::vector<sal_uInt16> aUnused;
::lcl_FillUnusedSeqRefNums(aUnused, aUsedNums, badRefNums.size());
for (size_t i = 0; i < badRefNums.size(); ++i) for (size_t i = 0; i < badRefNums.size(); ++i)
{ {
badRefNums[i]->m_nSeqNo = unused[i]; badRefNums[i]->m_nSeqNo = aUnused[i];
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment