summaryrefslogtreecommitdiff
path: root/svl/source/items/macitem.cxx
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2012-03-08 15:53:57 +0200
committerTor Lillqvist <tlillqvist@suse.com>2012-03-08 16:07:22 +0200
commit4b4fb33c606fd068e024669efcbd7ad2aefdaacd (patch)
tree2cea747768a081773303ba0844c0ea0f558530f9 /svl/source/items/macitem.cxx
parent1fad074f43e3301420900918881ad1a8b0bc8687 (diff)
Convert from tools/table.hxx to std::map in SvxMacroTableDtor
In this case, we also convert from storing pointers to storing the items directly because SvxMacroTableDtor completely controls the lifecycle of the SvxMacro objects it contains. Also add an operator== to SvxMacroTableDtor and remove the out-of-line implementations of equals from two other places.
Diffstat (limited to 'svl/source/items/macitem.cxx')
-rw-r--r--svl/source/items/macitem.cxx126
1 files changed, 69 insertions, 57 deletions
diff --git a/svl/source/items/macitem.cxx b/svl/source/items/macitem.cxx
index 44abf8589217..c2c41016a381 100644
--- a/svl/source/items/macitem.cxx
+++ b/svl/source/items/macitem.cxx
@@ -99,20 +99,36 @@ SvxMacro& SvxMacro::operator=( const SvxMacro& rBase )
return *this;
}
+// -----------------------------------------------------------------------
SvxMacroTableDtor& SvxMacroTableDtor::operator=( const SvxMacroTableDtor& rTbl )
{
- DelDtor();
- SvxMacro* pTmp = ((SvxMacroTableDtor&)rTbl).First();
- while( pTmp )
- {
- SvxMacro *pNew = new SvxMacro( *pTmp );
- Insert( rTbl.GetCurKey(), pNew );
- pTmp = ((SvxMacroTableDtor&)rTbl).Next();
- }
+ aSvxMacroTable.clear();
+ aSvxMacroTable.insert(rTbl.aSvxMacroTable.begin(), rTbl.aSvxMacroTable.end());
return *this;
}
+int SvxMacroTableDtor::operator==( const SvxMacroTableDtor& rOther ) const
+{
+ // Anzahl unterschiedlich => auf jeden Fall ungleich
+ if ( aSvxMacroTable.size() != rOther.aSvxMacroTable.size() )
+ return sal_False;
+
+ // einzeln verleichen; wegen Performance ist die Reihenfolge wichtig
+ SvxMacroTable::const_iterator it1 = aSvxMacroTable.begin();
+ SvxMacroTable::const_iterator it2 = rOther.aSvxMacroTable.begin();
+ for ( ; it1 != aSvxMacroTable.end(); ++it1, ++it2 )
+ {
+ const SvxMacro& rOwnMac = it1->second;
+ const SvxMacro& rOtherMac = it2->second;
+ if ( it1->first != it2->first ||
+ rOwnMac.GetLibName() != rOtherMac.GetLibName() ||
+ rOwnMac.GetMacName() != rOtherMac.GetMacName() )
+ return sal_False;
+ }
+
+ return sal_True;
+}
SvStream& SvxMacroTableDtor::Read( SvStream& rStrm, sal_uInt16 nVersion )
{
@@ -132,16 +148,7 @@ SvStream& SvxMacroTableDtor::Read( SvStream& rStrm, sal_uInt16 nVersion )
if( SVX_MACROTBL_VERSION40 <= nVersion )
rStrm >> eType;
- SvxMacro* pNew = new SvxMacro( aMacName, aLibName, (ScriptType)eType );
-
- SvxMacro *pOld = Get( nCurKey );
- if( pOld )
- {
- delete pOld;
- Replace( nCurKey, pNew );
- }
- else
- Insert( nCurKey, pNew );
+ aSvxMacroTable.insert( SvxMacroTable::value_type(nCurKey, SvxMacro( aMacName, aLibName, (ScriptType)eType ) ));
}
return rStrm;
}
@@ -156,33 +163,60 @@ SvStream& SvxMacroTableDtor::Write( SvStream& rStream ) const
if( SVX_MACROTBL_VERSION40 <= nVersion )
rStream << nVersion;
- rStream << (sal_uInt16)Count();
+ rStream << (sal_uInt16)aSvxMacroTable.size();
- SvxMacro* pMac = ((SvxMacroTableDtor*)this)->First();
- while( pMac && rStream.GetError() == SVSTREAM_OK )
+ SvxMacroTable::const_iterator it = aSvxMacroTable.begin();
+ while( it != aSvxMacroTable.end() && rStream.GetError() == SVSTREAM_OK )
{
- rStream << (short)GetCurKey();
- SfxPoolItem::writeByteString(rStream, pMac->GetLibName());
- SfxPoolItem::writeByteString(rStream, pMac->GetMacName());
+ const SvxMacro& rMac = it->second;
+ rStream << it->first;
+ SfxPoolItem::writeByteString(rStream, rMac.GetLibName());
+ SfxPoolItem::writeByteString(rStream, rMac.GetMacName());
if( SVX_MACROTBL_VERSION40 <= nVersion )
- rStream << (sal_uInt16)pMac->GetScriptType();
- pMac = ((SvxMacroTableDtor*)this)->Next();
+ rStream << (sal_uInt16)rMac.GetScriptType();
+ ++it;
}
return rStream;
}
-// -----------------------------------------------------------------------
+// returns NULL if no entry exists, or a pointer to the internal value
+const SvxMacro* SvxMacroTableDtor::Get(sal_uInt16 nEvent) const
+{
+ SvxMacroTable::const_iterator it = aSvxMacroTable.find(nEvent);
+ return it == aSvxMacroTable.end() ? NULL : &(it->second);
+}
+
+// returns NULL if no entry exists, or a pointer to the internal value
+SvxMacro* SvxMacroTableDtor::Get(sal_uInt16 nEvent)
+{
+ SvxMacroTable::iterator it = aSvxMacroTable.find(nEvent);
+ return it == aSvxMacroTable.end() ? NULL : &(it->second);
+}
+
+// return true if the key exists
+bool SvxMacroTableDtor::IsKeyValid(sal_uInt16 nEvent) const
+{
+ SvxMacroTable::const_iterator it = aSvxMacroTable.find(nEvent);
+ return it != aSvxMacroTable.end();
+}
-void SvxMacroTableDtor::DelDtor()
+// This stores a copy of the rMacro parameter
+SvxMacro& SvxMacroTableDtor::Insert(sal_uInt16 nEvent, const SvxMacro& rMacro)
{
- SvxMacro* pTmp = First();
- while( pTmp )
+ return aSvxMacroTable.insert( SvxMacroTable::value_type( nEvent, rMacro ) ).first->second;
+}
+
+// If the entry exists, remove it from the map and release it's storage
+sal_Bool SvxMacroTableDtor::Erase(sal_uInt16 nEvent)
+{
+ SvxMacroTable::iterator it = aSvxMacroTable.find(nEvent);
+ if ( it != aSvxMacroTable.end())
{
- delete pTmp;
- pTmp = Next();
+ aSvxMacroTable.erase(it);
+ return sal_True;
}
- Clear();
+ return sal_False;
}
// -----------------------------------------------------------------------
@@ -194,22 +228,7 @@ int SvxMacroItem::operator==( const SfxPoolItem& rAttr ) const
const SvxMacroTableDtor& rOwn = aMacroTable;
const SvxMacroTableDtor& rOther = ( (SvxMacroItem&) rAttr ).aMacroTable;
- // Anzahl unterschiedlich => auf jeden Fall ungleich
- if ( rOwn.Count() != rOther.Count() )
- return sal_False;
-
- // einzeln verleichen; wegen Performance ist die Reihenfolge wichtig
- for ( sal_uInt16 nNo = 0; nNo < rOwn.Count(); ++nNo )
- {
- const SvxMacro *pOwnMac = rOwn.GetObject(nNo);
- const SvxMacro *pOtherMac = rOther.GetObject(nNo);
- if ( rOwn.GetKey(pOwnMac) != rOther.GetKey(pOtherMac) ||
- pOwnMac->GetLibName() != pOtherMac->GetLibName() ||
- pOwnMac->GetMacName() != pOtherMac->GetMacName() )
- return sal_False;
- }
-
- return sal_True;
+ return rOwn == rOther;
}
// -----------------------------------------------------------------------
@@ -268,14 +287,7 @@ SfxPoolItem* SvxMacroItem::Create( SvStream& rStrm, sal_uInt16 nVersion ) const
void SvxMacroItem::SetMacro( sal_uInt16 nEvent, const SvxMacro& rMacro )
{
- SvxMacro *pMacro;
- if ( 0 != (pMacro=aMacroTable.Get(nEvent)) )
- {
- delete pMacro;
- aMacroTable.Replace(nEvent, new SvxMacro( rMacro ) );
- }
- else
- aMacroTable.Insert(nEvent, new SvxMacro( rMacro ) );
+ aMacroTable.Insert( nEvent, rMacro);
}
// -----------------------------------------------------------------------