[Libreoffice-commits] core.git: include/svl svl/source sw/inc

Kohei Yoshida kohei.yoshida at collabora.com
Wed Dec 3 21:49:40 PST 2014


 include/svl/SfxBroadcaster.hxx       |   16 +-----
 include/svl/lstner.hxx               |   14 +----
 svl/source/notify/SfxBroadcaster.cxx |   88 +++++++++++++++++++++--------------
 svl/source/notify/lstner.cxx         |   50 +++++++++++++------
 sw/inc/unotxdoc.hxx                  |    2 
 5 files changed, 99 insertions(+), 71 deletions(-)

New commits:
commit 4eb381147bd0c9c7a48f86de0e3ae1d4c3bbe12f
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date:   Wed Dec 3 23:19:39 2014 -0500

    pIimplize SfxBroadcaster and SfxListener.
    
    Change-Id: I0d1d73402f11cc61ea9e7629bea34e24c22f5beb

diff --git a/include/svl/SfxBroadcaster.hxx b/include/svl/SfxBroadcaster.hxx
index a29a5c0..56a3357 100644
--- a/include/svl/SfxBroadcaster.hxx
+++ b/include/svl/SfxBroadcaster.hxx
@@ -21,7 +21,6 @@
 
 #include <svl/svldllapi.h>
 #include <tools/rtti.hxx>
-#include <vector>
 
 class SfxListener;
 class SfxHint;
