[Libreoffice-commits] core.git: framework/source include/framework

Xisco Fauli anistenis at gmail.com
Tue Jun 28 06:28:49 UTC 2016


 framework/source/fwe/classes/addonsoptions.cxx |   63 +++++++++----------------
 include/framework/addonsoptions.hxx            |   32 +-----------
 2 files changed, 27 insertions(+), 68 deletions(-)

New commits:
commit 3bdc5063f942b9ea3b6e39e707926fbc516c19f9
Author: Xisco Fauli <anistenis at gmail.com>
Date:   Wed Jun 22 02:30:43 2016 +0200

    tdf#89329: use shared_ptr for pImpl in addonsoptions
    
    Change-Id: I159ba04fa70f324d2a7f5b3c592337b92c7f097d
    Reviewed-on: https://gerrit.libreoffice.org/26560
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noelgrandin at gmail.com>

diff --git a/framework/source/fwe/classes/addonsoptions.cxx b/framework/source/fwe/classes/addonsoptions.cxx
index 406e466..12e7ca9 100644
--- a/framework/source/fwe/classes/addonsoptions.cxx
+++ b/framework/source/fwe/classes/addonsoptions.cxx
@@ -203,7 +203,6 @@ class AddonsOptions_Impl : public ConfigItem
         const MergeStatusbarInstructionContainer&       GetMergeStatusbarInstructions() const { return m_aCachedStatusbarMergingInstructions;}
         void                                            ReadConfigurationData();
 
-
     private:
         enum ImageSize
         {
@@ -470,7 +469,6 @@ bool AddonsOptions_Impl::GetMergeToolbarInstructions(
         return false;
 }
 
-
 //  public method
 
 static Image ScaleImage( const Image &rImage, bool bBig )
@@ -1471,43 +1469,30 @@ Sequence< OUString > AddonsOptions_Impl::GetPropertyNamesImages( const OUString&
     return lResult;
 }
 
-//  initialize static member
-//  DON'T DO IT IN YOUR HEADER!
-//  see definition for further information
-
-AddonsOptions_Impl*     AddonsOptions::m_pDataContainer = nullptr;
-sal_Int32               AddonsOptions::m_nRefCount      = 0;
-
-//  constructor
+namespace{
+    //global
+    std::weak_ptr<AddonsOptions_Impl> g_pAddonsOptions;
+}
 
 AddonsOptions::AddonsOptions()
 {
     // Global access, must be guarded (multithreading!).
     MutexGuard aGuard( GetOwnStaticMutex() );
-    // Increase our refcount ...
-    ++m_nRefCount;
-    // ... and initialize our data container only if it not already exist!
-    if( m_pDataContainer == nullptr )
+
+    m_pImpl = g_pAddonsOptions.lock();
+    if( !m_pImpl )
     {
-        m_pDataContainer = new AddonsOptions_Impl;
+        m_pImpl = std::make_shared<AddonsOptions_Impl>();
+        g_pAddonsOptions = m_pImpl;
     }
 }
 
-//  destructor
-
 AddonsOptions::~AddonsOptions()
 {
     // Global access, must be guarded (multithreading!)
     MutexGuard aGuard( GetOwnStaticMutex() );
-    // Decrease our refcount.
-    --m_nRefCount;
-    // If last instance was deleted ...
-    // we must destroy our static data container!
-    if( m_nRefCount <= 0 )
-    {
-        delete m_pDataContainer;
-        m_pDataContainer = nullptr;
-    }
+
+    m_pImpl.reset();
 }
 
 //  public method
@@ -1515,7 +1500,7 @@ AddonsOptions::~AddonsOptions()
 bool AddonsOptions::HasAddonsMenu() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->HasAddonsMenu();
+    return m_pImpl->HasAddonsMenu();
 }
 
 //  public method
@@ -1523,7 +1508,7 @@ bool AddonsOptions::HasAddonsMenu() const
 sal_Int32 AddonsOptions::GetAddonsToolBarCount() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetAddonsToolBarCount();
+    return m_pImpl->GetAddonsToolBarCount();
 }
 
 //  public method
@@ -1531,7 +1516,7 @@ sal_Int32 AddonsOptions::GetAddonsToolBarCount() const
 const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsMenu() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetAddonsMenu();
+    return m_pImpl->GetAddonsMenu();
 }
 
 //  public method
@@ -1539,7 +1524,7 @@ const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsMenu() cons
 const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsMenuBarPart() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetAddonsMenuBarPart();
+    return m_pImpl->GetAddonsMenuBarPart();
 }
 
 //  public method
@@ -1547,7 +1532,7 @@ const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsMenuBarPart
 const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsToolBarPart( sal_uInt32 nIndex ) const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetAddonsToolBarPart( nIndex );
+    return m_pImpl->GetAddonsToolBarPart( nIndex );
 }
 
 //  public method
@@ -1555,7 +1540,7 @@ const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsToolBarPart
 const OUString AddonsOptions::GetAddonsToolbarResourceName( sal_uInt32 nIndex ) const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetAddonsToolbarResourceName( nIndex );
+    return m_pImpl->GetAddonsToolbarResourceName( nIndex );
 }
 
 //  public method
