Adding Labyrinth3D files
[IRC.git] / Robust / src / Benchmarks / Java-Single / Labyrinth3D / Original / Normal_Java / List_t.java
1 /* =============================================================================
2  *
3  * List_t.java
4  * -- Sorted singly linked list
5  * -- Options: duplicate allowed  
6  *    (DLIST_NO_DUPLICATES) is no implemented yet (default: allow duplicates)
7  *
8  * =============================================================================
9  *
10  * Copyright (C) Stanford University, 2006.  All Rights Reserved.
11  * Author: Chi Cao Minh
12  *
13  * =============================================================================
14  *
15  * For the license of bayes/sort.h and bayes/sort.c, please see the header
16  * of the files.
17  * 
18  * ------------------------------------------------------------------------
19  * 
20  * For the license of kmeans, please see kmeans/LICENSE.kmeans
21  * 
22  * ------------------------------------------------------------------------
23  * 
24  * For the license of ssca2, please see ssca2/COPYRIGHT
25  * 
26  * ------------------------------------------------------------------------
27  * 
28  * For the license of lib/mt19937ar.c and lib/mt19937ar.h, please see the
29  * header of the files.
30  * 
31  * ------------------------------------------------------------------------
32  * 
33  * For the license of lib/rbtree.h and lib/rbtree.c, please see
34  * lib/LEGALNOTICE.rbtree and lib/LICENSE.rbtree
35  * 
36  * ------------------------------------------------------------------------
37  * 
38  * Unless otherwise noted, the following license applies to STAMP files:
39  * 
40  * Copyright (c) 2007, Stanford University
41  * All rights reserved.
42  * 
43  * Redistribution and use in source and binary forms, with or without
44  * modification, are permitted provided that the following conditions are
45  * met:
46  * 
47  *     * Redistributions of source code must retain the above copyright
48  *       notice, this list of conditions and the following disclaimer.
49  * 
50  *     * Redistributions in binary form must reproduce the above copyright
51  *       notice, this list of conditions and the following disclaimer in
52  *       the documentation and/or other materials provided with the
53  *       distribution.
54  * 
55  *     * Neither the name of Stanford University nor the names of its
56  *       contributors may be used to endorse or promote products derived
57  *       from this software without specific prior written permission.
58  * 
59  * THIS SOFTWARE IS PROVIDED BY STANFORD UNIVERSITY ``AS IS'' AND ANY
60  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
61  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
62  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL STANFORD UNIVERSITY BE LIABLE
63  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
64  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
65  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
66  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
67  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
68  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
69  * THE POSSIBILITY OF SUCH DAMAGE.
70  *
71  * =============================================================================
72  */
73
74
75 public class List_t {
76
77     public List_Node head;
78     boolean isCoordinate;
79     int size;
80
81     public List_t() {
82         head = new List_Node();
83     }
84
85
86     /* =======================================================================
87      * allocNode
88      * -- Returns null on failure
89      * =======================================================================
90      */
91     private List_Node allocNode(Object dataPtr) 
92     {
93         List_Node nodePtr = new List_Node();
94
95
96         nodePtr.dataPtr = dataPtr;
97         nodePtr.nextPtr = null;
98
99         return nodePtr;
100     }
101         
102     
103 /* =============================================================================
104  * list_alloc
105  * -- If NULL passed for 'compare' function, will compare data pointer addresses
106  * -- Returns NULL on failure
107  * =============================================================================
108  * list_t* list_alloc (long (*compare)(const void*, const void*));
109  *
110  *
111  */
112
113     public static List_t alloc(int isCoordinate) 
114     {
115         List_t listPtr = new List_t();
116
117
118         listPtr.head.dataPtr = null;
119         listPtr.head.nextPtr = null;
120         listPtr.size = 0;
121         
122         listPtr.isCoordinate = (isCoordinate==1)?true:false;
123
124         return listPtr;
125     }
126     
127 /* =============================================================================
128  * list_free
129  * -- If NULL passed for 'compare' function, will compare data pointer addresses
130  * -- Returns NULL on failure
131  * =============================================================================
132  * void list_free (list_t* listPtr);
133  */
134     public static void free(List_t listPtr) 
135     {
136         listPtr = null;
137     }
138
139 //    privae freeList
140
141 /* =============================================================================
142  * list_isEmpty
143  * -- Return TRUE if list is empty, else FALSE
144  * =============================================================================
145  * bool_t list_isEmpty (list_t* listPtr);
146  */
147     public boolean isEmpty() 
148     {
149         return (head.nextPtr == null);
150     }
151
152 /* =============================================================================
153  * list_getSize
154  * -- Returns size of list
155  * =============================================================================
156  * long list_getSize (list_t* listPtr);
157  */
158     public int getSize() {
159         return size;
160     }
161
162 /* =============================================================================
163  * findPrevious
164  * =============================================================================
165  * void* list_find (list_t* listPtr, void* dataPtr);
166  */                                                                             
167     private List_Node findPrevious(Object dataPtr) 
168     {
169         List_Node prevPtr = head;
170         List_Node nodePtr = prevPtr.nextPtr;
171
172         for(; nodePtr != null; nodePtr = nodePtr.nextPtr) {
173             if (compare(nodePtr.dataPtr,dataPtr) >= 0) {
174                 return prevPtr;
175             }
176             prevPtr = nodePtr;
177         }
178
179         return prevPtr;
180     }
181
182     /* =============================================================================
183      * list_find
184      * -- Returns NULL if not found, else returns pointer to data
185      * =============================================================================
186      * void* list_find (list_t* listPtr, void* dataPtr);
187      */
188     public Object find(Object dataPtr) {
189         List_Node nodePtr;
190         List_Node prevPtr = findPrevious(dataPtr);
191
192         nodePtr = prevPtr.nextPtr;
193
194         if((nodePtr == null) ||
195                 (compare(nodePtr.dataPtr,dataPtr) != 0)) {
196             return null;
197         }
198
199         return (nodePtr.dataPtr);
200     }
201
202     public int compare(Object obj1,Object obj2) 
203     {
204         if(isCoordinate)
205         {
206             return Coordinate.comparePair(obj1,obj2);
207         }
208         else 
209             return compareObject(obj1,obj2);
210     }
211
212 /* =============================================================================
213  * list_insert
214  * -- Return TRUE on success, else FALSE
215  * =============================================================================
216  * bool_t list_insert (list_t* listPtr, void* dataPtr);
217  */
218     public boolean insert(Object dataPtr) {
219         List_Node prevPtr;
220         List_Node nodePtr;
221         List_Node currPtr;
222
223         prevPtr = findPrevious(dataPtr);
224         currPtr = prevPtr.nextPtr;
225
226         nodePtr = allocNode(dataPtr);
227         if (nodePtr == null) {
228             return false;
229         }
230
231         nodePtr.nextPtr = currPtr;
232         prevPtr.nextPtr = nodePtr;
233         size++;
234
235         return true;
236     }
237         
238     
239 /* =============================================================================
240  * list_remove
241  * -- Returns TRUE if successful, else FALSE
242  * =============================================================================
243  * bool_t list_remove (list_t* listPtr, void* dataPtr);
244  */
245     public boolean remove(Object dataPtr) 
246     {
247         List_Node prevPtr;
248         List_Node nodePtr;
249
250         prevPtr = findPrevious(dataPtr);
251
252         nodePtr = prevPtr.nextPtr;
253
254         if((nodePtr != null) &&
255             (compare(nodePtr.dataPtr,dataPtr) == 0))
256         {
257             prevPtr.nextPtr = nodePtr.nextPtr;
258             nodePtr.nextPtr = null;
259             nodePtr = null;
260             size--;
261
262             return true;
263         }
264     
265         return false;
266     }
267
268     int compareObject(Object obj1,Object obj2) {
269         return 1;
270     }
271     
272
273 /* =============================================================================
274  * list_clear
275  * -- Removes all elements
276  * =============================================================================
277  * void list_clear (list_t* listPtr);
278  */
279     public void clear() {
280         head = new List_Node();
281         size = 0;    
282     }
283
284 /* =============================================================================
285  *
286  * End of list.java
287  *
288  * =============================================================================
289  */
290
291  /* Test list */
292
293  public static void main(String[] argv) {
294      List_t listPtr;
295      int[] data1 = new int[5];
296      int[] data2 = new int[6];
297
298      int i;
299
300      System.out.println("Starting...");
301         }
302
303 }
304
305
306