Esempio n. 1
0
  /** Responsible for traversing within a Module */
  @Override
  protected void traverse(Module module) {
    // Define all feedback points as having 0 depth on their exits
    // in order to break the iterative computation.
    for (Component comp : module.getFeedbackPoints()) {
      for (Exit exit : comp.getExits()) {
        exitToGateDepthMap.put(exit, new Integer(0));
      }
    }

    if (!findUnknownGateDepthOnInputs(module)) {
      if (_schedule.db) _schedule.ln(_schedule.GDA, "Module Traversal " + module);
      if (isForward()) {
        traverseModuleForward(module, module.getFeedbackPoints());
      } else {
        traverseModuleReverse(module, module.getFeedbackPoints());
      }

      LinkedList<Component> revisitComponents = new LinkedList<Component>();
      while (true) {
        while (!unresolvedGateDepthComponents.isEmpty()) {
          if (unresolvedGateDepthComponents.peek().getOwner() == module) {
            revisitComponents.add(unresolvedGateDepthComponents.pop());
          } else {
            break;
          }
        }
        if (revisitComponents.isEmpty()) {
          break;
        }
        revisitUnknownGateDepthComponents(revisitComponents);
      }
    }
  }