int DataObject::getUsage() const { int rc = 0; for (VectorMap::ConstIterator i = _outputVectors.begin(); i != _outputVectors.end(); ++i) { if (i.value().data()) { rc += i.value()->getUsage() - 1; } } for (ScalarMap::ConstIterator i = _outputScalars.begin(); i != _outputScalars.end(); ++i) { if (i.value().data()) { rc += i.value()->getUsage() - 1; } } for (StringMap::ConstIterator i = _outputStrings.begin(); i != _outputStrings.end(); ++i) { if (i.value().data()) { rc += i.value()->getUsage() - 1; } } for (MatrixMap::ConstIterator i = _outputMatrices.begin(); i != _outputMatrices.end(); ++i) { if (i.value().data()) { rc += i.value()->getUsage() - 1; } } return Object::getUsage() + rc; }
void EventMonitorEntry::internalUpdate() { writeLockInputsAndOutputs(); if (!_pExpression) { reparse(); } VectorPtr xv = *_xVector; VectorPtr yv = *_yVector; int ns = 1; for (VectorMap::ConstIterator i = _vectorsUsed.begin(); i != _vectorsUsed.end(); ++i) { ns = qMax(ns, i.value()->length()); } double *rawValuesX = 0L; double *rawValuesY = 0L; if (xv && yv) { if (xv->resize(ns)) { rawValuesX = xv->value(); } if (yv->resize(ns)) { rawValuesY = yv->value(); } } Equations::Context ctx; ctx.sampleCount = ns; ctx.x = 0.0; if (needToEvaluate()) { if (_pExpression) { for (ctx.i = _numDone; ctx.i < ns; ++ctx.i) { const double value = _pExpression->value(&ctx); if (value != 0.0) { // The expression evaluates to true log(ctx.i); if (rawValuesX && rawValuesY) { rawValuesX[ctx.i] = ctx.i; rawValuesY[ctx.i] = 1.0; } } else { if (rawValuesX && rawValuesY) { rawValuesX[ctx.i] = ctx.i; rawValuesY[ctx.i] = 0.0; } } } _numDone = ns; logImmediately(); } } else { _numDone = ns; } unlockInputsAndOutputs(); return; }
bool EventMonitorEntry::uses(ObjectPtr p) const { // check VectorsUsed in addition to _input*'s if (VectorPtr vect = kst_cast<Vector>(p)) { for (VectorMap::ConstIterator j = _vectorsUsed.begin(); j != _vectorsUsed.end(); ++j) { if (j.value() == vect) { return true; } } } else if (DataObjectPtr obj = kst_cast<DataObject>(p) ) { // check all connections from this expression to p for (VectorMap::ConstIterator j = obj->outputVectors().begin(); j != obj->outputVectors().end(); ++j) { for (VectorMap::ConstIterator k = _vectorsUsed.begin(); k != _vectorsUsed.end(); ++k) { if (j.value() == k.value()) { return true; } } } } return DataObject::uses(p); }
DataObjectPtr BasicPlugin::makeDuplicate() const { #if 0 BasicPluginPtr plugin = kst_cast<BasicPlugin>(DataObject::createPlugin(propertyString())); // use same inputs for (VectorMap::ConstIterator iter = _inputVectors.begin(); iter != _inputVectors.end(); ++iter) { plugin->inputVectors().insert(iter.key(), iter.value()); } for (ScalarMap::ConstIterator iter = _inputScalars.begin(); iter != _inputScalars.end(); ++iter) { plugin->inputScalars().insert(iter.key(), iter.value()); } for (StringMap::ConstIterator iter = _inputStrings.begin(); iter != _inputStrings.end(); ++iter) { plugin->inputStrings().insert(iter.key(), iter.value()); } // create new outputs for (VectorMap::ConstIterator iter = outputVectors().begin(); iter != outputVectors().end(); ++iter) { KstWriteLocker blockVectorUpdates(&vectorList.lock()); VectorPtr v = new Vector(ObjectTag(iter.value()->tag().tag() + "'", iter.value()->tag().context()), 0, plugin.data()); // FIXME: unique tag generation plugin->outputVectors().insert(iter.key(), v); } for (ScalarMap::ConstIterator iter = outputScalars().begin(); iter != outputScalars().end(); ++iter) { ScalarPtr s = new Scalar(ObjectTag(iter.value()->tag().tag() + "'", iter.value()->tag().context()), plugin.data()); // FIXME: unique tag generation plugin->outputScalars().insert(iter.key(), s); } for (StringMap::ConstIterator iter = outputStrings().begin(); iter != outputStrings().end(); ++iter) { StringPtr s = new String(ObjectTag(iter.value()->tag().tag() + "'", iter.value()->tag().context()), plugin.data()); // FIXME: unique tag generation plugin->outputStrings().insert(iter.key(), s); } // set the same plugin plugin->setTagName(ObjectTag(tag().tag() + "'", tag().context())); // FIXME: unique tag generation method map.insert(this, DataObjectPtr(plugin)); return DataObjectPtr(plugin); #endif // FIXME: implement this return 0L; }
bool DataObject::uses(ObjectPtr p) const { VectorPtr v = kst_cast<Vector>(p); if (v) { for (VectorMap::ConstIterator j = _inputVectors.begin(); j != _inputVectors.end(); ++j) { if (j.value() == v) { return true; } } QHashIterator<QString, Scalar*> scalarDictIter(v->scalars()); for (ScalarMap::ConstIterator j = _inputScalars.begin(); j != _inputScalars.end(); ++j) { while (scalarDictIter.hasNext()) { scalarDictIter.next(); if (scalarDictIter.value() == j.value()) { return true; } } } } else if (MatrixPtr matrix = kst_cast<Matrix>(p)) { for (MatrixMap::ConstIterator j = _inputMatrices.begin(); j != _inputMatrices.end(); ++j) { if (j.value() == matrix) { return true; } } QHashIterator<QString, Scalar*> scalarDictIter(matrix->scalars()); for (ScalarMap::ConstIterator j = _inputScalars.begin(); j != _inputScalars.end(); ++j) { while (scalarDictIter.hasNext()) { scalarDictIter.next(); if (scalarDictIter.value() == j.value()) { return true; } } } } else if (DataObjectPtr obj = kst_cast<DataObject>(p) ) { // check all connections from this object to p for (VectorMap::Iterator j = obj->outputVectors().begin(); j != obj->outputVectors().end(); ++j) { for (VectorMap::ConstIterator k = _inputVectors.begin(); k != _inputVectors.end(); ++k) { if (j.value() == k.value()) { return true; } } // also check dependencies on vector stats QHashIterator<QString, Scalar*> scalarDictIter(j.value()->scalars()); for (ScalarMap::ConstIterator k = _inputScalars.begin(); k != _inputScalars.end(); ++k) { while (scalarDictIter.hasNext()) { scalarDictIter.next(); if (scalarDictIter.value() == k.value()) { return true; } } } } for (MatrixMap::Iterator j = obj->outputMatrices().begin(); j != obj->outputMatrices().end(); ++j) { for (MatrixMap::ConstIterator k = _inputMatrices.begin(); k != _inputMatrices.end(); ++k) { if (j.value() == k.value()) { return true; } } // also check dependencies on vector stats QHashIterator<QString, Scalar*> scalarDictIter(j.value()->scalars()); for (ScalarMap::ConstIterator k = _inputScalars.begin(); k != _inputScalars.end(); ++k) { while (scalarDictIter.hasNext()) { scalarDictIter.next(); if (scalarDictIter.value() == k.value()) { return true; } } } } for (ScalarMap::Iterator j = obj->outputScalars().begin(); j != obj->outputScalars().end(); ++j) { for (ScalarMap::ConstIterator k = _inputScalars.begin(); k != _inputScalars.end(); ++k) { if (j.value() == k.value()) { return true; } } } for (StringMap::Iterator j = obj->outputStrings().begin(); j != obj->outputStrings().end(); ++j) { for (StringMap::ConstIterator k = _inputStrings.begin(); k != _inputStrings.end(); ++k) { if (j.value() == k.value()) { return true; } } } } return false; }