From ae91e58350348e0482929230d6c9b281325ff55d Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Mon, 7 Apr 2014 09:26:06 +0200 Subject: Unroll sole use of SV_IMPL/DECL_LOCK Change-Id: I0d4691f700a415d0376e2bc346bc51fbf6a000b2 --- include/tools/ref.hxx | 82 +++++++++++++++++++-------------------------------- 1 file changed, 30 insertions(+), 52 deletions(-) (limited to 'include/tools/ref.hxx') diff --git a/include/tools/ref.hxx b/include/tools/ref.hxx index bdc055b9ee0a..e66fbb4acec2 100644 --- a/include/tools/ref.hxx +++ b/include/tools/ref.hxx @@ -22,77 +22,55 @@ #include #include -#define PRV_SV_IMPL_REF_COUNTERS( ClassName, Ref, AddRef, AddNextRef, ReleaseRef, pRefbase ) \ +#define SV_DECL_REF( ClassName ) \ +class ClassName; \ +class ClassName##Ref \ +{ \ +protected: \ + ClassName * pObj; \ +public: \ + inline ClassName##Ref() { pObj = 0; } \ + inline ClassName##Ref( const ClassName##Ref & rObj ); \ + inline ClassName##Ref( ClassName * pObjP ); \ + inline void Clear(); \ + inline ~ClassName##Ref(); \ + inline ClassName##Ref & operator = ( const ClassName##Ref & rObj ); \ + inline ClassName##Ref & operator = ( ClassName * pObj ); \ + inline bool Is() const { return pObj != NULL; } \ + inline ClassName * operator & () const { return pObj; } \ + inline ClassName * operator -> () const { return pObj; } \ + inline ClassName & operator * () const { return *pObj; } \ + inline operator ClassName * () const { return pObj; } \ +}; + +#define SV_IMPL_REF( ClassName ) \ inline ClassName##Ref::ClassName##Ref( const ClassName##Ref & rObj ) \ - { pObj = rObj.pObj; if( pObj ) { pRefbase->AddNextRef; } } \ + { pObj = rObj.pObj; if( pObj ) { pObj->AddNextRef(); } } \ inline ClassName##Ref::ClassName##Ref( ClassName * pObjP ) \ -{ pObj = pObjP; if( pObj ) { pRefbase->AddRef; } } \ +{ pObj = pObjP; if( pObj ) { pObj->AddRef(); } } \ inline void ClassName##Ref::Clear() \ { \ if( pObj ) \ { \ - ClassName* const pRefObj = pRefbase; \ + ClassName* const pRefObj = pObj; \ pObj = 0; \ - pRefObj->ReleaseRef; \ + pRefObj->ReleaseReference(); \ } \ } \ inline ClassName##Ref::~ClassName##Ref() \ -{ if( pObj ) { pRefbase->ReleaseRef; } } \ +{ if( pObj ) { pObj->ReleaseReference(); } } \ inline ClassName##Ref & ClassName##Ref:: \ operator = ( const ClassName##Ref & rObj ) \ { \ - if( rObj.pObj ) rObj.pRefbase->AddNextRef; \ - ClassName* const pRefObj = pRefbase; \ + if( rObj.pObj ) rObj.pObj->AddNextRef(); \ + ClassName* const pRefObj = pObj; \ pObj = rObj.pObj; \ - if( pRefObj ) { pRefObj->ReleaseRef; } \ + if( pRefObj ) { pRefObj->ReleaseReference(); } \ return *this; \ } \ inline ClassName##Ref & ClassName##Ref::operator = ( ClassName * pObjP ) \ { return *this = ClassName##Ref( pObjP ); } -#define PRV_SV_DECL_REF_LOCK(ClassName, Ref) \ -protected: \ - ClassName * pObj; \ -public: \ - inline ClassName##Ref() { pObj = 0; } \ - inline ClassName##Ref( const ClassName##Ref & rObj ); \ - inline ClassName##Ref( ClassName * pObjP ); \ - inline void Clear(); \ - inline ~ClassName##Ref(); \ - inline ClassName##Ref & operator = ( const ClassName##Ref & rObj ); \ - inline ClassName##Ref & operator = ( ClassName * pObj ); \ - inline bool Is() const { return pObj != NULL; } \ - inline ClassName * operator & () const { return pObj; } \ - inline ClassName * operator -> () const { return pObj; } \ - inline ClassName & operator * () const { return *pObj; } \ - inline operator ClassName * () const { return pObj; } - -#define PRV_SV_DECL_REF( ClassName ) \ -PRV_SV_DECL_REF_LOCK( ClassName, Ref ) - -#define SV_DECL_REF( ClassName ) \ -class ClassName; \ -class ClassName##Ref \ -{ \ - PRV_SV_DECL_REF( ClassName ) \ -}; - -#define SV_DECL_LOCK( ClassName ) \ -class ClassName; \ -class ClassName##Lock \ -{ \ - PRV_SV_DECL_REF_LOCK( ClassName, Lock ) \ -}; - -#define SV_IMPL_REF( ClassName ) \ -PRV_SV_IMPL_REF_COUNTERS( ClassName, Ref, AddRef(), AddNextRef(),\ - ReleaseReference(), pObj ) - -#define SV_IMPL_LOCK( ClassName ) \ -PRV_SV_IMPL_REF_COUNTERS( ClassName, Lock, OwnerLock( true ), \ - OwnerLock( true ), OwnerLock( false ), \ - pObj ) - #define SV_DECL_IMPL_REF(ClassName) \ SV_DECL_REF(ClassName) \ SV_IMPL_REF(ClassName) -- cgit