summaryrefslogtreecommitdiffstats
path: root/idl/source/objects/slot.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'idl/source/objects/slot.cxx')
-rw-r--r--idl/source/objects/slot.cxx45
1 files changed, 30 insertions, 15 deletions
diff --git a/idl/source/objects/slot.cxx b/idl/source/objects/slot.cxx
index 2f4f219c2e6c..8a35adf3dba5 100644
--- a/idl/source/objects/slot.cxx
+++ b/idl/source/objects/slot.cxx
@@ -936,14 +936,14 @@ void SvMetaSlot::Insert( SvSlotElementList& rList, const ByteString & rPrefix,
{
// get insert position through binary search in slotlist
sal_uInt16 nId = (sal_uInt16) GetSlotId().GetValue();
- sal_uInt16 nListCount = (sal_uInt16) rList.Count();
+ sal_uInt16 nListCount = (sal_uInt16) rList.size();
sal_uInt16 nPos;
sal_uLong m; // for inner "for" loop
if ( !nListCount )
nPos = 0;
else if ( nListCount == 1 )
- nPos = rList.GetObject(0)->xSlot->GetSlotId().GetValue() >= nId ? 0 : 1;
+ nPos = rList[ 0 ]->xSlot->GetSlotId().GetValue() >= nId ? 0 : 1;
else
{
sal_uInt16 nMid = 0, nLow = 0;
@@ -953,7 +953,7 @@ void SvMetaSlot::Insert( SvSlotElementList& rList, const ByteString & rPrefix,
{
nMid = (nLow + nHigh) >> 1;
DBG_ASSERT( nMid < nListCount, "bsearch ist buggy" );
- int nDiff = (int) nId - (int) rList.GetObject(nMid)->xSlot->GetSlotId().GetValue();
+ int nDiff = (int) nId - (int) rList[ nMid ]->xSlot->GetSlotId().GetValue();
if ( nDiff < 0)
{
if ( nMid == 0 )
@@ -977,16 +977,25 @@ void SvMetaSlot::Insert( SvSlotElementList& rList, const ByteString & rPrefix,
DBG_ASSERT( nPos <= nListCount,
"nPos too large" );
DBG_ASSERT( nPos == nListCount || nId <=
- (sal_uInt16) rList.GetObject(nPos)->xSlot->GetSlotId().GetValue(),
+ (sal_uInt16) rList[ nPos ]->xSlot->GetSlotId().GetValue(),
"Successor has lower SlotId" );
DBG_ASSERT( nPos == 0 || nId >
- (sal_uInt16) rList.GetObject(nPos-1)->xSlot->GetSlotId().GetValue(),
+ (sal_uInt16) rList[ nPos-1 ]->xSlot->GetSlotId().GetValue(),
"Predecessor has higher SlotId" );
DBG_ASSERT( nPos+1 >= nListCount || nId <
- (sal_uInt16) rList.GetObject(nPos+1)->xSlot->GetSlotId().GetValue(),
+ (sal_uInt16) rList[ nPos+1 ]->xSlot->GetSlotId().GetValue(),
"Successor has lower SlotId" );
- rList.Insert( new SvSlotElement( this, rPrefix ), nPos );
+ if ( nPos < rList.size() )
+ {
+ SvSlotElementList::iterator it = rList.begin();
+ std::advance( it, nPos );
+ rList.insert( it, new SvSlotElement( this, rPrefix ) );
+ }
+ else
+ {
+ rList.push_back( new SvSlotElement( this, rPrefix ) );
+ }
// iron out EnumSlots
SvMetaTypeEnum * pEnum = NULL;
@@ -1052,12 +1061,12 @@ void SvMetaSlot::Insert( SvSlotElementList& rList, const ByteString & rPrefix,
pLinkedSlot = pFirstEnumSlot;
// concatenate slaves among themselves
- rList.Seek((sal_uLong)0);
xEnumSlot = pFirstEnumSlot;
+ size_t i = 0;
SvSlotElement *pEle;
do
{
- pEle = rList.Next();
+ pEle = ( ++i < rList.size() ) ? rList[ i ] : NULL;
if ( pEle && pEle->xSlot->pLinkedSlot == this )
{
xEnumSlot->pNextSlot = pEle->xSlot;
@@ -1136,6 +1145,7 @@ void SvMetaSlot::WriteSlotStubs( const ByteString & rShellName,
void SvMetaSlot::WriteSlot( const ByteString & rShellName, sal_uInt16 nCount,
const ByteString & rSlotId,
SvSlotElementList& rSlotList,
+ size_t nStart,
const ByteString & rPrefix,
SvIdlDataBase & rBase, SvStream & rOutStm )
{
@@ -1192,14 +1202,17 @@ void SvMetaSlot::WriteSlot( const ByteString & rShellName, sal_uInt16 nCount,
{
// look for the next slot with the same StateMethod like me
// the slotlist is set to the current slot
- SvSlotElement * pEle = rSlotList.Next();
+ size_t i = nStart;
+ SvSlotElement* pEle = ( ++i < rSlotList.size() ) ? rSlotList[ i ] : NULL;
pNextSlot = pEle ? &pEle->xSlot : NULL;
while ( pNextSlot )
{
if ( !pNextSlot->pNextSlot &&
- pNextSlot->GetStateMethod() == GetStateMethod() )
+ pNextSlot->GetStateMethod() == GetStateMethod()
+ ) {
break;
- pEle = rSlotList.Next();
+ }
+ pEle = ( ++i < rSlotList.size() ) ? rSlotList[ i ] : NULL;
pNextSlot = pEle ? &pEle->xSlot : NULL;
}
@@ -1207,14 +1220,15 @@ void SvMetaSlot::WriteSlot( const ByteString & rShellName, sal_uInt16 nCount,
{
// There is no slot behind me that has the same ExecMethod.
// So I search for the first slot with it (could be myself).
- pEle = rSlotList.First();
+ i = 0;
+ pEle = rSlotList.empty() ? NULL : rSlotList[ i ];
pNextSlot = pEle ? &pEle->xSlot : NULL;
while ( pNextSlot != this )
{
if ( !pNextSlot->pEnumValue &&
pNextSlot->GetStateMethod() == GetStateMethod() )
break;
- pEle = rSlotList.Next();
+ pEle = ( ++i < rSlotList.size() ) ? rSlotList[ i ] : NULL;
pNextSlot = pEle ? &pEle->xSlot : NULL;
}
}
@@ -1436,6 +1450,7 @@ sal_uInt16 SvMetaSlot::WriteSlotParamArray( SvIdlDataBase & rBase, SvStream & rO
sal_uInt16 SvMetaSlot::WriteSlotMap( const ByteString & rShellName, sal_uInt16 nCount,
SvSlotElementList& rSlotList,
+ size_t nStart,
const ByteString & rPrefix,
SvIdlDataBase & rBase,
SvStream & rOutStm )
@@ -1456,7 +1471,7 @@ sal_uInt16 SvMetaSlot::WriteSlotMap( const ByteString & rShellName, sal_uInt16 n
nSCount = (sal_uInt16)pType->GetAttrCount();
}
- WriteSlot( rShellName, nCount, slotId, rSlotList, rPrefix, rBase, rOutStm );
+ WriteSlot( rShellName, nCount, slotId, rSlotList, nStart, rPrefix, rBase, rOutStm );
return nSCount;
}