KstDataObjectPtr KstPlugin::makeDuplicate(KstDataObjectDataObjectMap& duplicatedMap) { KstPluginPtr plugin = new KstPlugin; // use same inputs for (KstVectorMap::ConstIterator iter = _inputVectors.begin(); iter != _inputVectors.end(); ++iter) { plugin->inputVectors().insert(iter.key(), iter.data()); } for (KstScalarMap::ConstIterator iter = _inputScalars.begin(); iter != _inputScalars.end(); ++iter) { plugin->inputScalars().insert(iter.key(), iter.data()); } for (KstStringMap::ConstIterator iter = _inputStrings.begin(); iter != _inputStrings.end(); ++iter) { plugin->inputStrings().insert(iter.key(), iter.data()); } // create new outputs for (KstVectorMap::ConstIterator iter = outputVectors().begin(); iter != outputVectors().end(); ++iter) { KstVectorPtr v = new KstVector(iter.data()->tagName() + "'", 0, plugin.data()); plugin->outputVectors().insert(iter.key(), v); KST::addVectorToList(v); } for (KstScalarMap::ConstIterator iter = outputScalars().begin(); iter != outputScalars().end(); ++iter) { KstScalarPtr s = new KstScalar(iter.data()->tagName() + "'", plugin.data()); plugin->outputScalars().insert(iter.key(), s); } for (KstStringMap::ConstIterator iter = outputStrings().begin(); iter != outputStrings().end(); ++iter) { KstStringPtr s = new KstString(iter.data()->tagName() + "'", plugin.data()); plugin->outputStrings().insert(iter.key(), s); } // set the same plugin plugin->setPlugin(_plugin); plugin->setTagName(tagName() + "'"); duplicatedMap.insert(this, KstDataObjectPtr(plugin)); return KstDataObjectPtr(plugin); }
KstDataObjectPtr KstCPlugin::makeDuplicate(KstDataObjectDataObjectMap& duplicatedMap) { KstCPluginPtr plugin = new KstCPlugin; // use same inputs for (KstVectorMap::ConstIterator iter = _inputVectors.begin(); iter != _inputVectors.end(); ++iter) { plugin->inputVectors().insert(iter.key(), iter.data()); } for (KstScalarMap::ConstIterator iter = _inputScalars.begin(); iter != _inputScalars.end(); ++iter) { plugin->inputScalars().insert(iter.key(), iter.data()); } for (KstStringMap::ConstIterator iter = _inputStrings.begin(); iter != _inputStrings.end(); ++iter) { plugin->inputStrings().insert(iter.key(), iter.data()); } // create new outputs for (KstVectorMap::ConstIterator iter = outputVectors().begin(); iter != outputVectors().end(); ++iter) { KstWriteLocker blockVectorUpdates(&KST::vectorList.lock()); KstVectorPtr v = new KstVector(KstObjectTag(iter.data()->tag().tag() + "'", iter.data()->tag().context()), 0, plugin.data()); // FIXME: unique tag generation plugin->outputVectors().insert(iter.key(), v); } for (KstScalarMap::ConstIterator iter = outputScalars().begin(); iter != outputScalars().end(); ++iter) { KstScalarPtr s = new KstScalar(KstObjectTag(iter.data()->tag().tag() + "'", iter.data()->tag().context()), plugin.data()); // FIXME: unique tag generation plugin->outputScalars().insert(iter.key(), s); } for (KstStringMap::ConstIterator iter = outputStrings().begin(); iter != outputStrings().end(); ++iter) { KstStringPtr s = new KstString(KstObjectTag(iter.data()->tag().tag() + "'", iter.data()->tag().context()), plugin.data()); // FIXME: unique tag generation plugin->outputStrings().insert(iter.key(), s); } // set the same plugin plugin->setPlugin(_plugin); plugin->setTagName(KstObjectTag(tag().tag() + "'", tag().context())); // FIXME: unique tag generation method duplicatedMap.insert(this, KstDataObjectPtr(plugin)); return KstDataObjectPtr(plugin); }
void EventMonitorEntry::replaceDependency(KstDataObjectPtr oldObject, KstDataObjectPtr newObject) { QString newExp = _event; // replace all occurences of outputVectors, outputScalars from oldObject for (KstVectorMap::ConstIterator j = oldObject->outputVectors().begin(); j != oldObject->outputVectors().end(); ++j) { const QString oldTag = j.value()->tagName(); const QString newTag = newObject->outputVectors()[j.key()]->tagName(); newExp = newExp.replace("[" + oldTag + "]", "[" + newTag + "]"); } for (KstScalarMap::ConstIterator j = oldObject->outputScalars().begin(); j != oldObject->outputScalars().end(); ++j) { const QString oldTag = j.value()->tagName(); const QString newTag = newObject->outputScalars()[j.key()]->tagName(); newExp = newExp.replace("[" + oldTag + "]", "[" + newTag + "]"); } // and dependencies on vector stats for (KstVectorMap::ConstIterator j = oldObject->outputVectors().begin(); j != oldObject->outputVectors().end(); ++j) { const QHash<QString, KstScalar*>& scalarMap(newObject->outputVectors()[j.key()]->scalars()); QHashIterator<QString, KstScalar*> scalarDictIter(j.value()->scalars()); while (scalarDictIter.hasNext()) { const QString oldTag = scalarDictIter.next().value()->tagName(); const QString newTag = scalarMap[scalarDictIter.key()]->tagName(); newExp = newExp.replace("[" + oldTag + "]", "[" + newTag + "]"); } } // and dependencies on matrix stats for (KstMatrixMap::ConstIterator j = oldObject->outputMatrices().begin(); j != oldObject->outputMatrices().end(); ++j) { const QHash<QString, KstScalar*>& scalarMap(newObject->outputMatrices()[j.key()]->scalars()); QHashIterator<QString, KstScalar*> scalarDictIter(j.value()->scalars()); while (scalarDictIter.hasNext()) { const QString oldTag = scalarDictIter.next().value()->tagName(); const QString newTag = scalarMap[scalarDictIter.key()]->tagName(); newExp = newExp.replace("[" + oldTag + "]", "[" + newTag + "]"); } } setEvent(newExp); setDirty(); // events have no _inputVectors }