bool BaseData::setParent(BaseData* parent, const std::string& path) { // First remove previous parents while (!this->inputs.empty()) this->delInput(*this->inputs.begin()); if (parent && !validParent(parent)) { if (m_owner) { m_owner->serr << "Invalid Data link from " << (parent->m_owner ? parent->m_owner->getName() : std::string("?")) << "." << parent->getName() << " to " << m_owner->getName() << "." << getName() << m_owner->sendl; if (!this->getValueTypeInfo()->ValidInfo()) m_owner->serr << " Possible reason: destination Data " << getName() << " has an unknown type" << m_owner->sendl; if (!parent->getValueTypeInfo()->ValidInfo()) m_owner->serr << " Possible reason: source Data " << parent->getName() << " has an unknown type" << m_owner->sendl; } return false; } doSetParent(parent); if (!path.empty()) parentBaseData.set(parent, path); if (parent) { addInput(parent); BaseData::setDirtyValue(); if (!isCounterValid()) update(); m_counters[currentAspect()]++; m_isSets[currentAspect()] = true; } return true; }
void DDGNode::cleanDirty(const core::ExecParams* params) { bool& dirtyValue = dirtyFlags[currentAspect(params)].dirtyValue; if (dirtyValue) { dirtyValue = false; #ifdef SOFA_DDG_TRACE Base* owner = getOwner(); if (owner) owner->sout << "Data " << getName() << " has been updated." << owner->sendl; #endif for(DDGLinkIterator it=inputs.begin(params), itend=inputs.end(params); it != itend; ++it) (*it)->dirtyFlags[currentAspect(params)].dirtyOutputs = false; } }
void DDGNode::setDirtyOutputs(const core::ExecParams* params) { bool& dirtyOutputs = dirtyFlags[currentAspect(params)].dirtyOutputs; if (!dirtyOutputs) { dirtyOutputs = true; for(DDGLinkIterator it=outputs.begin(params), itend=outputs.end(params); it != itend; ++it) { (*it)->setDirtyValue(params); } } }
void DDGNode::setDirtyValue(const core::ExecParams* params) { bool& dirtyValue = dirtyFlags[currentAspect(params)].dirtyValue; if (!dirtyValue) { dirtyValue = true; #ifdef SOFA_DDG_TRACE // TRACE LOG Base* owner = getOwner(); if (owner) owner->sout << "Data " << getName() << " is now dirty." << owner->sendl; #endif setDirtyOutputs(params); } }
void DDGNode::cleanDirty(const core::ExecParams* params) { bool& dirtyValue = dirtyFlags[currentAspect(params)].dirtyValue; if (dirtyValue) { dirtyValue = false; #ifdef SOFA_DDG_TRACE Base* owner = getOwner(); if (owner) owner->sout << "Data " << getName() << " has been updated." << owner->sendl; #endif cleanDirtyOutputsOfInputs(params); } }
void DDGNode::cleanDirtyOutputsOfInputs(const core::ExecParams* params) { for(DDGLinkIterator it=inputs.begin(params), itend=inputs.end(params); it != itend; ++it) (*it)->dirtyFlags[currentAspect(params)].dirtyOutputs = false; }