/** * Copyright 2001 Jean-Francois Doue * * This file is part of Asteroid Zone. Asteroid Zone is free software; * you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation; * either version 2 of the License, or (at your option) any later version. * Asteroid Zone 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 General Public License for more details. * You should have received a copy of the GNU General Public License * along with Asteroid Zone; if not, write to the * Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA */ package asteroids; /** * Class to implement efficient, pool based collections. * The class supports an iterator method for collection traversal, * and methods to add and remove elements. The collection size * cannot grow beyond the size of the initial pool of objects * provided for the collection. * @author Jean-Francois Doue * @version 1.1, 2001/10/02 */ public class Pool extends Object { /** * An object array the pool where objects are actually stored. */ public Object[] pool; /** * The number of objects currently in the pool. */ public int count; /** * The index of the current object. */ public int current; /** * Initializes the collection with a pool of instances. */ public Pool(Object[] pool) { this.pool = pool; } /** * Resets the collection iterator. */ public final void reset() { current = count - 1; } /** * Returns the next object in the collection. */ public final Object next() { if (current >= 0) { return pool[current--]; } return null; } /** * Removes the current object from the collection. */ public final void removeCurrent() { if (current + 1 < count - 1) { Object tmp = pool[current + 1]; pool[current + 1] = pool[count - 1]; pool[count - 1] = tmp; } count--; } /** * Adds a new object to the collection. The * returned object must be initialized by the callee. * Returns null if the collection capacity has been * exceeded. */ public final Object addNewObject() { if (count >= pool.length) { return null; } return pool[count++]; } /** * Removes all the objects from the collection. */ public final void removeAll() { count = 0; } /** * Returns the size of the collection. */ public final int size() { return count; } }