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)
70 QUEUE_GROWTH_FACTOR = 2;
71 capacity = ((initCapacity < 2) ? 2 : initCapacity);
73 elements = new Object[capacity];
80 /* =============================================================================
82 * =============================================================================
87 return (((pop + 1) % capacity == push) ? true : false);
91 /* =============================================================================
93 * =============================================================================
102 /* =============================================================================
104 * =============================================================================
107 push (Object dataPtr)
110 // System.out.println("push == pop in Queue.java");
115 int newPush = (push + 1) % capacity;
116 if (newPush == pop) {
118 int newCapacity = capacity * QUEUE_GROWTH_FACTOR;
119 Object[] newElements = new Object[newCapacity];
121 if (newElements == null) {
126 Object[] tmpelements = elements;
129 for (src = (pop + 1); src < push; src++, dst++) {
130 newElements[dst] = elements[src];
134 for (src = (pop + 1); src < capacity; src++, dst++) {
135 newElements[dst] = elements[src];
137 for (src = 0; src < push; src++, dst++) {
138 newElements[dst] = elements[src];
143 elements = newElements;
144 pop = newCapacity - 1;
145 capacity = newCapacity;
147 newPush = push + 1; /* no need modulo */
150 elements[push] = dataPtr;
157 /* =============================================================================
159 * =============================================================================
164 int newPop = (pop + 1) % capacity;
165 if (newPop == push) {
169 //Object dataPtr = queuePtr.elements[newPop];
170 //queuePtr.pop = newPop;
171 Object dataPtr = elements[newPop];
182 /* =============================================================================
186 * =============================================================================