2024-07-12 09:53:01 +02:00
|
|
|
// using RNTuple = ROOT::Experimental::RNTuple;
|
2024-07-11 14:00:43 +02:00
|
|
|
|
|
|
|
struct Byte_Range {
|
|
|
|
u64 start, len;
|
|
|
|
u64 end() const { return start + len; }
|
|
|
|
};
|
|
|
|
|
2024-07-12 18:29:35 +02:00
|
|
|
struct Page_Info_Node {
|
|
|
|
Page_Info_Node *next;
|
|
|
|
|
2024-07-16 12:04:38 +02:00
|
|
|
Byte_Range range; // len includes checksum
|
|
|
|
i32 n_elems; // negative = page has checksum
|
|
|
|
|
|
|
|
u64 checksum_size() const {
|
|
|
|
return (n_elems < 0) * 8;
|
|
|
|
}
|
2024-07-12 18:29:35 +02:00
|
|
|
};
|
|
|
|
|
2024-07-18 17:43:44 +02:00
|
|
|
// Used to store location information about stuff like checksums, page lists, etc
|
|
|
|
struct Range_Seq {
|
|
|
|
Range_Seq *next;
|
|
|
|
Byte_Range range;
|
|
|
|
};
|
|
|
|
|
2024-07-15 11:54:45 +02:00
|
|
|
static const Page_Info_Node invalid_pinfo {};
|
2024-07-15 11:29:32 +02:00
|
|
|
|
2024-07-12 18:29:35 +02:00
|
|
|
struct Page_Info_Group {
|
|
|
|
Byte_Range range;
|
|
|
|
Page_Info_Node *first;
|
|
|
|
};
|
|
|
|
|
2024-07-15 11:29:32 +02:00
|
|
|
struct Page_Info_Chunk {
|
|
|
|
Page_Info_Chunk *next;
|
|
|
|
Byte_Range range;
|
2024-07-16 11:12:50 +02:00
|
|
|
u32 first_group;
|
2024-07-15 11:29:32 +02:00
|
|
|
};
|
|
|
|
|
2024-07-16 14:34:51 +02:00
|
|
|
struct Cluster_Info_Node {
|
|
|
|
Cluster_Info_Node *next;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct Cluster_Group_Info {
|
|
|
|
Byte_Range rng_page_list;
|
|
|
|
};
|
|
|
|
|
2024-07-18 15:32:32 +02:00
|
|
|
struct TFile_Data {
|
|
|
|
u64 root_file_header_size;
|
|
|
|
Byte_Range rng_root_file_obj;
|
|
|
|
u16 root_version_major;
|
|
|
|
u16 root_version_minor;
|
|
|
|
u16 root_version_patch;
|
2024-07-18 15:56:55 +02:00
|
|
|
u32 compression;
|
|
|
|
Byte_Range rng_root_file_info;
|
|
|
|
Byte_Range rng_root_file_free;
|
2024-07-18 15:32:32 +02:00
|
|
|
};
|
|
|
|
|
2024-07-12 11:58:55 +02:00
|
|
|
struct RNTuple_Data {
|
2024-07-12 10:25:58 +02:00
|
|
|
struct {
|
|
|
|
u16 epoch, major, minor, patch;
|
|
|
|
} version;
|
|
|
|
|
2024-07-11 16:29:44 +02:00
|
|
|
u64 rblob_header_size;
|
|
|
|
Byte_Range rng_anchor;
|
|
|
|
Byte_Range rng_anchor_key;
|
|
|
|
Byte_Range rng_header;
|
|
|
|
Byte_Range rng_footer;
|
2024-07-12 18:29:35 +02:00
|
|
|
|
|
|
|
Page_Info_Node *pages;
|
|
|
|
u64 n_pages;
|
|
|
|
// total number of elements of all pages
|
|
|
|
u64 n_elems;
|
2024-07-16 14:34:51 +02:00
|
|
|
u64 tot_page_size;
|
|
|
|
|
2024-07-18 17:43:44 +02:00
|
|
|
Range_Seq *checksums;
|
|
|
|
u64 n_checksums;
|
|
|
|
|
|
|
|
Range_Seq *page_lists;
|
|
|
|
u64 n_page_lists;
|
|
|
|
|
2024-07-16 14:34:51 +02:00
|
|
|
Cluster_Group_Info *cluster_groups;
|
|
|
|
u64 n_cluster_groups;
|
|
|
|
u64 tot_page_list_size;
|
|
|
|
|
|
|
|
Cluster_Info_Node *clusters;
|
|
|
|
u64 n_clusters;
|
2024-07-12 18:29:35 +02:00
|
|
|
|
|
|
|
Page_Info_Group *page_groups;
|
|
|
|
u64 n_page_groups;
|
2024-07-15 11:29:32 +02:00
|
|
|
|
2024-07-16 11:12:50 +02:00
|
|
|
// grouping of consecutive pages
|
2024-07-15 11:29:32 +02:00
|
|
|
Page_Info_Chunk *page_chunks;
|
|
|
|
u64 n_page_chunks;
|
2024-07-11 14:00:43 +02:00
|
|
|
};
|