diff options
author | Arnaud Versini <arnaud.versini@gmail.com> | 2012-04-07 19:46:32 +0200 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-04-21 14:58:36 +0100 |
commit | 1f98094fc61f39f349c7d6cd3f59a8c9cd0626fc (patch) | |
tree | e381814d369add75523233a74c37a2a1e053c730 /sw | |
parent | a3c7602ba3ed1ab57adab797a5820c8b0cb42abe (diff) |
Use boost::ptr_vector in WW8ListManager instead of SV_DECL_PTRARR_DEL
Diffstat (limited to 'sw')
-rw-r--r-- | sw/source/filter/ww8/ww8par.hxx | 4 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par3.cxx | 107 |
2 files changed, 50 insertions, 61 deletions
diff --git a/sw/source/filter/ww8/ww8par.hxx b/sw/source/filter/ww8/ww8par.hxx index de9219d78efc..e2cc68053ebb 100644 --- a/sw/source/filter/ww8/ww8par.hxx +++ b/sw/source/filter/ww8/ww8par.hxx @@ -142,8 +142,6 @@ namespace com{namespace sun {namespace star{ //----------------------------------------- struct WW8LFOInfo; -typedef WW8LFOInfo* WW8LFOInfo_Ptr; -SV_DECL_PTRARR_DEL(WW8LFOInfos,WW8LFOInfo_Ptr,16) class WW8Reader : public StgReader { @@ -177,7 +175,7 @@ private: const WW8Fib& rFib; SvStream& rSt; std::vector<WW8LSTInfo* > maLSTInfos; - WW8LFOInfos* pLFOInfos;// D. aus PLF LFO, sortiert genau wie im WW8 Stream + boost::ptr_vector<WW8LFOInfo > pLFOInfos;// D. aus PLF LFO, sortiert genau wie im WW8 Stream sal_uInt16 nUniqueList; // current number for creating unique list names sal_uInt8* GrpprlHasSprm(sal_uInt16 nId, sal_uInt8& rSprms, sal_uInt8 nLen); WW8LSTInfo* GetLSTByListId( sal_uInt32 nIdLst ) const; diff --git a/sw/source/filter/ww8/ww8par3.cxx b/sw/source/filter/ww8/ww8par3.cxx index 4a39b5d82318..f909f77875b9 100644 --- a/sw/source/filter/ww8/ww8par3.cxx +++ b/sw/source/filter/ww8/ww8par3.cxx @@ -457,7 +457,6 @@ WW8LFOInfo::WW8LFOInfo(const WW8LFO& rLFO) { } -SV_IMPL_PTRARR( WW8LFOInfos, WW8LFOInfo_Ptr ); // Hilfs-Methoden //////////////////////////////////////////////////////////// @@ -1052,7 +1051,7 @@ SwNumRule* WW8ListManager::CreateNextRule(bool bSimple) // WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) : maSprmParser(rReader_.GetFib().GetFIBVersion()), rReader(rReader_), - rDoc(rReader.GetDoc()), rFib(rReader.GetFib()), rSt(rSt_), pLFOInfos(0), + rDoc(rReader.GetDoc()), rFib(rReader.GetFib()), rSt(rSt_), nUniqueList(1) { // LST und LFO gibts erst ab WW8 @@ -1062,7 +1061,6 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) || ( rFib.lcbPlfLfo < 2) ) return; // offensichtlich keine Listen da // Arrays anlegen - pLFOInfos = new WW8LFOInfos; bool bLVLOk = true; nLastLFOPosition = USHRT_MAX; @@ -1243,7 +1241,7 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) for (int i = 0; i < nMaxSize; ++i) pLFOInfo->maParaSprms[i] = pParentListInfo->maParaSprms[i]; } - pLFOInfos->Insert(pLFOInfo, pLFOInfos->Count()); + pLFOInfos.push_back(pLFOInfo); bOk = true; } @@ -1252,23 +1250,21 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) // // 2.2 fuer alle LFO die zugehoerigen LFOLVL einlesen // - sal_uInt16 nLFOInfos = pLFOInfos ? pLFOInfos->Count() : 0; - for (sal_uInt16 nLfo = 0; nLfo < nLFOInfos; ++nLfo) + size_t nLFOInfos = pLFOInfos.size(); + for (size_t nLfo = 0; nLfo < nLFOInfos; ++nLfo) { bOk = false; - WW8LFOInfo* pLFOInfo = pLFOInfos->GetObject( nLfo ); - if (!pLFOInfo) - break; + WW8LFOInfo& rLFOInfo = pLFOInfos[nLfo]; // stehen hierfuer ueberhaupt LFOLVL an ? - if( pLFOInfo->bOverride ) + if( rLFOInfo.bOverride ) { - WW8LSTInfo* pParentListInfo = GetLSTByListId(pLFOInfo->nIdLst); + WW8LSTInfo* pParentListInfo = GetLSTByListId(rLFOInfo.nIdLst); if (!pParentListInfo) break; // // 2.2.1 eine neue NumRule fuer diese Liste anlegen // - SwNumRule* pParentNumRule = pLFOInfo->pNumRule; + SwNumRule* pParentNumRule = rLFOInfo.pNumRule; OSL_ENSURE(pParentNumRule, "ww: Impossible lists, please report"); if( !pParentNumRule ) break; @@ -1285,15 +1281,15 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) { sal_uInt16 nRul = rDoc.MakeNumRule( rDoc.GetUniqueNumRuleName( &sPrefix ), pParentNumRule); - pLFOInfo->pNumRule = rDoc.GetNumRuleTbl()[ nRul ]; - pLFOInfo->pNumRule->SetAutoRule(false); + rLFOInfo.pNumRule = rDoc.GetNumRuleTbl()[ nRul ]; + rLFOInfo.pNumRule->SetAutoRule(false); } else { sal_uInt16 nRul = rDoc.MakeNumRule( rDoc.GetUniqueNumRuleName(), pParentNumRule); - pLFOInfo->pNumRule = rDoc.GetNumRuleTbl()[ nRul ]; - pLFOInfo->pNumRule->SetAutoRule(true); // = default + rLFOInfo.pNumRule = rDoc.GetNumRuleTbl()[ nRul ]; + rLFOInfo.pNumRule->SetAutoRule(true); // = default } // // 2.2.2 alle LFOLVL (und ggfs. LVL) fuer die neue NumRule @@ -1321,7 +1317,7 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) rSt.SeekRel(-4); std::deque<bool> aNotReallyThere(WW8ListManager::nMaxLevel); - for (sal_uInt8 nLevel = 0; nLevel < pLFOInfo->nLfoLvl; ++nLevel) + for (sal_uInt8 nLevel = 0; nLevel < rLFOInfo.nLfoLvl; ++nLevel) { WW8LFOLVL aLFOLVL; bLVLOk = false; @@ -1355,7 +1351,7 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) // 2.2.2.2 eventuell auch den zugehoerigen LVL einlesen // SwNumFmt aNumFmt( - pLFOInfo->pNumRule->Get(aLFOLVL.nLevel)); + rLFOInfo.pNumRule->Get(aLFOLVL.nLevel)); if (aBits1 & 0x20) { aLFOLVL.bFormat = true; @@ -1365,7 +1361,7 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) bLVLOk = ReadLVL(aNumFmt, aItemSet[nLevel], pParentListInfo->aIdSty[nLevel], aLFOLVL.bStartAt, aNotReallyThere, nLevel, - pLFOInfo->maParaSprms[nLevel]); + rLFOInfo.maParaSprms[nLevel]); if (!bLVLOk) break; @@ -1378,12 +1374,12 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) // // 2.2.2.3 das NumFmt in die NumRule aufnehmen // - pLFOInfo->pNumRule->Set(aLFOLVL.nLevel, aNumFmt); + rLFOInfo.pNumRule->Set(aLFOLVL.nLevel, aNumFmt); } bLVLOk = true; if (nMaxLevel > aLFOLVL.nLevel) - pLFOInfo->maOverrides[aLFOLVL.nLevel] = aLFOLVL; + rLFOInfo.maOverrides[aLFOLVL.nLevel] = aLFOLVL; } if( !bLVLOk ) break; @@ -1392,9 +1388,9 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) // sal_uInt16 aFlagsNewCharFmt = 0; bool bNewCharFmtCreated = false; - for (sal_uInt8 nLevel = 0; nLevel < pLFOInfo->nLfoLvl; ++nLevel) + for (sal_uInt8 nLevel = 0; nLevel < rLFOInfo.nLfoLvl; ++nLevel) { - AdjustLVL( nLevel, *pLFOInfo->pNumRule, aItemSet, aCharFmt, + AdjustLVL( nLevel, *rLFOInfo.pNumRule, aItemSet, aCharFmt, bNewCharFmtCreated, sPrefix ); if( bNewCharFmtCreated ) aFlagsNewCharFmt += (1 << nLevel); @@ -1402,7 +1398,7 @@ WW8ListManager::WW8ListManager(SvStream& rSt_, SwWW8ImplReader& rReader_) // // 2.2.4 ItemPools leeren und loeschen // - for (sal_uInt8 nLevel = 0; nLevel < pLFOInfo->nLfoLvl; ++nLevel) + for (sal_uInt8 nLevel = 0; nLevel < rLFOInfo.nLfoLvl; ++nLevel) delete aItemSet[ nLevel ]; bOk = true; } @@ -1429,20 +1425,19 @@ WW8ListManager::~WW8ListManager() } delete *aIter; } - - if (pLFOInfos) - { - for(sal_uInt16 nInfo = pLFOInfos->Count(); nInfo; ) + boost::ptr_vector<WW8LFOInfo >::reverse_iterator aIter; + for (aIter = pLFOInfos.rbegin() ; + aIter < pLFOInfos.rend(); + ++aIter ) { - WW8LFOInfo *pActInfo = pLFOInfos->GetObject(--nInfo); - if (pActInfo->bOverride && pActInfo->pNumRule - && !pActInfo->bUsedInDoc && pActInfo->pNumRule->IsAutoRule()) + if (aIter->bOverride + && aIter->pNumRule + && !aIter->bUsedInDoc + && aIter->pNumRule->IsAutoRule()) { - rDoc.DelNumRule( pActInfo->pNumRule->GetName() ); + rDoc.DelNumRule( aIter->pNumRule->GetName() ); } } - delete pLFOInfos; - } } bool IsEqualFormatting(const SwNumRule &rOne, const SwNumRule &rTwo) @@ -1477,31 +1472,27 @@ bool IsEqualFormatting(const SwNumRule &rOne, const SwNumRule &rTwo) SwNumRule* WW8ListManager::GetNumRuleForActivation(sal_uInt16 nLFOPosition, const sal_uInt8 nLevel, std::vector<sal_uInt8> &rParaSprms, SwTxtNode *pNode) { - sal_uInt16 nLFOInfos = pLFOInfos ? pLFOInfos->Count() : 0; - if( nLFOInfos <= nLFOPosition ) + if (pLFOInfos.size() <= nLFOPosition) return 0; - WW8LFOInfo* pLFOInfo = pLFOInfos->GetObject( nLFOPosition ); - - if( !pLFOInfo ) - return 0; + WW8LFOInfo& rLFOInfo = pLFOInfos[nLFOPosition]; - bool bFirstUse = !pLFOInfo->bUsedInDoc; - pLFOInfo->bUsedInDoc = true; + bool bFirstUse = !rLFOInfo.bUsedInDoc; + rLFOInfo.bUsedInDoc = true; - if( !pLFOInfo->pNumRule ) + if( !rLFOInfo.pNumRule ) return 0; // #i25545# // #i100132# - a number format does not have to exist on given list level - SwNumFmt pFmt(pLFOInfo->pNumRule->Get(nLevel)); + SwNumFmt pFmt(rLFOInfo.pNumRule->Get(nLevel)); if (rReader.IsRightToLeft() && nLastLFOPosition != nLFOPosition) { if ( pFmt.GetNumAdjust() == SVX_ADJUST_RIGHT) pFmt.SetNumAdjust(SVX_ADJUST_LEFT); else if ( pFmt.GetNumAdjust() == SVX_ADJUST_LEFT) pFmt.SetNumAdjust(SVX_ADJUST_RIGHT); - pLFOInfo->pNumRule->Set(nLevel, pFmt); + rLFOInfo.pNumRule->Set(nLevel, pFmt); } nLastLFOPosition = nLFOPosition; /* @@ -1516,21 +1507,21 @@ SwNumRule* WW8ListManager::GetNumRuleForActivation(sal_uInt16 nLFOPosition, is a simple list. Something that word 2000 does anyway, that 97 didn't, to my bewilderment. */ - if (nLevel && pLFOInfo->pNumRule->IsContinusNum()) - pLFOInfo->pNumRule->SetContinusNum(false); + if (nLevel && rLFOInfo.pNumRule->IsContinusNum()) + rLFOInfo.pNumRule->SetContinusNum(false); - if( (!pLFOInfo->bOverride) && (!pLFOInfo->bLSTbUIDSet) ) + if( (!rLFOInfo.bOverride) && (!rLFOInfo.bLSTbUIDSet) ) { - WW8LSTInfo* pParentListInfo = GetLSTByListId( pLFOInfo->nIdLst ); + WW8LSTInfo* pParentListInfo = GetLSTByListId( rLFOInfo.nIdLst ); if( pParentListInfo ) pParentListInfo->bUsedInDoc = true; - pLFOInfo->bLSTbUIDSet = true; + rLFOInfo.bLSTbUIDSet = true; } - if (pLFOInfo->maParaSprms.size() > nLevel) - rParaSprms = pLFOInfo->maParaSprms[nLevel]; + if (rLFOInfo.maParaSprms.size() > nLevel) + rParaSprms = rLFOInfo.maParaSprms[nLevel]; - SwNumRule *pRet = pLFOInfo->pNumRule; + SwNumRule *pRet = rLFOInfo.pNumRule; bool bRestart(false); sal_uInt16 nStart(0); @@ -1541,13 +1532,13 @@ SwNumRule* WW8ListManager::GetNumRuleForActivation(sal_uInt16 nLFOPosition, Check if there were overrides for this level */ - if (pLFOInfo->bOverride && nLevel < pLFOInfo->nLfoLvl) + if (rLFOInfo.bOverride && nLevel < rLFOInfo.nLfoLvl) { - WW8LSTInfo* pParentListInfo = GetLSTByListId(pLFOInfo->nIdLst); + WW8LSTInfo* pParentListInfo = GetLSTByListId(rLFOInfo.nIdLst); OSL_ENSURE(pParentListInfo, "ww: Impossible lists, please report"); if (pParentListInfo && pParentListInfo->pNumRule) { - const WW8LFOLVL &rOverride = pLFOInfo->maOverrides[nLevel]; + const WW8LFOLVL &rOverride = rLFOInfo.maOverrides[nLevel]; bool bNoChangeFromParent = IsEqualFormatting(*pRet, *(pParentListInfo->pNumRule)); @@ -1565,7 +1556,7 @@ SwNumRule* WW8ListManager::GetNumRuleForActivation(sal_uInt16 nLFOPosition, pParentListInfo->pNumRule->Get(nLevel); if ( rFmt.GetStart() == - pLFOInfo->maOverrides[nLevel].nStartAt + rLFOInfo.maOverrides[nLevel].nStartAt ) { bRestart = true; @@ -1574,7 +1565,7 @@ SwNumRule* WW8ListManager::GetNumRuleForActivation(sal_uInt16 nLFOPosition, { bNewstart = true; nStart = writer_cast<sal_uInt16> - (pLFOInfo->maOverrides[nLevel].nStartAt); + (rLFOInfo.maOverrides[nLevel].nStartAt); } } } |