better assert statements and fixes

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@2833 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 19 years ago
parent d13b381f83
commit 83a0efc65a

@ -1066,6 +1066,7 @@ public class kelondroRecords {
// move to next handle
repair_position = seekp;
h = new Handle(entryFile.readInt(seekp));
if (h.index == NUL) break;
// double-check for already stored handles: detect loops
if (markedDeleted.contains(h)) {
@ -1332,9 +1333,9 @@ public class kelondroRecords {
}
public int compareTo(Object h) {
// this is needed for a treeMap
assert (index != NUL);
assert (((Handle) h).index != NUL);
// this is needed for a TreeMap
assert (index != NUL) : "this.index is NUL in compareTo";
assert (((Handle) h).index != NUL) : "handle.index is NUL in compareTo";
if (index < ((Handle) h).index) return -1;
if (index > ((Handle) h).index) return 1;
return 0;

@ -152,22 +152,22 @@ public class kelondroRowCollection {
int needed = chunkcount * rowdef.objectsize();
if (chunkcache.length == needed) return;
byte[] newChunkcache = new byte[needed];
System.arraycopy(chunkcache, 0, newChunkcache, 0, newChunkcache.length);
System.arraycopy(chunkcache, 0, newChunkcache, 0, Math.min(chunkcache.length, newChunkcache.length));
chunkcache = newChunkcache;
newChunkcache = null;
}
}
/*
public void implantRows(byte[] b) {
assert (b.length % rowdef.objectsize() == 0);
synchronized (chunkcache) {
chunkcache = b;
chunkcount = b.length / rowdef.objectsize();
sortBound = chunkcount;
sortBound = 0;
lastTimeWrote = System.currentTimeMillis();
}
}
*/
public final long lastRead() {
return lastTimeRead;
}
@ -177,7 +177,8 @@ public class kelondroRowCollection {
}
public final kelondroRow.Entry get(int index) {
assert (index < chunkcount);
assert (index >= 0) : "get: access with index " + index + " is below zero";
assert (index < chunkcount) : "get: access with index " + index + " is above chunkcount " + chunkcount;
byte[] a = new byte[rowdef.objectsize()];
synchronized (chunkcache) {
System.arraycopy(chunkcache, index * rowdef.objectsize(), a, 0, rowdef.objectsize());
@ -191,7 +192,8 @@ public class kelondroRowCollection {
}
public final void set(int index, byte[] a, int astart, int alength) {
assert (index < this.chunkcount);
assert (index >= 0) : "get: access with index " + index + " is below zero";
assert (index < chunkcount) : "get: access with index " + index + " is above chunkcount " + chunkcount;
int l = Math.min(rowdef.objectsize(), Math.min(alength, a.length - astart));
synchronized (chunkcache) {
System.arraycopy(a, astart, chunkcache, index * rowdef.objectsize(), l);
@ -238,13 +240,13 @@ public class kelondroRowCollection {
System.arraycopy(chunkcache, (pos + dist) * rowdef.objectsize(),
chunkcache, pos * rowdef.objectsize(),
(upBound - pos - dist) * rowdef.objectsize());
if ((pos < sortBound) && (upBound >= sortBound)) sortBound -= dist;
}
public final void removeShift(int p) {
assert ((p >= 0) && (p < chunkcount) && (chunkcount > 0));
//System.out.println("REMOVE at pos " + p + ", chunkcount=" + chunkcount + ", sortBound=" + sortBound);
synchronized (chunkcache) {
if (p < sortBound) sortBound--;
removeShift(p, 1, chunkcount--);
}
this.lastTimeWrote = System.currentTimeMillis();
@ -253,10 +255,11 @@ public class kelondroRowCollection {
public kelondroRow.Entry removeOne() {
synchronized (chunkcache) {
if (chunkcount == 0) return null;
kelondroRow.Entry r = get(chunkcount - 1);
if (chunkcount == sortBound) sortBound--;
chunkcount--;
this.lastTimeWrote = System.currentTimeMillis();
return get(chunkcount);
return r;
}
}
@ -294,6 +297,7 @@ public class kelondroRowCollection {
public void remove() {
p--;
System.arraycopy(chunkcache, (p + 1) * rowdef.objectsize(), chunkcache, p * rowdef.objectsize(), (chunkcount - p - 1) * rowdef.objectsize());
if (chunkcount == sortBound) sortBound--;
chunkcount--;
}
}
@ -336,7 +340,7 @@ public class kelondroRowCollection {
private final void qsort(int L, int S, int R) {
//System.out.println("QSORT: chunkcache.length=" + chunkcache.length + ", chunksize=" + chunksize + ", L=" + L + ", S=" + S + ", R=" + R);
assert (S <= R);
assert (S <= R) : "S > R: S = " + S + ", R = " + R;
if (L >= R - 1) return;
if (S >= R) return;

@ -169,9 +169,11 @@ public class kelondroRowSet extends kelondroRowCollection implements kelondroInd
Integer nxt = (Integer) removeMarker.first();
removeMarker.remove(nxt);
int idx = nxt.intValue();
assert (idx < sortBound);
int d = 1;
while (removeMarker.size() > 0) {
nxt = (Integer) removeMarker.first();
assert (nxt.intValue() < sortBound);
removeMarker.remove(nxt);
super.removeShift(idx, d, nxt.intValue());
idx = nxt.intValue() - d;
@ -179,6 +181,7 @@ public class kelondroRowSet extends kelondroRowCollection implements kelondroInd
}
super.removeShift(idx, d, chunkcount);
chunkcount -= d;
sortBound -= d; // there are all markers below the sortBound
removeMarker.clear();
}

Loading…
Cancel
Save