ResetableIterator.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. package org.apache.hadoop.mapred.join;
  19. import java.io.IOException;
  20. import org.apache.hadoop.io.Writable;
  21. /**
  22.  * This defines an interface to a stateful Iterator that can replay elements
  23.  * added to it directly.
  24.  * Note that this does not extend {@link java.util.Iterator}.
  25.  */
  26. public interface ResetableIterator<T extends Writable> {
  27.   public static class EMPTY<U extends Writable>
  28.     implements ResetableIterator<U> {
  29.     public boolean hasNext() { return false; }
  30.     public void reset() { }
  31.     public void close() throws IOException { }
  32.     public void clear() { }
  33.     public boolean next(U val) throws IOException {
  34.       return false;
  35.     }
  36.     public boolean replay(U val) throws IOException {
  37.       return false;
  38.     }
  39.     public void add(U item) throws IOException {
  40.       throw new UnsupportedOperationException();
  41.     }
  42.   }
  43.   /**
  44.    * True if a call to next may return a value. This is permitted false
  45.    * positives, but not false negatives.
  46.    */
  47.   public boolean hasNext();
  48.   /**
  49.    * Assign next value to actual.
  50.    * It is required that elements added to a ResetableIterator be returned in
  51.    * the same order after a call to {@link #reset} (FIFO).
  52.    *
  53.    * Note that a call to this may fail for nested joins (i.e. more elements
  54.    * available, but none satisfying the constraints of the join)
  55.    */
  56.   public boolean next(T val) throws IOException;
  57.   /**
  58.    * Assign last value returned to actual.
  59.    */
  60.   public boolean replay(T val) throws IOException;
  61.   /**
  62.    * Set iterator to return to the start of its range. Must be called after
  63.    * calling {@link #add} to avoid a ConcurrentModificationException.
  64.    */
  65.   public void reset();
  66.   /**
  67.    * Add an element to the collection of elements to iterate over.
  68.    */
  69.   public void add(T item) throws IOException;
  70.   /**
  71.    * Close datasources and release resources. Calling methods on the iterator
  72.    * after calling close has undefined behavior.
  73.    */
  74.   // XXX is this necessary?
  75.   public void close() throws IOException;
  76.   /**
  77.    * Close datasources, but do not release internal resources. Calling this
  78.    * method should permit the object to be reused with a different datasource.
  79.    */
  80.   public void clear();
  81. }