Boost logo

Boost Users :

Subject: [Boost-users] [Serialization] Why not allowing reset_object_address on object serialized throw a pointer ?
From: Alain KOCELNIAK (alain_at_[hidden])
Date: 2010-07-16 09:53:16

This issue has already been discussed but was never addressed :
I don't understand why objects loaded as pointer can't be relocated :
- These objects are stored in basic_iarchive_impl::object_id_vector as the
others, so, technically speaking, we can change their "address"
- There is situations where it is mandatory : for example when data, sharing
some objects, are serialized / dispatched in separate archives
  => without relocating service at loading, sharing of object is not
For the moment, I workaround the limitation with a hack in the method
basic_iarchive_impl::reset_object_address :
I remove the "safeguard" which checks that the method is applied on a
tracked object and immediately after
the concerned object is read :
for(i = moveable_objects_recent; i < moveable_objects_end; ++i){
  if(old_address == object_id_vector[i].address)
for(; i < moveable_objects_end; ++i){
is replaced by
for(i = 0; i < object_id_vector.size(); ++i){
I think that the limit can be properly removed by handling in
"basic_iarchive_impl::load_pointer" the "moveable_objects_..." variables
as it is done in "basic_iarchive_impl::load_object"
As objects created by the serialization system are marked with
"loaded_as_pointer" = true
(this data is used by basic_iarchive_impl::delete_created_pointers) I think
this data should be set to false by "reset_object_address".
Is there other implication ?

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at