/** {@inheritDoc} */
 @Override
 public QueryResult deleteQueryResult(final QueryResult queryResult, final int operandID) {
   final Iterator<Bindings> itb = queryResult.oneTimeIterator();
   while (itb.hasNext()) {
     this.bindings.remove(itb.next());
   }
   return null;
 }
 /** {@inheritDoc} */
 @Override
 public QueryResult deleteQueryResult(final QueryResult queryResult, final int operandID) {
   // problem: it does not count the number of occurrences of a binding
   // i.e. { ?a=<a> }, { ?a=<a> } and delete { ?a=<a> } will result in
   // {} instead of { ?a=<a> }!!!!!!
   final Iterator<Bindings> itb = queryResult.oneTimeIterator();
   while (itb.hasNext()) {
     this.bindings.remove(itb.next());
   }
   return null;
 }
  /** {@inheritDoc} */
  @Override
  public QueryResult process(final QueryResult _bindings, final int operandID) {
    final Iterator<Bindings> itb = _bindings.oneTimeIterator();
    if (!itb.hasNext()) {
      return null;
    } else {
      return QueryResult.createInstance(
          new ImmutableIterator<Bindings>() {
            Bindings next = null;

            @Override
            public boolean hasNext() {
              if (this.next != null) {
                return true;
              }
              if (itb.hasNext()) {
                this.next = this.next();
                if (this.next != null) {
                  return true;
                }
              }
              return false;
            }

            @Override
            public Bindings next() {
              if (this.next != null) {
                final Bindings znext = this.next;
                this.next = null;
                return znext;
              }
              while (itb.hasNext()) {
                final Bindings b = itb.next();
                if (!NonBlockingDistinct.this.bindings.contains(b)) {
                  NonBlockingDistinct.this.bindings.add(b);
                  return b;
                }
              }
              return null;
            }
          });
    }
  }