to handle circular nested shared pointer references, we split registration
for an id into a pre and post portion, where pre marks it as being dirty and
post marks it clean (valid). if we are loading up a reference to something that is
in the progress of being loaded (a nested case), we defer our load until it is no longer
dirty and perform the load afer the post condition happens.
load_and_allocate did not properly enter into the 'data' NVP that the
ptr_wrapper creates for unique/shared ptr. When loading these types,
we now go through a wrapper struct to force entry into an extra node to
resolve this issue.
Changes to unittests are for an issue compiling with g++-4.7.3 under
Ubuntu where steady_clock::now() is not defined for some reason
closes#38
Added a preprocessor define CEREAL_OLDER_GCC that exists if using
any GCC 4.7.x or earlier. If this is defined some type traits change to
our original solution (prior to VS compatible), which is probably what we'd switch
to if VS ever gets around to fully supporting SFINAE and constexpr.
In map and set, as well as in unit tests, use insert instead of emplace for 4.7.x.
-Convert to int with constexpr in reader/writer to avoid
always false comparison error in gcc 4.7.3
-make clean now removes visual studio sandbox if built
-fixes to traits for 4.7, still more to do there
see #38
See issue #17
Somewhere along the way we've also broken our ability to compile with GCC 4.7.3. We'll have to decide if we care about
supporting 4.7.3 or not. The changes that break this are:
-there is no emplace in std::map (or related) in 4.7.3
-there are some enable_ifs in rapidjson's writer.h that are always false (which is fine), but
GCC 4.7.3 doesn't like this
Separating actual boost transition layer (operator&, <<, >>) with the versioning
stuff, which is now a feature of cereal on its own.
Moving macro for defining version information into cereal.hpp to make it visible.
Added code level (doxygen) documentation for these features
See issue #22
Simple case of making these functions for the rest of the output archive serialization functions and then adding it to
load. Progress towards issue #8.
Remaining things to do: Modify cereal.hpp to properly choose between
versioned and non-versioned functions and place entries in the set of
versioned types as appropriate.
Had to split apart the structs that were being serialized by both boost and cereal
as we no longer allow a type to have both versioned and non-versioned serialization functions
Cleaned up the implementation a little, I'm sure it can still be optimized further. Undid some hacky things in
rapidjson that the old implementation utilized.