Skip to content

Conversation

@pcanal
Copy link
Member

@pcanal pcanal commented Feb 8, 2026

References for class names and objects are stored in 64bits whenever they are
located past 1GB.  This is the 'only' option as there are no control bits left
to distinguish between a 32bits and a 64bits reference.

Reference in the longRange section (>1GB) are now tagged so that we can differentiate nullptr
(stored as only 32 bits) from short reference stored in the longRange section (i.e. those are stored
in 64 bits but have only zeros in the high bit).

ferdymercury and others added 22 commits February 6, 2026 17:19
Fixes root-project#14770

[io] add more checks in TBuffer functions

as suggested by jblomer
In order to support 64 bits byte counts, which do not fit in the space reserved
for them in the stream (4 bytes minus 2 control bits) and to work around the
fact that the variables that holds the position and the byte count information in
Streamer functions are only 32 bits (see arguments to TBufferFile::WriteVersion
and TBufferFile::ReadVersion), we need to pass them indirectly when they needs 64 bits

Since the streaming is inherently serial, we can leverage the
sequence of calls and cache the 64 bits values in a queue.

The bytecount that can not be stored in place inside the io stream will be held
in a collection (fByteCounts) that need to be stored externally to the
buffer.
Note to store and restore the larger than 1GB byte count use:

  // Copy the content of the const reference.
  auto bytecounts{b.GetByteCounts()};
  ...
  b.SetByteCounts(std::move(bytecounts));
For now, the testing of the long range references is disabled.
References for class names and objects are stored in 64bits whenever they are
located past 1GB.  This is the 'only' option as there are no control bits left
to distinguish between a 32bits and a 64bits reference.
Reference in the longRange section (>1GB) are now tagged so that we can differentiate nullptr
(stored as only 32 bits) from short reference stored in the longRange section (i.e. those are stored
in 64 bits but have only zeros in the high bit).
@pcanal
Copy link
Member Author

pcanal commented Feb 8, 2026

Wrong target branch.

@pcanal pcanal closed this Feb 8, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants