How does Reflex treat pointers to same array?

As an additional note, I recognize now that gsl_vector.block is a non-array pointer. How would this be annotated for Reflex – //[1]?

Pointers to numeric type are assumed to be arrays and thus need to be decorated.
Pointers to objects are assumed to be non-array and a single element is stored.

will Reflex recognize that these are two pointers to the same array?

In ROOT I/O we do have, for objects only, code to recognize that the same objects is being stored twice (within an I/O operation). Consequently, you example would have worked if the data has been struct/classes. For numeric type, this detection has not been implemented (as it is very rare but would still come to a cost to all cases).

Instead in this case, I recommend to set gsl_vector::data as a transient member (never saved) and add an I/O customization rules that sets gsl_vector::data to the value of gsl_vector::block::data at the end of the streaming.

Cheers,
Philippe.

1 Like