namespace caf { //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- template caf::PdmPtrField::PdmPtrField(const DataTypePtr& fieldValue) { m_isResolved = true; m_fieldValue = fieldValue; if (m_fieldValue != NULL) m_fieldValue->addReferencingPtrField(this); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- template caf::PdmPtrField::~PdmPtrField() { if (!m_fieldValue.isNull()) m_fieldValue.rawPtr()->removeReferencingPtrField(this); m_fieldValue.setRawPtr(NULL); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- template void PdmPtrField::setValue(const DataTypePtr& fieldValue) { CAF_ASSERT(isInitializedByInitFieldMacro()); if (m_fieldValue) m_fieldValue->removeReferencingPtrField(this); m_fieldValue = fieldValue; if (m_fieldValue != NULL) m_fieldValue->addReferencingPtrField(this); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- template void PdmPtrField::setRawPtr(PdmObjectHandle* obj) { CAF_ASSERT(isInitializedByInitFieldMacro()); if (m_fieldValue.notNull()) m_fieldValue.rawPtr()->removeReferencingPtrField(this); m_fieldValue.setRawPtr(obj); if (m_fieldValue.notNull()) m_fieldValue.rawPtr()->addReferencingPtrField(this); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- template caf::PdmPtrField& PdmPtrField::operator=(const DataTypePtr & fieldValue) { CAF_ASSERT(isInitializedByInitFieldMacro()); if (m_fieldValue) m_fieldValue->removeReferencingPtrField(this); m_fieldValue = fieldValue; if (m_fieldValue != NULL) m_fieldValue->addReferencingPtrField(this); return *this; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- template caf::PdmPtrField& PdmPtrField::operator=(const FieldDataType & fieldValue) { CAF_ASSERT(isInitializedByInitFieldMacro()); if (m_fieldValue) m_fieldValue->removeReferencingPtrField(this); m_fieldValue = fieldValue; if (m_fieldValue != NULL) m_fieldValue->addReferencingPtrField(this); return *this; } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- template void PdmPtrField::ptrReferencedObjects(std::vector* objectsToFill) { if (m_fieldValue.rawPtr()) { objectsToFill->push_back(m_fieldValue.rawPtr()); } } } // End of namespace caf