summaryrefslogtreecommitdiff
path: root/cppuhelper
diff options
context:
space:
mode:
authorMichael Stahl <mst@openoffice.org>2010-01-08 22:22:08 +0100
committerMichael Stahl <mst@openoffice.org>2010-01-08 22:22:08 +0100
commit0aab9a48358f905de8d65568e5f32e8d36d6021c (patch)
tree14ec4d8eff21f287375e79604e198adf4df388b9 /cppuhelper
parentd89afea42e33bb771cd9a31fbdc71b94ba4d8679 (diff)
swunolocking1: #i108161#: WeakReferenceHelper::operator=():
avoid creating a temporary WeakReferenceHelper for uno::Reference assignment. [according to callgrind this is 3 times faster]
Diffstat (limited to 'cppuhelper')
-rw-r--r--cppuhelper/inc/cppuhelper/weakref.hxx21
-rwxr-xr-xcppuhelper/source/cc5_solaris_sparc.map1
-rw-r--r--cppuhelper/source/gcc3.map1
-rw-r--r--cppuhelper/source/weak.cxx16
4 files changed, 31 insertions, 8 deletions
diff --git a/cppuhelper/inc/cppuhelper/weakref.hxx b/cppuhelper/inc/cppuhelper/weakref.hxx
index 01a4c7c6e0df..a8506f036f21 100644
--- a/cppuhelper/inc/cppuhelper/weakref.hxx
+++ b/cppuhelper/inc/cppuhelper/weakref.hxx
@@ -79,13 +79,15 @@ public:
*/
WeakReferenceHelper & SAL_CALL operator = ( const WeakReferenceHelper & rWeakRef ) SAL_THROW( () );
- /** Releases this reference and takes over hard reference xInt. If the implementation behind
- xInt does not support XWeak or XInt is null, than this reference is null.
+ /** Releases this reference and takes over hard reference xInt.
+ If the implementation behind xInt does not support XWeak
+ or XInt is null, then this reference is null.
@param xInt another hard reference
*/
- inline WeakReferenceHelper & SAL_CALL operator = ( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > & xInt ) SAL_THROW( () )
- { return operator = ( WeakReferenceHelper( xInt ) ); }
+ WeakReferenceHelper & SAL_CALL operator = (
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::uno::XInterface > & xInt ) SAL_THROW( () );
/** Returns true if both weak refs reference to the same object.
@@ -135,6 +137,17 @@ public:
: WeakReferenceHelper( rRef )
{}
+ /** Releases this reference and takes over hard reference xInt.
+ If the implementation behind xInt does not support XWeak
+ or XInt is null, then this reference is null.
+
+ @param xInt another hard reference
+ */
+ WeakReference & SAL_CALL operator = (
+ const ::com::sun::star::uno::Reference< interface_type > & xInt )
+ SAL_THROW( () )
+ { WeakReferenceHelper::operator=(xInt); return *this; }
+
/** Gets a hard reference to the object.
@return hard reference or null, if the weakly referenced interface has gone
diff --git a/cppuhelper/source/cc5_solaris_sparc.map b/cppuhelper/source/cc5_solaris_sparc.map
index 0961c6830d1f..0cda7be0bb7d 100755
--- a/cppuhelper/source/cc5_solaris_sparc.map
+++ b/cppuhelper/source/cc5_solaris_sparc.map
@@ -383,4 +383,5 @@ UDK_3.6 { # OOo 3.0
UDK_3.7 { # OOo 3.3
global:
__1cEcppuLOWeakObjectbAdisposeWeakConnectionPoint6M_v_;
+ __1cDcomDsunEstarDunoTWeakReferenceHelper2G6Mrkn0DJReference4n0DKXInterface____r4_;
} UDK_3.6;
diff --git a/cppuhelper/source/gcc3.map b/cppuhelper/source/gcc3.map
index 9348e91525c0..6b6bac67d8f7 100644
--- a/cppuhelper/source/gcc3.map
+++ b/cppuhelper/source/gcc3.map
@@ -377,5 +377,6 @@ UDK_3.5 { # OOo 3.0
UDK_3.6 { # OOo 3.3
global:
_ZN4cppu11OWeakObject26disposeWeakConnectionPointEv;
+ _ZN3com3sun4star3uno19WeakReferenceHelperaSERKNS2_9ReferenceINS2_10XInterfaceEEE;
} UDK_3.5;
diff --git a/cppuhelper/source/weak.cxx b/cppuhelper/source/weak.cxx
index b518d2526e3b..1901610d40b7 100644
--- a/cppuhelper/source/weak.cxx
+++ b/cppuhelper/source/weak.cxx
@@ -481,11 +481,20 @@ WeakReferenceHelper::WeakReferenceHelper(const WeakReferenceHelper& rWeakRef) SA
WeakReferenceHelper& WeakReferenceHelper::operator=(const WeakReferenceHelper& rWeakRef) SAL_THROW( () )
{
- try
+ if (this == &rWeakRef)
{
- if (this != &rWeakRef)
+ return *this;
+ }
+ Reference< XInterface > xInt( rWeakRef.get() );
+ return operator = ( xInt );
+}
+
+WeakReferenceHelper & SAL_CALL
+WeakReferenceHelper::operator= (const Reference< XInterface > & xInt)
+SAL_THROW( () )
+{
+ try
{
- Reference< XInterface > xInt( rWeakRef.get() );
if (m_pImpl)
{
if (m_pImpl->m_XWeakConnectionPoint.is())
@@ -502,7 +511,6 @@ WeakReferenceHelper& WeakReferenceHelper::operator=(const WeakReferenceHelper& r
m_pImpl->acquire();
}
}
- }
catch (RuntimeException &) { OSL_ASSERT( 0 ); } // assert here, but no unexpected()
return *this;
}