/* * $Id$ * * Copyright (c) 2000-2003 by Rodney Kinney * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.counters; import java.util.Enumeration; import java.util.Iterator; import VASSAL.tools.IterableEnumeration; /** * An iterator for GamePieces. Takes an optional PieceFilter to * extract GamePiece instances from an Enumeration or Iterator. */ public class PieceIterator { private Iterator<? extends GamePiece> pi; private PieceFilter filter; public PieceIterator(final Iterator<? extends GamePiece> i) { pi = i; } @Deprecated public <T extends GamePiece> PieceIterator(Enumeration<T> e) { this(new IterableEnumeration<T>(e)); } public PieceIterator(final Iterator<? extends GamePiece> i, PieceFilter f) { filter = f; pi = new Iterator<GamePiece>() { private GamePiece next; public boolean hasNext() { if (next != null) return true; while (i.hasNext()) { next = i.next(); if (filter == null || filter.accept(next)) return true; } next = null; return false; } public GamePiece next() { if (next != null) { final GamePiece ret = next; next = null; return ret; } for ( ; ; next = i.next()) { if (filter == null || filter.accept(next)) { final GamePiece ret = next; next = null; return ret; } } } public void remove() { throw new UnsupportedOperationException(); } }; } @Deprecated public <T extends GamePiece> PieceIterator(Enumeration<T> e, PieceFilter f) { this(new IterableEnumeration<T>(e), f); } public GamePiece nextPiece() { return pi.hasNext() ? pi.next() : null; } public boolean hasMoreElements() { return pi.hasNext(); } public static <T extends GamePiece> PieceIterator visible(Iterator<T> i) { return new PieceIterator(i, new PieceFilter() { public boolean accept(GamePiece piece) { return !Boolean.TRUE.equals( piece.getProperty(Properties.INVISIBLE_TO_ME)); } }); } @Deprecated public static <T extends GamePiece> PieceIterator visible(Enumeration<T> e) { return PieceIterator.visible(new IterableEnumeration<T>(e)); } }