01: // This file is part of KeY - Integrated Deductive Software Design
02: // Copyright (C) 2001-2007 Universitaet Karlsruhe, Germany
03: // Universitaet Koblenz-Landau, Germany
04: // Chalmers University of Technology, Sweden
05: //
06: // The KeY system is protected by the GNU General Public License.
07: // See LICENSE.TXT for details.
08: //
09: //
10:
11: package de.uka.ilkd.key.util;
12:
13: import java.util.Iterator;
14: import java.util.LinkedList;
15:
16: /** extends java.util.LinkedList in order to collect elements
17: * according to their type */
18: public class ExtList extends LinkedList {
19:
20: public ExtList() {
21: super ();
22: }
23:
24: /** copies list to array (array has type of cl) */
25: private Object toArray(Class cl, LinkedList list) {
26: Object array = java.lang.reflect.Array.newInstance(cl, list
27: .size());
28: System.arraycopy(list.toArray(), 0, array, 0, list.size());
29: return array;
30: }
31:
32: /**
33: * collects elements of the classtype cl and returns a typed array
34: * @param cl Class the type of the elements that are selected
35: * @return array with type cl
36: */
37: public Object collect(Class cl) {
38: LinkedList colls = new LinkedList();
39: Iterator it = iterator();
40: while (it.hasNext()) {
41: Object next = it.next();
42: if (cl.isInstance(next) && (next != null)) {
43: colls.add(next);
44: }
45: }
46:
47: return toArray(cl, colls);
48:
49: }
50:
51: /**
52: * returns first element in list of type cl
53: * @param cl the type to be searched in list
54: * @return the first element with type cl in list
55: */
56: public Object get(Class cl) {
57: Iterator it = iterator();
58: while (it.hasNext()) {
59: Object next = it.next();
60: if (cl.isInstance(next) && (next != null)) {
61: return next;
62: }
63: }
64:
65: return null;
66: }
67:
68: /**
69: * returns first element in list of type cl and removes the found
70: * element from the list if the elemnt has not been found <tt>null</tt>
71: * is returned
72: * @param cl the type to be searched in list
73: * @return the first element with type cl in list
74: */
75: public Object removeFirstOccurrence(Class cl) {
76: Iterator it = iterator();
77: while (it.hasNext()) {
78: Object next = it.next();
79: if (cl.isInstance(next) && (next != null)) {
80: it.remove();
81: return next;
82: }
83: }
84:
85: return null;
86: }
87:
88: }
|