summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@suse.cz>2011-03-29 18:12:25 +0200
committerJan Holesovsky <kendy@suse.cz>2011-03-29 18:12:25 +0200
commitaa3e5fb2e8da0899a8c53f63b3d7779b3f98a8cf (patch)
treeb8b008b2ce90829fa58964b86a63e685c799fb69
parenta2f33cdef8073be30c8622fff7e7ab16934e1ffc (diff)
Revert "Remove DECLARE_LIST( SvSlotElementList, SvSlotElement* )"
-rwxr-xr-xidl/inc/object.hxx3
-rwxr-xr-xidl/inc/slot.hxx2
-rwxr-xr-xidl/inc/types.hxx2
-rwxr-xr-xidl/source/objects/object.cxx47
-rwxr-xr-xidl/source/objects/slot.cxx54
5 files changed, 64 insertions, 44 deletions
diff --git a/idl/inc/object.hxx b/idl/inc/object.hxx
index 6c25adee2b..6b3d6cfc83 100755
--- a/idl/inc/object.hxx
+++ b/idl/inc/object.hxx
@@ -29,9 +29,11 @@
#ifndef _OBJECT_HXX
#define _OBJECT_HXX
+#define _SVSTDARR_ULONGS
#include <types.hxx>
#include <slot.hxx>
#include <vector>
+#include <tools/list.hxx>
struct SvSlotElement
{
@@ -42,6 +44,7 @@ struct SvSlotElement
, aPrefix( rPrefix )
{}
};
+DECLARE_LIST( SvSlotElementList, SvSlotElement* )
class SvMetaClass;
typedef ::std::vector< SvMetaClass* > SvMetaClassList;
diff --git a/idl/inc/slot.hxx b/idl/inc/slot.hxx
index 5683ada8f3..e2840cc6aa 100755
--- a/idl/inc/slot.hxx
+++ b/idl/inc/slot.hxx
@@ -82,7 +82,6 @@ class SvMetaSlot : public SvMetaAttribute
void WriteSlot( const ByteString & rShellName,
sal_uInt16 nCount, const ByteString & rSlotId,
SvSlotElementList &rList,
- SvSlotElementList::iterator pCurSlot,
const ByteString & rPrefix,
SvIdlDataBase & rBase, SvStream & rOutStm );
virtual void Write( SvIdlDataBase & rBase,
@@ -256,7 +255,6 @@ public:
sal_uInt16 WriteSlotMap( const ByteString & rShellName,
sal_uInt16 nCount,
SvSlotElementList&,
- SvSlotElementList::iterator pCurSlot,
const ByteString &,
SvIdlDataBase & rBase,
SvStream & rOutStm );
diff --git a/idl/inc/types.hxx b/idl/inc/types.hxx
index 6f0de27ba0..79b1391297 100755
--- a/idl/inc/types.hxx
+++ b/idl/inc/types.hxx
@@ -32,8 +32,8 @@
#include <tools/ref.hxx>
#include <basobj.hxx>
+class SvSlotElementList;
struct SvSlotElement;
-typedef std::vector<SvSlotElement*> SvSlotElementList;
SV_DECL_REF(SvMetaType)
SV_DECL_REF(SvMetaAttribute)
diff --git a/idl/source/objects/object.cxx b/idl/source/objects/object.cxx
index cb0e25ac60..8adab562a8 100755
--- a/idl/source/objects/object.cxx
+++ b/idl/source/objects/object.cxx
@@ -443,10 +443,10 @@ sal_uInt16 SvMetaClass::WriteSlotParamArray( SvIdlDataBase & rBase,
SvStream & rOutStm )
{
sal_uInt16 nCount = 0;
- SvMetaSlot *pAttr = NULL;
- for(SvSlotElementList::iterator it = rSlotList.begin(); it != rSlotList.end(); ++it)
+ for( sal_uLong n = 0; n < rSlotList.Count(); n++ )
{
- pAttr = (*it)->xSlot;
+ SvSlotElement *pEle = rSlotList.GetObject( n );
+ SvMetaSlot *pAttr = pEle->xSlot;
nCount = nCount + pAttr->WriteSlotParamArray( rBase, rOutStm );
}
@@ -459,12 +459,13 @@ sal_uInt16 SvMetaClass::WriteSlots( const ByteString & rShellName,
SvStream & rOutStm )
{
sal_uInt16 nSCount = 0;
- SvMetaSlot *pAttr = NULL;
- for(SvSlotElementList::iterator it = rSlotList.begin(); it != rSlotList.end(); ++it)
+ for( sal_uLong n = 0; n < rSlotList.Count(); n++ )
{
- pAttr = (*it)->xSlot;
+ rSlotList.Seek(n);
+ SvSlotElement * pEle = rSlotList.GetCurObject();
+ SvMetaSlot * pAttr = pEle->xSlot;
nSCount = nSCount + pAttr->WriteSlotMap( rShellName, nCount + nSCount,
- rSlotList, it, (*it)->aPrefix, rBase,
+ rSlotList, pEle->aPrefix, rBase,
rOutStm );
}
@@ -559,8 +560,13 @@ void SvMetaClass::WriteSlotStubs( const ByteString & rShellName,
ByteStringList & rList,
SvStream & rOutStm )
{
- for(SvSlotElementList::iterator it = rSlotList.begin(); it != rSlotList.end(); ++it)
- (*it)->xSlot->WriteSlotStubs( rShellName, rList, rOutStm );
+ // write all attributes
+ for( sal_uLong n = 0; n < rSlotList.Count(); n++ )
+ {
+ SvSlotElement *pEle = rSlotList.GetObject( n );
+ SvMetaSlot *pAttr = pEle->xSlot;
+ pAttr->WriteSlotStubs( rShellName, rList, rOutStm );
+ }
}
void SvMetaClass::WriteSfx( SvIdlDataBase & rBase, SvStream & rOutStm )
@@ -586,12 +592,14 @@ void SvMetaClass::WriteSfx( SvIdlDataBase & rBase, SvStream & rOutStm )
SvMetaClassList classList;
SvSlotElementList aSlotList;
InsertSlots(aSlotList, aSuperList, classList, ByteString(), rBase);
+ for (sal_uInt32 n=0; n<aSlotList.Count(); n++ )
+ {
+ SvSlotElement *pEle = aSlotList.GetObject( n );
+ SvMetaSlot *pSlot = pEle->xSlot;
+ pSlot->SetListPos(n);
+ }
- sal_uInt32 k = 0;
- for(SvSlotElementList::iterator it = aSlotList.begin(); it != aSlotList.end(); ++it, ++k)
- (*it)->xSlot->SetListPos(k);
-
- sal_uLong nSlotCount = aSlotList.size();
+ sal_uLong nSlotCount = aSlotList.Count();
// write all attributes
sal_uInt16 nArgCount = WriteSlotParamArray( rBase, aSlotList, rOutStm );
@@ -633,11 +641,16 @@ void SvMetaClass::WriteSfx( SvIdlDataBase & rBase, SvStream & rOutStm )
}
rOutStm << endl << "};" << endl << "#endif" << endl << endl;
- for(SvSlotElementList::iterator it = aSlotList.begin(); it != aSlotList.end(); ++it)
+ for( sal_uLong n=0; n<aSlotList.Count(); n++ )
{
- (*it)->xSlot->ResetSlotPointer();
- delete *it;
+ aSlotList.Seek(n);
+ SvSlotElement* pEle = aSlotList.GetCurObject();
+ SvMetaSlot* pAttr = pEle->xSlot;
+ pAttr->ResetSlotPointer();
}
+
+ for ( sal_uLong n=0; n<aSlotList.Count(); n++ )
+ delete aSlotList.GetObject(n);
}
void SvMetaClass::WriteHelpIds( SvIdlDataBase & rBase, SvStream & rOutStm,
diff --git a/idl/source/objects/slot.cxx b/idl/source/objects/slot.cxx
index a640289f99..06c161cdad 100755
--- 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.size();
+ sal_uInt16 nListCount = (sal_uInt16) rList.Count();
sal_uInt16 nPos;
sal_uLong m; // for inner "for" loop
if ( !nListCount )
nPos = 0;
else if ( nListCount == 1 )
- nPos = rList[0]->xSlot->GetSlotId().GetValue() >= nId ? 0 : 1;
+ nPos = rList.GetObject(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[nMid]->xSlot->GetSlotId().GetValue();
+ int nDiff = (int) nId - (int) rList.GetObject(nMid)->xSlot->GetSlotId().GetValue();
if ( nDiff < 0)
{
if ( nMid == 0 )
@@ -977,16 +977,16 @@ void SvMetaSlot::Insert( SvSlotElementList& rList, const ByteString & rPrefix,
DBG_ASSERT( nPos <= nListCount,
"nPos too large" );
DBG_ASSERT( nPos == nListCount || nId <=
- (sal_uInt16) rList[nPos]->xSlot->GetSlotId().GetValue(),
+ (sal_uInt16) rList.GetObject(nPos)->xSlot->GetSlotId().GetValue(),
"Successor has lower SlotId" );
DBG_ASSERT( nPos == 0 || nId >
- (sal_uInt16) rList[nPos-1]->xSlot->GetSlotId().GetValue(),
+ (sal_uInt16) rList.GetObject(nPos-1)->xSlot->GetSlotId().GetValue(),
"Predecessor has higher SlotId" );
DBG_ASSERT( nPos+1 >= nListCount || nId <
- (sal_uInt16) rList[nPos+1]->xSlot->GetSlotId().GetValue(),
+ (sal_uInt16) rList.GetObject(nPos+1)->xSlot->GetSlotId().GetValue(),
"Successor has lower SlotId" );
- rList.insert(rList.begin()+nPos, new SvSlotElement( this, rPrefix ));
+ rList.Insert( new SvSlotElement( this, rPrefix ), nPos );
// iron out EnumSlots
SvMetaTypeEnum * pEnum = NULL;
@@ -1052,17 +1052,19 @@ void SvMetaSlot::Insert( SvSlotElementList& rList, const ByteString & rPrefix,
pLinkedSlot = pFirstEnumSlot;
// concatenate slaves among themselves
+ rList.Seek((sal_uLong)0);
xEnumSlot = pFirstEnumSlot;
-
- for (SvSlotElementList::const_iterator it = rList.begin(); it != rList.end(); ++it)
+ SvSlotElement *pEle;
+ do
{
- if ((*it)->xSlot->pLinkedSlot == this)
+ pEle = rList.Next();
+ if ( pEle && pEle->xSlot->pLinkedSlot == this )
{
- xEnumSlot->pNextSlot = (*it)->xSlot;
- xEnumSlot = (*it)->xSlot;
+ xEnumSlot->pNextSlot = pEle->xSlot;
+ xEnumSlot = pEle->xSlot;
}
}
-
+ while ( pEle );
xEnumSlot->pNextSlot = pFirstEnumSlot;
}
}
@@ -1134,7 +1136,6 @@ void SvMetaSlot::WriteSlotStubs( const ByteString & rShellName,
void SvMetaSlot::WriteSlot( const ByteString & rShellName, sal_uInt16 nCount,
const ByteString & rSlotId,
SvSlotElementList& rSlotList,
- SvSlotElementList::iterator pCurSlot,
const ByteString & rPrefix,
SvIdlDataBase & rBase, SvStream & rOutStm )
{
@@ -1191,24 +1192,30 @@ 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
- for (SvSlotElementList::iterator it = pCurSlot+1; it != rSlotList.end(); ++it)
+ SvSlotElement * pEle = rSlotList.Next();
+ pNextSlot = pEle ? &pEle->xSlot : NULL;
+ while ( pNextSlot )
{
- pNextSlot = (*it)->xSlot;
-
- if (!pNextSlot || (!pNextSlot->pNextSlot && pNextSlot->GetStateMethod() == GetStateMethod()) )
+ if ( !pNextSlot->pNextSlot &&
+ pNextSlot->GetStateMethod() == GetStateMethod() )
break;
+ pEle = rSlotList.Next();
+ pNextSlot = pEle ? &pEle->xSlot : NULL;
}
if ( !pNextSlot )
{
// There is no slot behind me that has the same ExecMethod.
// So I search for the first slot with it (could be myself).
- for (SvSlotElementList::iterator it = rSlotList.begin(); it != pCurSlot; ++it)
+ pEle = rSlotList.First();
+ pNextSlot = pEle ? &pEle->xSlot : NULL;
+ while ( pNextSlot != this )
{
- pNextSlot = (*it)->xSlot;
-
- if (pNextSlot == this || (!pNextSlot->pEnumValue && pNextSlot->GetStateMethod() == GetStateMethod()) )
+ if ( !pNextSlot->pEnumValue &&
+ pNextSlot->GetStateMethod() == GetStateMethod() )
break;
+ pEle = rSlotList.Next();
+ pNextSlot = pEle ? &pEle->xSlot : NULL;
}
}
@@ -1429,7 +1436,6 @@ sal_uInt16 SvMetaSlot::WriteSlotParamArray( SvIdlDataBase & rBase, SvStream & rO
sal_uInt16 SvMetaSlot::WriteSlotMap( const ByteString & rShellName, sal_uInt16 nCount,
SvSlotElementList& rSlotList,
- SvSlotElementList::iterator pCurSlot,
const ByteString & rPrefix,
SvIdlDataBase & rBase,
SvStream & rOutStm )
@@ -1450,7 +1456,7 @@ sal_uInt16 SvMetaSlot::WriteSlotMap( const ByteString & rShellName, sal_uInt16 n
nSCount = (sal_uInt16)pType->GetAttrCount();
}
- WriteSlot( rShellName, nCount, slotId, rSlotList, pCurSlot, rPrefix, rBase, rOutStm );
+ WriteSlot( rShellName, nCount, slotId, rSlotList, rPrefix, rBase, rOutStm );
return nSCount;
}