Ejemplo n.º 1
0
  public void addOp(T o) {
    TraceElement<T> op = new TraceElement<T>(o);

    if (lastElement == null) {
      lastElement = op;
    } else {
      assert lastElement.stateId == 0;

      op.prevElement = lastElement;
      lastElement = op;
    }
  }
Ejemplo n.º 2
0
  public T getLastOp() {
    if (lastElement != null) {
      return lastElement.getOp();
    }

    return null;
  }
Ejemplo n.º 3
0
  @Override
  public void stateAdvanced(Search search) {
    if (search.isNewState() && (lastElement != null)) {
      int stateId = search.getStateId();

      for (TraceElement<T> op = lastElement; op != null; op = op.prevElement) {
        assert op.stateId == 0;

        op.stateId = stateId;
      }

      lastElement.prevTransition = lastTransition;
      lastTransition = lastElement;
    }

    lastElement = null;
  }
Ejemplo n.º 4
0
  public List<T> getOps() {
    // this is a rather braindead way around the limitation that we can't explicitly
    // create an T[] array object

    ArrayList<T> list = new ArrayList<T>();

    for (TraceElement<T> te = lastElement; te != null; te = te.prevElement) {
      list.add(te.getOp());
    }

    // reverse
    for (int i = 0, j = list.size() - 1; i < j; i++, j--) {
      T tmp = list.get(j);
      list.set(j, list.get(i));
      list.set(i, tmp);
    }

    return list;
  }
Ejemplo n.º 5
0
  @Override
  public Trace clone() {
    TraceElement<T> e0 = null, eLast = null;

    for (TraceElement<T> e = lastElement; e != null; e = e.prevElement) {
      TraceElement<T> ec = e.clone();

      if (eLast != null) {
        eLast.prevElement = ec;
        eLast = ec;
      } else {
        e0 = eLast = ec;
      }
    }

    Trace<T> t = new Trace<T>();
    t.lastElement = e0;

    return t;
  }