mirror of
https://github.com/corda/corda.git
synced 2025-01-31 16:35:43 +00:00
implement StringBuilder.delete() more efficiently
This commit is contained in:
parent
bcd2c75f41
commit
956106f518
@ -149,16 +149,11 @@ public class StringBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public StringBuilder delete(int start, int end) {
|
public StringBuilder delete(int start, int end) {
|
||||||
int numChars = end - start; // Do not delete end itself
|
if (start >= end) {
|
||||||
while (numChars > 0) {
|
|
||||||
deleteCharAt(start);
|
|
||||||
numChars--;
|
|
||||||
}
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public StringBuilder deleteCharAt(int i) {
|
if (start < 0 || end > length) {
|
||||||
if (i < 0 || i >= length) {
|
|
||||||
throw new IndexOutOfBoundsException();
|
throw new IndexOutOfBoundsException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,32 +163,40 @@ public class StringBuilder {
|
|||||||
-- length;
|
-- length;
|
||||||
Cell p = null;
|
Cell p = null;
|
||||||
for (Cell c = chain; c != null; c = c.next) {
|
for (Cell c = chain; c != null; c = c.next) {
|
||||||
int start = index - c.value.length();
|
int e = index;
|
||||||
index = start;
|
int s = index - c.value.length();
|
||||||
|
index = s;
|
||||||
|
|
||||||
if (i >= start) {
|
if (end >= e) {
|
||||||
if (c.value.length() == 1) {
|
if (start <= s) {
|
||||||
if (p == null) {
|
if (p == null) {
|
||||||
chain = c.next;
|
chain = c.next;
|
||||||
} else {
|
} else {
|
||||||
p.next = c.next;
|
p.next = c.next;
|
||||||
}
|
}
|
||||||
} else if (i == start) {
|
} else {
|
||||||
c.value = c.value.substring(1);
|
c.value = c.value.substring(0, start - s);
|
||||||
} else if (i == start + c.value.length() - 1) {
|
break;
|
||||||
c.value = c.value.substring(0, c.value.length() - 1);
|
}
|
||||||
|
} else {
|
||||||
|
if (start <= s) {
|
||||||
|
c.value = c.value.substring(end - s, e - s);
|
||||||
} else {
|
} else {
|
||||||
String v = c.value;
|
String v = c.value;
|
||||||
c.value = v.substring(i - start + 1, v.length());
|
c.value = v.substring(end - s, e - s);
|
||||||
c.next = new Cell(v.substring(0, i - start), c.next);
|
c.next = new Cell(v.substring(0, start - s), c.next);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public StringBuilder deleteCharAt(int i) {
|
||||||
|
return delete(i, i + 1);
|
||||||
|
}
|
||||||
|
|
||||||
public StringBuilder replace(int start, int end, String str) {
|
public StringBuilder replace(int start, int end, String str) {
|
||||||
delete(start, end);
|
delete(start, end);
|
||||||
insert(start, str);
|
insert(start, str);
|
||||||
|
2
makefile
2
makefile
@ -112,7 +112,7 @@ ifeq ($(mode),stress-major)
|
|||||||
cflags += -O0 -g3 -DVM_STRESS -DVM_STRESS_MAJOR
|
cflags += -O0 -g3 -DVM_STRESS -DVM_STRESS_MAJOR
|
||||||
endif
|
endif
|
||||||
ifeq ($(mode),fast)
|
ifeq ($(mode),fast)
|
||||||
cflags += -O3 -DNDEBUG
|
cflags += -O3 -g3 -DNDEBUG
|
||||||
strip = strip
|
strip = strip
|
||||||
show-size = ls -l
|
show-size = ls -l
|
||||||
endif
|
endif
|
||||||
|
@ -529,6 +529,16 @@ invokeNative(Thread* t, object method)
|
|||||||
&byteArrayBody(t, methodName(t, method), 0));
|
&byteArrayBody(t, methodName(t, method), 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if (strcmp(reinterpret_cast<const char*>
|
||||||
|
// (&byteArrayBody(t, className(t, methodClass(t, method)), 0)),
|
||||||
|
// "org/eclipse/swt/internal/C") == 0
|
||||||
|
// and strcmp(reinterpret_cast<const char*>
|
||||||
|
// (&byteArrayBody(t, methodName(t, method), 0)),
|
||||||
|
// "memmove") == 0)
|
||||||
|
// {
|
||||||
|
// asm("int3");
|
||||||
|
// }
|
||||||
|
|
||||||
{ ENTER(t, Thread::IdleState);
|
{ ENTER(t, Thread::IdleState);
|
||||||
|
|
||||||
result = t->m->system->call
|
result = t->m->system->call
|
||||||
|
Loading…
x
Reference in New Issue
Block a user