@@ -29,11 +28,8 @@ class SfxBroadcasterTest;
 
 class SVL_DLLPUBLIC SfxBroadcaster
 {
-    typedef std::vector<SfxListener*> SfxListenerArr_Impl;
-
-    /** Contains the positions of removed listeners. */
-    std::vector<size_t>     m_RemovedPositions;
-    SfxListenerArr_Impl     m_Listeners;
+    struct Impl;
+    Impl* mpImpl;
 
 private:
     void                    AddListener( SfxListener& rListener );
@@ -60,16 +56,12 @@ public:
     /** Get the size of the internally stored vector.
      * Use it to iterate over all listeners.
      */
-    size_t                  GetSizeOfVector() const {
-        return m_Listeners.size();
-    }
+    size_t GetSizeOfVector() const;
 
     /** Get a listener by its position in the internally stored vector.
      * Note that this method may return NULL
      */
-    SfxListener*            GetListener( size_t nNo ) const {
-        return m_Listeners[nNo];
-    }
+    SfxListener* GetListener( size_t nNo ) const;
 
     friend class SfxListener;
     friend class ::SfxBroadcasterTest;
diff --git a/include/svl/lstner.hxx b/include/svl/lstner.hxx
index 0bdf6e2..8792c01 100644
--- a/include/svl/lstner.hxx
+++ b/include/svl/lstner.hxx
@@ -21,21 +21,17 @@
 
 #include <svl/svldllapi.h>
 #include <tools/rtti.hxx>
-#include <deque>
 
 class SfxBroadcaster;
 class SfxHint;
 
-typedef std::deque<SfxBroadcaster*> SfxBroadcasterArr_Impl;
-
 #define SFX_NOTIFY( rBC, rBCT, rHint, rHintT ) \
         Notify( rBC, rHint )
 
-
-
 class SVL_DLLPUBLIC SfxListener
 {
-    SfxBroadcasterArr_Impl aBCs;
+    struct Impl;
+    Impl* mpImpl;
 
 private:
     const SfxListener&  operator=(const SfxListener &); // n.i., ist verboten
@@ -52,10 +48,8 @@ public:
     void                EndListeningAll();
     bool                IsListening( SfxBroadcaster& rBroadcaster ) const;
 
-    sal_uInt16              GetBroadcasterCount() const
-                        { return aBCs.size(); }
-    SfxBroadcaster*     GetBroadcasterJOE( sal_uInt16 nNo ) const
-                        { return aBCs[nNo]; }
+    sal_uInt16 GetBroadcasterCount() const;
+    SfxBroadcaster* GetBroadcasterJOE( sal_uInt16 nNo ) const;
 
     virtual void        Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
 
diff --git a/svl/source/notify/SfxBroadcaster.cxx b/svl/source/notify/SfxBroadcaster.cxx
index f7ae252..37527e4 100644
--- a/svl/source/notify/SfxBroadcaster.cxx
+++ b/svl/source/notify/SfxBroadcaster.cxx
@@ -17,29 +17,38 @@
  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
  */
 
-#include <assert.h>
+#include <svl/SfxBroadcaster.hxx>
 
 #include <svl/hint.hxx>
 #include <svl/smplhint.hxx>
 #include <svl/lstner.hxx>
+#include <tools/debug.hxx>
 
-#include <svl/SfxBroadcaster.hxx>
 #include <algorithm>
-#include <tools/debug.hxx>
+#include <cassert>
+#include <vector>
 
 TYPEINIT0(SfxBroadcaster);
 
+typedef std::vector<SfxListener*> SfxListenerArr_Impl;
+
+struct SfxBroadcaster::Impl
+{
+    /** Contains the positions of removed listeners. */
+    std::vector<size_t>     m_RemovedPositions;
+    SfxListenerArr_Impl     m_Listeners;
+};
+
 // broadcast immediately
 
 void SfxBroadcaster::Broadcast( const SfxHint &rHint )
 {
     // notify all registered listeners exactly once
-    for (size_t n = 0; n < m_Listeners.size(); ++n)
+    for (size_t i = 0; i < mpImpl->m_Listeners.size(); ++i)
     {
-        SfxListener *const pListener = m_Listeners[n];
-        if (pListener) {
+        SfxListener *const pListener = mpImpl->m_Listeners[i];
+        if (pListener)
             pListener->Notify( *this, rHint );
-        }
     }
 }
 
@@ -50,19 +59,20 @@ SfxBroadcaster::~SfxBroadcaster()
     Broadcast( SfxSimpleHint(SFX_HINT_DYING) );
 
     // remove all still registered listeners
-    for (size_t nPos = 0; nPos < m_Listeners.size(); ++nPos)
+    for (size_t i = 0; i < mpImpl->m_Listeners.size(); ++i)
     {
-        SfxListener *const pListener = m_Listeners[nPos];
-        if (pListener) {
+        SfxListener *const pListener = mpImpl->m_Listeners[i];
+        if (pListener)
             pListener->RemoveBroadcaster_Impl(*this);
-        }
     }
+
+    delete mpImpl;
 }
 
 
 // simple ctor of class SfxBroadcaster
 
-SfxBroadcaster::SfxBroadcaster()
+SfxBroadcaster::SfxBroadcaster() : mpImpl(new Impl)
 {
 }
 
@@ -70,14 +80,13 @@ SfxBroadcaster::SfxBroadcaster()
 // copy ctor of class SfxBroadcaster
 
 
-SfxBroadcaster::SfxBroadcaster( const SfxBroadcaster &rBC )
+SfxBroadcaster::SfxBroadcaster( const SfxBroadcaster &rBC ) : mpImpl(new Impl)
 {
-    for (size_t n = 0; n < rBC.m_Listeners.size(); ++n)
+    for (size_t i = 0; i < rBC.mpImpl->m_Listeners.size(); ++i)
     {
-        SfxListener *const pListener = rBC.m_Listeners[n];
-        if (pListener) {
+        SfxListener *const pListener = rBC.mpImpl->m_Listeners[i];
+        if (pListener)
             pListener->StartListening( *this );
-        }
     }
 }
 
@@ -87,14 +96,16 @@ SfxBroadcaster::SfxBroadcaster( const SfxBroadcaster &rBC )
 void SfxBroadcaster::AddListener( SfxListener& rListener )
 {
     DBG_TESTSOLARMUTEX();
-    if (m_RemovedPositions.empty()) {
-        m_Listeners.push_back(&rListener);
+    if (mpImpl->m_RemovedPositions.empty())
+    {
+        mpImpl->m_Listeners.push_back(&rListener);
     }
-    else {
-        size_t targetPosition = m_RemovedPositions.back();
-        m_RemovedPositions.pop_back();
-        assert(m_Listeners[targetPosition] == NULL);
-        m_Listeners[targetPosition] = &rListener;
+    else
+    {
+        size_t targetPosition = mpImpl->m_RemovedPositions.back();
+        mpImpl->m_RemovedPositions.pop_back();
+        assert(mpImpl->m_Listeners[targetPosition] == NULL);
+        mpImpl->m_Listeners[targetPosition] = &rListener;
     }
 }
 
@@ -110,12 +121,11 @@ void SfxBroadcaster::ListenersGone()
 
 void SfxBroadcaster::Forward(SfxBroadcaster& rBC, const SfxHint& rHint)
 {
-    for (size_t i = 0; i < m_Listeners.size(); ++i)
+    for (size_t i = 0; i < mpImpl->m_Listeners.size(); ++i)
     {
-        SfxListener *const pListener = m_Listeners[i];
-        if (pListener) {
+        SfxListener *const pListener = mpImpl->m_Listeners[i];
+        if (pListener)
             pListener->Notify( rBC, rHint );
-        }
     }
 }
 
@@ -126,13 +136,13 @@ void SfxBroadcaster::RemoveListener( SfxListener& rListener )
 {
     DBG_TESTSOLARMUTEX();
     SfxListenerArr_Impl::iterator aIter = std::find(
-            m_Listeners.begin(), m_Listeners.end(), &rListener);
-    assert(aIter != m_Listeners.end()); // "RemoveListener: Listener unknown"
+            mpImpl->m_Listeners.begin(), mpImpl->m_Listeners.end(), &rListener);
+    assert(aIter != mpImpl->m_Listeners.end()); // "RemoveListener: Listener unknown"
     // DO NOT erase the listener, set the pointer to 0
     // because the current continuation may contain this->Broadcast
     *aIter = 0;
-    size_t positionOfRemovedElement = std::distance(m_Listeners.begin(), aIter);
-    m_RemovedPositions.push_back(positionOfRemovedElement);
+    size_t positionOfRemovedElement = std::distance(mpImpl->m_Listeners.begin(), aIter);
+    mpImpl->m_RemovedPositions.push_back(positionOfRemovedElement);
 
     if ( !HasListeners() )
         ListenersGone();
@@ -145,8 +155,18 @@ bool SfxBroadcaster::HasListeners() const
 
 size_t SfxBroadcaster::GetListenerCount() const
 {
-    assert(m_Listeners.size() >= m_RemovedPositions.size());
-    return m_Listeners.size() - m_RemovedPositions.size();
+    assert(mpImpl->m_Listeners.size() >= mpImpl->m_RemovedPositions.size());
+    return mpImpl->m_Listeners.size() - mpImpl->m_RemovedPositions.size();
+}
+
+size_t SfxBroadcaster::GetSizeOfVector() const
+{
+    return mpImpl->m_Listeners.size();
+}
+
+SfxListener* SfxBroadcaster::GetListener( size_t nNo ) const
+{
+    return mpImpl->m_Listeners[nNo];
 }
 
 
diff --git a/svl/source/notify/lstner.cxx b/svl/source/notify/lstner.cxx
index bef588a..4c3dc07 100644
--- a/svl/source/notify/lstner.cxx
+++ b/svl/source/notify/lstner.cxx
@@ -24,21 +24,29 @@
 
 #include <algorithm>
 #include <cassert>
+#include <deque>
 
 TYPEINIT0(SfxListener);
 
+typedef std::deque<SfxBroadcaster*> SfxBroadcasterArr_Impl;
+
+struct SfxListener::Impl
+{
+    SfxBroadcasterArr_Impl maBCs;
+};
+
 // simple ctor of class SfxListener
 
-SfxListener::SfxListener()
+SfxListener::SfxListener() : mpImpl(new Impl)
 {
 }
 
 // copy ctor of class SfxListener
 
-SfxListener::SfxListener( const SfxListener &rListener )
+SfxListener::SfxListener( const SfxListener &rListener ) : mpImpl(new Impl)
 {
-    for ( sal_uInt16 n = 0; n < rListener.aBCs.size(); ++n )
-        StartListening( *rListener.aBCs[n] );
+    for ( sal_uInt16 n = 0; n < rListener.mpImpl->maBCs.size(); ++n )
+        StartListening( *rListener.mpImpl->maBCs[n] );
 }
 
 // unregisters the SfxListener from its SfxBroadcasters
@@ -46,11 +54,13 @@ SfxListener::SfxListener( const SfxListener &rListener )
 SfxListener::~SfxListener()
 {
     // unregister at all remaining broadcasters
-    for ( sal_uInt16 nPos = 0; nPos < aBCs.size(); ++nPos )
+    for ( sal_uInt16 nPos = 0; nPos < mpImpl->maBCs.size(); ++nPos )
     {
-        SfxBroadcaster *pBC = aBCs[nPos];
+        SfxBroadcaster *pBC = mpImpl->maBCs[nPos];
         pBC->RemoveListener(*this);
     }
+
+    delete mpImpl;
 }
 
 
@@ -58,7 +68,7 @@ SfxListener::~SfxListener()
 
 void SfxListener::RemoveBroadcaster_Impl( SfxBroadcaster& rBroadcaster )
 {
-    aBCs.erase( std::find( aBCs.begin(), aBCs.end(), &rBroadcaster ) );
+    mpImpl->maBCs.erase( std::find( mpImpl->maBCs.begin(), mpImpl->maBCs.end(), &rBroadcaster ) );
 }
 
 
@@ -69,7 +79,7 @@ void SfxListener::StartListening( SfxBroadcaster& rBroadcaster, bool bPreventDup
     if ( !bPreventDups || !IsListening( rBroadcaster ) )
     {
         rBroadcaster.AddListener(*this);
-        aBCs.push_back( &rBroadcaster );
+        mpImpl->maBCs.push_back( &rBroadcaster );
 
         assert(IsListening(rBroadcaster) && "StartListening failed");
     }
@@ -82,13 +92,13 @@ void SfxListener::EndListening( SfxBroadcaster& rBroadcaster, bool bAllDups )
 {
     do
     {
-        SfxBroadcasterArr_Impl::iterator it = std::find( aBCs.begin(), aBCs.end(), &rBroadcaster );
-        if ( it == aBCs.end() )
+        SfxBroadcasterArr_Impl::iterator it = std::find( mpImpl->maBCs.begin(), mpImpl->maBCs.end(), &rBroadcaster );
+        if ( it == mpImpl->maBCs.end() )
         {
             break;
         }
         rBroadcaster.RemoveListener(*this);
-        aBCs.erase( it );
+        mpImpl->maBCs.erase( it );
     }
     while ( bAllDups );
 }
@@ -99,18 +109,28 @@ void SfxListener::EndListening( SfxBroadcaster& rBroadcaster, bool bAllDups )
 void SfxListener::EndListeningAll()
 {
     // Attention: when optimizing this: Respect sideffects of RemoveListener!
-    while ( !aBCs.empty() )
+    while ( !mpImpl->maBCs.empty() )
     {
-        SfxBroadcaster *pBC = aBCs.front();
+        SfxBroadcaster *pBC = mpImpl->maBCs.front();
         pBC->RemoveListener(*this);
-        aBCs.pop_front();
+        mpImpl->maBCs.pop_front();
     }
 }
 
 
 bool SfxListener::IsListening( SfxBroadcaster& rBroadcaster ) const
 {
-    return aBCs.end() != std::find( aBCs.begin(), aBCs.end(), &rBroadcaster );
+    return mpImpl->maBCs.end() != std::find( mpImpl->maBCs.begin(), mpImpl->maBCs.end(), &rBroadcaster );
+}
+
+sal_uInt16 SfxListener::GetBroadcasterCount() const
+{
+    return mpImpl->maBCs.size();
+}
+
+SfxBroadcaster* SfxListener::GetBroadcasterJOE( sal_uInt16 nNo ) const
+{
+    return mpImpl->maBCs[nNo];
 }
 
 
diff --git a/sw/inc/unotxdoc.hxx b/sw/inc/unotxdoc.hxx
index a48a8f3..de1507b 100644
--- a/sw/inc/unotxdoc.hxx
+++ b/sw/inc/unotxdoc.hxx
@@ -72,6 +72,8 @@
 #include <unobaseclass.hxx>
 #include <viewopt.hxx>
 
+#include <deque>
+
 #define __IFC32 Ifc1, Ifc2, Ifc3, Ifc4, Ifc5, Ifc6, Ifc7, Ifc8, Ifc9, Ifc10, Ifc11, Ifc12, Ifc13, Ifc14, Ifc15, Ifc16, \
 Ifc17, Ifc18, Ifc19, Ifc20, Ifc21, Ifc22, Ifc23, Ifc24, Ifc25, Ifc26, Ifc27, Ifc28, Ifc29, Ifc30, Ifc31, Ifc32
 


More information about the Libreoffice-commits mailing list