Skip to content

Commit 29f916c

Browse files
committed
refactor v2 code
1 parent b0fed0e commit 29f916c

33 files changed

Lines changed: 299 additions & 2325 deletions
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.hdf5javalib.hdffile.infrastructure.fractalheap;
2+
3+
//##############################################################################
4+
//### HDF5 UTILITY CLASSES
5+
//##############################################################################
6+
class BitReader {
7+
private final byte[] data;
8+
private int bitPosition;
9+
10+
public BitReader(byte[] data) {
11+
this.data = data;
12+
this.bitPosition = 0;
13+
}
14+
15+
public long read(int numBits) {
16+
if (numBits == 0) return 0;
17+
long value = 0;
18+
for (int i = 0; i < numBits; i++) {
19+
int currentBitPos = bitPosition++;
20+
int byteIndex = currentBitPos / 8;
21+
int bitIndexInByte = currentBitPos % 8;
22+
if ((data[byteIndex] & (1 << bitIndexInByte)) != 0) {
23+
value |= (1L << i);
24+
}
25+
}
26+
return value;
27+
}
28+
}

src/main/java/org/hdf5javalib/hdffile/infrastructure/fractalheap/grok/FractalHeap.java renamed to src/main/java/org/hdf5javalib/hdffile/infrastructure/fractalheap/FractalHeap.java

Lines changed: 204 additions & 121 deletions
Large diffs are not rendered by default.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.hdf5javalib.hdffile.infrastructure.fractalheap;
2+
3+
//##############################################################################
4+
//### HEAP ID PARSER
5+
//##############################################################################
6+
public class ParsedHeapId {
7+
public final int type;
8+
public final int version;
9+
public final int offset;
10+
public final int length;
11+
12+
public ParsedHeapId(byte[] rawId, FractalHeap fractalHeap) {
13+
BitReader reader = new BitReader(rawId);
14+
FractalHeap.FractalHeapHeader header = fractalHeap.getHeader();
15+
int reserved = (int) reader.read(4);
16+
this.type = (int) reader.read(2);
17+
this.version = (int) reader.read(2);
18+
if ( fractalHeap.getHeader().maximumHeapSize == 8 ) {
19+
this.offset = (int) reader.read(8);
20+
} else if ( header.maximumHeapSize == 16 ) {
21+
this.offset = (int) reader.read(16);
22+
} else if ( header.maximumHeapSize == 24 ) {
23+
this.offset = (int) reader.read(24);
24+
} else if ( header.maximumHeapSize == 32 ) {
25+
this.offset = (int) reader.read(32);
26+
} else if ( header.maximumHeapSize == 40 ) {
27+
this.offset = (int) reader.read(40);
28+
} else {
29+
throw new IllegalStateException("Cannot parse heap id: header.maximumHeapSize == " + header.maximumHeapSize);
30+
}
31+
long minOfMaxs = Math.min(header.maximumDirectBlockSize, header.sizeOfManagedObjects);
32+
if ( minOfMaxs < (1<<8) ) {
33+
this.length = (int) reader.read(8);
34+
} else if ( minOfMaxs < (1<<16) ) {
35+
this.length = (int) reader.read(16);
36+
} else if ( minOfMaxs < (1<<24) ) {
37+
this.length = (int) reader.read(24);
38+
} else {
39+
this.length = (int) reader.read(32);
40+
}
41+
}
42+
43+
@Override
44+
public String toString() {
45+
return "ParsedHeapId{" + "type=" + type + ", offset=" + offset +
46+
", length=" + length + '}';
47+
}
48+
49+
}
50+

src/main/java/org/hdf5javalib/hdffile/infrastructure/fractalheap/archive/gemini/FractalHeap.java

Lines changed: 0 additions & 175 deletions
This file was deleted.

src/main/java/org/hdf5javalib/hdffile/infrastructure/fractalheap/archive/gemini/FractalHeapDirectBlock.java

Lines changed: 0 additions & 51 deletions
This file was deleted.

0 commit comments

Comments
 (0)