diff options
Diffstat (limited to 'TAO/examples/Simulator/DOVEBrowser/Queue.java')
-rw-r--r-- | TAO/examples/Simulator/DOVEBrowser/Queue.java | 190 |
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; + } +} |