@@ -1563,7 +1548,7 @@ const OUString AddonsOptions::GetAddonsToolbarResourceName( sal_uInt32 nIndex )
 const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsHelpMenu() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetAddonsHelpMenu();
+    return m_pImpl->GetAddonsHelpMenu();
 }
 
 //  public method
@@ -1571,7 +1556,7 @@ const Sequence< Sequence< PropertyValue > >& AddonsOptions::GetAddonsHelpMenu()
 const MergeMenuInstructionContainer& AddonsOptions::GetMergeMenuInstructions() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetMergeMenuInstructions();
+    return m_pImpl->GetMergeMenuInstructions();
 }
 
 //  public method
@@ -1581,14 +1566,14 @@ bool AddonsOptions::GetMergeToolbarInstructions(
     MergeToolbarInstructionContainer& rToolbarInstructions ) const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetMergeToolbarInstructions(
+    return m_pImpl->GetMergeToolbarInstructions(
         rToolbarName, rToolbarInstructions );
 }
 
 const MergeStatusbarInstructionContainer& AddonsOptions::GetMergeStatusbarInstructions() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetMergeStatusbarInstructions();
+    return m_pImpl->GetMergeStatusbarInstructions();
 }
 
 //  public method
@@ -1596,7 +1581,7 @@ const MergeStatusbarInstructionContainer& AddonsOptions::GetMergeStatusbarInstru
 Image AddonsOptions::GetImageFromURL( const OUString& aURL, bool bBig, bool bNoScale ) const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetImageFromURL( aURL, bBig, bNoScale );
+    return m_pImpl->GetImageFromURL( aURL, bBig, bNoScale );
 }
 
 //  public method
@@ -1628,10 +1613,10 @@ Mutex& AddonsOptions::GetOwnStaticMutex()
     return *pMutex;
 }
 
-IMPL_STATIC_LINK_NOARG_TYPED( AddonsOptions, Notify, void*, void )
+IMPL_LINK_NOARG_TYPED( AddonsOptions, Notify, void*, void )
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    m_pDataContainer->ReadConfigurationData();
+    m_pImpl->ReadConfigurationData();
 }
 
 }
diff --git a/include/framework/addonsoptions.hxx b/include/framework/addonsoptions.hxx
index 8241f32..e0c4013 100644
--- a/include/framework/addonsoptions.hxx
+++ b/include/framework/addonsoptions.hxx
@@ -27,6 +27,7 @@
 #include <com/sun/star/uno/Sequence.h>
 #include <com/sun/star/beans/PropertyValue.hpp>
 #include <framework/fwedllapi.h>
+#include <memory>
 
 /*-************************************************************************************************************
     @descr          The method GetAddonsMenu() returns a list of property values.
@@ -97,18 +98,6 @@ class AddonsOptions_Impl;
 class FWE_DLLPUBLIC AddonsOptions
 {
     public:
-
-        /*-****************************************************************************************************
-            @short      standard constructor and destructor
-            @descr      This will initialize an instance with default values.
-                        We implement these class with a refcount mechanism! Every instance of this class increase it
-                        at create and decrease it at delete time - but all instances use the same data container!
-                        He is implemented as a static member ...
-
-            @seealso    member m_nRefCount
-            @seealso    member m_pDataContainer
-        *//*-*****************************************************************************************************/
-
          AddonsOptions();
         ~AddonsOptions();
 
@@ -116,7 +105,6 @@ class FWE_DLLPUBLIC AddonsOptions
             @short      returns if an addons menu is available
             @descr      Call to retrieve if a addons menu is available
 
-
             @return     true if there is a menu otherwise false
         *//*-*****************************************************************************************************/
 
@@ -126,7 +114,6 @@ class FWE_DLLPUBLIC AddonsOptions
             @short      returns number of addons toolbars
             @descr      Call to retrieve the number of addons toolbars
 
-
             @return     number of addons toolbars
         *//*-*****************************************************************************************************/
         sal_Int32   GetAddonsToolBarCount() const ;
@@ -208,10 +195,8 @@ class FWE_DLLPUBLIC AddonsOptions
         Image GetImageFromURL( const OUString& aURL, bool bBig, bool bNoScale ) const;
         Image GetImageFromURL( const OUString& aURL, bool bBig ) const;
 
-
     //  private methods
 
-
         /*-****************************************************************************************************
             @short      return a reference to a static mutex
             @descr      These class is partially threadsafe (for de-/initialization only).
@@ -229,21 +214,10 @@ class FWE_DLLPUBLIC AddonsOptions
                         We create a static mutex only for one ime and use at different times.
             @return     A reference to a static mutex member.
         *//*-*****************************************************************************************************/
-        DECL_STATIC_LINK_TYPED( AddonsOptions, Notify, void*, void );
+        DECL_LINK_TYPED( Notify, void*, void );
 
     private:
-
-        /*Attention
-
-            Don't initialize these static members in these headers!
-            a) Double defined symbols will be detected ...
-            b) and unresolved externals exist at linking time.
-            Do it in your source only.
-         */
-
-        static AddonsOptions_Impl*  m_pDataContainer    ;
-        static sal_Int32            m_nRefCount         ;
-
+        std::shared_ptr<AddonsOptions_Impl>  m_pImpl;
 };
 
 }


More information about the Libreoffice-commits mailing list