include/unotools/compatibility.hxx       |   37 -----------------
 unotools/source/config/compatibility.cxx |   67 ++++++++++---------------------
 2 files changed, 24 insertions(+), 80 deletions(-)

New commits:
commit decc3bfae82ddde724b351d8c4618436d45e43fb
Author: Xisco Fauli <aniste...@gmail.com>
Date:   Tue Jun 14 01:53:10 2016 +0200

    tdf#89329: use shared_ptr for pImpl in compatibility...
    
    ... and remove some, at least from my point of view,
    useless comments
    
    Change-Id: Id97c90dd7764ae4569468abc73c79ae9b2a56e75
    Reviewed-on: https://gerrit.libreoffice.org/26235
    Tested-by: Jenkins <c...@libreoffice.org>
    Reviewed-by: Noel Grandin <noelgran...@gmail.com>

diff --git a/include/unotools/compatibility.hxx 
b/include/unotools/compatibility.hxx
index 85c88b8..23a6367 100644
--- a/include/unotools/compatibility.hxx
+++ b/include/unotools/compatibility.hxx
@@ -25,8 +25,7 @@
 #include <com/sun/star/uno/Sequence.h>
 #include <com/sun/star/beans/PropertyValue.hpp>
 #include <unotools/options.hxx>
-
-//  types, enums, ...
+#include <memory>
 
 enum CompatibilityOptions
 {
@@ -84,24 +83,7 @@ class SvtCompatibilityOptions_Impl;
 
 class UNOTOOLS_DLLPUBLIC SvtCompatibilityOptions: public utl::detail::Options
 {
-
-    //  public methods
-
     public:
-
-        //  constructor / destructor
-
-        
/*-****************************************************************************************************
-            @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
-        
*//*-*****************************************************************************************************/
-
          SvtCompatibilityOptions();
         virtual ~SvtCompatibilityOptions();
 
@@ -164,8 +146,6 @@ class UNOTOOLS_DLLPUBLIC SvtCompatibilityOptions: public 
utl::detail::Options
         bool        IsConsiderWrappingStyle() const;
         bool        IsExpandWordSpace() const;
 
-    //  private methods
-
     private:
 
         
/*-****************************************************************************************************
@@ -178,20 +158,7 @@ class UNOTOOLS_DLLPUBLIC SvtCompatibilityOptions: public 
utl::detail::Options
 
         UNOTOOLS_DLLPRIVATE static ::osl::Mutex& GetOwnStaticMutex();
 
-    //  private member
-
-    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 SvtCompatibilityOptions_Impl*    m_pDataContainer;
-        static sal_Int32                        m_nRefCount;
+        std::shared_ptr<SvtCompatibilityOptions_Impl>    m_pImpl;
 
 };      // class SvtCompatibilityOptions
 
diff --git a/unotools/source/config/compatibility.cxx 
b/unotools/source/config/compatibility.cxx
index 3cc47f6..0d2fa73 100644
--- a/unotools/source/config/compatibility.cxx
+++ b/unotools/source/config/compatibility.cxx
@@ -580,61 +580,40 @@ void 
SvtCompatibilityOptions_Impl::impl_ExpandPropertyNames(
     }
 }
 
-//  initialize static member
-//  DON'T DO IT IN YOUR HEADER!
-//  see definition for further information
-
-SvtCompatibilityOptions_Impl*   SvtCompatibilityOptions::m_pDataContainer = 
nullptr;
-sal_Int32                       SvtCompatibilityOptions::m_nRefCount = 0;
-
-//  constructor
+std::weak_ptr<SvtCompatibilityOptions_Impl>    m_pOptions;
 
 SvtCompatibilityOptions::SvtCompatibilityOptions()
 {
     // 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 = m_pOptions.lock();
+    if( !m_pImpl )
     {
-        m_pDataContainer = new SvtCompatibilityOptions_Impl;
+        m_pImpl = std::make_shared<SvtCompatibilityOptions_Impl>();
+        m_pOptions = m_pImpl;
         ItemHolder1::holdConfigItem(E_COMPATIBILITY);
     }
 }
 
-//  destructor
-
 SvtCompatibilityOptions::~SvtCompatibilityOptions()
 {
     // 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
-
 void SvtCompatibilityOptions::Clear()
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    m_pDataContainer->Clear();
+    m_pImpl->Clear();
 }
 
 void SvtCompatibilityOptions::SetDefault( const OUString & sName, bool bValue )
 {
-    m_pDataContainer->SetDefault( sName, bValue );
+    m_pImpl->SetDefault( sName, bValue );
 }
 
-//  public method
-
 void SvtCompatibilityOptions::AppendItem( const OUString& sName,
                                           const OUString& sModule,
                                           bool bUsePrtMetrics,
@@ -651,7 +630,7 @@ void SvtCompatibilityOptions::AppendItem( const OUString& 
sName,
                                           bool bProtectForm )
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    m_pDataContainer->AppendItem(
+    m_pImpl->AppendItem(
         sName, sModule, bUsePrtMetrics, bAddSpacing,
         bAddSpacingAtPages, bUseOurTabStops, bNoExtLeading,
         bUseLineSpacing, bAddTableSpacing, bUseObjPos,
@@ -661,73 +640,73 @@ void SvtCompatibilityOptions::AppendItem( const OUString& 
sName,
 bool SvtCompatibilityOptions::IsUsePrtDevice() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsUsePrtDevice();
+    return m_pImpl->IsUsePrtDevice();
 }
 
 bool SvtCompatibilityOptions::IsAddSpacing() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsAddSpacing();
+    return m_pImpl->IsAddSpacing();
 }
 
 bool SvtCompatibilityOptions::IsAddSpacingAtPages() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsAddSpacingAtPages();
+    return m_pImpl->IsAddSpacingAtPages();
 }
 
 bool SvtCompatibilityOptions::IsUseOurTabStops() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsUseOurTabStops();
+    return m_pImpl->IsUseOurTabStops();
 }
 
 bool SvtCompatibilityOptions::IsNoExtLeading() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsNoExtLeading();
+    return m_pImpl->IsNoExtLeading();
 }
 
 bool SvtCompatibilityOptions::IsUseLineSpacing() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsUseLineSpacing();
+    return m_pImpl->IsUseLineSpacing();
 }
 
 bool SvtCompatibilityOptions::IsAddTableSpacing() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsAddTableSpacing();
+    return m_pImpl->IsAddTableSpacing();
 }
 
 bool SvtCompatibilityOptions::IsUseObjectPositioning() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsUseObjPos();
+    return m_pImpl->IsUseObjPos();
 }
 
 bool SvtCompatibilityOptions::IsUseOurTextWrapping() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsUseOurTextWrapping();
+    return m_pImpl->IsUseOurTextWrapping();
 }
 
 bool SvtCompatibilityOptions::IsConsiderWrappingStyle() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsConsiderWrappingStyle();
+    return m_pImpl->IsConsiderWrappingStyle();
 }
 
 bool SvtCompatibilityOptions::IsExpandWordSpace() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->IsExpandWordSpace();
+    return m_pImpl->IsExpandWordSpace();
 }
 
 Sequence< Sequence< PropertyValue > > SvtCompatibilityOptions::GetList() const
 {
     MutexGuard aGuard( GetOwnStaticMutex() );
-    return m_pDataContainer->GetList();
+    return m_pImpl->GetList();
 }
 
 namespace
@@ -735,8 +714,6 @@ namespace
     class theCompatibilityOptionsMutex : public rtl::Static<osl::Mutex, 
theCompatibilityOptionsMutex>{};
 }
 
-//  private method
-
 Mutex& SvtCompatibilityOptions::GetOwnStaticMutex()
 {
     return theCompatibilityOptionsMutex::get();
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to