Update of /var/cvs/src/org/mmbase/util/transformers
In directory james.mmbase.org:/tmp/cvs-serv3131
Modified Files:
RegexpReplacer.java
Log Message:
using iterators in stead of random access, which seems better for linked list
See also: http://cvs.mmbase.org/viewcvs/src/org/mmbase/util/transformers
Index: RegexpReplacer.java
===================================================================
RCS file: /var/cvs/src/org/mmbase/util/transformers/RegexpReplacer.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- RegexpReplacer.java 23 Jul 2008 22:22:58 -0000 1.23
+++ RegexpReplacer.java 24 Jul 2008 15:46:56 -0000 1.24
@@ -182,8 +182,15 @@
boolean r = false; // result value
- List<Chunk> chunks = new LinkedList<Chunk>();
+ List<Chunk> chunks;
+ if (onlyFirstMatch) {
+ // linked list while we're going to do a lot of changing:
+ chunks = new LinkedList<Chunk>();
chunks.add(new Chunk(string));
+ } else {
+ // will not make any changes
+ chunks = new Collections.singletonList(new Chunk(string));
+ }
for (Map.Entry<Pattern, String> entry : getPatterns()) {
Pattern p = entry.getKey();
@@ -191,12 +198,13 @@
if (onlyFirstMatch && status.used.contains(p)) continue;
-
- for (int i = 0; i < chunks.size(); i++) {
- if (onlyFirstPattern && chunks.get(i).replaced) {
+ ListIterator<Chunk> i = chunks.listIterator();
+ while (i.hasNext()) {
+ Chunk chunk = i.next();
+ if (onlyFirstPattern && chunk.replaced) {
continue;
}
- Matcher m = p.matcher(chunks.get(i).string);
+ Matcher m = p.matcher(chunk.string);
String replacement = entry.getValue();
boolean result = false;
if (to == ChunkedTransformer.XMLTEXT_WORDS || to ==
ChunkedTransformer.WORDS) {
@@ -218,19 +226,20 @@
if (onlyFirstPattern) {
// make a new chunk.
+ i.remove();
int s = m.start();
if (s > 0) {
- chunks.add(i, new Chunk(sb.toString().substring(0,
s)));
+ i.add(new Chunk(sb.toString().substring(0, s)));
sb.delete(0, s);
- i++;
}
- chunks.set(i, new Chunk(sb.toString(), true));
+ i.add(new Chunk(sb.toString(), true));
sb.setLength(0);
m.appendTail(sb);
- chunks.add(i + 1, new Chunk(sb.toString()));
+ i.add(new Chunk(sb.toString()));
+ i.previous();
} else {
m.appendTail(sb);
- chunks.set(i, new Chunk(sb.toString()));
+ i.set(new Chunk(sb.toString()));
}
if (onlyFirstMatch ||
to == ChunkedTransformer.XMLTEXT_WORDS ||
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs