I am in the process of regularizing groot’s I/O system and while planning for the refactoring, it occurred to me I didn’t completely grasp the mental model for when the on-disk representation of a value (of some type) had the
4+2 bytes header (usually holding a version + byte count).
for example, a
TString doesn’t need such a header, but a
std::vector<T> needs it, but in some cases, doesn’t (usually, IIUC, the decision whether to include a header is related to whether the container is “nested” or not).
is there a formalized document that specifies all this, or a rationale one can hang to?
also: is this mechanism specified in next-gen I/O, a.k.a
RNTuple ? (apologies, I haven’t read in details the
RNTuple on-disk representation specifications. yet.)
thanks for any (BSD-friendly) pointer,