diff --git a/htroot/IndexControl_p.html b/htroot/IndexControl_p.html
index 6a374ccdf..b4d4c9eaf 100644
--- a/htroot/IndexControl_p.html
+++ b/htroot/IndexControl_p.html
@@ -116,14 +116,13 @@
- #(keyhashsimilar)#
- ::Sequential List of Word-Hashes:
#{rows}#
+ #(keyhashsimilar)#::Sequential List of Word-Hashes:
+ #{rows}#
#{cols}#
#[wordHash]##{/cols}#
#{/rows}#
#(/keyhashsimilar)#
- #(urlhashsimilar)#
- ::Sequential List of URL-Hashes:
+ #(urlhashsimilar)#::Sequential List of URL-Hashes:
#{rows}#
#{cols}##[urlHash]# #{/cols}#
#{/rows}#
diff --git a/source/de/anomic/kelondro/kelondroFlexSplitTable.java b/source/de/anomic/kelondro/kelondroFlexSplitTable.java
index 759158c17..3fe941b47 100644
--- a/source/de/anomic/kelondro/kelondroFlexSplitTable.java
+++ b/source/de/anomic/kelondro/kelondroFlexSplitTable.java
@@ -31,6 +31,7 @@ import java.io.IOException;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -40,7 +41,7 @@ public class kelondroFlexSplitTable implements kelondroIndex {
// this is a set of kelondroFlex tables
// the set is divided into FlexTables with different entry date
- private HashMap tables;
+ private HashMap tables; // a map from a date string to a kelondroIndex object
private kelondroRow rowdef;
private File path;
private String tablename;
@@ -270,47 +271,14 @@ public class kelondroFlexSplitTable implements kelondroIndex {
}
public synchronized kelondroCloneableIterator rows(boolean up, byte[] firstKey) throws IOException {
- return new rowIter();
- }
-
- public class rowIter implements kelondroCloneableIterator {
-
- Iterator t, tt;
-
- public rowIter() {
- t = tables.values().iterator();
- tt = null;
- }
-
- public Object clone(Object modifier) {
- return new rowIter();
- }
-
- public boolean hasNext() {
- return ((t.hasNext()) || ((tt != null) && (tt.hasNext())));
- }
-
- public Object next() {
- if ((tt == null) || (!(tt.hasNext()))) {
- try {
- tt = ((kelondroIndex) t.next()).rows(true, null);
- } catch (IOException e) {
- return null;
- }
- }
- if (tt.hasNext()) {
- return tt.next();
- } else {
- return this.next(); // t is empty, try next table
- }
- }
-
- public void remove() {
- if (tt != null) tt.remove();
+ HashSet set = new HashSet();
+ Iterator i = tables.values().iterator();
+ while (i.hasNext()) {
+ set.add(((kelondroIndex) i.next()).rows(up, firstKey));
}
-
+ return kelondroMergeIterator.cascade(set, rowdef.objectOrder, kelondroMergeIterator.simpleMerge, up);
}
-
+
public final int cacheObjectChunkSize() {
// dummy method
return -1;
diff --git a/source/de/anomic/kelondro/kelondroMergeIterator.java b/source/de/anomic/kelondro/kelondroMergeIterator.java
index 04329603b..2418507ce 100644
--- a/source/de/anomic/kelondro/kelondroMergeIterator.java
+++ b/source/de/anomic/kelondro/kelondroMergeIterator.java
@@ -146,7 +146,7 @@ public class kelondroMergeIterator implements kelondroCloneableIterator {
throw new java.lang.UnsupportedOperationException("merge does not support remove");
}
- public static Iterator cascade(Set /*of*/ iterators, Comparator c, Method merger, boolean up) {
+ public static kelondroCloneableIterator cascade(Set /*of*/ iterators, Comparator c, Method merger, boolean up) {
// this extends the ability to combine two iterators
// to the abiliy of combining a set of iterators
if (iterators == null) return null;