summaryrefslogtreecommitdiff
path: root/TAO/examples/Simulator/DOVEBrowser/Queue.java
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/examples/Simulator/DOVEBrowser/Queue.java')
-rw-r--r--TAO/examples/Simulator/DOVEBrowser/Queue.java190
1 files changed, 190 insertions, 0 deletions
diff --git a/TAO/examples/Simulator/DOVEBrowser/Queue.java b/TAO/examples/Simulator/DOVEBrowser/Queue.java
new file mode 100644
index 00000000000..7ffaba15c52
--- /dev/null
+++ b/TAO/examples/Simulator/DOVEBrowser/Queue.java
@@ -0,0 +1,190 @@
+// $Id$
+
+
+import java.util.Enumeration;
+
+public class Queue
+{
+ // Friendly?
+ Queue_Node head_ = null;
+ Queue_Node tail_ = null;
+
+ private int length_ = 0;
+
+ public Queue()
+ {
+ }
+
+ public Enumeration forward_iterator()
+ {
+ return new Queue_Iterator(this, Queue_Iterator.FORWARD);
+ }
+
+ public Enumeration reverse_iterator()
+ {
+ return new Queue_Iterator(this, Queue_Iterator.REVERSE);
+ }
+
+ public void enqueue_tail(Object new_data)
+ {
+ Queue_Node new_node = new Queue_Node(new_data);
+
+ if (tail_ == null)
+ {
+ tail_ = new_node;
+ head_ = new_node;
+ }
+ else
+ {
+ new_node.prev_ = tail_;
+ tail_.next_ = new_node;
+ tail_ = new_node;
+ }
+
+ length_++;
+ }
+
+ public void enqueue_head(Object new_data)
+ {
+ Queue_Node new_node = new Queue_Node(new_data);
+
+ if (head_ == null)
+ {
+ tail_ = new_node;
+ head_ = new_node;
+ }
+ else
+ {
+ new_node.next_ = head_;
+ head_.prev_ = new_node;
+ head_ = new_node;
+ }
+
+ length_++;
+ }
+
+ public Object dequeue_head()
+ {
+ Object return_value = null;
+
+ if (head_ == null)
+ return_value = null;
+ else if (tail_ == head_)
+ {
+ return_value = head_.data_;
+ tail_ = null;
+ head_ = null;
+ }
+ else
+ {
+ return_value = head_.data_;
+ head_ = head_.next_;
+ head_.prev_ = null;
+ }
+
+ length_--;
+
+ return return_value;
+ }
+
+ public Object dequeue_tail()
+ {
+ Object return_value = null;
+
+ if (tail_ == null)
+ return_value = null;
+ else if (tail_ == head_)
+ {
+ return_value = tail_.data_;
+ tail_ = null;
+ head_ = null;
+ }
+ else
+ {
+ return_value = tail_.data_;
+ tail_ = tail_.prev_;
+ tail_.next_ = null;
+ }
+
+ length_--;
+
+ return return_value;
+ }
+
+ public int length()
+ {
+ return length_;
+ }
+
+ public Object head()
+ {
+ if (head_ != null)
+ return head_.data_;
+ else
+ return null;
+ }
+
+ public Object tail()
+ {
+ if (tail_ != null)
+ return tail_.data_;
+ else
+ return null;
+ }
+}
+
+class Queue_Node
+{
+ public Queue_Node prev_ = null;
+ public Queue_Node next_ = null;;
+ public Object data_;
+
+ public Queue_Node(Object data)
+ {
+ data_ = data;
+ }
+}
+
+class Queue_Iterator implements Enumeration
+{
+ public static final boolean FORWARD = true;
+ public static final boolean REVERSE = false;
+
+ private Queue queue_;
+ private Queue_Node queue_ptr_;
+ private boolean direction_ = FORWARD;
+
+ public Queue_Iterator(Queue queue)
+ {
+ queue_ = queue;
+ queue_ptr_ = queue.head_;
+ }
+
+ public Queue_Iterator(Queue queue, boolean direction)
+ {
+ queue_ = queue;
+ direction_ = direction;
+
+ if (direction_)
+ queue_ptr_ = queue_.head_;
+ else
+ queue_ptr_ = queue_.tail_;
+ }
+
+ public Object nextElement()
+ {
+ Object data = queue_ptr_.data_;
+
+ if (direction_)
+ queue_ptr_ = queue_ptr_.next_;
+ else
+ queue_ptr_ = queue_ptr_.prev_;
+
+ return data;
+ }
+
+ public boolean hasMoreElements()
+ {
+ return queue_ptr_ != null;
+ }
+}