- more asserts

- better memory usage during remove in kelondroRowSet

git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@3022 6c8d7289-2bf4-0310-a012-ef5d649a1542
pull/1/head
orbiter 19 years ago
parent 7dbcd358b4
commit 4ce590622f

@ -396,7 +396,7 @@ public class IndexControl_p {
seed = (yacySeed) e.nextElement(); seed = (yacySeed) e.nextElement();
if (seed != null) { if (seed != null) {
prop.put("hosts_" + hc + "_hosthash", seed.hash); prop.put("hosts_" + hc + "_hosthash", seed.hash);
prop.put("hosts_" + hc + "_hostname", /*seed.hash + " " +*/ seed.get(yacySeed.NAME, "nameless")); prop.put("hosts_" + hc + "_hostname", seed.hash + " " + seed.get(yacySeed.NAME, "nameless"));
hc++; hc++;
} }
} }

@ -269,17 +269,33 @@ public class kelondroRowCollection {
} }
protected final void removeShift(int pos, int dist, int upBound) { protected final void removeShift(int pos, int dist, int upBound) {
assert ((pos + dist) * rowdef.objectsize() >= 0) : "pos = " + pos + ", dist = " + dist + ", rowdef.objectsize() = " + rowdef.objectsize;
assert (pos * rowdef.objectsize() >= 0) : "pos = " + pos + ", rowdef.objectsize() = " + rowdef.objectsize;
assert ((pos + dist) * rowdef.objectsize() + (upBound - pos - dist) * rowdef.objectsize() <= chunkcache.length) : "pos = " + pos + ", dist = " + dist + ", rowdef.objectsize() = " + rowdef.objectsize + ", upBound = " + upBound + ", chunkcache.length = " + chunkcache.length;
assert (pos * rowdef.objectsize() + (upBound - pos - dist) * rowdef.objectsize() <= chunkcache.length) : "pos = " + pos + ", dist = " + dist + ", rowdef.objectsize() = " + rowdef.objectsize + ", upBound = " + upBound + ", chunkcache.length = " + chunkcache.length;
System.arraycopy(chunkcache, (pos + dist) * rowdef.objectsize(), System.arraycopy(chunkcache, (pos + dist) * rowdef.objectsize(),
chunkcache, pos * rowdef.objectsize(), chunkcache, pos * rowdef.objectsize(),
(upBound - pos - dist) * rowdef.objectsize()); (upBound - pos - dist) * rowdef.objectsize());
} }
public final void removeShift(int p) { protected final void copytop(int i) {
assert ((p >= 0) && (p < chunkcount) && (chunkcount > 0)); // copies the topmost row element to given position
//System.out.println("REMOVE at pos " + p + ", chunkcount=" + chunkcount + ", sortBound=" + sortBound); if (i == chunkcount - 1) return;
System.arraycopy(chunkcache, this.rowdef.objectsize() * (chunkcount - 1), chunkcache, this.rowdef.objectsize() * i, this.rowdef.objectsize());
}
protected final void removeRow(int p) {
assert ((p >= 0) && (p < chunkcount) && (chunkcount > 0)) : "p = " + p + ", chunkcount = " + chunkcount;
synchronized (chunkcache) { synchronized (chunkcache) {
if (p < sortBound) sortBound--; if (p < sortBound) {
removeShift(p, 1, chunkcount--); sortBound--;
removeShift(p, 1, chunkcount);
chunkcount--;
} else {
copytop(p);
chunkcount--;
}
} }
this.lastTimeWrote = System.currentTimeMillis(); this.lastTimeWrote = System.currentTimeMillis();
} }
@ -328,7 +344,7 @@ public class kelondroRowCollection {
public void remove() { public void remove() {
p--; p--;
removeShift(p); removeRow(p);
} }
} }
@ -466,7 +482,7 @@ public class kelondroRowCollection {
while (i < chunkcount - 1) { while (i < chunkcount - 1) {
if (compare(i, i + 1) == 0) { if (compare(i, i + 1) == 0) {
//System.out.println("DOUBLE: " + new String(this.chunkcache, this.chunksize * i, this.chunksize)); //System.out.println("DOUBLE: " + new String(this.chunkcache, this.chunksize * i, this.chunksize));
removeShift(i); removeRow(i);
} else { } else {
i++; i++;
} }

@ -154,8 +154,8 @@ public class kelondroRowSet extends kelondroRowCollection implements kelondroInd
if (removeMarker.size() > removeMaxSize) resolveMarkedRemoved(); if (removeMarker.size() > removeMaxSize) resolveMarkedRemoved();
} else { } else {
// remove directly by swap // remove directly by swap
if (chunkcount == sortBound) sortBound--; super.copytop(p);
super.swap(p, --chunkcount, 0); chunkcount--;
} }
profile.stopDelete(handle); profile.stopDelete(handle);

Loading…
Cancel
Save