diff options
author | Noel Grandin <noel@peralex.com> | 2012-08-07 16:56:51 +0200 |
---|---|---|
committer | Tor Lillqvist <tlillqvist@suse.com> | 2012-08-08 13:53:07 +0300 |
commit | 016918cf9459eccc177bfedbe75c6296b3b4bb67 (patch) | |
tree | d6966ad5b74e79d8aff54cefb6e34309b671f8df /tools | |
parent | 552cc040866bb2d25cf6187c92d9c4acd0db82d8 (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.hxx | 57 | ||||
-rw-r--r-- | tools/inc/tools/ref.hxx | 265 | ||||
-rw-r--r-- | tools/source/inet/inetmsg.cxx | 1 | ||||
-rw-r--r-- | tools/source/ref/pstm.cxx | 31 |
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; } //========================================================================= |