1 /* =============================================================================
5 * =============================================================================
7 * Copyright (C) Stanford University, 2006. All Rights Reserved.
12 * University of California, Irvine
14 * =============================================================================
16 * Unless otherwise noted, the following license applies to STAMP files:
18 * Copyright (c) 2007, Stanford University
19 * All rights reserved.
21 * Redistribution and use in source and binary forms, with or without
22 * modification, are permitted provided that the following conditions are
25 * * Redistributions of source code must retain the above copyright
26 * notice, this list of conditions and the following disclaimer.
28 * * Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in
30 * the documentation and/or other materials provided with the
33 * * Neither the name of Stanford University nor the names of its
34 * contributors may be used to endorse or promote products derived
35 * from this software without specific prior written permission.
37 * THIS SOFTWARE IS PROVIDED BY STANFORD UNIVERSITY ``AS IS'' AND ANY
38 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
39 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
40 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE
41 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
42 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
43 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
44 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
45 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
47 * THE POSSIBILITY OF SUCH DAMAGE.
49 * =============================================================================
53 int pop; /* points before element to pop */
57 int QUEUE_GROWTH_FACTOR;
64 /* =============================================================================
66 * =============================================================================
68 public Queue (int initCapacity) {
69 QUEUE_GROWTH_FACTOR = 2;
70 capacity = ((initCapacity < 2)?2:initCapacity);
72 elements = new Object[capacity];
79 /* =============================================================================
81 * =============================================================================
85 return (((pop + 1) % capacity == push)?true:false);
89 /* =============================================================================
91 * =============================================================================
99 /* =============================================================================
101 * =============================================================================
104 push(Object dataPtr) {
106 // System.out.println("push == pop in Queue.java");
111 int newPush = (push + 1) % capacity;
112 if (newPush == pop) {
114 int newCapacity = capacity * QUEUE_GROWTH_FACTOR;
115 Object[] newElements = new Object[newCapacity];
117 if (newElements == null) {
122 Object[] tmpelements = elements;
125 for (src = (pop + 1); src < push; src++, dst++) {
126 newElements[dst] = elements[src];
130 for (src = (pop + 1); src < capacity; src++, dst++) {
131 newElements[dst] = elements[src];
133 for (src = 0; src < push; src++, dst++) {
134 newElements[dst] = elements[src];
139 elements = newElements;
140 pop = newCapacity - 1;
141 capacity = newCapacity;
143 newPush = push + 1; /* no need modulo */
146 elements[push] = dataPtr;
153 /* =============================================================================
155 * =============================================================================
159 int newPop = (pop + 1) % capacity;
160 if (newPop == push) {
164 //Object dataPtr = queuePtr.elements[newPop];
165 //queuePtr.pop = newPop;
166 Object dataPtr = elements[newPop];
176 /* =============================================================================
180 * =============================================================================