[Libreoffice-commits] core.git: include/sfx2 include/tools

Stephan Bergmann sbergman at redhat.com
Mon Apr 7 00:26:45 PDT 2014


 include/sfx2/objsh.hxx |   47 ++++++++++++++++++++++++++--
 include/tools/ref.hxx  |   82 +++++++++++++++++--------------------------------
 2 files changed, 75 insertions(+), 54 deletions(-)

New commits:
commit ae91e58350348e0482929230d6c9b281325ff55d
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Mon Apr 7 09:26:06 2014 +0200

    Unroll sole use of SV_IMPL/DECL_LOCK
    
    Change-Id: I0d4691f700a415d0376e2bc346bc51fbf6a000b2

diff --git a/include/sfx2/objsh.hxx b/include/sfx2/objsh.hxx
index a3d32c9..e35c618 100644
--- a/include/sfx2/objsh.hxx
+++ b/include/sfx2/objsh.hxx
@@ -720,8 +720,51 @@ public:
 SV_DECL_REF(SfxObjectShell)
 #endif
 
-SV_DECL_LOCK(SfxObjectShell)
-SV_IMPL_LOCK(SfxObjectShell)
+class SfxObjectShellLock
+{
+protected:
+    SfxObjectShell * pObj;
+public:
+    inline               SfxObjectShellLock() { pObj = 0; }
+    inline               SfxObjectShellLock( const SfxObjectShellLock & rObj );
+    inline               SfxObjectShellLock( SfxObjectShell * pObjP );
+    inline void          Clear();
+    inline               ~SfxObjectShellLock();
+    inline SfxObjectShellLock & operator = ( const SfxObjectShellLock & rObj );
+    inline SfxObjectShellLock & operator = ( SfxObjectShell * pObj );
+    inline bool        Is() const { return pObj != NULL; }
+    inline SfxObjectShell *     operator &  () const { return pObj; }
+    inline SfxObjectShell *     operator -> () const { return pObj; }
+    inline SfxObjectShell &     operator *  () const { return *pObj; }
+    inline operator SfxObjectShell * () const { return pObj; }
+};
+inline SfxObjectShellLock::SfxObjectShellLock( const SfxObjectShellLock & rObj )
+    { pObj = rObj.pObj; if( pObj ) { pObj->OwnerLock( true ); } }
+inline SfxObjectShellLock::SfxObjectShellLock( SfxObjectShell * pObjP )
+{ pObj = pObjP; if( pObj ) { pObj->OwnerLock( true ); } }
+inline void SfxObjectShellLock::Clear()
+{
+    if( pObj )
+    {
+        SfxObjectShell* const pRefObj = pObj;
+        pObj = 0;
+        pRefObj->OwnerLock( false );
+    }
+}
+inline SfxObjectShellLock::~SfxObjectShellLock()
+{ if( pObj ) { pObj->OwnerLock( false ); } }
+inline SfxObjectShellLock & SfxObjectShellLock::
+            operator = ( const SfxObjectShellLock & rObj )
+{
+    if( rObj.pObj ) rObj.pObj->OwnerLock( true );
+    SfxObjectShell* const pRefObj = pObj;
+    pObj = rObj.pObj;
+    if( pRefObj ) { pRefObj->OwnerLock( false ); }
+    return *this;
+}
+inline SfxObjectShellLock & SfxObjectShellLock::operator = ( SfxObjectShell * pObjP )
+{ return *this = SfxObjectShellLock( pObjP ); }
+
 SV_IMPL_REF(SfxObjectShell)
 
 class AutoReloadTimer_Impl : public Timer
diff --git a/include/tools/ref.hxx b/include/tools/ref.hxx
index bdc055b..e66fbb4 100644
--- a/include/tools/ref.hxx
+++ b/include/tools/ref.hxx
@@ -22,77 +22,55 @@
 #include <tools/toolsdllapi.h>
 #include <vector>
 
-#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)


More information about the Libreoffice-commits mailing list