// using RNTuple = ROOT::Experimental::RNTuple; struct Byte_Range { u64 start, len; u64 end() const { return start + len; } }; struct Page_Info_Node { Page_Info_Node *next; Byte_Range range; u64 n_elems; }; inline const Page_Info_Node invalid_pinfo = { nullptr, 0, 0 }; struct Page_Info_Group { Byte_Range range; Page_Info_Node *first; }; struct Page_Info_Chunk { Page_Info_Chunk *next; Byte_Range range; u64 first_group; }; struct RNTuple_Data { struct { u16 epoch, major, minor, patch; } version; u64 root_file_header_size; u64 rblob_header_size; Byte_Range rng_anchor; Byte_Range rng_anchor_key; Byte_Range rng_header; Byte_Range rng_footer; Page_Info_Node *pages; u64 n_pages; // total number of elements of all pages u64 n_elems; Page_Info_Group *page_groups; u64 n_page_groups; // grouping of consecutive page groups Page_Info_Chunk *page_chunks; u64 n_page_chunks; };