swunolocking1: #i108161#: WeakReferenceHelper::operator=():

avoid creating a temporary WeakReferenceHelper for uno::Reference assignment.
 [according to callgrind this is 3 times faster]
This commit is contained in:
Michael Stahl
2010-01-08 22:22:08 +01:00
parent d89afea42e
commit 0aab9a4835
4 changed files with 31 additions and 8 deletions

View File

@@ -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

View File

@@ -383,4 +383,5 @@ UDK_3.6 { # OOo 3.0
UDK_3.7 { # OOo 3.3
global:
__1cEcppuLOWeakObjectbAdisposeWeakConnectionPoint6M_v_;
__1cDcomDsunEstarDunoTWeakReferenceHelper2G6Mrkn0DJReference4n0DKXInterface____r4_;
} UDK_3.6;

View File

@@ -377,5 +377,6 @@ UDK_3.5 { # OOo 3.0
UDK_3.6 { # OOo 3.3
global:
_ZN4cppu11OWeakObject26disposeWeakConnectionPointEv;
_ZN3com3sun4star3uno19WeakReferenceHelperaSERKNS2_9ReferenceINS2_10XInterfaceEEE;
} UDK_3.5;

View File

@@ -480,12 +480,21 @@ WeakReferenceHelper::WeakReferenceHelper(const WeakReferenceHelper& rWeakRef) SA
}
WeakReferenceHelper& WeakReferenceHelper::operator=(const WeakReferenceHelper& rWeakRef) SAL_THROW( () )
{
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
{
if (this != &rWeakRef)
{
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;
}