|
Boost Users : |
From: Oliver Kania (kania.oliver_at_[hidden])
Date: 2007-11-09 11:25:40
Hello Robert,
it compiles by making m_offlineMode mutable :)
I can live without it by simply putting the bools into the archive
like
ar & true
ar & true
( Someone said this works, didnt try it though)
I can assure you I know what I am doing. I need to alter the state of the
program depending on whether I am using something loaded from disk or not.
Of course, there would be other ways but this seems to be most elegant to me
...
Since I am deserializing the same vars in the same sequence as I am
serializing, there
shouldnt be a problem. (Or is there ? The bools I am changing during save()
affect the maps in no way ...)
kind regards,
Oliver
On Nov 9, 2007 5:13 PM, Robert Ramey <ramey_at_[hidden]> wrote:
> I can't imagin how something like
>
> m_offlineMode = true;
> even compiles given that save is a "const" function.
>
> If you can't live without this, it suggests that your saving operation
> is altering the thing its saving - which would conflict with the
> the idea that only one copy of anything is actually saved.
>
> From looking at this - that's the only think I can ay.
>
> Robert Ramey
>
>
> "Oliver Kania" <kania.oliver_at_[hidden]> wrote in message
> news:1262c4ee0711090524w3a2e1a8i3355283c8c65ed98_at_mail.gmail.com...
> I have the following two data structures:
>
> std::map<const std::string, boost::shared_ptr< C >,
> jedox::util::CaseInsensitiv > m_LookupName;
> std::map<unsigned int, boost::shared_ptr< C > > m_LookupId;
>
> Before serialization, the shared pointer - values of the maps do point to
> sth. meaningful.
> Afterwards, however, they point to data-structures with meaningless
> content.
> The keys (strings / ints) are serialized / unserialized correctly.
> I guess its a general problem with serializing shared pointers contained
> in a std::map as values !?
> BTW: the structures the shared pointers point to do have a serialization
> method themselves and I a
> assume that it is called when serializing the map.
>
> I serialize / unserialize as follows:
>
>
> template<class Archive>
> void save( Archive &ar, unsigned int version) const{
>
> m_offlineMode = true;
> bool oldCachedAll = m_CachedAll;
> m_CachedAll = true;
> ar & m_CachedAll;
> ar & m_offlineMode;
> // do not serialize the lock -- use the default
> constructor.
> // we assume that no iterators that lock the cache do
> exist when serializing.
> // ar & m_Lock;
> ar & m_LookupId; // 1st structure
> ar & m_LookupName; // 2nd structure
> ar & m_SequenceNumber;
> //reset old state for the case we want to continue working
> m_CachedAll = oldCachedAll;
> m_offlineMode = false;
> }
>
> template<class Archive>
> void load( Archive &ar, unsigned int version) {
>
> ar & m_CachedAll;
> ar & m_offlineMode;
> // do not serialize the lock -- use the default
> constructor.
> // we assume that no iterators that lock the cache do
> exist when serializing.
> // ar & m_Lock;
> ar & m_LookupId;
> ar & m_LookupName;
> ar & m_SequenceNumber;
> //reset old state for the case we want to continue working
> }
>
> kind regards, Oliver
>
> ------------------------------
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net