change our vector remove method to be like java
authorbdemsky <bdemsky>
Fri, 10 Apr 2009 08:52:48 +0000 (08:52 +0000)
committerbdemsky <bdemsky>
Fri, 10 Apr 2009 08:52:48 +0000 (08:52 +0000)
Robust/src/ClassLibrary/LinkedList.java
Robust/src/ClassLibrary/Vector.java
Robust/src/Runtime/runtime.c

index 98701fba4a47145d36fbdd734e5b474e7a391b03..72f57dd24f55767b6aa936d1b747f0b3235aaca4 100644 (file)
@@ -70,11 +70,21 @@ public class LinkedList {
 
   public boolean contains( Object o ) {
     LinkedListElement e = head;
-    while( e != null ) {
-      if( e.element == o ) {
-       return true;
+    if (o==null) {
+      while(e!=null) {
+       if (e.element==null) {
+         return true;
+        }
+        e=e.next;
+      }
+      return false;
+    } else {
+      while( e != null ) {
+        if (o.equals(e.element)) {
+          return true;
+        }
+        e = e.next;
       }
-      e = e.next;
     }
     return false;
   }
index 9ae2baf7e71a330072068fe36fb0c58d941a40e7..162ff8246fd67a8775caaab2ad1dff8a054badd2 100644 (file)
@@ -56,9 +56,7 @@ public class Vector {
   }
 
   public void setElementAt(Object obj, int index) {
-    if (index>=size)
-      ensureCapacity(index+1);
-    if (index>=0 && index <size)
+    if (index <size)
       array[index]=obj;
     else {
       System.printString("Illegal Vector.setElementAt\n");
@@ -119,12 +117,13 @@ public class Vector {
       System.printString("Illegal Vector.removeElementAt\n");
       System.exit(-1);
     }
-    for(int i=index; i<(size-1); i++) {
-      array[i]=array[i+1];
-    }
+    removeElement(array, index);
     size--;
+    array[size]=null;
   }
 
+  public static native void removeElement(Object[] array, int index);
+
   public void removeAllElements() {
     int s = size;
     for(int i = 0; i<s; ++i ) {
index e0884c425052ea2eb5bd3384f2b4413d3b1c46ad..23a0aaa5d41c71edf6c46211d37f27ff0d96a96c 100644 (file)
@@ -14,6 +14,7 @@
 #ifdef STM
 #include "tm.h"
 #endif
+#include <string.h>
 
 extern int classsize[];
 extern int typearray[];
@@ -112,6 +113,13 @@ void CALL11(___System______exit____I,int ___status___, int ___status___) {
   exit(___status___);
 }
 
+void CALL12(___Vector______removeElement_____AR_L___Object____I, int ___index___, struct ArrayObject * ___array___, int ___index___) {
+  int length=VAR(___array___)->___length___;
+  char* offset=((char *)(&VAR(___array___)->___length___))+sizeof(unsigned int)+sizeof(void *)*___index___;
+  memmove(offset, offset+sizeof(void *),(length-___index___-1)*sizeof(void *));
+}
+
+
 void CALL11(___System______printI____I,int ___status___, int ___status___) {
   printf("%d\n",___status___);
 }