summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorNoel Grandin <noel@peralex.com>2012-08-07 16:56:51 +0200
committerTor Lillqvist <tlillqvist@suse.com>2012-08-08 13:53:07 +0300
commit016918cf9459eccc177bfedbe75c6296b3b4bb67 (patch)
treed6966ad5b74e79d8aff54cefb6e34309b671f8df /tools
parent552cc040866bb2d25cf6187c92d9c4acd0db82d8 (diff)
STL'ify SV_DECL_IMPL_PERSIST_LIST
Converts it to a template based on std::vector Change-Id: Id7f89f494164c61a3a573cff443ac0e0488e93f1
Diffstat (limited to 'tools')
-rw-r--r--tools/inc/tools/pstm.hxx57
-rw-r--r--tools/inc/tools/ref.hxx265
-rw-r--r--tools/source/inet/inetmsg.cxx1
-rw-r--r--tools/source/ref/pstm.cxx31
4 files changed, 96 insertions, 258 deletions
diff --git a/tools/inc/tools/pstm.hxx b/tools/inc/tools/pstm.hxx
index 64a3b64d9175..1cb882afcf03 100644
--- a/tools/inc/tools/pstm.hxx
+++ b/tools/inc/tools/pstm.hxx
@@ -104,35 +104,50 @@ public:
SV_DECL_IMPL_REF(SvPersistBase)
/*************************************************************************/
-// Damit die Liste, anders benannt wird
-typedef SvPersistBase SuperSvPersistBase;
-SV_DECL_REF_LIST_VISIBILITY(SuperSvPersistBase,SuperSvPersistBase*,TOOLS_DLLPUBLIC)
-SV_IMPL_REF_LIST(SuperSvPersistBase,SuperSvPersistBase*)
-class TOOLS_DLLPUBLIC SvPersistBaseMemberList : public SuperSvPersistBaseMemberList
+class SvPersistListWriteable
{
public:
- SvPersistBaseMemberList();
-
- void WriteObjects( SvPersistStream &, sal_Bool bOnlyStreamedObj = sal_False ) const;
- TOOLS_DLLPUBLIC friend SvPersistStream& operator << (SvPersistStream &, const SvPersistBaseMemberList &);
- TOOLS_DLLPUBLIC friend SvPersistStream& operator >> (SvPersistStream &, SvPersistBaseMemberList &);
+ virtual ~SvPersistListWriteable() {}
+ virtual size_t size() const = 0;
+ virtual SvPersistBase* GetPersistBase(size_t idx) const = 0;
+};
+class SvPersistListReadable
+{
+public:
+ virtual ~SvPersistListReadable() {}
+ virtual void push_back(SvPersistBase* p) = 0;
};
-/*************************************************************************/
-#define SV_DECL_PERSIST_LIST(ClassName,EntryName)\
-class ClassName##MemberList : public SvPersistBaseMemberList\
-{\
-public:\
- PRV_SV_DECL_MEMBER_LIST(ClassName,EntryName)\
+void TOOLS_DLLPUBLIC WritePersistListObjects(const SvPersistListWriteable& rList, SvPersistStream & rStm, bool bOnlyStreamed = false );
+
+void TOOLS_DLLPUBLIC ReadObjects( SvPersistListReadable& rLst, SvPersistStream & rStm);
+
+// T has to be a subtype of "SvPersistBase*"
+template<typename T>
+class SvDeclPersistList : public SvRefMemberList<T>, public SvPersistListWriteable, public SvPersistListReadable
+{
+public:
+ // implement the reader/writer adapter methods
+ size_t size() const { return SvRefMemberList<T>::size(); }
+ SvPersistBase* GetPersistBase(size_t idx) const { return SvRefMemberList<T>::operator[](idx); }
+ void push_back(SvPersistBase* p) { SvRefMemberList<T>::push_back(static_cast<T>(p)); }
+ void WriteObjects(SvPersistStream & rStm, bool bOnlyStreamed ) const { WritePersistListObjects(*this, rStm, bOnlyStreamed); }
};
-#define SV_IMPL_PERSIST_LIST(ClassName,EntryName)\
- PRV_SV_IMPL_MEMBER_LIST(ClassName,EntryName,SvPersistBaseMemberList)
+template<typename T>
+TOOLS_DLLPUBLIC SvPersistStream& operator << (SvPersistStream &rStm, const SvDeclPersistList<T> &rLst)
+{
+ WritePersistListObjects( rLst, rStm );
+ return rStm;
+};
-#define SV_DECL_IMPL_PERSIST_LIST(ClassName,EntryName)\
-SV_DECL_PERSIST_LIST(ClassName,EntryName)\
-SV_IMPL_PERSIST_LIST(ClassName,EntryName)
+template<typename T>
+TOOLS_DLLPUBLIC SvPersistStream& operator >> (SvPersistStream &rStm, SvDeclPersistList<T> &rLst)
+{
+ ReadObjects( rLst, rStm );
+ return rStm;
+};
typedef UniqueIndex<SvPersistBase> SvPersistUIdx;
diff --git a/tools/inc/tools/ref.hxx b/tools/inc/tools/ref.hxx
index 7a3257e2bb74..5e33c79174f0 100644
--- a/tools/inc/tools/ref.hxx
+++ b/tools/inc/tools/ref.hxx
@@ -20,7 +20,7 @@
#define _REF_HXX
#include "tools/toolsdllapi.h"
-#include <tools/list.hxx>
+#include <vector>
//=========================================================================
@@ -101,222 +101,59 @@ PRV_SV_IMPL_REF_COUNTERS( ClassName, Lock, OwnerLock( sal_True ), \
/************************** S v R e f L i s t ****************************/
-#define PRV_SV_DECL_REF_LIST(CN,EN,vis) \
-class CN##List : private List \
-{ \
-public: \
- using List::Clear; \
- using List::Count; \
- using List::GetCurPos; \
- \
- CN##List( sal_uInt16 _nInitSize = 16, sal_uInt16 _nReSize = 16 ) \
- : List( _nInitSize, _nReSize ) {} \
- CN##List( sal_uInt16 _nBlockSize, sal_uInt16 _nInitSize, \
- sal_uInt16 _nReSize ) \
- : List( _nBlockSize, _nInitSize, _nReSize ) {} \
- CN##List( const CN##List& rClassName ) \
- : List( rClassName ) {} \
- \
- void Insert( EN p, sal_uIntPtr nIndex ) \
- { List::Insert( (void*)p, nIndex ); } \
- void Insert( EN p ) \
- { List::Insert( (void*)p ); } \
- EN Remove() \
- { return (EN)List::Remove(); } \
- EN Remove( sal_uIntPtr nIndex ) \
- { return (EN)List::Remove( nIndex ); } \
- EN Remove( EN p ) \
- { return (EN)List::Remove( (void*)p ); } \
- EN Replace( EN p, sal_uIntPtr nIndex ) \
- { return (EN)List::Replace( (void*)p, nIndex ); } \
- EN Replace( EN pNew, EN pOld ) \
- { return (EN)List::Replace( (void*)pNew, (void*)pOld ); } \
- \
- EN GetCurObject() const \
- { return (EN)List::GetCurObject(); } \
- EN GetObject( sal_uIntPtr nIndex ) const \
- { return (EN)List::GetObject( nIndex ); } \
- sal_uIntPtr GetPos( const EN p ) const \
- { return List::GetPos( (const void*)p ); } \
- \
- EN Seek( sal_uIntPtr nIndex ) \
- { return (EN)List::Seek( nIndex ); } \
- EN Seek( void* p ) { return (EN)List::Seek( p ); } \
- EN First() { return (EN)List::First(); } \
- EN Last() { return (EN)List::Last(); } \
- EN Next() { return (EN)List::Next(); } \
- EN Prev() { return (EN)List::Prev(); } \
- \
- CN##List& operator =( const CN##List& rClassName ) \
- { List::operator =( rClassName ); return *this; } \
- \
- sal_Bool operator ==( const CN##List& rList ) const \
- { return List::operator ==( rList ); } \
- sal_Bool operator !=( const CN##List& rList ) const \
- { return List::operator !=( rList ); } \
-}; \
-class vis CN##MemberList : public CN##List\
-{\
-public:\
- inline CN##MemberList();\
- inline CN##MemberList(sal_uInt16 nInitSz, sal_uInt16 nResize );\
- inline CN##MemberList( const CN##MemberList & rRef );\
- inline ~CN##MemberList();\
- inline CN##MemberList & operator =( const CN##MemberList & rRef );\
- inline void Clear();\
- inline void Insert( EN p )\
- {\
- CN##List::Insert( p );\
- p->AddRef();\
- }\
- inline void Insert( EN p, sal_uIntPtr nIndex )\
- {\
- CN##List::Insert( p, nIndex );\
- p->AddRef();\
- }\
- inline void Append( EN p ) { Insert( p, LIST_APPEND ); }\
- inline EN Remove();\
- inline EN Remove( sal_uIntPtr nIndex );\
- inline EN Remove( EN p );\
- inline EN Replace( EN p, sal_uIntPtr nIndex );\
- inline EN Replace( EN pNew, EN pOld );\
- inline void Append( const CN##MemberList & );\
+template<typename T>
+class SvRefMemberList : private std::vector<T>
+{
+private:
+ typedef typename std::vector<T> base_t;
+public:
+ using base_t::size;
+ using base_t::front;
+ using base_t::back;
+ using base_t::operator[];
+ using base_t::begin;
+ using base_t::end;
+ using base_t::iterator;
+ using base_t::const_iterator;
+ using base_t::rbegin;
+ using base_t::rend;
+ using base_t::reverse_iterator;
+ using base_t::empty;
+
+ inline ~SvRefMemberList() { clear(); }
+ inline void clear()
+ {
+ for( typename base_t::const_iterator it = base_t::begin(); it != base_t::end(); ++it )
+ {
+ T p = *it;
+ if( p )
+ p->ReleaseReference();
+ }
+ base_t::clear();
+ }
+ inline void push_back( T p )
+ {
+ base_t::push_back( p );
+ p->AddRef();
+ }
+ inline void insert(const SvRefMemberList& rOther)
+ {
+ for( typename base_t::const_iterator it = rOther.begin(); it != rOther.end(); ++it )
+ {
+ push_back(*it);
+ }
+ }
+ inline T pop_back()
+ {
+ T p = base_t::back();
+ base_t::pop_back();
+ if( p )
+ p->ReleaseReference();
+ return p;
+ }
};
-#define SV_DECL_REF_LIST(CN,EN) \
-PRV_SV_DECL_REF_LIST(CN,EN,/* empty */)
-
-#define SV_DECL_REF_LIST_VISIBILITY(CN,EN,vis) \
-PRV_SV_DECL_REF_LIST(CN,EN,vis)
-
-/************************** S v R e f L i s t ****************************/
-#define SV_IMPL_REF_LIST( CN, EN ) \
-inline CN##MemberList::CN##MemberList(){}\
-inline CN##MemberList::CN##MemberList(sal_uInt16 nInitSz, sal_uInt16 nResize )\
- : CN##List( nInitSz, nResize ){}\
-inline CN##MemberList::CN##MemberList( const CN##MemberList & rRef ) \
- : CN##List( rRef ) \
-{\
- sal_uIntPtr nOldCount = Count(); \
- EN pEntry = First(); \
- while( pEntry ) \
- { pEntry->AddRef(); pEntry = Next(); } \
- Seek( nOldCount ); /* auch Curser gleich */ \
-}\
-inline CN##MemberList::~CN##MemberList() { Clear(); } \
-inline CN##MemberList & CN##MemberList::operator = \
- ( const CN##MemberList & rRef ) \
-{\
- CN##MemberList & rList = (CN##MemberList &)rRef; \
- sal_uIntPtr nOldCount = rList.Count(); \
- /* Count der Objekte erhoehen */ \
- EN pEntry = rList.First(); \
- while( pEntry ) \
- { pEntry->AddRef(); pEntry = rList.Next(); } \
- rList.Seek( nOldCount ); /* Curser zurueck */ \
- /* Liste kopieren */ \
- Clear(); \
- CN##List::operator = ( rRef ); \
- return *this; \
-}\
-inline void CN##MemberList::Clear() \
-{\
- EN pEntry = Last();\
- while( NULL != pEntry )\
- pEntry = Remove();\
-}\
-inline EN CN##MemberList::Remove() \
-{\
- EN p = CN##List::Remove(); \
- if( p ) p->ReleaseReference(); return p; \
-}\
-inline EN CN##MemberList::Remove( sal_uIntPtr nIndex ) \
-{\
- EN p = CN##List::Remove( nIndex ); \
- if( p ) p->ReleaseReference(); return p; \
-}\
-inline EN CN##MemberList::Remove( EN p ) \
-{\
- p = CN##List::Remove( p ); \
- if( p ) p->ReleaseReference(); return p; \
-}\
-inline EN CN##MemberList::Replace( EN p, sal_uIntPtr nIndex ) \
-{\
- p->AddRef(); p = CN##List::Replace( p, nIndex ); \
- if( p ) p->ReleaseReference(); return p; \
-}\
-inline EN CN##MemberList::Replace( EN pNew, EN pOld ) \
-{\
- pNew->AddRef(); CN##List::Replace( pNew, pOld ); \
- if( pOld ) pOld->ReleaseReference(); return pOld; \
-}\
-inline void CN##MemberList::Append( const CN##MemberList & rList )\
-{\
- for( sal_uIntPtr i = 0; i < rList.Count(); i++ )\
- Append( rList.GetObject( i ) );\
-}
-
-/************************** S v M e m b e r L i s t **********************/
-#define PRV_SV_DECL_MEMBER_LIST(Class,EntryName) \
- Class##MemberList() {} \
-inline void Insert( EntryName p ); \
-inline void Insert( EntryName p, sal_uIntPtr nIndex ); \
-inline void Append( EntryName p ); \
-inline EntryName Remove(); \
-inline EntryName Remove( sal_uIntPtr nIndex ); \
-inline EntryName Remove( EntryName p ); \
-inline EntryName Replace( EntryName p, sal_uIntPtr nIndex );\
-inline EntryName Replace( EntryName pNew, EntryName pOld );\
-inline EntryName GetCurObject() const;\
-inline EntryName GetObject( sal_uIntPtr nIndex ) const;\
-inline sal_uIntPtr GetPos( const EntryName ) const;\
-inline EntryName Seek( sal_uIntPtr nIndex );\
-inline EntryName Seek( EntryName p );\
-inline EntryName First();\
-inline EntryName Last();\
-inline EntryName Next();\
-inline EntryName Prev();\
-inline void Append( const Class##MemberList & rList );
-
-#define PRV_SV_IMPL_MEMBER_LIST(ClassName,EntryName,BaseList)\
-inline void ClassName##MemberList::Insert( EntryName p )\
- {BaseList::Insert(p);}\
-inline void ClassName##MemberList::Insert( EntryName p, sal_uIntPtr nIdx )\
- {BaseList::Insert(p,nIdx);}\
-inline void ClassName##MemberList::Append( EntryName p )\
- {BaseList::Append(p);}\
-inline EntryName ClassName##MemberList::Remove()\
- {return (EntryName)BaseList::Remove();}\
-inline EntryName ClassName##MemberList::Remove( sal_uIntPtr nIdx )\
- {return (EntryName)BaseList::Remove(nIdx);}\
-inline EntryName ClassName##MemberList::Remove( EntryName p )\
- {return (EntryName)BaseList::Remove(p);}\
-inline EntryName ClassName##MemberList::Replace( EntryName p, sal_uIntPtr nIdx )\
- {return (EntryName)BaseList::Replace(p,nIdx);}\
-inline EntryName ClassName##MemberList::Replace( EntryName p, EntryName pOld )\
- {return (EntryName)BaseList::Replace(p,pOld);}\
-inline EntryName ClassName##MemberList::GetCurObject() const\
- {return (EntryName)BaseList::GetCurObject();}\
-inline EntryName ClassName##MemberList::GetObject( sal_uIntPtr nIdx ) const\
- {return (EntryName)BaseList::GetObject( nIdx );}\
-inline EntryName ClassName##MemberList::Seek( sal_uIntPtr nIdx )\
- {return (EntryName)BaseList::Seek( nIdx );}\
-inline EntryName ClassName##MemberList::Seek( EntryName p )\
- {return (EntryName)BaseList::Seek( p );}\
-inline EntryName ClassName##MemberList::First()\
- {return (EntryName)BaseList::First();}\
-inline EntryName ClassName##MemberList::Last()\
- {return (EntryName)BaseList::Last();}\
-inline EntryName ClassName##MemberList::Next()\
- {return (EntryName)BaseList::Next();}\
-inline EntryName ClassName##MemberList::Prev()\
- {return (EntryName)BaseList::Prev();}\
-inline void ClassName##MemberList::Append( const ClassName##MemberList & rList )\
- {BaseList::Append(rList);}\
-inline sal_uIntPtr ClassName##MemberList::GetPos( const EntryName p) const\
- {return BaseList::GetPos( p );}
-
/************************** S v R e f B a s e ****************************/
#define SV_NO_DELETE_REFCOUNT 0x80000000
class TOOLS_DLLPUBLIC SvRefBase
diff --git a/tools/source/inet/inetmsg.cxx b/tools/source/inet/inetmsg.cxx
index 46a36e93fcff..3940c115d1a3 100644
--- a/tools/source/inet/inetmsg.cxx
+++ b/tools/source/inet/inetmsg.cxx
@@ -22,6 +22,7 @@
#include <tools/inetmime.hxx>
#include <tools/inetmsg.hxx>
#include <tools/inetstrm.hxx>
+#include <tools/list.hxx>
#include <rtl/instance.hxx>
#include <rtl/strbuf.hxx>
#include <comphelper/string.hxx>
diff --git a/tools/source/ref/pstm.cxx b/tools/source/ref/pstm.cxx
index 064a09bd8b35..ecd9e4763b88 100644
--- a/tools/source/ref/pstm.cxx
+++ b/tools/source/ref/pstm.cxx
@@ -52,16 +52,13 @@ TYPEINIT0( SvRttiBase );
/****************** SvPersistBaseMemberList ******************************/
-SvPersistBaseMemberList::SvPersistBaseMemberList(){}
-
#define PERSIST_LIST_VER (sal_uInt8)0
#define PERSIST_LIST_DBGUTIL (sal_uInt8)0x80
/************************************************************************
-|* SvPersistBaseMemberList::WriteOnlyStreamedObjects()
+|* WritePersistListObjects()
*************************************************************************/
-void SvPersistBaseMemberList::WriteObjects( SvPersistStream & rStm,
- sal_Bool bOnlyStreamed ) const
+void TOOLS_DLLPUBLIC WritePersistListObjects(const SvPersistListWriteable& rList, SvPersistStream & rStm, bool bOnlyStreamed )
{
#ifdef STOR_NO_OPTIMIZE
rStm << (sal_uInt8)(PERSIST_LIST_VER | PERSIST_LIST_DBGUTIL);
@@ -70,7 +67,7 @@ void SvPersistBaseMemberList::WriteObjects( SvPersistStream & rStm,
sal_uInt8 bTmp = PERSIST_LIST_VER;
rStm << bTmp;
#endif
- sal_uInt32 nCountMember = Count();
+ sal_uInt32 nCountMember = rList.size();
sal_uIntPtr nCountPos = rStm.Tell();
sal_uInt32 nWriteCount = 0;
rStm << nCountMember;
@@ -78,10 +75,10 @@ void SvPersistBaseMemberList::WriteObjects( SvPersistStream & rStm,
//wegen Seiteneffekten beim Save
for( sal_uIntPtr n = 0; n < nCountMember; n++ )
{
- SvPersistBase * pObj = GetObject( n );
+ SvPersistBase * pObj = rList.GetPersistBase( n );
if( !bOnlyStreamed || rStm.IsStreamed( pObj ) )
{ // Objekt soll geschrieben werden
- rStm << GetObject( n );
+ rStm << pObj;
nWriteCount++;
}
}
@@ -99,20 +96,9 @@ void SvPersistBaseMemberList::WriteObjects( SvPersistStream & rStm,
}
/************************************************************************
-|* operator << ()
-*************************************************************************/
-SvPersistStream& operator << ( SvPersistStream & rStm,
- const SvPersistBaseMemberList & rLst )
-{
- rLst.WriteObjects( rStm );
- return rStm;
-}
-
-/************************************************************************
-|* operator >> ()
+|* ReadObjects()
*************************************************************************/
-SvPersistStream& operator >> ( SvPersistStream & rStm,
- SvPersistBaseMemberList & rLst )
+void TOOLS_DLLPUBLIC ReadObjects( SvPersistListReadable& rLst, SvPersistStream & rStm )
{
sal_uInt8 nVer;
rStm >> nVer;
@@ -134,7 +120,7 @@ SvPersistStream& operator >> ( SvPersistStream & rStm,
SvPersistBase * pObj;
rStm >> pObj;
if( pObj )
- rLst.Append( pObj );
+ rLst.push_back( pObj );
}
#ifdef DBG_UTIL
if( nObjLen + nObjPos != rStm.Tell() )
@@ -149,7 +135,6 @@ SvPersistStream& operator >> ( SvPersistStream & rStm,
#else
(void)nObjLen;
#endif
- return rStm;
}
//=========================================================================