ResetableIterator.java
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:3k
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package org.apache.hadoop.mapred.join;
- import java.io.IOException;
- import org.apache.hadoop.io.Writable;
- /**
- * This defines an interface to a stateful Iterator that can replay elements
- * added to it directly.
- * Note that this does not extend {@link java.util.Iterator}.
- */
- public interface ResetableIterator<T extends Writable> {
- public static class EMPTY<U extends Writable>
- implements ResetableIterator<U> {
- public boolean hasNext() { return false; }
- public void reset() { }
- public void close() throws IOException { }
- public void clear() { }
- public boolean next(U val) throws IOException {
- return false;
- }
- public boolean replay(U val) throws IOException {
- return false;
- }
- public void add(U item) throws IOException {
- throw new UnsupportedOperationException();
- }
- }
- /**
- * True if a call to next may return a value. This is permitted false
- * positives, but not false negatives.
- */
- public boolean hasNext();
- /**
- * Assign next value to actual.
- * It is required that elements added to a ResetableIterator be returned in
- * the same order after a call to {@link #reset} (FIFO).
- *
- * Note that a call to this may fail for nested joins (i.e. more elements
- * available, but none satisfying the constraints of the join)
- */
- public boolean next(T val) throws IOException;
- /**
- * Assign last value returned to actual.
- */
- public boolean replay(T val) throws IOException;
- /**
- * Set iterator to return to the start of its range. Must be called after
- * calling {@link #add} to avoid a ConcurrentModificationException.
- */
- public void reset();
- /**
- * Add an element to the collection of elements to iterate over.
- */
- public void add(T item) throws IOException;
- /**
- * Close datasources and release resources. Calling methods on the iterator
- * after calling close has undefined behavior.
- */
- // XXX is this necessary?
- public void close() throws IOException;
- /**
- * Close datasources, but do not release internal resources. Calling this
- * method should permit the object to be reused with a different datasource.
- */
- public void clear();
- }