changes.
[IRC.git] / Robust / src / Analysis / SSJava / NTuple.java
1 package Analysis.SSJava;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
5 import java.util.List;
6
7 public class NTuple<T> {
8
9   private List<T> elements;
10
11   public NTuple(List<T> l) {
12     this.elements = new ArrayList<T>();
13     this.elements.addAll(l);
14   }
15
16   public NTuple(NTuple<T> tuple) {
17     this(tuple.toList());
18   }
19
20   public List<T> toList() {
21     return elements;
22   }
23
24   public NTuple() {
25     this.elements = new ArrayList<T>();
26   }
27
28   public String toString() {
29     return elements.toString();
30   }
31
32   public T get(int index) {
33     return elements.get(index);
34   }
35
36   public int size() {
37     return elements.size();
38   }
39
40   public void add(T newElement) {
41     this.elements.add(newElement);
42   }
43
44   public void addAll(Collection<T> all) {
45     this.elements.addAll(all);
46   }
47
48   public void addAll(NTuple<T> tuple) {
49     for (int i = 0; i < tuple.size(); i++) {
50       elements.add(tuple.get(i));
51     }
52   }
53
54   public boolean equals(Object o) {
55     if (this == o) {
56       return true;
57     }
58
59     if (o == null || o.getClass() != this.getClass()) {
60       return false;
61     }
62     return (((NTuple<T>) o).elements).equals(elements);
63   }
64
65   public int hashCode() {
66     return elements.hashCode();
67   }
68
69   public void removeAt(int i) {
70     elements.remove(i);
71   }
72
73   public List<T> getList() {
74     return elements;
75   }
76
77   public boolean startsWith(T prefix) {
78     return get(0).equals(prefix);
79   }
80
81   public boolean startsWith(NTuple<T> prefix) {
82
83     if (prefix.size() > size()) {
84       return false;
85     }
86
87     for (int i = 0; i < prefix.size(); i++) {
88       if (!prefix.get(i).equals(get(i))) {
89         return false;
90       }
91     }
92     return true;
93
94   }
95
96   public NTuple<T> subList(int startIdx, int endIdx) {
97
98     NTuple<T> subList = new NTuple<T>();
99
100     for (int i = startIdx; i < endIdx; i++) {
101       subList.add(elements.get(i));
102     }
103
104     return subList;
105
106   }
107
108   public T getLastElement() {
109     return elements.get(elements.size() - 1);
110   }
111
112   public NTuple<T> clone() {
113     NTuple<T> clone = new NTuple<T>();
114     clone.addAll(this);
115     return clone;
116   }
117
118 }