blob: 9f495dc82fdba8959b1eae6ba30476e288a98408 [file] [log] [blame]
/*
* Copyright (c) 2014, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
*
* 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 com.google.dart.engine.utilities.collection;
import java.util.NoSuchElementException;
/**
* The interface {@code MapIterator} defines the behavior of objects that iterate over the entries
* in a map.
* <p>
* This interface defines the concept of a current entry and provides methods to access the key and
* value in the current entry. When an iterator is first created it will be positioned before the
* first entry and there is no current entry until {@link #moveNext()} is invoked. When all of the
* entries have been accessed there will also be no current entry.
* <p>
* There is no guarantee made about the order in which the entries are accessible.
*/
public interface MapIterator<K, V> {
/**
* Return the key associated with the current element.
*
* @return the key associated with the current element
* @throws NoSuchElementException if there is no current element
*/
public K getKey();
/**
* Return the value associated with the current element.
*
* @return the value associated with the current element
* @throws NoSuchElementException if there is no current element
*/
public V getValue();
/**
* Advance to the next entry in the map. Return {@code true} if there is a current element that
* can be accessed after this method returns. It is safe to invoke this method even if the
* previous invocation returned {@code false}.
*
* @return {@code true} if there is a current element that can be accessed
*/
public boolean moveNext();
/**
* Set the value associated with the current element to the given value.
*
* @param newValue the new value to be associated with the current element
* @throws NoSuchElementException if there is no current element
*/
public void setValue(V newValue);
}