This commit is contained in:
Joel Dice
2007-08-14 19:14:55 -06:00
parent 71c7013808
commit f22dda0df1
11 changed files with 129 additions and 18 deletions

View File

@ -1,7 +1,15 @@
package java.lang;
public class Object {
protected native Object clone() throws CloneNotSupportedException;
protected Object clone() throws CloneNotSupportedException {
if (this instanceof Cloneable) {
return clone(this);
} else {
throw new CloneNotSupportedException();
}
}
private static native Object clone(Object o);
public boolean equals(Object o) {
return this == o;

View File

@ -31,6 +31,18 @@ public final class String implements Comparable<String> {
}
private String(Object data, int offset, int length, boolean copy) {
int l;
if (data instanceof char[]) {
l = ((char[]) data).length;
} else {
l = ((byte[]) data).length;
}
if (offset < 0 || offset + length > l) {
throw new IndexOutOfBoundsException
(offset + " < 0 or " + offset + " + " + length + " > " + l);
}
if (copy) {
Object c;
if (data instanceof char[]) {
@ -59,7 +71,9 @@ public final class String implements Comparable<String> {
public int hashCode() {
if (hash == 0) {
for (int i = 0; i < length; ++i) hash = (hash * 31) + charAt(i);
int h = 0;
for (int i = 0; i < length; ++i) h = (h * 31) + charAt(i);
hash = h;
}
return hash;
}

View File

@ -21,6 +21,11 @@ public class StringBuffer {
return this;
}
public synchronized StringBuffer append(char v) {
sb.append(v);
return this;
}
public synchronized StringBuffer append(int v) {
sb.append(v);
return this;

View File

@ -3,6 +3,8 @@ package java.lang;
public class StringBuilder {
private Cell chain;
private int length;
private char[] buffer;
private int position;
public StringBuilder(int capacity) { }
@ -10,12 +12,28 @@ public class StringBuilder {
this(0);
}
public StringBuilder append(String s) {
if (s.length() > 0) {
chain = new Cell(s, chain);
length += s.length();
private void flush() {
if (position > 0) {
char[] b = buffer;
int p = position;
buffer = null;
position = 0;
append(new String(b, 0, p, false));
length -= p;
}
}
public StringBuilder append(String s) {
if (s == null) {
return append("null");
} else {
if (s.length() > 0) {
flush();
chain = new Cell(s, chain);
length += s.length();
}
return this;
}
return this;
}
public StringBuilder append(char[] b, int offset, int length) {
@ -26,6 +44,20 @@ public class StringBuilder {
return append(o == null ? "null" : o.toString());
}
public StringBuilder append(char v) {
if (buffer == null) {
buffer = new char[32];
} else if (position >= buffer.length) {
flush();
buffer = new char[32];
}
buffer[position++] = v;
++ length;
return this;
}
public StringBuilder append(int v) {
return append(String.valueOf(v));
}
@ -39,6 +71,8 @@ public class StringBuilder {
throw new IndexOutOfBoundsException();
}
flush();
int index = length;
-- length;
Cell p = null;
@ -83,6 +117,8 @@ public class StringBuilder {
return;
}
flush();
int index = length;
length = v;
for (Cell c = chain; c != null; c = c.next) {
@ -106,6 +142,8 @@ public class StringBuilder {
throw new IndexOutOfBoundsException();
}
flush();
int index = length;
for (Cell c = chain; c != null; c = c.next) {
int start = index - c.value.length();
@ -124,7 +162,7 @@ public class StringBuilder {
c.value.getChars(start - index, end - start,
dst, dstOffset + (start - srcOffset));
}
}
}
}
public String toString() {