Skip to content

Commit 465ea15

Browse files
committed
Updates for v2 arch
1 parent 7fc80c4 commit 465ea15

12 files changed

Lines changed: 499 additions & 250 deletions

File tree

src/main/java/org/hdf5javalib/examples/hdf5examples/HDF5Debug.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ private void run() {
5555
// List all .h5 files in HDF5Examples resources directory
5656
// ATL03_20250302235544_11742607_006_01
5757
// Path dirPath = Paths.get(Objects.requireNonNull(HDF5Debug.class.getClassLoader().getResource("HDF5Examples/h5ex_g_compact2.h5")).toURI());
58-
Path dirPath = Paths.get("c:/users/karnicho/Downloads/ATL03_20250302235544_11742607_006_01.h5");
58+
Path dirPath = Paths.get("c:/users/karln/Downloads/ATL03_20250302235544_11742607_006_01.h5");
5959
processFile(dirPath);
6060
} catch (Exception e) {
6161
throw new IllegalStateException(e);
@@ -66,19 +66,19 @@ private static void processFile(Path filePath) {
6666
try (SeekableByteChannel channel = Files.newByteChannel(filePath, StandardOpenOption.READ)) {
6767
HdfFileReader reader = new HdfFileReader(channel).readFile();
6868

69-
// for (HdfDataset dataSet : reader.getDatasets()) {
70-
// System.out.println("{} " + dataSet);
69+
for (HdfDataset dataSet : reader.getDatasets()) {
70+
System.out.println("{} " + dataSet);
71+
// log.info("{} ", dataSet);
72+
HdfDisplayCountUtils.displayData(channel, dataSet, reader);
73+
// displayScalarData(channel, dataSet, HdfFloatPoint.class, reader);
74+
}
75+
76+
// HdfDataset dataSet = reader.getDataset("/gt1l/heights/delta_time").get();
77+
// System.out.println("{} " + dataSet);
78+
//// System.out.println("{} " + dataSet.getObjectPath());
7179
//// log.info("{} ", dataSet);
7280
// HdfDisplayCountUtils.displayData(channel, dataSet, reader);
7381
//// displayScalarData(channel, dataSet, HdfFloatPoint.class, reader);
74-
// }
75-
76-
HdfDataset dataSet = reader.getDataset("/gt1l/heights/delta_time").get();
77-
System.out.println("{} " + dataSet);
78-
// System.out.println("{} " + dataSet.getObjectPath());
79-
// log.info("{} ", dataSet);
80-
HdfDisplayUtils.displayData(channel, dataSet, reader);
81-
// displayScalarData(channel, dataSet, HdfFloatPoint.class, reader);
8282

8383
} catch (Exception e) {
8484
log.error("Exception in processFile: {}", filePath, e);

src/main/java/org/hdf5javalib/hdffile/dataobjects/messages/DataLayoutMessage.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import org.hdf5javalib.dataclass.reference.HdfDataspaceSelectionInstance;
55
import org.hdf5javalib.datatype.FixedPointDatatype;
66
import org.hdf5javalib.hdffile.infrastructure.HdfBTreeV1;
7+
import org.hdf5javalib.hdffile.infrastructure.HdfBTreeV1ForChunk;
78
import org.hdf5javalib.hdfjava.HdfDataFile;
89
import org.hdf5javalib.hdfjava.HdfFileReader;
910
import org.hdf5javalib.utils.HdfDisplayUtils;
@@ -127,7 +128,7 @@ public static HdfMessage parseHeaderMessage(int flags, byte[] data, HdfDataFile
127128
HdfFixedPoint chunkedDataAddress;
128129
HdfFixedPoint[] dimensionSizes;
129130
HdfFixedPoint datasetElementSize;
130-
HdfBTreeV1 bTree;
131+
HdfBTreeV1ForChunk bTree;
131132
int numDimensions;
132133
if (version == 1 || version == 2) {
133134
chunkedDataAddress = HdfReadUtils.readHdfFixedPointFromBuffer(hdfDataFile.getSuperblock().getFixedPointDatatypeForOffset(), buffer);
@@ -323,7 +324,7 @@ public static class ChunkedStorage extends DataLayoutStorage {
323324
private final HdfFixedPoint chunkedDataAddress;
324325
private final HdfFixedPoint[] dimensionSizes;
325326
private final HdfFixedPoint datasetElementSize;
326-
private final HdfBTreeV1 bTree;
327+
private final HdfBTreeV1ForChunk bTree;
327328

328329
/**
329330
* Constructs a ChunkedStorage instance.
@@ -332,7 +333,7 @@ public static class ChunkedStorage extends DataLayoutStorage {
332333
* @param chunkedDataAddress the file address of the chunked data
333334
* @param datasetElementSize datasetElementSize
334335
*/
335-
public ChunkedStorage(HdfFixedPoint chunkedDataAddress, HdfFixedPoint[] dimensionSizes, HdfFixedPoint datasetElementSize, HdfBTreeV1 bTree, HdfDataFile hdfDataFile) {
336+
public ChunkedStorage(HdfFixedPoint chunkedDataAddress, HdfFixedPoint[] dimensionSizes, HdfFixedPoint datasetElementSize, HdfBTreeV1ForChunk bTree, HdfDataFile hdfDataFile) {
336337
super(hdfDataFile);
337338
this.chunkedDataAddress = chunkedDataAddress;
338339
this.dimensionSizes = dimensionSizes;
@@ -348,7 +349,7 @@ public HdfFixedPoint getDatasetElementSize() {
348349
return datasetElementSize;
349350
}
350351

351-
public HdfBTreeV1 getBTree() {
352+
public HdfBTreeV1ForChunk getBTree() {
352353
return bTree;
353354
}
354355

src/main/java/org/hdf5javalib/hdffile/infrastructure/HdfBTreeEntryBase.java

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

src/main/java/org/hdf5javalib/hdffile/infrastructure/HdfBTreeV1.java

Lines changed: 3 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@
1919
*
2020
* @see HdfDataFile
2121
* @see HdfFixedPoint
22-
* @see org.hdf5javalib.hdffile.infrastructure.HdfBTreeEntryBase
22+
* @see org.hdf5javalib.hdffile.infrastructure.HdfGroupForGroupBTreeEntry
2323
*/
24-
public class HdfBTreeV1 {
24+
public abstract class HdfBTreeV1 {
2525
/**
2626
* The type of the node (0 for group B-Tree).
2727
*/
@@ -42,18 +42,6 @@ public class HdfBTreeV1 {
4242
* The address of the right sibling node.
4343
*/
4444
private final HdfFixedPoint rightSiblingAddress;
45-
/**
46-
* The first key (key zero) of the node.
47-
*/
48-
private final HdfFixedPoint keyZero;
49-
/**
50-
* The list of B-Tree entries.
51-
*/
52-
private final List<HdfBTreeEntryBase> entries;
53-
/**
54-
* The HDF5 file context.
55-
*/
56-
private final HdfDataFile hdfDataFile;
5745

5846
/**
5947
* Constructs an HdfTree with all fields specified.
@@ -63,55 +51,19 @@ public class HdfBTreeV1 {
6351
* @param entriesUsed the number of entries used in the node
6452
* @param leftSiblingAddress the address of the left sibling node
6553
* @param rightSiblingAddress the address of the right sibling node
66-
* @param keyZero the first key of the node
67-
* @param entries the list of B-Tree entries
68-
* @param hdfDataFile the HDF5 file context
6954
*/
7055
public HdfBTreeV1(
7156
int nodeType,
7257
int nodeLevel,
7358
int entriesUsed,
7459
HdfFixedPoint leftSiblingAddress,
75-
HdfFixedPoint rightSiblingAddress,
76-
HdfFixedPoint keyZero,
77-
List<HdfBTreeEntryBase> entries,
78-
HdfDataFile hdfDataFile
60+
HdfFixedPoint rightSiblingAddress
7961
) {
8062
this.nodeType = nodeType;
8163
this.nodeLevel = nodeLevel;
8264
this.entriesUsed = entriesUsed;
8365
this.leftSiblingAddress = leftSiblingAddress;
8466
this.rightSiblingAddress = rightSiblingAddress;
85-
this.keyZero = keyZero;
86-
this.entries = entries;
87-
this.hdfDataFile = hdfDataFile;
88-
}
89-
90-
/**
91-
* Constructs an HdfTree with minimal fields for a new node.
92-
*
93-
* @param nodeType the type of the node (0 for group B-Tree)
94-
* @param nodeLevel the level of the node (0 for leaf, >0 for internal)
95-
* @param leftSiblingAddress the address of the left sibling node
96-
* @param rightSiblingAddress the address of the right sibling node
97-
* @param hdfDataFile the HDF5 file context
98-
*/
99-
public HdfBTreeV1(
100-
int nodeType,
101-
int nodeLevel,
102-
HdfFixedPoint leftSiblingAddress,
103-
HdfFixedPoint rightSiblingAddress,
104-
HdfDataFile hdfDataFile,
105-
HdfFixedPoint offset
106-
) {
107-
this.nodeType = nodeType;
108-
this.nodeLevel = nodeLevel;
109-
this.hdfDataFile = hdfDataFile;
110-
this.entriesUsed = 0;
111-
this.leftSiblingAddress = leftSiblingAddress;
112-
this.rightSiblingAddress = rightSiblingAddress;
113-
this.keyZero = HdfWriteUtils.hdfFixedPointFromValue(0, hdfDataFile.getSuperblock().getFixedPointDatatypeForLength());
114-
this.entries = new ArrayList<>();
11567
}
11668

11769
/**
@@ -129,31 +81,12 @@ public String toString() {
12981
sb.append(", entriesUsed=").append(entriesUsed);
13082
sb.append(", leftSiblingAddress=").append(leftSiblingAddress.isUndefined() ?HdfDisplayUtils.UNDEFINED: leftSiblingAddress);
13183
sb.append(", rightSiblingAddress=").append(rightSiblingAddress.isUndefined() ?HdfDisplayUtils.UNDEFINED: rightSiblingAddress);
132-
sb.append(", keyZero=").append(keyZero);
13384
sb.append(", entries=[");
134-
if (entries != null && !entries.isEmpty()) {
135-
boolean first = true;
136-
for (HdfBTreeEntryBase entry : entries) {
137-
if (!first) {
138-
sb.append(", ");
139-
}
140-
sb.append(entry);
141-
first = false;
142-
}
143-
} else if (entries != null) {
144-
sb.append("<empty>");
145-
} else {
146-
sb.append("<null>");
147-
}
14885
sb.append("]");
14986
sb.append('}');
15087
return sb.toString();
15188
}
15289

153-
public List<HdfBTreeEntryBase> getEntries() {
154-
return entries;
155-
}
156-
15790
public int getNodeLevel() {
15891
return nodeLevel;
15992
}
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package org.hdf5javalib.hdffile.infrastructure;
2+
3+
import org.hdf5javalib.dataclass.HdfFixedPoint;
4+
import org.hdf5javalib.hdfjava.HdfDataFile;
5+
import org.hdf5javalib.utils.HdfDisplayUtils;
6+
import org.hdf5javalib.utils.HdfWriteUtils;
7+
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
/**
12+
* Represents an HDF5 B-Tree (version 1) as defined in the HDF5 specification.
13+
* <p>
14+
* The {@code HdfTree} class models a B-Tree used for indexing group entries in HDF5 files.
15+
* It supports both leaf nodes (containing symbol table nodes) and internal nodes (containing
16+
* child B-Trees). This class provides methods for reading from a file channel, adding datasets,
17+
* splitting symbol table nodes, and writing the B-Tree structure back to a file.
18+
* </p>
19+
*
20+
* @see HdfDataFile
21+
* @see HdfFixedPoint
22+
* @see HdfGroupForGroupBTreeEntry
23+
*/
24+
public class HdfBTreeV1ForChunk extends HdfBTreeV1{
25+
/**
26+
* The list of B-Tree entries.
27+
*/
28+
private final List<HdfGroupForChunkBTreeEntry> entries;
29+
30+
/**
31+
* Constructs an HdfTree with all fields specified.
32+
*
33+
* @param nodeType the type of the node (0 for group B-Tree)
34+
* @param nodeLevel the level of the node (0 for leaf, >0 for internal)
35+
* @param entriesUsed the number of entries used in the node
36+
* @param leftSiblingAddress the address of the left sibling node
37+
* @param rightSiblingAddress the address of the right sibling node
38+
* @param entries the list of B-Tree entries
39+
*/
40+
public HdfBTreeV1ForChunk(
41+
int nodeType,
42+
int nodeLevel,
43+
int entriesUsed,
44+
HdfFixedPoint leftSiblingAddress,
45+
HdfFixedPoint rightSiblingAddress,
46+
List<HdfGroupForChunkBTreeEntry> entries
47+
) {
48+
super(nodeType, nodeLevel, entriesUsed, leftSiblingAddress, rightSiblingAddress);
49+
this.entries = entries;
50+
}
51+
52+
/**
53+
* Returns a string representation of the HdfTree.
54+
*
55+
* @return a string describing the node's signature, type, level, entries, and structure
56+
*/
57+
@Override
58+
public String toString() {
59+
StringBuilder sb = new StringBuilder();
60+
sb.append("HdfTree{");
61+
sb.append("signature='").append("TREE").append('\'');
62+
sb.append(", entries=[");
63+
if (entries != null && !entries.isEmpty()) {
64+
boolean first = true;
65+
for (HdfGroupForChunkBTreeEntry entry : entries) {
66+
if (!first) {
67+
sb.append(", ");
68+
}
69+
sb.append(entry);
70+
first = false;
71+
}
72+
} else if (entries != null) {
73+
sb.append("<empty>");
74+
} else {
75+
sb.append("<null>");
76+
}
77+
sb.append("]");
78+
sb.append('}');
79+
return sb.toString();
80+
}
81+
82+
public List<HdfGroupForChunkBTreeEntry> getEntries() {
83+
return entries;
84+
}
85+
86+
}

0 commit comments

Comments
 (0)