// C4Slot.java /** * * @author Sean Bridges * @version 1.0 * class C4 Slot extends Object * * a slot represents one slot in the game board * a slot stores the player number of the player * who owns it. * If the slot is empty then it stores the * nullPlayer value, C4Board.NULL_PLAYER_NUMBER */ import java.util.Vector; public final class C4Slot { //-------------------------------------------- //instance variables private int contents = C4Board.NULL_PLAYER_NUMBER;//what we store //listeners are stored in an array to minimize access time. //the array is grown as listeners are added. //Vectors arent ideal since all methods are synchronized and slow //cant use new collection framework since we want to maintain //compatability with older VM's. private int numberOfListeners = 0; private C4SlotListener[] listeners = new C4SlotListener[11]; //-------------------------------------------- //constructors /** Creates new C4Slot */ public C4Slot() { } //-------------------------------------------- //instance methods //-------------------------------------------- //listeners /** * Add a new listener to the slot. */ public void addSlotListener(C4SlotListener listener) { //if we have to grow the array if(numberOfListeners == listeners.length) { int newArrayLength = numberOfListeners + 5; C4SlotListener[] newListeners = new C4SlotListener[newArrayLength]; for(int i = 0; i < numberOfListeners; i++) { newListeners[i] = listeners[i]; } listeners = newListeners; } listeners[numberOfListeners] = listener; numberOfListeners++; } /** * Remove a listener to the slot. */ public void removeListener(C4SlotListener listener) { //find the listener in the array. for(int i = 0; i < numberOfListeners; i++) { //when we find it, move the last listener into that //listeners spot, and remove the reference to the last //listener, decrement the number of listeners, and stop. if(listeners[i] == listener) { listeners[i] = listeners[numberOfListeners - 1]; listeners[numberOfListeners - 1] = null; numberOfListeners --; break; } } } private void notifyListenersContentsChanged(int oldContents, int newContents) { for(int i = 0; i < numberOfListeners; i++) { listeners[i].contentsChanged(oldContents, newContents); } } //-------------------------------------------- //contents public void setContents(int newContents) { int oldContents = contents; contents = newContents; notifyListenersContentsChanged(oldContents, newContents); } public int getContents() { return contents; } //-------------------------------------------- //printing public String toString() { return String.valueOf(contents); } }