changes.
[IRC.git] / Robust / src / Analysis / SSJava / NTuple.java
index c95bc6019d1e51843810496802224300cff0ea06..396b4b72da89af0f7568800d221584e9f2ef93f3 100644 (file)
@@ -1,16 +1,24 @@
 package Analysis.SSJava;
 
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Collection;
 import java.util.List;
-import java.util.Set;
 
 public class NTuple<T> {
 
   private List<T> elements;
 
-  public NTuple(T... elements) {
-    this.elements = Arrays.asList(elements);
+  public NTuple(List<T> l) {
+    this.elements = new ArrayList<T>();
+    this.elements.addAll(l);
+  }
+
+  public NTuple(NTuple<T> tuple) {
+    this(tuple.toList());
+  }
+
+  public List<T> toList() {
+    return elements;
   }
 
   public NTuple() {
@@ -21,7 +29,7 @@ public class NTuple<T> {
     return elements.toString();
   }
 
-  public T at(int index) {
+  public T get(int index) {
     return elements.get(index);
   }
 
@@ -29,12 +37,18 @@ public class NTuple<T> {
     return elements.size();
   }
 
-  public void addElement(T newElement) {
+  public void add(T newElement) {
     this.elements.add(newElement);
   }
 
-  public void addSet(Set<T> set) {
-    this.elements.addAll(set);
+  public void addAll(Collection<T> all) {
+    this.elements.addAll(all);
+  }
+
+  public void addAll(NTuple<T> tuple) {
+    for (int i = 0; i < tuple.size(); i++) {
+      elements.add(tuple.get(i));
+    }
   }
 
   public boolean equals(Object o) {
@@ -45,11 +59,60 @@ public class NTuple<T> {
     if (o == null || o.getClass() != this.getClass()) {
       return false;
     }
-    return (((NTuple) o).elements).equals(elements);
+    return (((NTuple<T>) o).elements).equals(elements);
   }
 
   public int hashCode() {
     return elements.hashCode();
   }
 
+  public void removeAt(int i) {
+    elements.remove(i);
+  }
+
+  public List<T> getList() {
+    return elements;
+  }
+
+  public boolean startsWith(T prefix) {
+    return get(0).equals(prefix);
+  }
+
+  public boolean startsWith(NTuple<T> prefix) {
+
+    if (prefix.size() > size()) {
+      return false;
+    }
+
+    for (int i = 0; i < prefix.size(); i++) {
+      if (!prefix.get(i).equals(get(i))) {
+        return false;
+      }
+    }
+    return true;
+
+  }
+
+  public NTuple<T> subList(int startIdx, int endIdx) {
+
+    NTuple<T> subList = new NTuple<T>();
+
+    for (int i = startIdx; i < endIdx; i++) {
+      subList.add(elements.get(i));
+    }
+
+    return subList;
+
+  }
+
+  public T getLastElement() {
+    return elements.get(elements.size() - 1);
+  }
+
+  public NTuple<T> clone() {
+    NTuple<T> clone = new NTuple<T>();
+    clone.addAll(this);
+    return clone;
+  }
+
 }