MM::VOID MM::Evaluator::step(MM::Transition * tr) { MM::Reflector * r = m->getReflector(); MM::Instance * i = r->getInstance(); prepareAll(i); MM_printf("STEP LEVEL (%ld nodes): pull all\n", pullAllWork->size()); stepLevel(tr, pullAllWork); MM_printf("STEP LEVEL (%ld nodes): pull any\n", pullAnyWork->size()); stepLevel(tr, pullAnyWork); MM_printf("STEP LEVEL (%ld nodes): push all\n", pushAllWork->size()); stepLevel(tr, pushAllWork); MM_printf("STEP LEVEL (%ld nodes): push any\n", pushAnyWork->size()); stepLevel(tr, pushAnyWork); MM_printf("\n"); //FIXME: we need the currently active nodes to calculate 'satisfied' //clearActiveNodes(i); finalizeAll(i, tr); //create temporary string MM::String * str = m->createString(10000); //stringify transition str->clear(); tr->toString(str); str->print(); //stringify state i->toString(str); str->print(); str->clear(); //notify flow notifyFlow(tr); //notify dirty pool instance values i->notifyValues(m); //notifyValues(i); //clean up instances //notify deletions //NOTE: pool node instance values might change --> also notified i->sweep(m); //recycle string str->recycle(m); }
MM::VOID MM::Evaluator::finalizeAll(MM::Instance * i, MM::Transition * tr) { finalize(i, tr); MM::Map<MM::Element *, MM::Vector<MM::Instance *> *> * instanceMap = i->getInstances(); MM::Map<MM::Element *, MM::Vector<MM::Instance *> *>::Iterator instanceMapIter = instanceMap->getIterator(); while(instanceMapIter.hasNext() == MM_TRUE) { MM::Vector<MM::Instance *> * instanceVect = instanceMapIter.getNext(); MM::Vector<MM::Instance *>::Iterator instanceVectIter = instanceVect->getIterator(); while(instanceVectIter.hasNext() == MM_TRUE) { MM::Instance * iChild = instanceVectIter.getNext(); finalizeAll(iChild, tr); } } }
void term_main(void) { hyu32 n = termFuncArr.size(); for (hyu32 i = 0; i < n; ++i) termFuncArr[i](); finalizeAll(); finalizeDebug(); loadPathArr.finalize(); updateFuncArr.finalize(); drawFuncArr.finalize(); termFuncArr.finalize(); for (hyu32 i = dllHandleArr.size(); i > 0; ) { AfxFreeLibrary(dllHandleArr[--i]); } dllHandleArr.finalize(); HMD_FREE(mainMem); HMD_FREE(debugMem); }