have n-to-1 mapping from location paths to a set of may-written shared descriptors.
[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() {
17     this.elements = new ArrayList<T>();
18   }
19
20   public String toString() {
21     return elements.toString();
22   }
23
24   public T get(int index) {
25     return elements.get(index);
26   }
27
28   public int size() {
29     return elements.size();
30   }
31
32   public void add(T newElement) {
33     this.elements.add(newElement);
34   }
35
36   public void addAll(Collection<T> all) {
37     this.elements.addAll(all);
38   }
39
40   public void addAll(NTuple<T> tuple) {
41     for (int i = 0; i < tuple.size(); i++) {
42       elements.add(tuple.get(i));
43     }
44   }
45
46   public boolean equals(Object o) {
47     if (this == o) {
48       return true;
49     }
50
51     if (o == null || o.getClass() != this.getClass()) {
52       return false;
53     }
54     return (((NTuple<T>) o).elements).equals(elements);
55   }
56
57   public int hashCode() {
58     return elements.hashCode();
59   }
60
61   public void removeAt(int i) {
62     elements.remove(i);
63   }
64
65   public List<T> getList() {
66     return elements;
67   }
68
69   public boolean startsWith(T prefix) {
70     return get(0).equals(prefix);
71   }
72
73   public boolean startsWith(NTuple<T> prefix) {
74
75     if (prefix.size() > size()) {
76       return false;
77     }
78
79     for (int i = 0; i < prefix.size(); i++) {
80       if (!prefix.get(i).equals(get(i))) {
81         return false;
82       }
83     }
84     return true;
85
86   }
87
88   public NTuple<T> subList(int startIdx, int endIdx) {
89
90     NTuple<T> subList = new NTuple<T>();
91
92     for (int i = startIdx; i < endIdx; i++) {
93       subList.add(elements.get(i));
94     }
95
96     return subList;
97
98   }
99
100 }