Fix bugs for interfaces and a bug in the Class library
[IRC.git] / Robust / src / ClassLibrary / String.java
index 864574f05b7457a8cdb6808029909997a74140c8..e68450351d47d33137a27aa0a05444719c308e9d 100644 (file)
@@ -41,6 +41,29 @@ public class String {
     this.count=length;
     this.offset=0;
   }
+  
+  public String(byte str[], String encoding) {
+    int length = this.count;
+    if (length>(str.length))
+      length=str.length;
+    char charstr[]=new char[length];
+    for(int i=0; i<length; i++)
+      charstr[i]=(char)str[i];
+    this.value=charstr;
+    this.count=length;
+    this.offset=0;
+  }
+  
+  public String(char str[], int offset, int length) {
+    if (length>(str.length-offset))
+      length=str.length-offset;
+    char charstr[]=new char[length];
+    for(int i=0; i<length; i++)
+      charstr[i]=str[i+offset];
+    this.value=charstr;
+    this.count=length;
+    this.offset=0;
+  }
 
   public String(String str) {
     this.value=str.value;
@@ -89,6 +112,10 @@ public class String {
     return this.lastindexOf(ch, count - 1);
   }
 
+  public int lastIndexOf(char ch) {
+    return this.lastindexOf((int)ch, count - 1);
+  }
+  
   public static String concat2(String s1, String s2) {
     if (s1==null)
       return "null".concat(s2);
@@ -177,6 +204,11 @@ public class String {
     return -1;
   }
 
+       public int indexOfIgnoreCase(String str, int fromIndex) {
+               if (fromIndex < 0) 
+                       fromIndex = 0;
+       }
+
   public int lastIndexOf(String str, int fromIndex) {
     int k=count-str.count;
     if (k>fromIndex)
@@ -223,6 +255,23 @@ public class String {
       str[i]=(byte)value[i+offset];
     return str;
   }
+  
+  public void getChars(char dst[], int dstBegin) {
+    getChars(0, count, dst, dstBegin);
+  }
+  
+  public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
+    if((srcBegin < 0) || (srcEnd > count) || (srcBegin > srcEnd)) {
+      // FIXME
+      System.printString("Index error: "+srcBegin+" "+srcEnd+" "+count+"\n"+this);
+      System.exit(-1);
+    }
+    int len = srcEnd - srcBegin;
+    int j = dstBegin;
+    for(int i=srcBegin; i<srcEnd; i++)
+      dst[j++]=value[i+offset];
+    return;
+  }
 
   public int length() {
     return count;
@@ -387,18 +436,40 @@ public class String {
     int i;
     int cnt =0;
 
-    String tmpStr = new String();
+    // skip first spaces
+    for(i = 0; i< count;i++) {
+      if(value[i+offset] != '\n' && value[i+offset] != '\t' && value[i+offset] != ' ') 
+         break;
+    }
 
-    for(i = 0; i< count; i++) {
-      if(value[i] == '\n' || value[i] == '\t' || value[i] == ' ') {
-        splitted.addElement(tmpStr);
-        tmpStr = new String();
-      }else {
-        tmpStr += value[i];
+    int oldi=i;
+
+    while(i<count) {
+      if(value[i+offset] == '\n' || value[i+offset] == '\t' || value[i+offset] == ' ') {
+         String t=new String();
+         t.value=value;
+         t.offset=oldi;
+         t.count=i-oldi;
+         splitted.addElement(t);
+
+         // skip extra spaces
+         while( i < count && ( value[i+offset] == '\n' || value[i+offset] == '\t' || value[i+offset] == ' ')) {
+             i++;
+         }
+         oldi=i;
+      } else {
+         i++;
       }
     }
-    splitted.addElement(tmpStr);
 
+    if(i!=oldi) {
+       String t=new String();
+       t.value=value;
+       t.offset=oldi;
+       t.count=i-oldi;
+       splitted.addElement(t);
+    }
+    
     return splitted;
   }
 
@@ -423,4 +494,24 @@ public class String {
     return false;
 
   }
+  
+  public String trim() {
+    int len = count;
+    int st = 0;
+    int off = offset;      /* avoid getfield opcode */
+    char[] val = value;    /* avoid getfield opcode */
+
+    while ((st < len) && (val[off + st] <= ' ')) {
+      st++;
+    }
+    while ((st < len) && (val[off + len - 1] <= ' ')) {
+      len--;
+    }
+    return ((st > 0) || (len < count)) ? substring(st, len) : this;
+  }
+  
+  public boolean matches(String regex) {
+    System.println("String.matches() is not fully supported");
+    return this.equals(regex);
+  }
 }