Assets 2

This is a minor feature and bug fix release for cereal.

The majority of fixes and enhancements for this release come from the community. Thank you for your contributions!

Fixes and enhancements include:

  • Polymorphic registrations should always occur as intended, especially on VS2015 (#356)
  • Unit testing overhauled to prepare for modules; dependency on boost test dropped in favor of doctest (#139)
  • Continuous integration testing for Windows using AppVeyor (thanks to @tusharpm, #373)

Minor fixes and enhancements include:

  • Ongoing optimizations for polymorphism support (thanks in part to @dlardi, #335, also see #354 for continuing work)
  • cereal now uses local #include to make it easier to drop into a project (thanks to @kklouzal, #347)
  • Fixed a bug related to threading support (thanks to @auric, #331)
  • Fixed a bug related to loading bitsets (thanks to @drivehappy, #355)
  • Avoid conflict with the check macro on OSX (thanks to @erichkeane, #341, #342)
  • Removed remaining traces of hardcoded RapidJSON namespaces to avoid conflicting with system library (thanks to @Enhex, #351)
  • cereal::size_type can now be configured via macro (#379)
  • Improved traivs continuous integration testing (thanks to @tusharpm, #367)
  • cereal no longer uses c-style casts interanlly (thanks to @laudrup, #363)
  • Improved support for migrating from boost (thanks to @headupinclouds, #366)

See the closed issues for more information.

Known Issues

Polymorphic registration for large numbers of classes is currently slower than it should be. See the ongoing progress towards this at #354.

Want to contribute to cereal?

@AzothAmmo AzothAmmo released this Aug 10, 2016 · 77 commits to master since this release

Assets 2

This is a minor feature and bug fix release for cereal.

Notable changes include:

  • Support for g++ 6 (#300)
  • Enhancements to support optional thread safety (#315, #320, thanks to @ChrisBFX)

Minor fixes and enhancements include:

  • Fixed compilation errors with g++ 4.7.3 (#311)
  • New documentation for the PIMPL idiom (#324) as well as threading (#322)

See the closed issues for more information.

@AzothAmmo AzothAmmo released this Jun 30, 2016 · 88 commits to master since this release

Assets 2

This is a minor feature and bug fix release for cereal.

This release sat around (much) longer than expected - note that the develop branch can always be used to access the latest changes to cereal.

Notable changes include:

  • RapidJSON updated to a recent version (#121)
  • load_and_construct now supports versioning (#216)
  • Bug fixes for polymorphism and multiple inheritance (#188, #281). See the documentation regarding the new requirement for paths between base and derived classes and read the breaking changes below for more information.

Minor fixes and enhancements include:

  • Improved control over endianness for portable binary archive (#115)
  • Improved documentation (#201, #269, others)
  • Polymorphic support pulled in automatically with <memory> (#193)
  • RapidJSON and RapidXML placed in cereal namespace (#121)
  • Various CMAKE improvements (#222 thanks to @robiwano, #239 and #254 thanks to @tamaskenez)

See the closed issues for more information.

Breaking Changes:

  • As part of improving support for polymorphic serialization, we have introduced a requirement for explicit relations between polymorphic class hierarchies. Whenever you serialize a smart pointer to a polymorphic type, cereal must be able to find a path from the derived type to the base type. cereal is able to do this automatically if you serialize the base class using cereal::base_class or cereal::virtual_base_class. If you do not do this, you must explicitly tell cereal about the relationship using the new macro CEREAL_REGISTER_POLYMORPHIC_RELATION, found in <cereal/types/polymorphic.hpp>.
  • std::bitset has been optimized for binary archives to avoid conversion to a string representation (see #236, thanks to @lyager). As a result of this, any bitset long enough to previously use the string output will not be compatible with the new serialization.

Known Issues

There is currently an error in the compile-time type checking that cereal performs on non-member load_minimal functions that will cause a static_assertion to mistakenly prevent compilation from succeeding. This only affects users using non-member load_minimal functions where the type to support load_minimal requires an unknown template parameter. See #132 for more information and workarounds.

@AzothAmmo AzothAmmo released this Jun 8, 2015 · 186 commits to master since this release

Assets 2

This is a minor release for cereal

New Features

  • Added support for std::valarray (thanks to @ilerik, #184)

Minor fixes and enhancements include:

  • Fixed an issue with partial matching for NVP lookup (#167)

See the closed issues for more information.

To see what else is upcoming in the next release, check out milestone 1.2.

@AzothAmmo AzothAmmo released this Apr 6, 2015 · 197 commits to master since this release

Assets 2

This is a minor bug fix release for cereal

We're moving to more rapid intermediate releases between feature versions of cereal to make it easier for users to take advantage of bug fixes and various improvements. Although these fixes were and will continue to be available in the develop branch, many users are more comfortable using an official released version.

Minor fixes and enhancements include:

  • Compliance with MSVC warning level 4 (#151, #178)
  • Bug fixes related to tuples (thanks to @eschnett and @erichkeane, #175, #176)
  • Empty string fixes for XML archives (#182)
  • Fixes related to polymorphism and serialization function specialization (#180)

See the closed issues for more information.

Potential Breaking Changes

In fixing #180, the type traits is_input_serializable and is_output_serializable were changed to accurately reflect their names. Prior to this release, these traits would return false if a type had more than one serialization function but was restricted to use only one of them through specialization. With this release, these traits base their decision on whether a type is either specialized for exactly one serialization method or has exactly one non-specialized serialization method available. If you relied on the previous (incorrect) behavior in any custom type traits, you may need to make appropriate changes.

Upcoming Changes

We next plan to fix some compilation issues with NVCC for users of cuda 7.0 and then move on to core 1.2 features, which will mainly focus on modules and various enhancements to cereal.

To see what else is upcoming in the next release, check out milestone 1.2.

@AzothAmmo AzothAmmo released this Jan 19, 2015 · 205 commits to master since this release

Assets 2

This is a minor feature and bug fix release for cereal.

This is our first release since 1.0, and the first release with significant contribution from the community, which will only increase with 1.2. cereal would like to thank its users and contributors for helping make this release possible.

Notable changes include:

  • cereal serialization functions (e.g. load/save/serialize) can now be easily renamed via macros in cereal/macros.hpp (thanks to @mattyclarkson, #60)
  • XML archives properly handle whitespace in text (thanks to @volo-zyko, #109)
  • Class versioning and polymorphic registration work properly with shared libraries (thanks in part to @ImplOfAnImpl, #113, #137)

Minor fixes and enhancements include:

  • Fixed issues related to long serialization on OSX using libc++ (#81)
  • Fixed support of char serialization for XML archives (#116)
  • Fixes and enhancements related to minimal serialization (#79, #80)
  • Properly utilizing R-values in various internal containers (#96)
  • Improved support for ICC (Intel C++ compiler) (#120)
  • Tuple elements are now serialized in proper order with unique names in text archives (thanks in part to @erichkeane, #143). See breaking changes for a special note on this.
  • Additional miscellaneous bug fixes and code refactoring.

See the closed issues for more information.

Breaking Changes:

This release introduces two breaking changes. The first will affect any user that created a custom serialization archive and utilizes minimal serialization functions with that archive:

In fixing #79, we introduced the concept of relating input and output archives using type traits. You now need to use the macro CEREAL_SETUP_ARCHIVE_TRAITS(InArchive, OutArchive) for your custom archives if you wish to support minimal serialization. You can look at the source of any of the cereal provided archives to see an example of this.

In addition, in fixing #80, we introduced a traits class that text based archives should inherit from. This has been applied to JSON and XML archives, but any users with custom text based archives are encouraged to have their text archive inherit from cereal::traits::TextArchive. This is not currently used internally by cereal but may be used by users with the new cereal::traits::is_text_archive traits class.

The second breaking change has to do with tuple serialization. We fixed the order of tuple serialization to go in ascending (get<0>(), get<1>()) instead of descending order. See #143 for more information.

Known Issues

There is currently an error in the compile-time type checking that cereal performs on non-member load_minimal functions that will cause a static_assertion to mistakenly prevent compilation from succeeding. This only affects users using non-member load_minimal functions where the type to support load_minimal requires an unknown template parameter. See #132 for more information and workarounds. This is scheduled to be fixed in the next release.

Various cereal macros such as CEREAL_REGISTER_TYPE do not work properly when used with templated class arguments (e.g. MyClass<OtherType>). You can use a typedef (e.g. using SingleName = MyClass<OtherType>) to avoid the issue. See #141 for the future solution we will use.

Upcoming Changes

The next version of cereal will introduce cereal modules, which will be collections of serialization functions or archives for types outside of the standard library. These will exist outside of the main cereal distribution to avoid cluttering the core of cereal. See https://github.com/USCiLab/cereal/labels/module for more information.

To see what else is upcoming in the next release, check out milestone 1.2.

@AzothAmmo AzothAmmo released this Mar 22, 2014 · 340 commits to master since this release

Assets 2

This is a major feature release for cereal. Notable changes include:

  • Support for Visual Studio 2013 (#11)
  • Support for out of order loading in text (XML/JSON) archives (#13, #14)
  • Full API compatibility with Boost serialization (#8)
  • Support for class versioning (#8)
  • New API for types with no default constructor (#43, #44, #59)
  • New minimal serialization functions (#23)
  • Compliance with the compiler flags -Wextra, -Wshadow, and -pedantic (#17)
  • Fixes related to libc++ compliance, especially on OSX (#49, #51, #72)
  • Support for std::enable_shared_from_this (cereal hall of fame for most annoying standard library feature to support) (#47)
  • Miscellaneous bug fixes, documentation updates, small improvements, and code refactoring

See the closed issues for more information.

cereal is not designed to be inherently backwards compatible across significant releases. There are a few changes in this release that may break some existing use cases:

  • The constructors for XML and JSON archives accept options in a different manner (#64)
  • Types with no default constructor have a new API and new names for required functions
  • Some built in types may have had their serialization format changed, especially in regards to text archives using name-value-pairs.
  • Enums use the new minimal serialization (#23)
  • JSON archives now serialize large types in base 10 instead of base 64 (#72)

@AzothAmmo AzothAmmo released this Aug 26, 2013 · 557 commits to master since this release

Assets 2

This release introduces a few new features which can be found in detail here. In summary, they are:

  • Making archives more portable by switching away from size_t internally
  • Adding a portable_binary.hpp archive that handles little vs big endian machines (NOTE: this still needs more testing across architectures. It passes unit tests and simulated endian swaps)
  • GCC 4.7.3 is supported as the minimum GCC version
  • Supports compiling using libc++

@AzothAmmo AzothAmmo released this Jul 10, 2013 · 578 commits to master since this release

Assets 2

This is the initial release of cereal.