[Libreoffice-commits] core.git: include/connectivity

Caolán McNamara caolanm at redhat.com
Tue Jul 8 08:50:56 PDT 2014


 include/connectivity/CommonTools.hxx |   30 +++++++++++++++++++++++++-----
 1 file changed, 25 insertions(+), 5 deletions(-)

New commits:
commit 6f092beb46796b8a6cc94b5f4cbe509bf541fae2
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Tue Jul 8 16:43:16 2014 +0100

    Revert "use SimpleReferenceObject in connectivity module"
    
    turns out to be a bit tangled wrt copy construction
    
    This reverts commit 48cc4f1b8cf06a8e56c12e659a71f72d609568cd.

diff --git a/include/connectivity/CommonTools.hxx b/include/connectivity/CommonTools.hxx
index 4199c9c..d099905 100644
--- a/include/connectivity/CommonTools.hxx
+++ b/include/connectivity/CommonTools.hxx
@@ -37,7 +37,6 @@
 #include <com/sun/star/uno/XComponentContext.hpp>
 #include <connectivity/dbtoolsdllapi.hxx>
 #include <cppuhelper/supportsservice.hxx>
-#include <salhelper/simplereferenceobject.hxx>
 
 namespace com { namespace sun { namespace star { namespace util {
     struct Date;
@@ -64,18 +63,19 @@ namespace connectivity
     typedef std::map<OUString,OSQLTable,comphelper::UStringMixLess> OSQLTables;
 
     // class ORefVector allows reference counting on a std::vector
-    template< class VectorVal > class ORefVector : public salhelper::SimpleReferenceObject
+    template< class VectorVal > class ORefVector
     {
         std::vector< VectorVal > m_vector;
+        oslInterlockedCount         m_refCount;
 
     protected:
         virtual ~ORefVector(){}
     public:
         typedef std::vector< VectorVal > Vector;
 
-        ORefVector() {}
-        ORefVector(size_t _st) : m_vector(_st) {}
-        ORefVector(const ORefVector& _rRH) : m_vector(_rRH.m_vector)
+        ORefVector() : m_refCount(0) {}
+        ORefVector(size_t _st) : m_vector(_st) , m_refCount(0) {}
+        ORefVector(const ORefVector& _rRH) : m_vector(_rRH.m_vector),m_refCount(0)
         {
         }
         ORefVector& operator=(const ORefVector& _rRH)
@@ -89,6 +89,26 @@ namespace connectivity
 
         std::vector< VectorVal > & get() { return m_vector; }
         std::vector< VectorVal > const & get() const { return m_vector; }
+
+        inline static void * SAL_CALL operator new( size_t nSize )
+            { return ::rtl_allocateMemory( nSize ); }
+        inline static void SAL_CALL operator delete( void * pMem )
+            { ::rtl_freeMemory( pMem ); }
+        inline static void * SAL_CALL operator new( size_t, void * pMem )
+            { return pMem; }
+        inline static void SAL_CALL operator delete( void *, void * )
+            {}
+
+        void acquire()
+        {
+            osl_atomic_increment( &m_refCount );
+        }
+        void release()
+        {
+            if (! osl_atomic_decrement( &m_refCount ))
+                delete this;
+        }
+
     };
 
     // class ORowVector incudes refcounting and initialze himself


More information about the Libreoffice-commits mailing list