You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2004/10/19 11:28:59 UTC
cvs commit: jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf StringCache.java
remm 2004/10/19 02:28:58
Modified: util/java/org/apache/tomcat/util/buf StringCache.java
Log:
- Build the caches using a temp array.
Revision Changes Path
1.2 +22 -20 jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf/StringCache.java
Index: StringCache.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/util/java/org/apache/tomcat/util/buf/StringCache.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- StringCache.java 18 Oct 2004 23:16:36 -0000 1.1
+++ StringCache.java 19 Oct 2004 09:28:58 -0000 1.2
@@ -244,7 +244,7 @@
if (size > cacheSize) {
size = cacheSize;
}
- bcCache = new ByteEntry[size];
+ ByteEntry[] tempbcCache = new ByteEntry[size];
// Fill it up using an alphabetical order
// and a dumb insert sort
ByteChunk tempChunk = new ByteChunk();
@@ -257,13 +257,13 @@
for (int i = 0; i < list.size() && n < size; i++) {
ByteEntry entry = (ByteEntry) list.get(i);
tempChunk.setBytes(entry.name, 0, entry.name.length);
- int insertPos = findClosest(tempChunk, n);
+ int insertPos = findClosest(tempChunk, tempbcCache, n);
if (insertPos == n) {
- bcCache[n + 1] = entry;
+ tempbcCache[n + 1] = entry;
} else {
- System.arraycopy(bcCache, insertPos + 1, bcCache,
+ System.arraycopy(tempbcCache, insertPos + 1, tempbcCache,
insertPos + 2, n - insertPos - 1);
- bcCache[insertPos + 1] = entry;
+ tempbcCache[insertPos + 1] = entry;
}
n++;
}
@@ -271,6 +271,7 @@
}
bcCount = 0;
bcStats.clear();
+ bcCache = tempbcCache;
if (log.isDebugEnabled()) {
long t2 = System.currentTimeMillis();
log.debug("ByteCache generation time: " + (t2 - t1) + "ms");
@@ -357,7 +358,7 @@
if (size > cacheSize) {
size = cacheSize;
}
- ccCache = new CharEntry[size];
+ CharEntry[] tempccCache = new CharEntry[size];
// Fill it up using an alphabetical order
// and a dumb insert sort
CharChunk tempChunk = new CharChunk();
@@ -370,13 +371,13 @@
for (int i = 0; i < list.size() && n < size; i++) {
CharEntry entry = (CharEntry) list.get(i);
tempChunk.setChars(entry.name, 0, entry.name.length);
- int insertPos = findClosest(tempChunk, n);
+ int insertPos = findClosest(tempChunk, tempccCache, n);
if (insertPos == n) {
- ccCache[n + 1] = entry;
+ tempccCache[n + 1] = entry;
} else {
- System.arraycopy(ccCache, insertPos + 1, ccCache,
+ System.arraycopy(tempccCache, insertPos + 1, tempccCache,
insertPos + 2, n - insertPos - 1);
- ccCache[insertPos + 1] = entry;
+ tempccCache[insertPos + 1] = entry;
}
n++;
}
@@ -384,6 +385,7 @@
}
ccCount = 0;
ccStats.clear();
+ ccCache = tempccCache;
if (log.isDebugEnabled()) {
long t2 = System.currentTimeMillis();
log.debug("CharCache generation time: " + (t2 - t1) + "ms");
@@ -467,7 +469,7 @@
* Find an entry given its name in the cache and return the associated String.
*/
protected static final String find(ByteChunk name) {
- int pos = findClosest(name, bcCache.length);
+ int pos = findClosest(name, bcCache, bcCache.length);
if ((pos < 0) || (compare(name, bcCache[pos].name) != 0)
|| !(name.getEncoding().equals(bcCache[pos].enc))) {
return null;
@@ -482,7 +484,7 @@
* This will return the index for the closest inferior or equal item in the
* given array.
*/
- protected static final int findClosest(ByteChunk name, int len) {
+ protected static final int findClosest(ByteChunk name, ByteEntry[] array, int len) {
int a = 0;
int b = len - 1;
@@ -492,7 +494,7 @@
return -1;
}
- if (compare(name, bcCache[0].name) < 0) {
+ if (compare(name, array[0].name) < 0) {
return -1;
}
if (b == 0) {
@@ -502,7 +504,7 @@
int i = 0;
while (true) {
i = (b + a) / 2;
- int result = compare(name, bcCache[i].name);
+ int result = compare(name, array[i].name);
if (result == 1) {
a = i;
} else if (result == 0) {
@@ -511,7 +513,7 @@
b = i;
}
if ((b - a) == 1) {
- int result2 = compare(name, bcCache[b].name);
+ int result2 = compare(name, array[b].name);
if (result2 < 0) {
return a;
} else {
@@ -560,7 +562,7 @@
* Find an entry given its name in the cache and return the associated String.
*/
protected static final String find(CharChunk name) {
- int pos = findClosest(name, ccCache.length);
+ int pos = findClosest(name, ccCache, ccCache.length);
if ((pos < 0) || (compare(name, ccCache[pos].name) != 0)) {
return null;
} else {
@@ -574,7 +576,7 @@
* This will return the index for the closest inferior or equal item in the
* given array.
*/
- protected static final int findClosest(CharChunk name, int len) {
+ protected static final int findClosest(CharChunk name, CharEntry[] array, int len) {
int a = 0;
int b = len - 1;
@@ -584,7 +586,7 @@
return -1;
}
- if (compare(name, ccCache[0].name) < 0 ) {
+ if (compare(name, array[0].name) < 0 ) {
return -1;
}
if (b == 0) {
@@ -594,7 +596,7 @@
int i = 0;
while (true) {
i = (b + a) / 2;
- int result = compare(name, ccCache[i].name);
+ int result = compare(name, array[i].name);
if (result == 1) {
a = i;
} else if (result == 0) {
@@ -603,7 +605,7 @@
b = i;
}
if ((b - a) == 1) {
- int result2 = compare(name, ccCache[b].name);
+ int result2 = compare(name, array[b].name);
if (result2 < 0) {
return a;
} else {
---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-dev-help@jakarta.apache.org