aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/io/trygvis/btree/HeapPage.java
diff options
context:
space:
mode:
authorTrygve Laugstøl <trygvis@inamo.no>2013-09-15 01:03:55 +0200
committerTrygve Laugstøl <trygvis@inamo.no>2013-09-15 01:03:55 +0200
commit36f14deae7f1ccf297e7297c68f8ede4e025d1c9 (patch)
treeaf196a3f807735ea74bc0ab2c6d988f9dcbaf67c /src/main/java/io/trygvis/btree/HeapPage.java
parentb1271a305e0a3bb07cf6cafaea25a539ffd9ab5e (diff)
downloadbtree-36f14deae7f1ccf297e7297c68f8ede4e025d1c9.tar.gz
btree-36f14deae7f1ccf297e7297c68f8ede4e025d1c9.tar.bz2
btree-36f14deae7f1ccf297e7297c68f8ede4e025d1c9.tar.xz
btree-36f14deae7f1ccf297e7297c68f8ede4e025d1c9.zip
o Adding a more comprehensive test of the heap file. Still needs a lot more work.
Diffstat (limited to 'src/main/java/io/trygvis/btree/HeapPage.java')
-rw-r--r--src/main/java/io/trygvis/btree/HeapPage.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/main/java/io/trygvis/btree/HeapPage.java b/src/main/java/io/trygvis/btree/HeapPage.java
index 499a244..a931260 100644
--- a/src/main/java/io/trygvis/btree/HeapPage.java
+++ b/src/main/java/io/trygvis/btree/HeapPage.java
@@ -22,7 +22,12 @@ public class HeapPage {
}
public static HeapPage heapPageFromBytes(int pageNumber, ByteBuffer bytes) {
- int freePosition = bytes.getInt();
+ int freePosition = bytes.getInt(FREE_POSITION_INDEX);
+
+ if (freePosition > bytes.capacity() || freePosition < headerSize) {
+ throw new RuntimeException("Invalid free position: " + freePosition);
+ }
+
return new HeapPage(pageNumber, bytes, freePosition);
}
@@ -31,8 +36,6 @@ public class HeapPage {
}
public void append(byte[] item) {
-// System.out.println("io.trygvis.btree.HeapPage.append");
-
int bytesFree = bytesFree();
int bytesRequested = item.length;
@@ -58,6 +61,8 @@ public class HeapPage {
return new Iterable<ByteBuffer>() {
@Override
public Iterator<ByteBuffer> iterator() {
+ System.out.println("io.trygvis.btree.HeapPage.iterator");
+
return new Iterator<ByteBuffer>() {
private int position;
@@ -65,21 +70,27 @@ public class HeapPage {
{
position = bytes.capacity();
+ System.out.println("position = " + position);
next = findNext();
}
private ByteBuffer findNext() {
+ System.out.println("io.trygvis.btree.HeapPage.findNext");
if (position == headerSize) {
+ System.out.println("at end");
return null;
}
int size = bytes.getInt(position - itemSize);
if (size == 0) {
+ System.out.println("at end");
return null;
}
position -= itemSize + size;
+
+ System.out.println("item: size: " + size + ", new position: " + position);
ByteBuffer copy = bytes.duplicate();
copy.position(position);
copy.limit(position + size);