示例#1
0
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);
}
示例#2
0
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);
    }
  }
}
示例#3
0
    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);
    }