mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Performance: Cache the uiCapability to costly dynamic_cast
This commit is contained in:
@@ -13,8 +13,9 @@ namespace caf
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
PdmObjectHandle::PdmObjectHandle()
|
||||
{
|
||||
m_parentField = nullptr;
|
||||
m_isDeletable = false;
|
||||
m_parentField = nullptr;
|
||||
m_isDeletable = false;
|
||||
m_uiCapability = nullptr;
|
||||
|
||||
m_isInsideInitAfterRead = false;
|
||||
}
|
||||
@@ -146,7 +147,8 @@ void PdmObjectHandle::removeReferencingPtrField( PdmFieldHandle* fieldReferringT
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void PdmObjectHandle::prepareForDelete()
|
||||
{
|
||||
m_parentField = nullptr;
|
||||
m_parentField = nullptr;
|
||||
m_uiCapability = nullptr;
|
||||
|
||||
for ( size_t i = 0; i < m_capabilities.size(); ++i )
|
||||
{
|
||||
|
||||
@@ -164,6 +164,8 @@ private:
|
||||
// Use friend class to avoid public noise
|
||||
friend class PdmXmlObjectHandle;
|
||||
bool m_isInsideInitAfterRead;
|
||||
|
||||
mutable PdmUiObjectHandle* m_uiCapability;
|
||||
};
|
||||
} // namespace caf
|
||||
|
||||
|
||||
@@ -24,9 +24,8 @@ PdmUiObjectHandle::PdmUiObjectHandle( PdmObjectHandle* owner, bool giveOwnership
|
||||
PdmUiObjectHandle* uiObj( const PdmObjectHandle* obj )
|
||||
{
|
||||
if ( !obj ) return nullptr;
|
||||
PdmUiObjectHandle* uiObject = obj->capability<PdmUiObjectHandle>();
|
||||
CAF_ASSERT( uiObject );
|
||||
return uiObject;
|
||||
|
||||
return obj->uiCapability();
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -232,10 +231,16 @@ void PdmUiObjectHandle::updateUiIconFromToggleField()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
PdmUiObjectHandle* PdmObjectHandle::uiCapability() const
|
||||
{
|
||||
PdmUiObjectHandle* uiField = capability<PdmUiObjectHandle>();
|
||||
CAF_ASSERT( uiField );
|
||||
if ( !m_uiCapability )
|
||||
{
|
||||
// Cache the ui capability for performance reasons
|
||||
auto uiField = capability<PdmUiObjectHandle>();
|
||||
CAF_ASSERT( uiField );
|
||||
|
||||
return uiField;
|
||||
m_uiCapability = uiField;
|
||||
}
|
||||
|
||||
return m_uiCapability;
|
||||
}
|
||||
|
||||
} // End namespace caf
|
||||
|
||||
Reference in New Issue
Block a user