attached is patchfile updated copy of EventQueue.java with additional javadocs.
Same file is available on my website
http://pfarrell.com/java/EventQueue.java
and
http://pfarrell.com/java/EventQueue.diff
Index: EventQueue.java
— EventQueue.java (revision 236)
+++ EventQueue.java (working copy)
@@ -38,23 +38,56 @@
*****************************************************************************/
package net.java.games.input;
- /**
-
- The
EventQueue
class implements a FIFO queue for Events.
- The
-
- Typical usage pattern looks like:
-
-
for (Controller ctl : controllers) {
-
ctl.poll();
-
EventQueue localQueue = ctl.getEventQueue();
-
Event event = new Event();
-
while(localQueue.getNextEvent(event)) {
-
// do something cool here
-
}
-
try {
-
Thread.sleep(LOOP_TIME);
-
} catch (InterruptedException ex) {
-
// log exception
-
}
-
}
-
-
-
- @author Sun and open source contributors
- */
public final class EventQueue {
private final Event[] queue;
private int head;
private int tail;
-
/**
-
* constructor, accepts argument with length of internal storage. Note, this constructor
-
* is not normally used by game developers, as they use the getEventQueue() function of
-
* Controller
-
* @param size capacity of the queue
-
public EventQueue(int size) {*/
queue = new Event[size + 1];
for (int i = 0; i < queue.length; i++)
queue[i] = new Event();
}
-
/**
-
* add one event to the queue. Note: package protected, not public.
-
* Question: does this fail or block if queue is full?
-
* @param event the Event to add
-
final synchronized void add(Event event) {*/
queue[tail].set(event);
tail = increase(tail);
}
-
/**
-
* test if queue is full. Note: package protected, not public
-
* @return true if the queue is full
-
final synchronized boolean isFull() {*/
return increase(tail) == head;
}
@@ -62,7 +95,15 @@
private final int increase(int x) {
return (x + 1)%queue.length;
}
-
/**
-
* The getNextEvent method returns true if the queue <i>had</i> an event in it,
-
* and it managed to populate the event object you passed in with the details.
-
* False if there was nothing in the queue to copy in to your event object.
-
* Populating an object you pass in is an efficiency saving designed to reduce
-
* the number of objects created, and thus the amount of garbage collection needed.
-
* @param event
-
* @return true if the queue <i>had</i> an event on it
-
public final synchronized boolean getNextEvent(Event event) {*/
if (head == tail)
return false;