protected void replace(HashMap<Class<?>, HashSet<BasicOperator>> _startNodes) {
    // remove obsolete connections...
    int[] _label_a = null;

    int _label_a_count = 0;
    _label_a = new int[this.o1.length];

    for (lupos.engine.operators.BasicOperator _parent : this.o1) {
      _label_a[_label_a_count] = _parent.getOperatorIDTuple(this.p).getId();
      _label_a_count += 1;

      _parent.removeSucceedingOperator(this.p);
      this.p.removePrecedingOperator(_parent);
    }

    this.p.removeSucceedingOperator(this.o2);
    this.o2.removePrecedingOperator(this.p);

    // add new operators...
    lupos.rif.operator.PredicatePattern[] p_new = null;
    p_new = new lupos.rif.operator.PredicatePattern[this.o1.length];

    for (this._dim_0 = 0; this._dim_0 < p_new.length; this._dim_0 += 1) {
      p_new[this._dim_0] = new lupos.rif.operator.PredicatePattern();
    }

    // add new connections...
    for (this._dim_0 = 0; this._dim_0 < this.o1.length; this._dim_0 += 1) {
      this.o1[this._dim_0].addSucceedingOperator(p_new[this._dim_0]);
      p_new[this._dim_0].addPrecedingOperator(this.o1[this._dim_0]);
    }

    _label_a_count = 0;

    for (lupos.rif.operator.PredicatePattern _parent : p_new) {
      _parent.addSucceedingOperator(new OperatorIDTuple(this.o2, _label_a[_label_a_count]));
      this.o2.addPrecedingOperator(_parent);

      _label_a_count += 1;
    }

    // delete unreachable operators...
    this.deleteOperatorWithoutParentsRecursive(this.p, _startNodes);

    // additional replace method code...
    for (lupos.rif.operator.PredicatePattern tmp_p : p_new) {
      tmp_p.getSucceedingOperators().get(0).setId(id);
      tmp_p.setUnionVariables(
          new java.util.HashSet<lupos.datastructures.items.Variable>(this.p.getUnionVariables()));
      tmp_p.setIntersectionVariables(
          new java.util.HashSet<lupos.datastructures.items.Variable>(
              this.p.getIntersectionVariables()));
      tmp_p.setPredicateName(this.p.getPredicateName());
      tmp_p.setPatternItems(this.p.getPatternItems());
    }
  }
  protected boolean check(BasicOperator _op) {
    boolean _result = this._checkPrivate0(_op);

    if (_result) {
      // additional check method code...
      this.id = p.getSucceedingOperators().get(0).getId();
      return this.p.getPrecedingOperators().size() > 1;
    }

    return _result;
  }