Merge pull request #207 from boostorg/feature/serialization_support

Feature/serialization support
This commit is contained in:
Christian Mazakas
2023-08-29 10:50:21 -07:00
committed by GitHub
83 changed files with 8586 additions and 36 deletions

View File

@ -14,6 +14,7 @@ with serial and parallel variants.
`boost::concurrent_flat_map` and vice versa.
* Added debug mode mechanisms for detecting illegal reentrancies into
a `boost::concurrent_flat_map` from user code.
* Added Boost.Serialization support to all containers and their (non-local) iterator types.
== Release 1.83.0 - Major update

View File

@ -1518,3 +1518,33 @@ Equivalent to
-----
c.xref:#concurrent_flat_map_erase_if[erase_if](pred);
-----
=== Serialization
``concurrent_flat_map``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an concurrent_flat_map to an archive
Saves all the elements of a `concurrent_flat_map` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `std::remove_const<key_type>::type` and `std::remove_const<mapped_type>::type`
are serializable (XML serializable), and they do support Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
Concurrency:;; Blocking on `x`.
---
==== Loading an concurrent_flat_map from an archive
Deletes all preexisting elements of a `concurrent_flat_map` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `concurrent_flat_map` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `x.key_equal()` is functionally equivalent to `other.key_equal()`.
Concurrency:;; Blocking on `x`.

View File

@ -1464,4 +1464,54 @@ for (auto i = c.begin(), last = c.end(); i != last; ) {
return original_size - c.size();
```
=== Serialization
``unordered_flat_map``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an unordered_flat_map to an archive
Saves all the elements of an `unordered_flat_map` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `std::remove_const<key_type>::type` and `std::remove_const<mapped_type>::type`
are serializable (XML serializable), and they do support Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
---
==== Loading an unordered_flat_map from an archive
Deletes all preexisting elements of an `unordered_flat_map` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `unordered_flat_map` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `x.key_equal()` is functionally equivalent to `other.key_equal()`.
---
==== Saving an iterator/const_iterator to an archive
Saves the positional information of an `iterator` (`const_iterator`) `it`
to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
[horizontal]
Requires:;; The `unordered_flat_map` `x` pointed to by `it` has been previously saved to `ar`,
and no modifying operations have been issued on `x` between saving of `x` and
saving of `it`.
---
==== Loading an iterator/const_iterator from an archive
Makes an `iterator` (`const_iterator`) `it` point to the restored position of
the original `iterator` (`const_iterator`) saved to the storage read by
an archive (XML archive) `ar`.
[horizontal]
Requires:;; If `x` is the `unordered_flat_map` `it` points to, no modifying operations
have been issued on `x` between loading of `x` and loading of `it`.

View File

@ -1201,4 +1201,54 @@ for (auto i = c.begin(), last = c.end(); i != last; ) {
return original_size - c.size();
```
=== Serialization
``unordered_flat_set``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an unordered_flat_set to an archive
Saves all the elements of an `unordered_flat_set` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `value_type`
is serializable (XML serializable), and it supports Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
---
==== Loading an unordered_flat_set from an archive
Deletes all preexisting elements of an `unordered_flat_set` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `unordered_flat_set` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `x.key_equal()` is functionally equivalent to `other.key_equal()`.
---
==== Saving an iterator/const_iterator to an archive
Saves the positional information of an `iterator` (`const_iterator`) `it`
to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
[horizontal]
Requires:;; The `unordered_flat_set` `x` pointed to by `it` has been previously saved to `ar`,
and no modifying operations have been issued on `x` between saving of `x` and
saving of `it`.
---
==== Loading an iterator/const_iterator from an archive
Makes an `iterator` (`const_iterator`) `it` point to the restored position of
the original `iterator` (`const_iterator`) saved to the storage read by
an archive (XML archive) `ar`.
[horizontal]
Requires:;; If `x` is the `unordered_flat_set` `it` points to, no modifying operations
have been issued on `x` between loading of `x` and loading of `it`.

View File

@ -323,7 +323,12 @@ The elements are organized into buckets. Keys with the same hash code are stored
The number of buckets can be automatically increased by a call to insert, or as the result of calling rehash.
---
=== Configuration macros
==== `BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0`
Globally define this macro to support loading of ``unordered_map``s saved to
a Boost.Serialization archive with a version of Boost prior to Boost 1.84.
=== Typedefs
@ -1825,4 +1830,59 @@ for (auto i = c.begin(), last = c.end(); i != last; ) {
return original_size - c.size();
```
=== Serialization
``unordered_map``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an unordered_map to an archive
Saves all the elements of an `unordered_map` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `std::remove_const<key_type>::type` and `std::remove_const<mapped_type>::type`
are serializable (XML serializable), and they do support Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
---
==== Loading an unordered_map from an archive
Deletes all preexisting elements of an `unordered_map` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `unordered_map` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^]
from `(std::remove_const<key_type>::type&&, std::remove_const<mapped_type>::type&&)`.
`x.key_equal()` is functionally equivalent to `other.key_equal()`.
Note:;; If the archive was saved using a release of Boost prior to Boost 1.84,
the configuration macro `BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0`
has to be globally defined for this operation to succeed; otherwise, an exception is thrown.
---
==== Saving an iterator/const_iterator to an archive
Saves the positional information of an `iterator` (`const_iterator`) `it`
to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
[horizontal]
Requires:;; The `unordered_map` `x` pointed to by `it` has been previously saved to `ar`,
and no modifying operations have been issued on `x` between saving of `x` and
saving of `it`.
---
==== Loading an iterator/const_iterator from an archive
Makes an `iterator` (`const_iterator`) `it` point to the restored position of
the original `iterator` (`const_iterator`) saved to the storage read by
an archive (XML archive) `ar`.
[horizontal]
Requires:;; If `x` is the `unordered_map` `it` points to, no modifying operations
have been issued on `x` between loading of `x` and loading of `it`.

View File

@ -290,6 +290,13 @@ The elements are organized into buckets. Keys with the same hash code are stored
The number of buckets can be automatically increased by a call to insert, or as the result of calling rehash.
=== Configuration macros
==== `BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0`
Globally define this macro to support loading of ``unordered_multimap``s saved to
a Boost.Serialization archive with a version of Boost prior to Boost 1.84.
=== Typedefs
[source,c++,subs=+quotes]
@ -1552,4 +1559,59 @@ for (auto i = c.begin(), last = c.end(); i != last; ) {
return original_size - c.size();
```
=== Serialization
``unordered_multimap``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an unordered_multimap to an archive
Saves all the elements of an `unordered_multimap` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `std::remove_const<key_type>::type` and `std::remove_const<mapped_type>::type`
are serializable (XML serializable), and they do support Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
---
==== Loading an unordered_multimap from an archive
Deletes all preexisting elements of an `unordered_multimap` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `unordered_multimap` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/EmplaceConstructible[EmplaceConstructible^]
from `(std::remove_const<key_type>::type&&, std::remove_const<mapped_type>::type&&)`.
`x.key_equal()` is functionally equivalent to `other.key_equal()`.
Note:;; If the archive was saved using a release of Boost prior to Boost 1.84,
the configuration macro `BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0`
has to be globally defined for this operation to succeed; otherwise, an exception is thrown.
---
==== Saving an iterator/const_iterator to an archive
Saves the positional information of an `iterator` (`const_iterator`) `it`
to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
[horizontal]
Requires:;; The `unordered_multimap` `x` pointed to by `it` has been previously saved to `ar`,
and no modifying operations have been issued on `x` between saving of `x` and
saving of `it`.
---
==== Loading an iterator/const_iterator from an archive
Makes an `iterator` (`const_iterator`) `it` point to the restored position of
the original `iterator` (`const_iterator`) saved to the storage read by
an archive (XML archive) `ar`.
[horizontal]
Requires:;; If `x` is the `unordered_multimap` `it` points to, no modifying operations
have been issued on `x` between loading of `x` and loading of `it`.

View File

@ -278,7 +278,12 @@ The elements are organized into buckets. Keys with the same hash code are stored
The number of buckets can be automatically increased by a call to insert, or as the result of calling rehash.
---
=== Configuration macros
==== `BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0`
Globally define this macro to support loading of ``unordered_multiset``s saved to
a Boost.Serialization archive with a version of Boost prior to Boost 1.84.
=== Typedefs
@ -1485,4 +1490,58 @@ for (auto i = c.begin(), last = c.end(); i != last; ) {
return original_size - c.size();
```
=== Serialization
``unordered_multiset``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an unordered_multiset to an archive
Saves all the elements of an `unordered_multiset` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `value_type`
is serializable (XML serializable), and it supports Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
---
==== Loading an unordered_multiset from an archive
Deletes all preexisting elements of an `unordered_multiset` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `unordered_multiset` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^].
`x.key_equal()` is functionally equivalent to `other.key_equal()`.
Note:;; If the archive was saved using a release of Boost prior to Boost 1.84,
the configuration macro `BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0`
has to be globally defined for this operation to succeed; otherwise, an exception is thrown.
---
==== Saving an iterator/const_iterator to an archive
Saves the positional information of an `iterator` (`const_iterator`) `it`
to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
[horizontal]
Requires:;; The `unordered_multiset` `x` pointed to by `it` has been previously saved to `ar`,
and no modifying operations have been issued on `x` between saving of `x` and
saving of `it`.
---
==== Loading an iterator/const_iterator from an archive
Makes an `iterator` (`const_iterator`) `it` point to the restored position of
the original `iterator` (`const_iterator`) saved to the storage read by
an archive (XML archive) `ar`.
[horizontal]
Requires:;; If `x` is the `unordered_multiset` `it` points to, no modifying operations
have been issued on `x` between loading of `x` and loading of `it`.

View File

@ -1545,4 +1545,57 @@ for (auto i = c.begin(), last = c.end(); i != last; ) {
return original_size - c.size();
```
=== Serialization
``unordered_node_map``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an unordered_node_map to an archive
Saves all the elements of an `unordered_node_map` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `std::remove_const<key_type>::type` and `std::remove_const<mapped_type>::type`
are serializable (XML serializable), and they do support Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
---
==== Loading an unordered_node_map from an archive
Deletes all preexisting elements of an `unordered_node_map` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `unordered_node_map` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `key_type` and `mapped_type` are constructible from
`std::remove_const<key_type>::type&&` and `std::remove_const<mapped_type>::type&&`,
respectively.
`x.key_equal()` is functionally equivalent to `other.key_equal()`.
---
==== Saving an iterator/const_iterator to an archive
Saves the positional information of an `iterator` (`const_iterator`) `it`
to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
[horizontal]
Requires:;; The `unordered_node_map` `x` pointed to by `it` has been previously saved to `ar`,
and no modifying operations have been issued on `x` between saving of `x` and
saving of `it`.
---
==== Loading an iterator/const_iterator from an archive
Makes an `iterator` (`const_iterator`) `it` point to the restored position of
the original `iterator` (`const_iterator`) saved to the storage read by
an archive (XML archive) `ar`.
[horizontal]
Requires:;; If `x` is the `unordered_node_map` `it` points to, no modifying operations
have been issued on `x` between loading of `x` and loading of `it`.

View File

@ -1302,4 +1302,55 @@ for (auto i = c.begin(), last = c.end(); i != last; ) {
return original_size - c.size();
```
=== Serialization
``unordered_node_set``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an unordered_node_set to an archive
Saves all the elements of an `unordered_node_set` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `value_type`
is serializable (XML serializable), and it supports Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
---
==== Loading an unordered_node_set from an archive
Deletes all preexisting elements of an `unordered_node_set` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `unordered_node_set` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^].
`x.key_equal()` is functionally equivalent to `other.key_equal()`.
---
==== Saving an iterator/const_iterator to an archive
Saves the positional information of an `iterator` (`const_iterator`) `it`
to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
[horizontal]
Requires:;; The `unordered_node_set` `x` pointed to by `it` has been previously saved to `ar`,
and no modifying operations have been issued on `x` between saving of `x` and
saving of `it`.
---
==== Loading an iterator/const_iterator from an archive
Makes an `iterator` (`const_iterator`) `it` point to the restored position of
the original `iterator` (`const_iterator`) saved to the storage read by
an archive (XML archive) `ar`.
[horizontal]
Requires:;; If `x` is the `unordered_node_set` `it` points to, no modifying operations
have been issued on `x` between loading of `x` and loading of `it`.

View File

@ -279,7 +279,12 @@ The elements are organized into buckets. Keys with the same hash code are stored
The number of buckets can be automatically increased by a call to insert, or as the result of calling rehash.
---
=== Configuration macros
==== `BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0`
Globally define this macro to support loading of ``unordered_set``s saved to
a Boost.Serialization archive with a version of Boost prior to Boost 1.84.
=== Typedefs
@ -1550,4 +1555,58 @@ for (auto i = c.begin(), last = c.end(); i != last; ) {
return original_size - c.size();
```
=== Serialization
``unordered_set``s can be archived/retrieved by means of
link:../../../serialization/index.html[Boost.Serialization^] using the API provided
by this library. Both regular and XML archives are supported.
==== Saving an unordered_set to an archive
Saves all the elements of an `unordered_set` `x` to an archive (XML archive) `ar`.
[horizontal]
Requires:;; `value_type`
is serializable (XML serializable), and it supports Boost.Serialization
`save_construct_data`/`load_construct_data` protocol (automatically suported by
https://en.cppreference.com/w/cpp/named_req/DefaultConstructible[DefaultConstructible^]
types).
---
==== Loading an unordered_set from an archive
Deletes all preexisting elements of an `unordered_set` `x` and inserts
from an archive (XML archive) `ar` restored copies of the elements of the
original `unordered_set` `other` saved to the storage read by `ar`.
[horizontal]
Requires:;; `value_type` is https://en.cppreference.com/w/cpp/named_req/MoveInsertable[MoveInsertable^].
`x.key_equal()` is functionally equivalent to `other.key_equal()`.
Note:;; If the archive was saved using a release of Boost prior to Boost 1.84,
the configuration macro `BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0`
has to be globally defined for this operation to succeed; otherwise, an exception is thrown.
---
==== Saving an iterator/const_iterator to an archive
Saves the positional information of an `iterator` (`const_iterator`) `it`
to an archive (XML archive) `ar`. `it` can be and `end()` iterator.
[horizontal]
Requires:;; The `unordered_set` `x` pointed to by `it` has been previously saved to `ar`,
and no modifying operations have been issued on `x` between saving of `x` and
saving of `it`.
---
==== Loading an iterator/const_iterator from an archive
Makes an `iterator` (`const_iterator`) `it` point to the restored position of
the original `iterator` (`const_iterator`) saved to the storage read by
an archive (XML archive) `ar`.
[horizontal]
Requires:;; If `x` is the `unordered_set` `it` points to, no modifying operations
have been issued on `x` between loading of `x` and loading of `it`.

View File

@ -19,6 +19,7 @@
#include <boost/container_hash/hash.hpp>
#include <boost/core/allocator_access.hpp>
#include <boost/core/serialization.hpp>
#include <boost/mp11/algorithm.hpp>
#include <boost/mp11/list.hpp>
#include <boost/type_traits/type_identity.hpp>
@ -101,6 +102,11 @@ namespace boost {
friend typename concurrent_flat_map<K, V, H, KE, A>::size_type erase_if(
concurrent_flat_map<K, V, H, KE, A>& set, Predicate pred);
template<class Archive, class K, class V, class H, class KE, class A>
friend void serialize(
Archive& ar, concurrent_flat_map<K, V, H, KE, A>& c,
unsigned int version);
public:
using key_type = Key;
using mapped_type = T;
@ -772,6 +778,13 @@ namespace boost {
return c.table_.erase_if(pred);
}
template<class Archive, class K, class V, class H, class KE, class A>
void serialize(
Archive& ar, concurrent_flat_map<K, V, H, KE, A>& c, unsigned int)
{
ar & core::make_nvp("table",c.table_);
}
#if BOOST_UNORDERED_TEMPLATE_DEDUCTION_GUIDES
template <class InputIterator,

View File

@ -0,0 +1,72 @@
/* Copyright 2023 Joaquin M Lopez Munoz.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* See https://www.boost.org/libs/unordered for library home page.
*/
#ifndef BOOST_UNORDERED_DETAIL_ARCHIVE_CONSTRUCTED_HPP
#define BOOST_UNORDERED_DETAIL_ARCHIVE_CONSTRUCTED_HPP
#include <boost/config.hpp>
#include <boost/core/addressof.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include <boost/core/noncopyable.hpp>
#include <boost/core/serialization.hpp>
#include <boost/type_traits/aligned_storage.hpp>
#include <boost/type_traits/alignment_of.hpp>
namespace boost{
namespace unordered{
namespace detail{
/* constructs a stack-based object from a serialization archive */
template<typename T>
struct archive_constructed:private noncopyable
{
template<class Archive>
archive_constructed(const char* name,Archive& ar,unsigned int version)
{
core::load_construct_data_adl(ar,boost::addressof(get()),version);
BOOST_TRY{
ar>>core::make_nvp(name,get());
}
BOOST_CATCH(...){
get().~T();
BOOST_RETHROW;
}
BOOST_CATCH_END
}
~archive_constructed()
{
get().~T();
}
#if defined(BOOST_GCC)&&(BOOST_GCC>=4*10000+6*100)
#define BOOST_UNORDERED_IGNORE_WSTRICT_ALIASING
#endif
#if defined(BOOST_UNORDERED_IGNORE_WSTRICT_ALIASING)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wstrict-aliasing"
#endif
T& get(){return *reinterpret_cast<T*>(&space);}
#if defined(BOOST_UNORDERED_IGNORE_WSTRICT_ALIASING)
#pragma GCC diagnostic pop
#undef BOOST_UNORDERED_IGNORE_WSTRICT_ALIASING
#endif
private:
typename aligned_storage<sizeof(T),alignment_of<T>::value>::type space;
};
} /* namespace detail */
} /* namespace unordered */
} /* namespace boost */
#endif

View File

@ -0,0 +1,27 @@
/* Copyright 2023 Joaquin M Lopez Munoz.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* See https://www.boost.org/libs/unordered for library home page.
*/
#ifndef BOOST_UNORDERED_DETAIL_BAD_ARCHIVE_EXCEPTION_HPP
#define BOOST_UNORDERED_DETAIL_BAD_ARCHIVE_EXCEPTION_HPP
#include <stdexcept>
namespace boost{
namespace unordered{
namespace detail{
struct bad_archive_exception:std::runtime_error
{
bad_archive_exception():std::runtime_error("Invalid or corrupted archive"){}
};
} /* namespace detail */
} /* namespace unordered */
} /* namespace boost */
#endif

View File

@ -1,4 +1,4 @@
// Copyright (C) 2022 Joaquin M Lopez Munoz.
// Copyright (C) 2022-2023 Joaquin M Lopez Munoz.
// Copyright (C) 2022 Christian Mazakas
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
@ -114,16 +114,18 @@ to normal separate chaining implementations.
*/
#include <boost/unordered/detail/prime_fmod.hpp>
#include <boost/unordered/detail/serialize_tracked_address.hpp>
#include <boost/core/addressof.hpp>
#include <boost/core/allocator_access.hpp>
#include <boost/core/bit.hpp>
#include <boost/core/empty_value.hpp>
#include <boost/core/invoke_swap.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include <boost/core/serialization.hpp>
#include <boost/cstdint.hpp>
#include <boost/move/core.hpp>
#include <boost/move/utility_core.hpp>
#include <boost/swap.hpp>
#include <boost/type_traits/aligned_storage.hpp>
#include <boost/type_traits/alignment_of.hpp>
@ -287,6 +289,25 @@ namespace boost {
p = pbg->buckets + x;
}
}
template<typename Archive>
friend void serialization_track(
Archive& ar, grouped_bucket_iterator const& x)
{
// requires: not at end() position
track_address(ar, x.p);
track_address(ar, x.pbg);
}
friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& ar,unsigned int)
{
// requires: not at end() position
serialize_tracked_address(ar, p);
serialize_tracked_address(ar, pbg);
}
};
template <class Node> struct const_grouped_local_bucket_iterator;
@ -630,7 +651,7 @@ namespace boost {
bool b = boost::allocator_propagate_on_container_swap<
allocator_type>::type::value;
if (b) {
boost::swap(get_node_allocator(), other.get_node_allocator());
boost::core::invoke_swap(get_node_allocator(), other.get_node_allocator());
}
}

View File

@ -16,13 +16,18 @@
#include <boost/config.hpp>
#include <boost/core/ignore_unused.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include <boost/core/serialization.hpp>
#include <boost/cstdint.hpp>
#include <boost/mp11/tuple.hpp>
#include <boost/static_assert.hpp>
#include <boost/throw_exception.hpp>
#include <boost/unordered/detail/archive_constructed.hpp>
#include <boost/unordered/detail/bad_archive_exception.hpp>
#include <boost/unordered/detail/foa/core.hpp>
#include <boost/unordered/detail/foa/reentrancy_check.hpp>
#include <boost/unordered/detail/foa/rw_spinlock.hpp>
#include <boost/unordered/detail/foa/tuple_rotate_right.hpp>
#include <boost/unordered/detail/serialization_version.hpp>
#include <cstddef>
#include <functional>
#include <initializer_list>
@ -1442,6 +1447,139 @@ private:
}
#endif
friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& ar,unsigned int version)
{
core::split_member(ar,*this,version);
}
template<typename Archive>
void save(Archive& ar,unsigned int version)const
{
save(
ar,version,
std::integral_constant<bool,std::is_same<key_type,value_type>::value>{});
}
template<typename Archive>
void save(Archive& ar,unsigned int,std::true_type /* set */)const
{
auto lck=exclusive_access();
const std::size_t s=super::size();
const serialization_version<value_type> value_version;
ar<<core::make_nvp("count",s);
ar<<core::make_nvp("value_version",value_version);
super::for_all_elements([&,this](element_type* p){
auto& x=type_policy::value_from(*p);
core::save_construct_data_adl(ar,std::addressof(x),value_version);
ar<<serialization::make_nvp("item",x);
});
}
template<typename Archive>
void save(Archive& ar,unsigned int,std::false_type /* map */)const
{
using raw_key_type=typename std::remove_const<key_type>::type;
using raw_mapped_type=typename std::remove_const<
typename TypePolicy::mapped_type>::type;
auto lck=exclusive_access();
const std::size_t s=super::size();
const serialization_version<raw_key_type> key_version;
const serialization_version<raw_mapped_type> mapped_version;
ar<<core::make_nvp("count",s);
ar<<core::make_nvp("key_version",key_version);
ar<<core::make_nvp("mapped_version",mapped_version);
super::for_all_elements([&,this](element_type* p){
/* To remain lib-independent from Boost.Serialization and not rely on
* the user having included the serialization code for std::pair
* (boost/serialization/utility.hpp), we serialize the key and the
* mapped value separately.
*/
auto& x=type_policy::value_from(*p);
core::save_construct_data_adl(
ar,std::addressof(x.first),key_version);
ar<<serialization::make_nvp("key",x.first);
core::save_construct_data_adl(
ar,std::addressof(x.second),mapped_version);
ar<<serialization::make_nvp("mapped",x.second);
});
}
template<typename Archive>
void load(Archive& ar,unsigned int version)
{
load(
ar,version,
std::integral_constant<bool,std::is_same<key_type,value_type>::value>{});
}
template<typename Archive>
void load(Archive& ar,unsigned int,std::true_type /* set */)
{
auto lck=exclusive_access();
std::size_t s;
serialization_version<value_type> value_version;
ar>>core::make_nvp("count",s);
ar>>core::make_nvp("value_version",value_version);
super::clear();
super::reserve(s);
for(std::size_t n=0;n<s;++n){
archive_constructed<value_type> value("item",ar,value_version);
auto& x=value.get();
auto hash=this->hash_for(x);
auto pos0=this->position_for(hash);
if(this->find(x,pos0,hash))throw_exception(bad_archive_exception());
auto loc=this->unchecked_emplace_at(pos0,hash,std::move(x));
ar.reset_object_address(std::addressof(*loc.p),std::addressof(x));
}
}
template<typename Archive>
void load(Archive& ar,unsigned int,std::false_type /* map */)
{
using raw_key_type=typename std::remove_const<key_type>::type;
using raw_mapped_type=typename std::remove_const<
typename TypePolicy::mapped_type>::type;
auto lck=exclusive_access();
std::size_t s;
serialization_version<raw_key_type> key_version;
serialization_version<raw_mapped_type> mapped_version;
ar>>core::make_nvp("count",s);
ar>>core::make_nvp("key_version",key_version);
ar>>core::make_nvp("mapped_version",mapped_version);
super::clear();
super::reserve(s);
for(std::size_t n=0;n<s;++n){
archive_constructed<raw_key_type> key("key",ar,key_version);
archive_constructed<raw_mapped_type> mapped("mapped",ar,mapped_version);
auto& k=key.get();
auto& m=mapped.get();
auto hash=this->hash_for(k);
auto pos0=this->position_for(hash);
if(this->find(k,pos0,hash))throw_exception(bad_archive_exception());
auto loc=this->unchecked_emplace_at(pos0,hash,std::move(k),std::move(m));
ar.reset_object_address(std::addressof(loc.p->first),std::addressof(k));
ar.reset_object_address(std::addressof(loc.p->second),std::addressof(m));
}
}
static std::atomic<std::size_t> thread_counter;
mutable multimutex_type mutexes;
};

View File

@ -1180,7 +1180,8 @@ alloc_make_insert_type(const Allocator& al,Args&&... args)
* init_type and element_type:
*
* - TypePolicy::key_type and TypePolicy::value_type have the obvious
* meaning.
* meaning. TypePolicy::mapped_type is expected to be provided as well
* when key_type and value_type are not the same.
*
* - TypePolicy::init_type is the type implicitly converted to when
* writing x.insert({...}). For maps, this is std::pair<Key,T> rather

View File

@ -14,6 +14,7 @@ namespace boost {
template <class Key, class T> struct flat_map_types
{
using key_type = Key;
using mapped_type = T;
using raw_key_type = typename std::remove_const<Key>::type;
using raw_mapped_type = typename std::remove_const<T>::type;

View File

@ -15,7 +15,9 @@
#include <boost/assert.hpp>
#include <boost/config.hpp>
#include <boost/config/workaround.hpp>
#include <boost/core/serialization.hpp>
#include <boost/unordered/detail/foa/core.hpp>
#include <boost/unordered/detail/serialize_tracked_address.hpp>
#include <cstddef>
#include <iterator>
#include <memory>
@ -195,6 +197,25 @@ private:
}
}
template<typename Archive>
friend void serialization_track(Archive& ar,const table_iterator& x)
{
if(x.p){
track_address(ar,x.pc);
track_address(ar,x.p);
}
}
friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& ar,unsigned int)
{
if(!p)pc=nullptr;
serialize_tracked_address(ar,pc);
serialize_tracked_address(ar,p);
}
unsigned char *pc=nullptr;
table_element_type *p=nullptr;
};

View File

@ -1,6 +1,6 @@
// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
// Copyright (C) 2005-2016 Daniel James
// Copyright (C) 2022 Joaquin M Lopez Munoz.
// Copyright (C) 2022-2023 Joaquin M Lopez Munoz.
// Copyright (C) 2022 Christian Mazakas
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
@ -17,8 +17,10 @@
#include <boost/assert.hpp>
#include <boost/core/allocator_traits.hpp>
#include <boost/core/bit.hpp>
#include <boost/core/invoke_swap.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include <boost/core/pointer_traits.hpp>
#include <boost/core/serialization.hpp>
#include <boost/limits.hpp>
#include <boost/move/move.hpp>
#include <boost/preprocessor/arithmetic/inc.hpp>
@ -29,7 +31,6 @@
#include <boost/preprocessor/repetition/repeat_from_to.hpp>
#include <boost/preprocessor/seq/enum.hpp>
#include <boost/preprocessor/seq/size.hpp>
#include <boost/swap.hpp>
#include <boost/throw_exception.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/type_traits/add_lvalue_reference.hpp>
@ -47,6 +48,7 @@
#include <boost/type_traits/make_void.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/unordered/detail/fca.hpp>
#include <boost/unordered/detail/serialize_tracked_address.hpp>
#include <boost/unordered/detail/type_traits.hpp>
#include <boost/unordered/detail/fwd.hpp>
#include <boost/utility/addressof.hpp>
@ -258,8 +260,8 @@ namespace boost {
void swap(compressed& x)
{
boost::swap(first(), x.first());
boost::swap(second(), x.second());
boost::core::invoke_swap(first(), x.first());
boost::core::invoke_swap(second(), x.second());
}
private:
@ -642,7 +644,7 @@ namespace boost {
move(x);
}
} else if (has_value_) {
boost::swap(value_.value(), x.value_.value());
boost::core::invoke_swap(value_.value(), x.value_.value());
}
}
@ -1703,6 +1705,25 @@ namespace boost {
p = (++itb)->next;
}
}
template<typename Archive>
friend void serialization_track(Archive& ar, const iterator& x)
{
if(x.p){
track_address(ar, x.p);
serialization_track(ar, x.itb);
}
}
friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& ar,unsigned int)
{
if(!p) itb = bucket_iterator();
serialize_tracked_address(ar, p);
ar & core::make_nvp("bucket_iterator", itb);
}
};
template <class Node, class Bucket> class c_iterator
@ -1793,6 +1814,25 @@ namespace boost {
p = (++itb)->next;
}
}
template<typename Archive>
friend void serialization_track(Archive& ar, const c_iterator& x)
{
if(x.p){
track_address(ar, x.p);
serialization_track(ar, x.itb);
}
}
friend class boost::serialization::access;
template<typename Archive>
void serialize(Archive& ar,unsigned int)
{
if(!p) itb = bucket_iterator();
serialize_tracked_address(ar, p);
ar & core::make_nvp("bucket_iterator", itb);
}
};
} // namespace iterator_detail
@ -2049,7 +2089,7 @@ namespace boost {
x.switch_functions();
buckets_.swap(x.buckets_);
boost::swap(size_, x.size_);
boost::core::invoke_swap(size_, x.size_);
std::swap(mlf_, x.mlf_);
std::swap(max_load_, x.max_load_);
}
@ -2058,7 +2098,7 @@ namespace boost {
void swap(table& x, true_type)
{
buckets_.swap(x.buckets_);
boost::swap(size_, x.size_);
boost::core::invoke_swap(size_, x.size_);
std::swap(mlf_, x.mlf_);
std::swap(max_load_, x.max_load_);
this->current_functions().swap(x.current_functions());

View File

@ -0,0 +1,74 @@
/* Copyright 2023 Joaquin M Lopez Munoz.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* See https://www.boost.org/libs/unordered for library home page.
*/
#ifndef BOOST_UNORDERED_DETAIL_SERIALIZATION_VERSION_HPP
#define BOOST_UNORDERED_DETAIL_SERIALIZATION_VERSION_HPP
#include <boost/config.hpp>
#include <boost/core/serialization.hpp>
namespace boost{
namespace unordered{
namespace detail{
/* boost::serialization::load_construct_adl(ar,t,version) requires user code
* to pass the serialization version for t, when this information is really
* stored in the archive. serialization_version<T> circumvents this design
* error by acting as a regular serializable type with the same serialization
* version as T; loading/saving serialization_version<T> does nothing with
* the archive data itself but captures the stored serialization version
* at load() time.
*/
template<typename T>
struct serialization_version
{
serialization_version():
value(boost::serialization::version<serialization_version>::value){}
serialization_version& operator=(unsigned int x){value=x;return *this;};
operator unsigned int()const{return value;}
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar,unsigned int version)
{
core::split_member(ar,*this,version);
}
template<class Archive>
void save(Archive&,unsigned int)const{}
template<class Archive>
void load(Archive&,unsigned int version)
{
this->value=version;
}
unsigned int value;
};
} /* namespace detail */
} /* namespace unordered */
namespace serialization{
template<typename T>
struct version<boost::unordered::detail::serialization_version<T> >
{
BOOST_STATIC_CONSTANT(int,value=version<T>::value);
};
} /* namespace serialization */
} /* namespace boost */
#endif

View File

@ -0,0 +1,208 @@
/* Copyright 2023 Joaquin M Lopez Munoz.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* See https://www.boost.org/libs/unordered for library home page.
*/
#ifndef BOOST_UNORDERED_DETAIL_SERIALIZE_CONTAINER_HPP
#define BOOST_UNORDERED_DETAIL_SERIALIZE_CONTAINER_HPP
#include <boost/core/addressof.hpp>
#include <boost/core/serialization.hpp>
#include <boost/move/move.hpp>
#include <boost/throw_exception.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/unordered/detail/archive_constructed.hpp>
#include <boost/unordered/detail/bad_archive_exception.hpp>
#include <boost/unordered/detail/serialization_version.hpp>
#include <cstddef>
namespace boost{
namespace unordered{
namespace detail{
/* serialize_container(ar,x,v) serializes any of the unordered associative
* containers in Boost.Unordered. Iterator serialization is also supported
* through the following protocol:
* - At saving time, for each iterator it in [x.begin(),x.end()),
* serialization_track(ar,it) is ADL-called to instruct the archive to
* track the positions internally pointed to by the iterator via
* track_address().
* - At loading time, these addresses are mapped to those of the equivalent
* reconstructed positions using again serialization_track(ar,it).
* - Serializing an iterator reduces to serializing pointers to previously
* tracked addresses via serialize_address().
*/
template<typename Iterator>
std::pair<Iterator,bool> adapt_insert_return_type(Iterator it)
{
return std::pair<Iterator,bool>(it,true);
}
template<typename Iterator>
std::pair<Iterator,bool> adapt_insert_return_type(std::pair<Iterator,bool> p)
{
return p;
}
template<typename Set,bool IsSaving> struct load_or_save_unordered_set;
template<typename Set> struct load_or_save_unordered_set<Set,true> /* save */
{
template<typename Archive>
void operator()(Archive& ar,const Set& x,unsigned int)const
{
typedef typename Set::value_type value_type;
typedef typename Set::const_iterator const_iterator;
const std::size_t s=x.size();
const serialization_version<value_type> value_version;
ar<<core::make_nvp("count",s);
ar<<core::make_nvp("value_version",value_version);
for(const_iterator first=x.begin(),last=x.end();first!=last;++first){
core::save_construct_data_adl(ar,boost::addressof(*first),value_version);
ar<<core::make_nvp("item",*first);
serialization_track(ar,first);
}
}
};
template<typename Set> struct load_or_save_unordered_set<Set,false> /* load */
{
template<typename Archive>
void operator()(Archive& ar,Set& x,unsigned int)const
{
typedef typename Set::value_type value_type;
typedef typename Set::iterator iterator;
std::size_t s;
serialization_version<value_type> value_version;
ar>>core::make_nvp("count",s);
ar>>core::make_nvp("value_version",value_version);
x.clear();
x.reserve(s); /* critical so that iterator tracking is stable */
for(std::size_t n=0;n<s;++n){
archive_constructed<value_type> value("item",ar,value_version);
std::pair<iterator,bool> p=adapt_insert_return_type(
x.insert(boost::move(value.get())));
if(!p.second)throw_exception(bad_archive_exception());
ar.reset_object_address(
boost::addressof(*p.first),boost::addressof(value.get()));
serialization_track(ar,p.first);
}
}
};
template<typename Map,bool IsSaving> struct load_or_save_unordered_map;
template<typename Map> struct load_or_save_unordered_map<Map,true> /* save */
{
template<typename Archive>
void operator()(Archive& ar,const Map& x,unsigned int)const
{
typedef typename boost::remove_const<
typename Map::key_type>::type key_type;
typedef typename boost::remove_const<
typename Map::mapped_type>::type mapped_type;
typedef typename Map::const_iterator const_iterator;
const std::size_t s=x.size();
const serialization_version<key_type> key_version;
const serialization_version<mapped_type> mapped_version;
ar<<core::make_nvp("count",s);
ar<<core::make_nvp("key_version",key_version);
ar<<core::make_nvp("mapped_version",mapped_version);
for(const_iterator first=x.begin(),last=x.end();first!=last;++first){
/* To remain lib-independent from Boost.Serialization and not rely on
* the user having included the serialization code for std::pair
* (boost/serialization/utility.hpp), we serialize the key and the
* mapped value separately.
*/
core::save_construct_data_adl(
ar,boost::addressof(first->first),key_version);
ar<<core::make_nvp("key",first->first);
core::save_construct_data_adl(
ar,boost::addressof(first->second),mapped_version);
ar<<core::make_nvp("mapped",first->second);
serialization_track(ar,first);
}
}
};
template<typename Map> struct load_or_save_unordered_map<Map,false> /* load */
{
template<typename Archive>
void operator()(Archive& ar,Map& x,unsigned int)const
{
typedef typename boost::remove_const<
typename Map::key_type>::type key_type;
typedef typename boost::remove_const<
typename Map::mapped_type>::type mapped_type;
typedef typename Map::iterator iterator;
std::size_t s;
serialization_version<key_type> key_version;
serialization_version<mapped_type> mapped_version;
ar>>core::make_nvp("count",s);
ar>>core::make_nvp("key_version",key_version);
ar>>core::make_nvp("mapped_version",mapped_version);
x.clear();
x.reserve(s); /* critical so that iterator tracking is stable */
for(std::size_t n=0;n<s;++n){
archive_constructed<key_type> key("key",ar,key_version);
archive_constructed<mapped_type> mapped("mapped",ar,mapped_version);
std::pair<iterator,bool> p=adapt_insert_return_type(
x.emplace(boost::move(key.get()),boost::move(mapped.get())));
if(!p.second)throw_exception(bad_archive_exception());
ar.reset_object_address(
boost::addressof(p.first->first),boost::addressof(key.get()));
ar.reset_object_address(
boost::addressof(p.first->second),boost::addressof(mapped.get()));
serialization_track(ar,p.first);
}
}
};
template<typename Container,bool IsSet,bool IsSaving>
struct load_or_save_container;
template<typename Set,bool IsSaving>
struct load_or_save_container<Set,true,IsSaving>:
load_or_save_unordered_set<Set,IsSaving>{};
template<typename Map,bool IsSaving>
struct load_or_save_container<Map,false,IsSaving>:
load_or_save_unordered_map<Map,IsSaving>{};
template<typename Archive,typename Container>
void serialize_container(Archive& ar,Container& x,unsigned int version)
{
load_or_save_container<
Container,
boost::is_same<
typename Container::key_type,typename Container::value_type>::value,
Archive::is_saving::value>()(ar,x,version);
}
} /* namespace detail */
} /* namespace unordered */
} /* namespace boost */
#endif

View File

@ -0,0 +1,156 @@
/* Copyright 2023 Joaquin M Lopez Munoz.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* See https://www.boost.org/libs/unordered for library home page.
*/
#ifndef BOOST_UNORDERED_DETAIL_SERIALIZE_FCA_CONTAINER_HPP
#define BOOST_UNORDERED_DETAIL_SERIALIZE_FCA_CONTAINER_HPP
#include <boost/unordered/detail/serialize_container.hpp>
#if defined(BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0)
#define BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER \
<boost/serialization/archive_input_unordered_map.hpp>
#include BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER
#undef BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER
#define BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER \
<boost/serialization/archive_input_unordered_set.hpp>
#include BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER
#undef BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER
#define BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER \
<boost/serialization/unordered_collections_load_imp.hpp>
#include BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER
#undef BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER
#define BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER \
<boost/serialization/utility.hpp>
#include BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER
#undef BOOST_UNORDERED_BLOCK_BOOSTDEP_HEADER
#include <boost/unordered/unordered_map_fwd.hpp>
#include <boost/unordered/unordered_set_fwd.hpp>
#else
#include <boost/throw_exception.hpp>
#include <stdexcept>
#endif
namespace boost{
namespace unordered{
namespace detail{
/* Support for boost::unordered_[multi](map|set) loading from legacy archives.
* Until Boost 1.84, serialization of these containers was provided from
* Boost.Serialization via boost/serialization/boost_unordered_(map|set).hpp,
* from that release on support is native in Boost.Unordered. To enable legacy
* archive loading, BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0
* must be defined (it implies header dependency from Boost.Serialization).
*/
#if defined(BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0)
template<typename Archive,typename Container>
struct archive_input;
template<
typename Archive,typename K,typename T,typename H,typename P,typename A
>
struct archive_input<Archive,boost::unordered_map<K,T,H,P,A> >:
boost::serialization::stl::archive_input_unordered_map<
Archive,
boost::unordered_map<K,T,H,P,A>
>
{};
template<
typename Archive,typename K,typename T,typename H,typename P,typename A
>
struct archive_input<Archive,boost::unordered_multimap<K,T,H,P,A> >:
boost::serialization::stl::archive_input_unordered_multimap<
Archive,
boost::unordered_multimap<K,T,H,P,A>
>
{};
template<
typename Archive,typename K,typename H,typename P,typename A
>
struct archive_input<Archive,boost::unordered_set<K,H,P,A> >:
boost::serialization::stl::archive_input_unordered_set<
Archive,
boost::unordered_set<K,H,P,A>
>
{};
template<
typename Archive,typename K,typename H,typename P,typename A
>
struct archive_input<Archive,boost::unordered_multiset<K,H,P,A> >:
boost::serialization::stl::archive_input_unordered_multiset<
Archive,
boost::unordered_multiset<K,H,P,A>
>
{};
#else
struct legacy_archive_exception:std::runtime_error
{
legacy_archive_exception():std::runtime_error(
"Legacy archive detected, define "
"BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0 to load"){}
};
#endif
template<typename Container,bool IsSaving>
struct load_or_save_fca_container;
template<typename Container>
struct load_or_save_fca_container<Container,true> /* save */
{
template<typename Archive>
void operator()(Archive& ar,Container& x,unsigned int version)const
{
serialize_container(ar,x,version);
}
};
template<typename Container>
struct load_or_save_fca_container<Container,false> /* load */
{
template<typename Archive>
void operator()(Archive& ar,Container& x,unsigned int version)const
{
if(version==0){
#if defined(BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0)
boost::serialization::stl::load_unordered_collection<
Archive,Container,archive_input<Archive,Container>
>(ar,x);
#else
throw_exception(legacy_archive_exception());
#endif
}
else{
serialize_container(ar,x,version);
}
}
};
template<typename Archive,typename Container>
void serialize_fca_container(Archive& ar,Container& x,unsigned int version)
{
load_or_save_fca_container<Container,Archive::is_saving::value>()(
ar,x,version);
}
} /* namespace detail */
} /* namespace unordered */
} /* namespace boost */
#endif

View File

@ -0,0 +1,103 @@
/* Copyright 2023 Joaquin M Lopez Munoz.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* See https://www.boost.org/libs/unordered for library home page.
*/
#ifndef BOOST_UNORDERED_DETAIL_SERIALIZE_TRACKED_ADDRESS_HPP
#define BOOST_UNORDERED_DETAIL_SERIALIZE_TRACKED_ADDRESS_HPP
#include <boost/core/pointer_traits.hpp>
#include <boost/core/serialization.hpp>
#include <boost/throw_exception.hpp>
#include <boost/type_traits/remove_const.hpp>
#include <boost/type_traits/integral_constant.hpp>
#include <boost/unordered/detail/bad_archive_exception.hpp>
namespace boost{
namespace unordered{
namespace detail{
/* Tracked address serialization to support iterator serialization as described
* in serialize_container.hpp. The underlying technique is to reinterpret_cast
* T pointers to serialization_tracker<T> pointers, which, when dereferenced
* and serialized, do not emit any serialization payload to the
* archive, but activate object tracking on the relevant addresses for later
* use with serialize_tracked_address().
*/
template<typename T>
struct serialization_tracker
{
/* An attempt to construct a serialization_tracker means a stray address
* in the archive, that is, one without a previously tracked address.
*/
serialization_tracker(){throw_exception(bad_archive_exception());}
template<typename Archive>
void serialize(Archive&,unsigned int){} /* no data emitted */
};
template<typename Archive,typename Ptr>
void track_address(Archive& ar,Ptr p)
{
typedef typename boost::pointer_traits<Ptr> ptr_traits;
typedef typename boost::remove_const<
typename ptr_traits::element_type>::type element_type;
if(p){
ar&core::make_nvp(
"address",
*reinterpret_cast<serialization_tracker<element_type>*>(
const_cast<element_type*>(
boost::to_address(p))));
}
}
template<typename Archive,typename Ptr>
void serialize_tracked_address(Archive& ar,Ptr& p,boost::true_type /* save */)
{
typedef typename boost::pointer_traits<Ptr> ptr_traits;
typedef typename boost::remove_const<
typename ptr_traits::element_type>::type element_type;
typedef serialization_tracker<element_type> tracker;
tracker* pt=
const_cast<tracker*>(
reinterpret_cast<const tracker*>(
const_cast<const element_type*>(
boost::to_address(p))));
ar<<core::make_nvp("pointer",pt);
}
template<typename Archive,typename Ptr>
void serialize_tracked_address(Archive& ar,Ptr& p,boost::false_type /* load */)
{
typedef typename boost::pointer_traits<Ptr> ptr_traits;
typedef typename boost::remove_const<
typename ptr_traits::element_type>::type element_type;
typedef serialization_tracker<element_type> tracker;
tracker* pt;
ar>>core::make_nvp("pointer",pt);
element_type* pn=const_cast<element_type*>(
reinterpret_cast<const element_type*>(
const_cast<const tracker*>(pt)));
p=pn?ptr_traits::pointer_to(*pn):0;
}
template<typename Archive,typename Ptr>
void serialize_tracked_address(Archive& ar,Ptr& p)
{
serialize_tracked_address(
ar,p,
boost::integral_constant<bool,Archive::is_saving::value>());
}
} /* namespace detail */
} /* namespace unordered */
} /* namespace boost */
#endif

View File

@ -1,4 +1,4 @@
// Copyright (C) 2022 Christian Mazakas
// Copyright (C) 2022-2023 Christian Mazakas
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -13,6 +13,7 @@
#include <boost/unordered/concurrent_flat_map_fwd.hpp>
#include <boost/unordered/detail/foa/flat_map_types.hpp>
#include <boost/unordered/detail/foa/table.hpp>
#include <boost/unordered/detail/serialize_container.hpp>
#include <boost/unordered/detail/type_traits.hpp>
#include <boost/unordered/unordered_flat_map_fwd.hpp>
@ -696,6 +697,16 @@ namespace boost {
return erase_if(map.table_, pred);
}
template <class Archive,
class Key, class T, class Hash, class KeyEqual, class Allocator>
void serialize(
Archive & ar,
unordered_flat_map<Key, T, Hash, KeyEqual, Allocator>& map,
unsigned int version)
{
detail::serialize_container(ar, map, version);
}
#if defined(BOOST_MSVC)
#pragma warning(pop) /* C4714 */
#endif

View File

@ -1,4 +1,4 @@
// Copyright (C) 2022 Christian Mazakas
// Copyright (C) 2022-2023 Christian Mazakas
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -12,6 +12,7 @@
#include <boost/unordered/detail/foa/flat_set_types.hpp>
#include <boost/unordered/detail/foa/table.hpp>
#include <boost/unordered/detail/serialize_container.hpp>
#include <boost/unordered/detail/type_traits.hpp>
#include <boost/unordered/unordered_flat_set_fwd.hpp>
@ -505,6 +506,16 @@ namespace boost {
return erase_if(set.table_, pred);
}
template <class Archive,
class Key, class Hash, class KeyEqual, class Allocator>
void serialize(
Archive & ar,
unordered_flat_set<Key, Hash, KeyEqual, Allocator>& set,
unsigned int version)
{
detail::serialize_container(ar, set, version);
}
#if defined(BOOST_MSVC)
#pragma warning(pop) /* C4714 */
#endif

View File

@ -1,7 +1,6 @@
// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
// Copyright (C) 2005-2011 Daniel James.
// Copyright (C) 2022 Christian Mazakas
// Copyright (C) 2022-2023 Christian Mazakas
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -16,11 +15,13 @@
#endif
#include <boost/unordered/detail/requires_cxx11.hpp>
#include <boost/config.hpp>
#include <boost/core/explicit_operator_bool.hpp>
#include <boost/functional/hash.hpp>
#include <boost/move/move.hpp>
#include <boost/type_traits/is_constructible.hpp>
#include <boost/unordered/detail/map.hpp>
#include <boost/unordered/detail/serialize_fca_container.hpp>
#include <boost/unordered/detail/type_traits.hpp>
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
@ -1059,6 +1060,13 @@ namespace boost {
#endif
}; // class template unordered_map
template <class Archive, class K, class T, class H, class P, class A>
void serialize(
Archive & ar,unordered_map<K, T, H, P, A>& m,unsigned int version)
{
detail::serialize_fca_container(ar, m, version);
}
#if BOOST_UNORDERED_TEMPLATE_DEDUCTION_GUIDES
template <class InputIterator,
@ -1762,6 +1770,13 @@ namespace boost {
#endif
}; // class template unordered_multimap
template <class Archive, class K, class T, class H, class P, class A>
void serialize(
Archive & ar,unordered_multimap<K, T, H, P, A>& m,unsigned int version)
{
detail::serialize_fca_container(ar, m, version);
}
#if BOOST_UNORDERED_TEMPLATE_DEDUCTION_GUIDES
template <class InputIterator,
@ -2965,9 +2980,9 @@ namespace boost {
if (boost::allocator_propagate_on_container_swap<
value_allocator>::type::value ||
!alloc_.has_value() || !n.alloc_.has_value()) {
boost::swap(alloc_, n.alloc_);
boost::core::invoke_swap(alloc_, n.alloc_);
}
boost::swap(ptr_, n.ptr_);
boost::core::invoke_swap(ptr_, n.ptr_);
}
};
@ -3014,11 +3029,26 @@ namespace boost {
void swap(insert_return_type_map<Iter, NodeType>& x,
insert_return_type_map<Iter, NodeType>& y)
{
boost::swap(x.node, y.node);
boost::swap(x.inserted, y.inserted);
boost::swap(x.position, y.position);
boost::core::invoke_swap(x.node, y.node);
boost::core::invoke_swap(x.inserted, y.inserted);
boost::core::invoke_swap(x.position, y.position);
}
} // namespace unordered
namespace serialization {
template <class K, class T, class H, class P, class A>
struct version<boost::unordered_map<K, T, H, P, A> >
{
BOOST_STATIC_CONSTANT(int, value = 1);
};
template <class K, class T, class H, class P, class A>
struct version<boost::unordered_multimap<K, T, H, P, A> >
{
BOOST_STATIC_CONSTANT(int, value = 1);
};
} // namespace serialization
} // namespace boost
#if defined(BOOST_MSVC)

View File

@ -14,6 +14,7 @@
#include <boost/unordered/detail/foa/node_handle.hpp>
#include <boost/unordered/detail/foa/node_map_types.hpp>
#include <boost/unordered/detail/foa/table.hpp>
#include <boost/unordered/detail/serialize_container.hpp>
#include <boost/unordered/detail/type_traits.hpp>
#include <boost/unordered/unordered_node_map_fwd.hpp>
@ -788,6 +789,16 @@ namespace boost {
return erase_if(map.table_, pred);
}
template <class Archive,
class Key, class T, class Hash, class KeyEqual, class Allocator>
void serialize(
Archive & ar,
unordered_node_map<Key, T, Hash, KeyEqual, Allocator>& map,
unsigned int version)
{
detail::serialize_container(ar, map, version);
}
#if defined(BOOST_MSVC)
#pragma warning(pop) /* C4714 */
#endif

View File

@ -1,4 +1,4 @@
// Copyright (C) 2022 Christian Mazakas
// Copyright (C) 2022-2023 Christian Mazakas
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -14,6 +14,7 @@
#include <boost/unordered/detail/foa/node_handle.hpp>
#include <boost/unordered/detail/foa/node_set_types.hpp>
#include <boost/unordered/detail/foa/table.hpp>
#include <boost/unordered/detail/serialize_container.hpp>
#include <boost/unordered/detail/type_traits.hpp>
#include <boost/unordered/unordered_node_set_fwd.hpp>
@ -601,6 +602,16 @@ namespace boost {
return erase_if(set.table_, pred);
}
template <class Archive,
class Key, class Hash, class KeyEqual, class Allocator>
void serialize(
Archive & ar,
unordered_node_set<Key, Hash, KeyEqual, Allocator>& set,
unsigned int version)
{
detail::serialize_container(ar, set, version);
}
#if defined(BOOST_MSVC)
#pragma warning(pop) /* C4714 */
#endif

View File

@ -1,7 +1,6 @@
// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
// Copyright (C) 2005-2011 Daniel James.
// Copyright (C) 2022 Christian Mazakas
// Copyright (C) 2022-2023 Christian Mazakas
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -20,6 +19,7 @@
#include <boost/functional/hash.hpp>
#include <boost/move/move.hpp>
#include <boost/unordered/detail/set.hpp>
#include <boost/unordered/detail/serialize_fca_container.hpp>
#include <boost/unordered/detail/type_traits.hpp>
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
@ -641,6 +641,13 @@ namespace boost {
#endif
}; // class template unordered_set
template <class Archive, class K, class H, class P, class A>
void serialize(
Archive & ar,unordered_set<K, H, P, A>& c,unsigned int version)
{
detail::serialize_fca_container(ar, c, version);
}
#if BOOST_UNORDERED_TEMPLATE_DEDUCTION_GUIDES
template <class InputIterator,
@ -1290,6 +1297,13 @@ namespace boost {
#endif
}; // class template unordered_multiset
template <class Archive, class K, class H, class P, class A>
void serialize(
Archive & ar,unordered_multiset<K, H, P, A>& c,unsigned int version)
{
detail::serialize_fca_container(ar, c, version);
}
#if BOOST_UNORDERED_TEMPLATE_DEDUCTION_GUIDES
template <class InputIterator,
@ -2313,9 +2327,9 @@ namespace boost {
alloc_ == n.alloc_);
if (value_allocator_traits::propagate_on_container_swap::value ||
!alloc_.has_value() || !n.alloc_.has_value()) {
boost::swap(alloc_, n.alloc_);
boost::core::invoke_swap(alloc_, n.alloc_);
}
boost::swap(ptr_, n.ptr_);
boost::core::invoke_swap(ptr_, n.ptr_);
}
};
@ -2362,11 +2376,26 @@ namespace boost {
void swap(
insert_return_type_set<Iter, NodeType>& x, insert_return_type_set<Iter, NodeType>& y)
{
boost::swap(x.node, y.node);
boost::swap(x.inserted, y.inserted);
boost::swap(x.position, y.position);
boost::core::invoke_swap(x.node, y.node);
boost::core::invoke_swap(x.inserted, y.inserted);
boost::core::invoke_swap(x.position, y.position);
}
} // namespace unordered
namespace serialization {
template <class K, class H, class P, class A>
struct version<boost::unordered_set<K, H, P, A> >
{
BOOST_STATIC_CONSTANT(int, value = 1);
};
template <class K, class H, class P, class A>
struct version<boost::unordered_multiset<K, H, P, A> >
{
BOOST_STATIC_CONSTANT(int, value = 1);
};
} // namespace serialization
} // namespace boost
#if defined(BOOST_MSVC)

View File

@ -85,6 +85,21 @@ run unordered/copy_tests.cpp : : : <define>BOOST_UNORDERED_USE_MOVE : bmove_copy
run unordered/move_tests.cpp : : : <define>BOOST_UNORDERED_USE_MOVE : bmove_move ;
run unordered/assign_tests.cpp : : : <define>BOOST_UNORDERED_USE_MOVE : bmove_assign ;
path-constant BOOST_UNORDERED_TEST_DIR : . ;
run unordered/serialization_tests.cpp
: $(BOOST_UNORDERED_TEST_DIR)
:
: <define>BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0
<warnings>off # Boost.Serialization headers are not warning-free
<undefined-sanitizer>norecover:<build>no # boost::archive::xml_oarchive does not pass UBSAN
<toolset>msvc:<define>_CRT_SECURE_NO_WARNINGS
<toolset>msvc:<cxxflags>/bigobj
<toolset>gcc:<inlining>on
<toolset>gcc:<optimization>space
<toolset>clang:<inlining>on
<toolset>clang:<optimization>space
<library>/boost//serialization/<warnings>off ;
run exception/constructor_exception_tests.cpp ;
run exception/copy_exception_tests.cpp ;
@ -149,6 +164,21 @@ for local test in $(FOA_TESTS)
run unordered/link_test_1.cpp unordered/link_test_2.cpp : : : $(CPP11) <define>BOOST_UNORDERED_FOA_TESTS : foa_link_test ;
run unordered/scoped_allocator.cpp : : : $(CPP11) <toolset>msvc-14.0:<build>no <define>BOOST_UNORDERED_FOA_TESTS : foa_scoped_allocator ;
run unordered/hash_is_avalanching_test.cpp ;
run unordered/serialization_tests.cpp
:
:
: $(CPP11) <define>BOOST_UNORDERED_FOA_TESTS
<warnings>off # Boost.Serialization headers are not warning-free
<undefined-sanitizer>norecover:<build>no # boost::archive::xml_oarchive does not pass UBSAN
<toolset>msvc:<cxxflags>/bigobj
<toolset>gcc:<inlining>on
<toolset>gcc:<optimization>space
<toolset>clang:<inlining>on
<toolset>clang:<optimization>space
<library>/boost//serialization/<warnings>off
: foa_serialization_tests ;
run exception/constructor_exception_tests.cpp : : : $(CPP11) <define>BOOST_UNORDERED_FOA_TESTS : foa_constructor_exception_tests ;
run exception/copy_exception_tests.cpp : : : $(CPP11) <define>BOOST_UNORDERED_FOA_TESTS : foa_copy_exception_tests ;
run exception/assign_exception_tests.cpp : : : $(CPP11) <define>BOOST_UNORDERED_FOA_TESTS : foa_assign_exception_tests ;
@ -164,6 +194,7 @@ alias foa_tests :
foa_link_test
foa_scoped_allocator
hash_is_avalanching_test
foa_serialization_tests
foa_constructor_exception_tests
foa_copy_exception_tests
foa_assign_exception_tests
@ -213,4 +244,20 @@ for local test in $(CFOA_TESTS)
;
}
alias cfoa_tests : cfoa_$(CFOA_TESTS) ;
run cfoa/serialization_tests.cpp
:
:
: $(CPP11) <threading>multi
<warnings>off # Boost.Serialization headers are not warning-free
<undefined-sanitizer>norecover:<build>no # boost::archive::xml_oarchive does not pass UBSAN
<toolset>msvc:<cxxflags>/bigobj
<toolset>gcc:<inlining>on
<toolset>gcc:<optimization>space
<toolset>clang:<inlining>on
<toolset>clang:<optimization>space
<library>/boost//serialization/<warnings>off
: cfoa_serialization_tests ;
alias cfoa_tests :
cfoa_$(CFOA_TESTS)
cfoa_serialization_tests ;

View File

@ -0,0 +1,79 @@
// Copyright (C) 2023 Joaquin M Lopez Munoz
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include "../objects/test.hpp"
#include "../helpers/random_values.hpp"
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/unordered/concurrent_flat_map.hpp>
namespace {
template <class Container, typename ArchivePair>
void serialization_tests(
Container*, ArchivePair*, test::random_generator generator)
{
using output_archive = typename ArchivePair::first_type ;
using input_archive = typename ArchivePair::second_type;
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "serialization_tests1\n";
{
Container c;
std::ostringstream oss;
{
output_archive oa(oss);
oa << boost::serialization::make_nvp("container", c);
}
test::random_values<Container> values(100, generator);
Container c2(values.begin(), values.end());
std::istringstream iss(oss.str());
input_archive ia(iss);
ia >> boost::serialization::make_nvp("container", c2);
BOOST_TEST(c2.empty());
}
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "serialization_tests2\n";
{
test::random_values<Container> values(100, generator);
Container c(values.begin(), values.end());
std::ostringstream oss;
{
output_archive oa(oss);
oa << boost::serialization::make_nvp("container", c);
}
Container c2;
std::istringstream iss(oss.str());
input_archive ia(iss);
ia >> boost::serialization::make_nvp("container", c2);
BOOST_TEST(c == c2);
}
}
using test::default_generator;
std::pair<
boost::archive::text_oarchive, boost::archive::text_iarchive>*
text_archive;
std::pair<
boost::archive::xml_oarchive, boost::archive::xml_iarchive>*
xml_archive;
boost::concurrent_flat_map<
test::object, test::object, test::hash, test::equal_to>* test_flat_map;
UNORDERED_TEST(serialization_tests,
((test_flat_map))
((text_archive)(xml_archive))
((default_generator)))
}
RUN_TESTS()

View File

@ -0,0 +1,270 @@
/* Copyright 2023 Joaquin M Lopez Munoz.
* Distributed under the Boost Software License, Version 1.0.
* (See accompanying file LICENSE_1_0.txt or copy at
* http://www.boost.org/LICENSE_1_0.txt)
*
* See https://www.boost.org/libs/unordered for library home page.
*/
/* This program has been used to generate archives of Boost.Unordered
* containers with Boost 1.83, when serialization support was provided
* externally to Boost.Unordered in
* boost/serialization/boost_unordered_(map|set).hpp. Beginning with the
* release of native Boost.Unordered serialization capabilities in Boost
* 1.84, these archives are used to test backwards loading compatibility
* as enabled by BOOST_UNORDERED_ENABLE_SERIALIZATION_COMPATIBILITY_V0.
*/
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/boost_unordered_map.hpp>
#include <boost/serialization/boost_unordered_set.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/version.hpp>
#include <fstream>
#include <random>
template<typename Value=unsigned int>
struct random_generator
{
Value operator()()
{
return static_cast<Value>(dist(gen));
}
std::uniform_int_distribution<unsigned int> dist;
std::mt19937 gen{231};
};
template<>
struct random_generator<std::string>
{
std::string operator()()
{
return std::to_string(rng());
}
random_generator<> rng;
};
template<>
struct random_generator<const std::string>:random_generator<std::string>{};
template<typename T,typename Q>
struct random_generator<std::pair<T,Q>>
{
std::pair<T,Q> operator()()
{
return {rngt(),rngq()};
}
random_generator<T> rngt;
random_generator<Q> rngq;
};
template<typename T>
struct non_const
{
typedef T type;
};
template<typename T>
struct non_const<const T>
{
using type=typename non_const<T>::type;
};
template<typename T, typename Q>
struct non_const<std::pair<T, Q>>
{
using type=std::pair<
typename non_const<T>::type,
typename non_const<Q>::type>;
};
template<typename Container,typename Archive>
void generate_legacy_archive(const char* filename,std::size_t n)
{
using value_type=typename Container::value_type;
using vector=std::vector<typename non_const<value_type>::type>;
Container c;
vector v;
random_generator<value_type> rng;
std::uniform_int_distribution<> repeat(0,1);
std::mt19937 gen{231};
for(std::size_t i=0;i<n;++i){
value_type x=rng();
c.insert(x);
v.push_back(x);
if(repeat(gen)){
c.insert(x);
v.push_back(x);
}
}
std::ofstream ofs(filename);
Archive oa(ofs);
oa<<boost::serialization::make_nvp("container",c);
oa<<boost::serialization::make_nvp("values",v);
}
int main()
{
static_assert(BOOST_VERSION<=108300,"to be used with Boost <1.84.");
generate_legacy_archive<
boost::unordered_map<int,int>,boost::archive::text_oarchive
>("map_int_0.txt",0);
generate_legacy_archive<
boost::unordered_map<int,int>,boost::archive::text_oarchive
>("map_int_10.txt",10);
generate_legacy_archive<
boost::unordered_map<int,int>,boost::archive::text_oarchive
>("map_int_100.txt",100);
generate_legacy_archive<
boost::unordered_map<std::string,std::string>,boost::archive::text_oarchive
>("map_string_0.txt",0);
generate_legacy_archive<
boost::unordered_map<std::string,std::string>,boost::archive::text_oarchive
>("map_string_10.txt",10);
generate_legacy_archive<boost::unordered_map<
std::string,std::string>,boost::archive::text_oarchive
>("map_string_100.txt",100);
generate_legacy_archive<
boost::unordered_multimap<int,int>,boost::archive::text_oarchive
>("multimap_int_0.txt",0);
generate_legacy_archive<
boost::unordered_multimap<int,int>,boost::archive::text_oarchive
>("multimap_int_10.txt",10);
generate_legacy_archive<
boost::unordered_multimap<int,int>,boost::archive::text_oarchive
>("multimap_int_100.txt",100);
generate_legacy_archive<
boost::unordered_multimap<std::string,std::string>,boost::archive::text_oarchive
>("multimap_string_0.txt",0);
generate_legacy_archive<
boost::unordered_multimap<std::string,std::string>,boost::archive::text_oarchive
>("multimap_string_10.txt",10);
generate_legacy_archive<
boost::unordered_multimap<std::string,std::string>,boost::archive::text_oarchive
>("multimap_string_100.txt",100);
generate_legacy_archive<
boost::unordered_set<int>,boost::archive::text_oarchive
>("set_int_0.txt",0);
generate_legacy_archive<
boost::unordered_set<int>,boost::archive::text_oarchive
>("set_int_10.txt",10);
generate_legacy_archive<
boost::unordered_set<int>,boost::archive::text_oarchive
>("set_int_100.txt",100);
generate_legacy_archive<
boost::unordered_set<std::string>,boost::archive::text_oarchive
>("set_string_0.txt",0);
generate_legacy_archive<
boost::unordered_set<std::string>,boost::archive::text_oarchive
>("set_string_10.txt",10);
generate_legacy_archive<
boost::unordered_set<std::string>,boost::archive::text_oarchive
>("set_string_100.txt",100);
generate_legacy_archive<
boost::unordered_multiset<int>,boost::archive::text_oarchive
>("multiset_int_0.txt",0);
generate_legacy_archive<
boost::unordered_multiset<int>,boost::archive::text_oarchive
>("multiset_int_10.txt",10);
generate_legacy_archive<
boost::unordered_multiset<int>,boost::archive::text_oarchive
>("multiset_int_100.txt",100);
generate_legacy_archive<
boost::unordered_multiset<std::string>,boost::archive::text_oarchive
>("multiset_string_0.txt",0);
generate_legacy_archive<
boost::unordered_multiset<std::string>,boost::archive::text_oarchive
>("multiset_string_10.txt",10);
generate_legacy_archive<
boost::unordered_multiset<std::string>,boost::archive::text_oarchive
>("multiset_string_100.txt",100);
generate_legacy_archive<
boost::unordered_map<int,int>,boost::archive::xml_oarchive
>("map_int_0.xml",0);
generate_legacy_archive<
boost::unordered_map<int,int>,boost::archive::xml_oarchive
>("map_int_10.xml",10);
generate_legacy_archive<
boost::unordered_map<int,int>,boost::archive::xml_oarchive
>("map_int_100.xml",100);
generate_legacy_archive<
boost::unordered_map<std::string,std::string>,boost::archive::xml_oarchive
>("map_string_0.xml",0);
generate_legacy_archive<
boost::unordered_map<std::string,std::string>,boost::archive::xml_oarchive
>("map_string_10.xml",10);
generate_legacy_archive<
boost::unordered_map<std::string,std::string>,boost::archive::xml_oarchive
>("map_string_100.xml",100);
generate_legacy_archive<
boost::unordered_multimap<int,int>,boost::archive::xml_oarchive
>("multimap_int_0.xml",0);
generate_legacy_archive<
boost::unordered_multimap<int,int>,boost::archive::xml_oarchive
>("multimap_int_10.xml",10);
generate_legacy_archive<
boost::unordered_multimap<int,int>,boost::archive::xml_oarchive
>("multimap_int_100.xml",100);
generate_legacy_archive<
boost::unordered_multimap<std::string,std::string>,boost::archive::xml_oarchive
>("multimap_string_0.xml",0);
generate_legacy_archive<
boost::unordered_multimap<std::string,std::string>,boost::archive::xml_oarchive
>("multimap_string_10.xml",10);
generate_legacy_archive<
boost::unordered_multimap<std::string,std::string>,boost::archive::xml_oarchive
>("multimap_string_100.xml",100);
generate_legacy_archive<
boost::unordered_set<int>,boost::archive::xml_oarchive
>("set_int_0.xml",0);
generate_legacy_archive<
boost::unordered_set<int>,boost::archive::xml_oarchive
>("set_int_10.xml",10);
generate_legacy_archive<
boost::unordered_set<int>,boost::archive::xml_oarchive
>("set_int_100.xml",100);
generate_legacy_archive<
boost::unordered_set<std::string>,boost::archive::xml_oarchive
>("set_string_0.xml",0);
generate_legacy_archive<
boost::unordered_set<std::string>,boost::archive::xml_oarchive
>("set_string_10.xml",10);
generate_legacy_archive<
boost::unordered_set<std::string>,boost::archive::xml_oarchive
>("set_string_100.xml",100);
generate_legacy_archive<
boost::unordered_multiset<int>,boost::archive::xml_oarchive
>("multiset_int_0.xml",0);
generate_legacy_archive<
boost::unordered_multiset<int>,boost::archive::xml_oarchive
>("multiset_int_10.xml",10);
generate_legacy_archive<
boost::unordered_multiset<int>,boost::archive::xml_oarchive
>("multiset_int_100.xml",100);
generate_legacy_archive<
boost::unordered_multiset<std::string>,boost::archive::xml_oarchive
>("multiset_string_0.xml",0);
generate_legacy_archive<
boost::unordered_multiset<std::string>,boost::archive::xml_oarchive
>("multiset_string_10.xml",10);
generate_legacy_archive<
boost::unordered_multiset<std::string>,boost::archive::xml_oarchive
>("multiset_string_100.xml",100);
}

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 0 0 0 0 0 0 0

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>0</count>
<bucket_count>0</bucket_count>
<item_version>0</item_version>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>0</count>
<item_version>0</item_version>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 10 13 0 0 0 2097663454 2097663454 -1785808236 -1785808236 -938475945 -938475945 1354395138 1354395138 581989062 581989062 -1694006096 -1694006096 1832705803 1832705803 -743509129 -743509129 1021729225 1021729225 -1168265900 -1168265900 0 0 14 0 0 0 -938475945 -938475945 -938475945 -938475945 -1694006096 -1694006096 -1785808236 -1785808236 1021729225 1021729225 1021729225 1021729225 1832705803 1832705803 1832705803 1832705803 581989062 581989062 1354395138 1354395138 2097663454 2097663454 -743509129 -743509129 -743509129 -743509129 -1168265900 -1168265900

View File

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>10</count>
<bucket_count>13</bucket_count>
<item_version>0</item_version>
<item class_id="1" tracking_level="0" version="0">
<first>2097663454</first>
<second>2097663454</second>
</item>
<item>
<first>-1785808236</first>
<second>-1785808236</second>
</item>
<item>
<first>-938475945</first>
<second>-938475945</second>
</item>
<item>
<first>1354395138</first>
<second>1354395138</second>
</item>
<item>
<first>581989062</first>
<second>581989062</second>
</item>
<item>
<first>-1694006096</first>
<second>-1694006096</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>-743509129</first>
<second>-743509129</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>-1168265900</first>
<second>-1168265900</second>
</item>
</container>
<values class_id="2" tracking_level="0" version="0">
<count>14</count>
<item_version>0</item_version>
<item class_id="3" tracking_level="0" version="0">
<first>-938475945</first>
<second>-938475945</second>
</item>
<item>
<first>-938475945</first>
<second>-938475945</second>
</item>
<item>
<first>-1694006096</first>
<second>-1694006096</second>
</item>
<item>
<first>-1785808236</first>
<second>-1785808236</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>581989062</first>
<second>581989062</second>
</item>
<item>
<first>1354395138</first>
<second>1354395138</second>
</item>
<item>
<first>2097663454</first>
<second>2097663454</second>
</item>
<item>
<first>-743509129</first>
<second>-743509129</second>
</item>
<item>
<first>-743509129</first>
<second>-743509129</second>
</item>
<item>
<first>-1168265900</first>
<second>-1168265900</second>
</item>
</values>
</boost_serialization>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 0 0 0 0 0 0 0

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>0</count>
<bucket_count>0</bucket_count>
<item_version>0</item_version>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>0</count>
<item_version>0</item_version>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 10 13 0 0 0 10 1832705803 10 1832705803 10 2097663454 10 2097663454 10 3551458167 10 3551458167 10 2509159060 10 2509159060 10 2600961200 10 2600961200 9 581989062 9 581989062 10 1021729225 10 1021729225 10 3126701396 10 3126701396 10 1354395138 10 1354395138 10 3356491351 10 3356491351 0 0 14 0 0 0 10 3356491351 10 3356491351 10 3356491351 10 3356491351 10 2600961200 10 2600961200 10 2509159060 10 2509159060 10 1021729225 10 1021729225 10 1021729225 10 1021729225 10 1832705803 10 1832705803 10 1832705803 10 1832705803 9 581989062 9 581989062 10 1354395138 10 1354395138 10 2097663454 10 2097663454 10 3551458167 10 3551458167 10 3551458167 10 3551458167 10 3126701396 10 3126701396

View File

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>10</count>
<bucket_count>13</bucket_count>
<item_version>0</item_version>
<item class_id="1" tracking_level="0" version="0">
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>2097663454</first>
<second>2097663454</second>
</item>
<item>
<first>3551458167</first>
<second>3551458167</second>
</item>
<item>
<first>2509159060</first>
<second>2509159060</second>
</item>
<item>
<first>2600961200</first>
<second>2600961200</second>
</item>
<item>
<first>581989062</first>
<second>581989062</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>3126701396</first>
<second>3126701396</second>
</item>
<item>
<first>1354395138</first>
<second>1354395138</second>
</item>
<item>
<first>3356491351</first>
<second>3356491351</second>
</item>
</container>
<values class_id="2" tracking_level="0" version="0">
<count>14</count>
<item_version>0</item_version>
<item class_id="3" tracking_level="0" version="0">
<first>3356491351</first>
<second>3356491351</second>
</item>
<item>
<first>3356491351</first>
<second>3356491351</second>
</item>
<item>
<first>2600961200</first>
<second>2600961200</second>
</item>
<item>
<first>2509159060</first>
<second>2509159060</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>581989062</first>
<second>581989062</second>
</item>
<item>
<first>1354395138</first>
<second>1354395138</second>
</item>
<item>
<first>2097663454</first>
<second>2097663454</second>
</item>
<item>
<first>3551458167</first>
<second>3551458167</second>
</item>
<item>
<first>3551458167</first>
<second>3551458167</second>
</item>
<item>
<first>3126701396</first>
<second>3126701396</second>
</item>
</values>
</boost_serialization>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 0 0 0 0 0 0 0

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>0</count>
<bucket_count>0</bucket_count>
<item_version>0</item_version>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>0</count>
<item_version>0</item_version>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 14 29 0 0 0 -938475945 -938475945 -938475945 -938475945 -1785808236 -1785808236 -1694006096 -1694006096 1021729225 1021729225 1021729225 1021729225 581989062 581989062 -1168265900 -1168265900 2097663454 2097663454 1354395138 1354395138 -743509129 -743509129 -743509129 -743509129 1832705803 1832705803 1832705803 1832705803 0 0 14 0 0 0 -938475945 -938475945 -938475945 -938475945 -1694006096 -1694006096 -1785808236 -1785808236 1021729225 1021729225 1021729225 1021729225 1832705803 1832705803 1832705803 1832705803 581989062 581989062 1354395138 1354395138 2097663454 2097663454 -743509129 -743509129 -743509129 -743509129 -1168265900 -1168265900

View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>14</count>
<bucket_count>29</bucket_count>
<item_version>0</item_version>
<item class_id="1" tracking_level="0" version="0">
<first>-938475945</first>
<second>-938475945</second>
</item>
<item>
<first>-938475945</first>
<second>-938475945</second>
</item>
<item>
<first>-1785808236</first>
<second>-1785808236</second>
</item>
<item>
<first>-1694006096</first>
<second>-1694006096</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>581989062</first>
<second>581989062</second>
</item>
<item>
<first>-1168265900</first>
<second>-1168265900</second>
</item>
<item>
<first>2097663454</first>
<second>2097663454</second>
</item>
<item>
<first>1354395138</first>
<second>1354395138</second>
</item>
<item>
<first>-743509129</first>
<second>-743509129</second>
</item>
<item>
<first>-743509129</first>
<second>-743509129</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
</container>
<values class_id="2" tracking_level="0" version="0">
<count>14</count>
<item_version>0</item_version>
<item class_id="3" tracking_level="0" version="0">
<first>-938475945</first>
<second>-938475945</second>
</item>
<item>
<first>-938475945</first>
<second>-938475945</second>
</item>
<item>
<first>-1694006096</first>
<second>-1694006096</second>
</item>
<item>
<first>-1785808236</first>
<second>-1785808236</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>581989062</first>
<second>581989062</second>
</item>
<item>
<first>1354395138</first>
<second>1354395138</second>
</item>
<item>
<first>2097663454</first>
<second>2097663454</second>
</item>
<item>
<first>-743509129</first>
<second>-743509129</second>
</item>
<item>
<first>-743509129</first>
<second>-743509129</second>
</item>
<item>
<first>-1168265900</first>
<second>-1168265900</second>
</item>
</values>
</boost_serialization>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 0 0 0 0 0 0 0

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>0</count>
<bucket_count>0</bucket_count>
<item_version>0</item_version>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>0</count>
<item_version>0</item_version>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 14 29 0 0 0 10 3551458167 10 3551458167 10 3551458167 10 3551458167 10 2600961200 10 2600961200 10 3126701396 10 3126701396 9 581989062 9 581989062 10 1832705803 10 1832705803 10 1832705803 10 1832705803 10 3356491351 10 3356491351 10 3356491351 10 3356491351 10 1021729225 10 1021729225 10 1021729225 10 1021729225 10 2097663454 10 2097663454 10 1354395138 10 1354395138 10 2509159060 10 2509159060 0 0 14 0 0 0 10 3356491351 10 3356491351 10 3356491351 10 3356491351 10 2600961200 10 2600961200 10 2509159060 10 2509159060 10 1021729225 10 1021729225 10 1021729225 10 1021729225 10 1832705803 10 1832705803 10 1832705803 10 1832705803 9 581989062 9 581989062 10 1354395138 10 1354395138 10 2097663454 10 2097663454 10 3551458167 10 3551458167 10 3551458167 10 3551458167 10 3126701396 10 3126701396

View File

@ -0,0 +1,126 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>14</count>
<bucket_count>29</bucket_count>
<item_version>0</item_version>
<item class_id="1" tracking_level="0" version="0">
<first>3551458167</first>
<second>3551458167</second>
</item>
<item>
<first>3551458167</first>
<second>3551458167</second>
</item>
<item>
<first>2600961200</first>
<second>2600961200</second>
</item>
<item>
<first>3126701396</first>
<second>3126701396</second>
</item>
<item>
<first>581989062</first>
<second>581989062</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>3356491351</first>
<second>3356491351</second>
</item>
<item>
<first>3356491351</first>
<second>3356491351</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>2097663454</first>
<second>2097663454</second>
</item>
<item>
<first>1354395138</first>
<second>1354395138</second>
</item>
<item>
<first>2509159060</first>
<second>2509159060</second>
</item>
</container>
<values class_id="2" tracking_level="0" version="0">
<count>14</count>
<item_version>0</item_version>
<item class_id="3" tracking_level="0" version="0">
<first>3356491351</first>
<second>3356491351</second>
</item>
<item>
<first>3356491351</first>
<second>3356491351</second>
</item>
<item>
<first>2600961200</first>
<second>2600961200</second>
</item>
<item>
<first>2509159060</first>
<second>2509159060</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1021729225</first>
<second>1021729225</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>1832705803</first>
<second>1832705803</second>
</item>
<item>
<first>581989062</first>
<second>581989062</second>
</item>
<item>
<first>1354395138</first>
<second>1354395138</second>
</item>
<item>
<first>2097663454</first>
<second>2097663454</second>
</item>
<item>
<first>3551458167</first>
<second>3551458167</second>
</item>
<item>
<first>3551458167</first>
<second>3551458167</second>
</item>
<item>
<first>3126701396</first>
<second>3126701396</second>
</item>
</values>
</boost_serialization>

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 0 0 0 0 0

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>0</count>
<bucket_count>0</bucket_count>
<item_version>0</item_version>
</container>
<values>
<count>0</count>
<item_version>0</item_version>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 14 29 0 -938475945 -938475945 -1785808236 -1694006096 1021729225 1021729225 581989062 -1168265900 2097663454 1354395138 -743509129 -743509129 1832705803 1832705803 14 0 -938475945 -938475945 -1694006096 -1785808236 1021729225 1021729225 1832705803 1832705803 581989062 1354395138 2097663454 -743509129 -743509129 -1168265900

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>14</count>
<bucket_count>29</bucket_count>
<item_version>0</item_version>
<item>-938475945</item>
<item>-938475945</item>
<item>-1785808236</item>
<item>-1694006096</item>
<item>1021729225</item>
<item>1021729225</item>
<item>581989062</item>
<item>-1168265900</item>
<item>2097663454</item>
<item>1354395138</item>
<item>-743509129</item>
<item>-743509129</item>
<item>1832705803</item>
<item>1832705803</item>
</container>
<values>
<count>14</count>
<item_version>0</item_version>
<item>-938475945</item>
<item>-938475945</item>
<item>-1694006096</item>
<item>-1785808236</item>
<item>1021729225</item>
<item>1021729225</item>
<item>1832705803</item>
<item>1832705803</item>
<item>581989062</item>
<item>1354395138</item>
<item>2097663454</item>
<item>-743509129</item>
<item>-743509129</item>
<item>-1168265900</item>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 152 193 0 1775667486 -948676228 -1108026676 -1866983349 -1866983349 258343568 -1068590402 -432548865 -432548865 177811234 5018725 5018725 190104374 1315739433 1315739433 -1995826660 -305386173 -305386173 287343763 287343763 1241175627 1241175627 109292002 1021729225 1021729225 -1426106865 -1426106865 918842470 -1338732474 669358715 669358715 183526573 183526573 -938475945 -938475945 -1694006096 1630722604 -1933552094 257760945 257760945 -1510933233 -1510933233 390937317 390937317 259868705 259868705 -38527737 -38527737 -551129560 1832705803 1832705803 607596425 607596425 -1520512970 -1674340339 -1674340339 -1873731147 -1873731147 1421489007 1421489007 -501526237 -501526237 -1877186230 -218590163 -218590163 647803737 647803737 -859679032 967560929 967560929 -815473344 -487119163 -487119163 -1546216506 1859681623 1859681623 -1040862600 -893024018 -1319261042 -1252588227 -1252588227 -1785808236 1198739057 1198739057 -1469084794 473010817 473010817 1481537722 2138619156 -1039351567 -1039351567 -493829536 411876340 -364116164 776215953 776215953 1568788209 1568788209 -1631204972 601527218 286273879 286273879 -232190041 -232190041 2075478837 2075478837 -1168265900 581989062 178482033 178482033 1354395138 -1530408968 -414767254 1970368353 1970368353 -1967815281 -1967815281 941660988 1786883066 670291604 -1803607012 1829132124 -432502583 -432502583 -1642734171 -1642734171 -425048532 2097663454 -1938999974 -1802192500 2056892401 2056892401 -917350225 -917350225 -55935255 -55935255 -418860175 -418860175 -2146202839 -2146202839 310524955 310524955 159865104 -265464733 -265464733 -1996442747 -1996442747 430136711 430136711 -743509129 -743509129 167237906 152 0 -938475945 -938475945 -1694006096 -1785808236 1021729225 1021729225 1832705803 1832705803 581989062 1354395138 2097663454 -743509129 -743509129 -1168265900 -414767254 -1039351567 -1039351567 167237906 177811234 -364116164 -1933552094 259868705 259868705 -501526237 -501526237 776215953 776215953 1630722604 310524955 310524955 473010817 473010817 1970368353 1970368353 647803737 647803737 -1252588227 -1252588227 669358715 669358715 2075478837 2075478837 -1995826660 109292002 1421489007 1421489007 287343763 287343763 -1108026676 1829132124 -1546216506 941660988 -305386173 -305386173 -815473344 -1877186230 601527218 -38527737 -38527737 -1068590402 1568788209 1568788209 1198739057 1198739057 2138619156 -218590163 -218590163 -1469084794 -493829536 -232190041 -232190041 -1674340339 -1674340339 1775667486 -948676228 -1338732474 178482033 178482033 918842470 -917350225 -917350225 390937317 390937317 -418860175 -418860175 670291604 1859681623 1859681623 1241175627 1241175627 -487119163 -487119163 1315739433 1315739433 -1938999974 1786883066 -55935255 -55935255 -2146202839 -2146202839 -1866983349 -1866983349 607596425 607596425 -425048532 -893024018 -1873731147 -1873731147 159865104 411876340 2056892401 2056892401 -1642734171 -1642734171 -1996442747 -1996442747 257760945 257760945 -1631204972 -1802192500 -432548865 -432548865 -551129560 -1319261042 -859679032 -1510933233 -1510933233 286273879 286273879 1481537722 258343568 -265464733 -265464733 -432502583 -432502583 -1967815281 -1967815281 -1530408968 967560929 967560929 -1426106865 -1426106865 190104374 430136711 430136711 -1803607012 -1520512970 5018725 5018725 183526573 183526573 -1040862600

View File

@ -0,0 +1,318 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>152</count>
<bucket_count>193</bucket_count>
<item_version>0</item_version>
<item>1775667486</item>
<item>-948676228</item>
<item>-1108026676</item>
<item>-1866983349</item>
<item>-1866983349</item>
<item>258343568</item>
<item>-1068590402</item>
<item>-432548865</item>
<item>-432548865</item>
<item>177811234</item>
<item>5018725</item>
<item>5018725</item>
<item>190104374</item>
<item>1315739433</item>
<item>1315739433</item>
<item>-1995826660</item>
<item>-305386173</item>
<item>-305386173</item>
<item>287343763</item>
<item>287343763</item>
<item>1241175627</item>
<item>1241175627</item>
<item>109292002</item>
<item>1021729225</item>
<item>1021729225</item>
<item>-1426106865</item>
<item>-1426106865</item>
<item>918842470</item>
<item>-1338732474</item>
<item>669358715</item>
<item>669358715</item>
<item>183526573</item>
<item>183526573</item>
<item>-938475945</item>
<item>-938475945</item>
<item>-1694006096</item>
<item>1630722604</item>
<item>-1933552094</item>
<item>257760945</item>
<item>257760945</item>
<item>-1510933233</item>
<item>-1510933233</item>
<item>390937317</item>
<item>390937317</item>
<item>259868705</item>
<item>259868705</item>
<item>-38527737</item>
<item>-38527737</item>
<item>-551129560</item>
<item>1832705803</item>
<item>1832705803</item>
<item>607596425</item>
<item>607596425</item>
<item>-1520512970</item>
<item>-1674340339</item>
<item>-1674340339</item>
<item>-1873731147</item>
<item>-1873731147</item>
<item>1421489007</item>
<item>1421489007</item>
<item>-501526237</item>
<item>-501526237</item>
<item>-1877186230</item>
<item>-218590163</item>
<item>-218590163</item>
<item>647803737</item>
<item>647803737</item>
<item>-859679032</item>
<item>967560929</item>
<item>967560929</item>
<item>-815473344</item>
<item>-487119163</item>
<item>-487119163</item>
<item>-1546216506</item>
<item>1859681623</item>
<item>1859681623</item>
<item>-1040862600</item>
<item>-893024018</item>
<item>-1319261042</item>
<item>-1252588227</item>
<item>-1252588227</item>
<item>-1785808236</item>
<item>1198739057</item>
<item>1198739057</item>
<item>-1469084794</item>
<item>473010817</item>
<item>473010817</item>
<item>1481537722</item>
<item>2138619156</item>
<item>-1039351567</item>
<item>-1039351567</item>
<item>-493829536</item>
<item>411876340</item>
<item>-364116164</item>
<item>776215953</item>
<item>776215953</item>
<item>1568788209</item>
<item>1568788209</item>
<item>-1631204972</item>
<item>601527218</item>
<item>286273879</item>
<item>286273879</item>
<item>-232190041</item>
<item>-232190041</item>
<item>2075478837</item>
<item>2075478837</item>
<item>-1168265900</item>
<item>581989062</item>
<item>178482033</item>
<item>178482033</item>
<item>1354395138</item>
<item>-1530408968</item>
<item>-414767254</item>
<item>1970368353</item>
<item>1970368353</item>
<item>-1967815281</item>
<item>-1967815281</item>
<item>941660988</item>
<item>1786883066</item>
<item>670291604</item>
<item>-1803607012</item>
<item>1829132124</item>
<item>-432502583</item>
<item>-432502583</item>
<item>-1642734171</item>
<item>-1642734171</item>
<item>-425048532</item>
<item>2097663454</item>
<item>-1938999974</item>
<item>-1802192500</item>
<item>2056892401</item>
<item>2056892401</item>
<item>-917350225</item>
<item>-917350225</item>
<item>-55935255</item>
<item>-55935255</item>
<item>-418860175</item>
<item>-418860175</item>
<item>-2146202839</item>
<item>-2146202839</item>
<item>310524955</item>
<item>310524955</item>
<item>159865104</item>
<item>-265464733</item>
<item>-265464733</item>
<item>-1996442747</item>
<item>-1996442747</item>
<item>430136711</item>
<item>430136711</item>
<item>-743509129</item>
<item>-743509129</item>
<item>167237906</item>
</container>
<values>
<count>152</count>
<item_version>0</item_version>
<item>-938475945</item>
<item>-938475945</item>
<item>-1694006096</item>
<item>-1785808236</item>
<item>1021729225</item>
<item>1021729225</item>
<item>1832705803</item>
<item>1832705803</item>
<item>581989062</item>
<item>1354395138</item>
<item>2097663454</item>
<item>-743509129</item>
<item>-743509129</item>
<item>-1168265900</item>
<item>-414767254</item>
<item>-1039351567</item>
<item>-1039351567</item>
<item>167237906</item>
<item>177811234</item>
<item>-364116164</item>
<item>-1933552094</item>
<item>259868705</item>
<item>259868705</item>
<item>-501526237</item>
<item>-501526237</item>
<item>776215953</item>
<item>776215953</item>
<item>1630722604</item>
<item>310524955</item>
<item>310524955</item>
<item>473010817</item>
<item>473010817</item>
<item>1970368353</item>
<item>1970368353</item>
<item>647803737</item>
<item>647803737</item>
<item>-1252588227</item>
<item>-1252588227</item>
<item>669358715</item>
<item>669358715</item>
<item>2075478837</item>
<item>2075478837</item>
<item>-1995826660</item>
<item>109292002</item>
<item>1421489007</item>
<item>1421489007</item>
<item>287343763</item>
<item>287343763</item>
<item>-1108026676</item>
<item>1829132124</item>
<item>-1546216506</item>
<item>941660988</item>
<item>-305386173</item>
<item>-305386173</item>
<item>-815473344</item>
<item>-1877186230</item>
<item>601527218</item>
<item>-38527737</item>
<item>-38527737</item>
<item>-1068590402</item>
<item>1568788209</item>
<item>1568788209</item>
<item>1198739057</item>
<item>1198739057</item>
<item>2138619156</item>
<item>-218590163</item>
<item>-218590163</item>
<item>-1469084794</item>
<item>-493829536</item>
<item>-232190041</item>
<item>-232190041</item>
<item>-1674340339</item>
<item>-1674340339</item>
<item>1775667486</item>
<item>-948676228</item>
<item>-1338732474</item>
<item>178482033</item>
<item>178482033</item>
<item>918842470</item>
<item>-917350225</item>
<item>-917350225</item>
<item>390937317</item>
<item>390937317</item>
<item>-418860175</item>
<item>-418860175</item>
<item>670291604</item>
<item>1859681623</item>
<item>1859681623</item>
<item>1241175627</item>
<item>1241175627</item>
<item>-487119163</item>
<item>-487119163</item>
<item>1315739433</item>
<item>1315739433</item>
<item>-1938999974</item>
<item>1786883066</item>
<item>-55935255</item>
<item>-55935255</item>
<item>-2146202839</item>
<item>-2146202839</item>
<item>-1866983349</item>
<item>-1866983349</item>
<item>607596425</item>
<item>607596425</item>
<item>-425048532</item>
<item>-893024018</item>
<item>-1873731147</item>
<item>-1873731147</item>
<item>159865104</item>
<item>411876340</item>
<item>2056892401</item>
<item>2056892401</item>
<item>-1642734171</item>
<item>-1642734171</item>
<item>-1996442747</item>
<item>-1996442747</item>
<item>257760945</item>
<item>257760945</item>
<item>-1631204972</item>
<item>-1802192500</item>
<item>-432548865</item>
<item>-432548865</item>
<item>-551129560</item>
<item>-1319261042</item>
<item>-859679032</item>
<item>-1510933233</item>
<item>-1510933233</item>
<item>286273879</item>
<item>286273879</item>
<item>1481537722</item>
<item>258343568</item>
<item>-265464733</item>
<item>-265464733</item>
<item>-432502583</item>
<item>-432502583</item>
<item>-1967815281</item>
<item>-1967815281</item>
<item>-1530408968</item>
<item>967560929</item>
<item>967560929</item>
<item>-1426106865</item>
<item>-1426106865</item>
<item>190104374</item>
<item>430136711</item>
<item>430136711</item>
<item>-1803607012</item>
<item>-1520512970</item>
<item>5018725</item>
<item>5018725</item>
<item>183526573</item>
<item>183526573</item>
<item>-1040862600</item>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 0 0 0 0 0 0 0

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>0</count>
<bucket_count>0</bucket_count>
<item_version>0</item_version>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>0</count>
<item_version>0</item_version>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 14 29 0 10 3551458167 10 3551458167 10 2600961200 10 3126701396 9 581989062 10 1832705803 10 1832705803 10 3356491351 10 3356491351 10 1021729225 10 1021729225 10 2097663454 10 1354395138 10 2509159060 0 0 14 0 10 3356491351 10 3356491351 10 2600961200 10 2509159060 10 1021729225 10 1021729225 10 1832705803 10 1832705803 9 581989062 10 1354395138 10 2097663454 10 3551458167 10 3551458167 10 3126701396

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>14</count>
<bucket_count>29</bucket_count>
<item_version>0</item_version>
<item>3551458167</item>
<item>3551458167</item>
<item>2600961200</item>
<item>3126701396</item>
<item>581989062</item>
<item>1832705803</item>
<item>1832705803</item>
<item>3356491351</item>
<item>3356491351</item>
<item>1021729225</item>
<item>1021729225</item>
<item>2097663454</item>
<item>1354395138</item>
<item>2509159060</item>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>14</count>
<item_version>0</item_version>
<item>3356491351</item>
<item>3356491351</item>
<item>2600961200</item>
<item>2509159060</item>
<item>1021729225</item>
<item>1021729225</item>
<item>1832705803</item>
<item>1832705803</item>
<item>581989062</item>
<item>1354395138</item>
<item>2097663454</item>
<item>3551458167</item>
<item>3551458167</item>
<item>3126701396</item>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 152 193 0 9 178482033 9 178482033 10 1786883066 9 286273879 9 286273879 10 2298524549 10 2298524549 9 259868705 9 259868705 9 601527218 9 411876340 10 4029502563 10 4029502563 9 109292002 9 941660988 10 4256439559 10 4256439559 10 3401943278 10 2663762324 10 3042379069 10 3042379069 10 2509159060 10 1859681623 10 1859681623 10 3356491351 10 3356491351 10 2620626957 10 2620626957 10 2652233125 10 2652233125 9 607596425 9 607596425 10 1568788209 10 1568788209 10 2868860431 10 2868860431 9 670291604 10 2764558328 10 3226376894 10 3930851132 10 3801137760 9 287343763 9 287343763 10 2138619156 9 967560929 9 967560929 9 257760945 9 257760945 10 2056892401 10 2056892401 10 1829132124 10 3807848133 10 3807848133 9 190104374 9 310524955 9 310524955 10 1481537722 10 2361415202 10 1970368353 10 1970368353 10 2417781066 10 3186940620 10 1421489007 10 1421489007 9 776215953 9 776215953 10 1775667486 9 159865104 10 2355967322 10 2748750790 10 1832705803 10 1832705803 10 4239032041 10 4239032041 10 3876107121 10 3876107121 10 3479493952 10 2600961200 10 1241175627 10 1241175627 9 258343568 10 1630722604 10 3255615729 10 3255615729 7 5018725 7 5018725 10 2774454326 10 2825882502 9 581989062 10 2148764457 10 2148764457 10 3862464713 10 3862464713 10 3862418431 10 3862418431 9 918842470 9 183526573 9 183526573 10 2097663454 10 3377617071 10 3377617071 9 167237906 10 2492774796 10 3254104696 10 3551458167 10 3551458167 10 3989581123 10 3989581123 9 430136711 9 430136711 10 2427983947 10 2427983947 10 2975706254 10 1198739057 10 1198739057 9 473010817 9 473010817 10 2075478837 10 2075478837 10 2956234822 10 3435288264 10 2491360284 10 4076377133 10 4076377133 10 3869918764 9 647803737 9 647803737 9 669358715 9 669358715 9 177811234 10 1021729225 10 1021729225 10 2327152015 10 2327152015 10 3793441059 10 3793441059 9 390937317 9 390937317 10 2421236149 10 2421236149 10 3346291068 10 3880200042 10 2299140636 10 3743837736 10 2784034063 10 2784034063 10 1315739433 10 1315739433 10 1354395138 10 4062777255 10 4062777255 10 3126701396 0 0 152 0 10 3356491351 10 3356491351 10 2600961200 10 2509159060 10 1021729225 10 1021729225 10 1832705803 10 1832705803 9 581989062 10 1354395138 10 2097663454 10 3551458167 10 3551458167 10 3126701396 10 3880200042 10 3255615729 10 3255615729 9 167237906 9 177811234 10 3930851132 10 2361415202 9 259868705 9 259868705 10 3793441059 10 3793441059 9 776215953 9 776215953 10 1630722604 9 310524955 9 310524955 9 473010817 9 473010817 10 1970368353 10 1970368353 9 647803737 9 647803737 10 3042379069 10 3042379069 9 669358715 9 669358715 10 2075478837 10 2075478837 10 2299140636 9 109292002 10 1421489007 10 1421489007 9 287343763 9 287343763 10 3186940620 10 1829132124 10 2748750790 9 941660988 10 3989581123 10 3989581123 10 3479493952 10 2417781066 9 601527218 10 4256439559 10 4256439559 10 3226376894 10 1568788209 10 1568788209 10 1198739057 10 1198739057 10 2138619156 10 4076377133 10 4076377133 10 2825882502 10 3801137760 10 4062777255 10 4062777255 10 2620626957 10 2620626957 10 1775667486 10 3346291068 10 2956234822 9 178482033 9 178482033 9 918842470 10 3377617071 10 3377617071 9 390937317 9 390937317 10 3876107121 10 3876107121 9 670291604 10 1859681623 10 1859681623 10 1241175627 10 1241175627 10 3807848133 10 3807848133 10 1315739433 10 1315739433 10 2355967322 10 1786883066 10 4239032041 10 4239032041 10 2148764457 10 2148764457 10 2427983947 10 2427983947 9 607596425 9 607596425 10 3869918764 10 3401943278 10 2421236149 10 2421236149 9 159865104 9 411876340 10 2056892401 10 2056892401 10 2652233125 10 2652233125 10 2298524549 10 2298524549 9 257760945 9 257760945 10 2663762324 10 2492774796 10 3862418431 10 3862418431 10 3743837736 10 2975706254 10 3435288264 10 2784034063 10 2784034063 9 286273879 9 286273879 10 1481537722 9 258343568 10 4029502563 10 4029502563 10 3862464713 10 3862464713 10 2327152015 10 2327152015 10 2764558328 9 967560929 9 967560929 10 2868860431 10 2868860431 9 190104374 9 430136711 9 430136711 10 2491360284 10 2774454326 7 5018725 7 5018725 9 183526573 9 183526573 10 3254104696

View File

@ -0,0 +1,318 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>152</count>
<bucket_count>193</bucket_count>
<item_version>0</item_version>
<item>178482033</item>
<item>178482033</item>
<item>1786883066</item>
<item>286273879</item>
<item>286273879</item>
<item>2298524549</item>
<item>2298524549</item>
<item>259868705</item>
<item>259868705</item>
<item>601527218</item>
<item>411876340</item>
<item>4029502563</item>
<item>4029502563</item>
<item>109292002</item>
<item>941660988</item>
<item>4256439559</item>
<item>4256439559</item>
<item>3401943278</item>
<item>2663762324</item>
<item>3042379069</item>
<item>3042379069</item>
<item>2509159060</item>
<item>1859681623</item>
<item>1859681623</item>
<item>3356491351</item>
<item>3356491351</item>
<item>2620626957</item>
<item>2620626957</item>
<item>2652233125</item>
<item>2652233125</item>
<item>607596425</item>
<item>607596425</item>
<item>1568788209</item>
<item>1568788209</item>
<item>2868860431</item>
<item>2868860431</item>
<item>670291604</item>
<item>2764558328</item>
<item>3226376894</item>
<item>3930851132</item>
<item>3801137760</item>
<item>287343763</item>
<item>287343763</item>
<item>2138619156</item>
<item>967560929</item>
<item>967560929</item>
<item>257760945</item>
<item>257760945</item>
<item>2056892401</item>
<item>2056892401</item>
<item>1829132124</item>
<item>3807848133</item>
<item>3807848133</item>
<item>190104374</item>
<item>310524955</item>
<item>310524955</item>
<item>1481537722</item>
<item>2361415202</item>
<item>1970368353</item>
<item>1970368353</item>
<item>2417781066</item>
<item>3186940620</item>
<item>1421489007</item>
<item>1421489007</item>
<item>776215953</item>
<item>776215953</item>
<item>1775667486</item>
<item>159865104</item>
<item>2355967322</item>
<item>2748750790</item>
<item>1832705803</item>
<item>1832705803</item>
<item>4239032041</item>
<item>4239032041</item>
<item>3876107121</item>
<item>3876107121</item>
<item>3479493952</item>
<item>2600961200</item>
<item>1241175627</item>
<item>1241175627</item>
<item>258343568</item>
<item>1630722604</item>
<item>3255615729</item>
<item>3255615729</item>
<item>5018725</item>
<item>5018725</item>
<item>2774454326</item>
<item>2825882502</item>
<item>581989062</item>
<item>2148764457</item>
<item>2148764457</item>
<item>3862464713</item>
<item>3862464713</item>
<item>3862418431</item>
<item>3862418431</item>
<item>918842470</item>
<item>183526573</item>
<item>183526573</item>
<item>2097663454</item>
<item>3377617071</item>
<item>3377617071</item>
<item>167237906</item>
<item>2492774796</item>
<item>3254104696</item>
<item>3551458167</item>
<item>3551458167</item>
<item>3989581123</item>
<item>3989581123</item>
<item>430136711</item>
<item>430136711</item>
<item>2427983947</item>
<item>2427983947</item>
<item>2975706254</item>
<item>1198739057</item>
<item>1198739057</item>
<item>473010817</item>
<item>473010817</item>
<item>2075478837</item>
<item>2075478837</item>
<item>2956234822</item>
<item>3435288264</item>
<item>2491360284</item>
<item>4076377133</item>
<item>4076377133</item>
<item>3869918764</item>
<item>647803737</item>
<item>647803737</item>
<item>669358715</item>
<item>669358715</item>
<item>177811234</item>
<item>1021729225</item>
<item>1021729225</item>
<item>2327152015</item>
<item>2327152015</item>
<item>3793441059</item>
<item>3793441059</item>
<item>390937317</item>
<item>390937317</item>
<item>2421236149</item>
<item>2421236149</item>
<item>3346291068</item>
<item>3880200042</item>
<item>2299140636</item>
<item>3743837736</item>
<item>2784034063</item>
<item>2784034063</item>
<item>1315739433</item>
<item>1315739433</item>
<item>1354395138</item>
<item>4062777255</item>
<item>4062777255</item>
<item>3126701396</item>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>152</count>
<item_version>0</item_version>
<item>3356491351</item>
<item>3356491351</item>
<item>2600961200</item>
<item>2509159060</item>
<item>1021729225</item>
<item>1021729225</item>
<item>1832705803</item>
<item>1832705803</item>
<item>581989062</item>
<item>1354395138</item>
<item>2097663454</item>
<item>3551458167</item>
<item>3551458167</item>
<item>3126701396</item>
<item>3880200042</item>
<item>3255615729</item>
<item>3255615729</item>
<item>167237906</item>
<item>177811234</item>
<item>3930851132</item>
<item>2361415202</item>
<item>259868705</item>
<item>259868705</item>
<item>3793441059</item>
<item>3793441059</item>
<item>776215953</item>
<item>776215953</item>
<item>1630722604</item>
<item>310524955</item>
<item>310524955</item>
<item>473010817</item>
<item>473010817</item>
<item>1970368353</item>
<item>1970368353</item>
<item>647803737</item>
<item>647803737</item>
<item>3042379069</item>
<item>3042379069</item>
<item>669358715</item>
<item>669358715</item>
<item>2075478837</item>
<item>2075478837</item>
<item>2299140636</item>
<item>109292002</item>
<item>1421489007</item>
<item>1421489007</item>
<item>287343763</item>
<item>287343763</item>
<item>3186940620</item>
<item>1829132124</item>
<item>2748750790</item>
<item>941660988</item>
<item>3989581123</item>
<item>3989581123</item>
<item>3479493952</item>
<item>2417781066</item>
<item>601527218</item>
<item>4256439559</item>
<item>4256439559</item>
<item>3226376894</item>
<item>1568788209</item>
<item>1568788209</item>
<item>1198739057</item>
<item>1198739057</item>
<item>2138619156</item>
<item>4076377133</item>
<item>4076377133</item>
<item>2825882502</item>
<item>3801137760</item>
<item>4062777255</item>
<item>4062777255</item>
<item>2620626957</item>
<item>2620626957</item>
<item>1775667486</item>
<item>3346291068</item>
<item>2956234822</item>
<item>178482033</item>
<item>178482033</item>
<item>918842470</item>
<item>3377617071</item>
<item>3377617071</item>
<item>390937317</item>
<item>390937317</item>
<item>3876107121</item>
<item>3876107121</item>
<item>670291604</item>
<item>1859681623</item>
<item>1859681623</item>
<item>1241175627</item>
<item>1241175627</item>
<item>3807848133</item>
<item>3807848133</item>
<item>1315739433</item>
<item>1315739433</item>
<item>2355967322</item>
<item>1786883066</item>
<item>4239032041</item>
<item>4239032041</item>
<item>2148764457</item>
<item>2148764457</item>
<item>2427983947</item>
<item>2427983947</item>
<item>607596425</item>
<item>607596425</item>
<item>3869918764</item>
<item>3401943278</item>
<item>2421236149</item>
<item>2421236149</item>
<item>159865104</item>
<item>411876340</item>
<item>2056892401</item>
<item>2056892401</item>
<item>2652233125</item>
<item>2652233125</item>
<item>2298524549</item>
<item>2298524549</item>
<item>257760945</item>
<item>257760945</item>
<item>2663762324</item>
<item>2492774796</item>
<item>3862418431</item>
<item>3862418431</item>
<item>3743837736</item>
<item>2975706254</item>
<item>3435288264</item>
<item>2784034063</item>
<item>2784034063</item>
<item>286273879</item>
<item>286273879</item>
<item>1481537722</item>
<item>258343568</item>
<item>4029502563</item>
<item>4029502563</item>
<item>3862464713</item>
<item>3862464713</item>
<item>2327152015</item>
<item>2327152015</item>
<item>2764558328</item>
<item>967560929</item>
<item>967560929</item>
<item>2868860431</item>
<item>2868860431</item>
<item>190104374</item>
<item>430136711</item>
<item>430136711</item>
<item>2491360284</item>
<item>2774454326</item>
<item>5018725</item>
<item>5018725</item>
<item>183526573</item>
<item>183526573</item>
<item>3254104696</item>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 0 0 0 0 0

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>0</count>
<bucket_count>0</bucket_count>
<item_version>0</item_version>
</container>
<values>
<count>0</count>
<item_version>0</item_version>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 10 13 0 2097663454 -1785808236 -938475945 1354395138 581989062 -1694006096 1832705803 -743509129 1021729225 -1168265900 14 0 -938475945 -938475945 -1694006096 -1785808236 1021729225 1021729225 1832705803 1832705803 581989062 1354395138 2097663454 -743509129 -743509129 -1168265900

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>10</count>
<bucket_count>13</bucket_count>
<item_version>0</item_version>
<item>2097663454</item>
<item>-1785808236</item>
<item>-938475945</item>
<item>1354395138</item>
<item>581989062</item>
<item>-1694006096</item>
<item>1832705803</item>
<item>-743509129</item>
<item>1021729225</item>
<item>-1168265900</item>
</container>
<values>
<count>14</count>
<item_version>0</item_version>
<item>-938475945</item>
<item>-938475945</item>
<item>-1694006096</item>
<item>-1785808236</item>
<item>1021729225</item>
<item>1021729225</item>
<item>1832705803</item>
<item>1832705803</item>
<item>581989062</item>
<item>1354395138</item>
<item>2097663454</item>
<item>-743509129</item>
<item>-743509129</item>
<item>-1168265900</item>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 100 193 0 1775667486 -948676228 -1108026676 -1866983349 258343568 -1068590402 -432548865 177811234 5018725 190104374 1315739433 -1995826660 -305386173 287343763 1241175627 109292002 1021729225 918842470 -1426106865 -1338732474 669358715 183526573 -938475945 -1694006096 1630722604 -1933552094 257760945 390937317 -1510933233 259868705 -38527737 -551129560 1832705803 607596425 -1520512970 -1674340339 1421489007 -501526237 -1873731147 -1877186230 -218590163 647803737 -859679032 967560929 -815473344 -487119163 -1546216506 1859681623 -1040862600 -893024018 -1252588227 -1319261042 -1785808236 1198739057 -1469084794 473010817 1481537722 2138619156 -1039351567 -493829536 411876340 -364116164 776215953 1568788209 -1631204972 601527218 -232190041 286273879 2075478837 -1168265900 581989062 178482033 1354395138 -1530408968 -414767254 1970368353 -1967815281 941660988 1786883066 670291604 -1803607012 1829132124 -432502583 -1642734171 -425048532 2097663454 -1938999974 -917350225 2056892401 -55935255 -1802192500 -418860175 -2146202839 310524955 159865104 -265464733 -1996442747 430136711 -743509129 167237906 152 0 -938475945 -938475945 -1694006096 -1785808236 1021729225 1021729225 1832705803 1832705803 581989062 1354395138 2097663454 -743509129 -743509129 -1168265900 -414767254 -1039351567 -1039351567 167237906 177811234 -364116164 -1933552094 259868705 259868705 -501526237 -501526237 776215953 776215953 1630722604 310524955 310524955 473010817 473010817 1970368353 1970368353 647803737 647803737 -1252588227 -1252588227 669358715 669358715 2075478837 2075478837 -1995826660 109292002 1421489007 1421489007 287343763 287343763 -1108026676 1829132124 -1546216506 941660988 -305386173 -305386173 -815473344 -1877186230 601527218 -38527737 -38527737 -1068590402 1568788209 1568788209 1198739057 1198739057 2138619156 -218590163 -218590163 -1469084794 -493829536 -232190041 -232190041 -1674340339 -1674340339 1775667486 -948676228 -1338732474 178482033 178482033 918842470 -917350225 -917350225 390937317 390937317 -418860175 -418860175 670291604 1859681623 1859681623 1241175627 1241175627 -487119163 -487119163 1315739433 1315739433 -1938999974 1786883066 -55935255 -55935255 -2146202839 -2146202839 -1866983349 -1866983349 607596425 607596425 -425048532 -893024018 -1873731147 -1873731147 159865104 411876340 2056892401 2056892401 -1642734171 -1642734171 -1996442747 -1996442747 257760945 257760945 -1631204972 -1802192500 -432548865 -432548865 -551129560 -1319261042 -859679032 -1510933233 -1510933233 286273879 286273879 1481537722 258343568 -265464733 -265464733 -432502583 -432502583 -1967815281 -1967815281 -1530408968 967560929 967560929 -1426106865 -1426106865 190104374 430136711 430136711 -1803607012 -1520512970 5018725 5018725 183526573 183526573 -1040862600

View File

@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>100</count>
<bucket_count>193</bucket_count>
<item_version>0</item_version>
<item>1775667486</item>
<item>-948676228</item>
<item>-1108026676</item>
<item>-1866983349</item>
<item>258343568</item>
<item>-1068590402</item>
<item>-432548865</item>
<item>177811234</item>
<item>5018725</item>
<item>190104374</item>
<item>1315739433</item>
<item>-1995826660</item>
<item>-305386173</item>
<item>287343763</item>
<item>1241175627</item>
<item>109292002</item>
<item>1021729225</item>
<item>918842470</item>
<item>-1426106865</item>
<item>-1338732474</item>
<item>669358715</item>
<item>183526573</item>
<item>-938475945</item>
<item>-1694006096</item>
<item>1630722604</item>
<item>-1933552094</item>
<item>257760945</item>
<item>390937317</item>
<item>-1510933233</item>
<item>259868705</item>
<item>-38527737</item>
<item>-551129560</item>
<item>1832705803</item>
<item>607596425</item>
<item>-1520512970</item>
<item>-1674340339</item>
<item>1421489007</item>
<item>-501526237</item>
<item>-1873731147</item>
<item>-1877186230</item>
<item>-218590163</item>
<item>647803737</item>
<item>-859679032</item>
<item>967560929</item>
<item>-815473344</item>
<item>-487119163</item>
<item>-1546216506</item>
<item>1859681623</item>
<item>-1040862600</item>
<item>-893024018</item>
<item>-1252588227</item>
<item>-1319261042</item>
<item>-1785808236</item>
<item>1198739057</item>
<item>-1469084794</item>
<item>473010817</item>
<item>1481537722</item>
<item>2138619156</item>
<item>-1039351567</item>
<item>-493829536</item>
<item>411876340</item>
<item>-364116164</item>
<item>776215953</item>
<item>1568788209</item>
<item>-1631204972</item>
<item>601527218</item>
<item>-232190041</item>
<item>286273879</item>
<item>2075478837</item>
<item>-1168265900</item>
<item>581989062</item>
<item>178482033</item>
<item>1354395138</item>
<item>-1530408968</item>
<item>-414767254</item>
<item>1970368353</item>
<item>-1967815281</item>
<item>941660988</item>
<item>1786883066</item>
<item>670291604</item>
<item>-1803607012</item>
<item>1829132124</item>
<item>-432502583</item>
<item>-1642734171</item>
<item>-425048532</item>
<item>2097663454</item>
<item>-1938999974</item>
<item>-917350225</item>
<item>2056892401</item>
<item>-55935255</item>
<item>-1802192500</item>
<item>-418860175</item>
<item>-2146202839</item>
<item>310524955</item>
<item>159865104</item>
<item>-265464733</item>
<item>-1996442747</item>
<item>430136711</item>
<item>-743509129</item>
<item>167237906</item>
</container>
<values>
<count>152</count>
<item_version>0</item_version>
<item>-938475945</item>
<item>-938475945</item>
<item>-1694006096</item>
<item>-1785808236</item>
<item>1021729225</item>
<item>1021729225</item>
<item>1832705803</item>
<item>1832705803</item>
<item>581989062</item>
<item>1354395138</item>
<item>2097663454</item>
<item>-743509129</item>
<item>-743509129</item>
<item>-1168265900</item>
<item>-414767254</item>
<item>-1039351567</item>
<item>-1039351567</item>
<item>167237906</item>
<item>177811234</item>
<item>-364116164</item>
<item>-1933552094</item>
<item>259868705</item>
<item>259868705</item>
<item>-501526237</item>
<item>-501526237</item>
<item>776215953</item>
<item>776215953</item>
<item>1630722604</item>
<item>310524955</item>
<item>310524955</item>
<item>473010817</item>
<item>473010817</item>
<item>1970368353</item>
<item>1970368353</item>
<item>647803737</item>
<item>647803737</item>
<item>-1252588227</item>
<item>-1252588227</item>
<item>669358715</item>
<item>669358715</item>
<item>2075478837</item>
<item>2075478837</item>
<item>-1995826660</item>
<item>109292002</item>
<item>1421489007</item>
<item>1421489007</item>
<item>287343763</item>
<item>287343763</item>
<item>-1108026676</item>
<item>1829132124</item>
<item>-1546216506</item>
<item>941660988</item>
<item>-305386173</item>
<item>-305386173</item>
<item>-815473344</item>
<item>-1877186230</item>
<item>601527218</item>
<item>-38527737</item>
<item>-38527737</item>
<item>-1068590402</item>
<item>1568788209</item>
<item>1568788209</item>
<item>1198739057</item>
<item>1198739057</item>
<item>2138619156</item>
<item>-218590163</item>
<item>-218590163</item>
<item>-1469084794</item>
<item>-493829536</item>
<item>-232190041</item>
<item>-232190041</item>
<item>-1674340339</item>
<item>-1674340339</item>
<item>1775667486</item>
<item>-948676228</item>
<item>-1338732474</item>
<item>178482033</item>
<item>178482033</item>
<item>918842470</item>
<item>-917350225</item>
<item>-917350225</item>
<item>390937317</item>
<item>390937317</item>
<item>-418860175</item>
<item>-418860175</item>
<item>670291604</item>
<item>1859681623</item>
<item>1859681623</item>
<item>1241175627</item>
<item>1241175627</item>
<item>-487119163</item>
<item>-487119163</item>
<item>1315739433</item>
<item>1315739433</item>
<item>-1938999974</item>
<item>1786883066</item>
<item>-55935255</item>
<item>-55935255</item>
<item>-2146202839</item>
<item>-2146202839</item>
<item>-1866983349</item>
<item>-1866983349</item>
<item>607596425</item>
<item>607596425</item>
<item>-425048532</item>
<item>-893024018</item>
<item>-1873731147</item>
<item>-1873731147</item>
<item>159865104</item>
<item>411876340</item>
<item>2056892401</item>
<item>2056892401</item>
<item>-1642734171</item>
<item>-1642734171</item>
<item>-1996442747</item>
<item>-1996442747</item>
<item>257760945</item>
<item>257760945</item>
<item>-1631204972</item>
<item>-1802192500</item>
<item>-432548865</item>
<item>-432548865</item>
<item>-551129560</item>
<item>-1319261042</item>
<item>-859679032</item>
<item>-1510933233</item>
<item>-1510933233</item>
<item>286273879</item>
<item>286273879</item>
<item>1481537722</item>
<item>258343568</item>
<item>-265464733</item>
<item>-265464733</item>
<item>-432502583</item>
<item>-432502583</item>
<item>-1967815281</item>
<item>-1967815281</item>
<item>-1530408968</item>
<item>967560929</item>
<item>967560929</item>
<item>-1426106865</item>
<item>-1426106865</item>
<item>190104374</item>
<item>430136711</item>
<item>430136711</item>
<item>-1803607012</item>
<item>-1520512970</item>
<item>5018725</item>
<item>5018725</item>
<item>183526573</item>
<item>183526573</item>
<item>-1040862600</item>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 0 0 0 0 0 0 0

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>0</count>
<bucket_count>0</bucket_count>
<item_version>0</item_version>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>0</count>
<item_version>0</item_version>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 10 13 0 10 1832705803 10 2097663454 10 3551458167 10 2509159060 10 2600961200 9 581989062 10 1021729225 10 3126701396 10 1354395138 10 3356491351 0 0 14 0 10 3356491351 10 3356491351 10 2600961200 10 2509159060 10 1021729225 10 1021729225 10 1832705803 10 1832705803 9 581989062 10 1354395138 10 2097663454 10 3551458167 10 3551458167 10 3126701396

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>10</count>
<bucket_count>13</bucket_count>
<item_version>0</item_version>
<item>1832705803</item>
<item>2097663454</item>
<item>3551458167</item>
<item>2509159060</item>
<item>2600961200</item>
<item>581989062</item>
<item>1021729225</item>
<item>3126701396</item>
<item>1354395138</item>
<item>3356491351</item>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>14</count>
<item_version>0</item_version>
<item>3356491351</item>
<item>3356491351</item>
<item>2600961200</item>
<item>2509159060</item>
<item>1021729225</item>
<item>1021729225</item>
<item>1832705803</item>
<item>1832705803</item>
<item>581989062</item>
<item>1354395138</item>
<item>2097663454</item>
<item>3551458167</item>
<item>3551458167</item>
<item>3126701396</item>
</values>
</boost_serialization>

View File

@ -0,0 +1 @@
22 serialization::archive 19 0 0 100 193 0 10 1970368353 10 2417781066 10 3186940620 10 1421489007 9 776215953 10 1775667486 9 159865104 10 2355967322 10 2748750790 10 1832705803 10 4239032041 10 3876107121 10 3479493952 10 2600961200 10 1241175627 9 258343568 10 1630722604 10 3255615729 7 5018725 10 2774454326 10 2825882502 9 581989062 9 178482033 10 1786883066 9 286273879 10 2298524549 9 259868705 9 601527218 9 411876340 10 4029502563 9 109292002 9 941660988 10 4256439559 10 3401943278 10 2663762324 10 3042379069 10 2509159060 10 1859681623 10 3356491351 10 2620626957 10 2652233125 10 1568788209 9 607596425 10 2868860431 9 670291604 10 2764558328 10 3226376894 10 3930851132 10 3801137760 9 287343763 10 2138619156 9 257760945 9 967560929 10 2056892401 10 1829132124 10 3807848133 9 310524955 9 190104374 10 1481537722 10 2361415202 10 2148764457 10 3862464713 10 3862418431 9 918842470 9 183526573 10 2097663454 10 3377617071 9 167237906 10 2492774796 10 3254104696 10 3551458167 10 3989581123 10 2427983947 9 430136711 10 2975706254 10 1198739057 9 473010817 10 2075478837 10 2956234822 10 3435288264 10 2491360284 10 4076377133 10 3869918764 9 647803737 9 669358715 9 177811234 10 1021729225 10 2327152015 10 3793441059 9 390937317 10 2421236149 10 3346291068 10 3880200042 10 2299140636 10 3743837736 10 1315739433 10 2784034063 10 1354395138 10 4062777255 10 3126701396 0 0 152 0 10 3356491351 10 3356491351 10 2600961200 10 2509159060 10 1021729225 10 1021729225 10 1832705803 10 1832705803 9 581989062 10 1354395138 10 2097663454 10 3551458167 10 3551458167 10 3126701396 10 3880200042 10 3255615729 10 3255615729 9 167237906 9 177811234 10 3930851132 10 2361415202 9 259868705 9 259868705 10 3793441059 10 3793441059 9 776215953 9 776215953 10 1630722604 9 310524955 9 310524955 9 473010817 9 473010817 10 1970368353 10 1970368353 9 647803737 9 647803737 10 3042379069 10 3042379069 9 669358715 9 669358715 10 2075478837 10 2075478837 10 2299140636 9 109292002 10 1421489007 10 1421489007 9 287343763 9 287343763 10 3186940620 10 1829132124 10 2748750790 9 941660988 10 3989581123 10 3989581123 10 3479493952 10 2417781066 9 601527218 10 4256439559 10 4256439559 10 3226376894 10 1568788209 10 1568788209 10 1198739057 10 1198739057 10 2138619156 10 4076377133 10 4076377133 10 2825882502 10 3801137760 10 4062777255 10 4062777255 10 2620626957 10 2620626957 10 1775667486 10 3346291068 10 2956234822 9 178482033 9 178482033 9 918842470 10 3377617071 10 3377617071 9 390937317 9 390937317 10 3876107121 10 3876107121 9 670291604 10 1859681623 10 1859681623 10 1241175627 10 1241175627 10 3807848133 10 3807848133 10 1315739433 10 1315739433 10 2355967322 10 1786883066 10 4239032041 10 4239032041 10 2148764457 10 2148764457 10 2427983947 10 2427983947 9 607596425 9 607596425 10 3869918764 10 3401943278 10 2421236149 10 2421236149 9 159865104 9 411876340 10 2056892401 10 2056892401 10 2652233125 10 2652233125 10 2298524549 10 2298524549 9 257760945 9 257760945 10 2663762324 10 2492774796 10 3862418431 10 3862418431 10 3743837736 10 2975706254 10 3435288264 10 2784034063 10 2784034063 9 286273879 9 286273879 10 1481537722 9 258343568 10 4029502563 10 4029502563 10 3862464713 10 3862464713 10 2327152015 10 2327152015 10 2764558328 9 967560929 9 967560929 10 2868860431 10 2868860431 9 190104374 9 430136711 9 430136711 10 2491360284 10 2774454326 7 5018725 7 5018725 9 183526573 9 183526573 10 3254104696

View File

@ -0,0 +1,266 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="19">
<container class_id="0" tracking_level="0" version="0">
<count>100</count>
<bucket_count>193</bucket_count>
<item_version>0</item_version>
<item>1970368353</item>
<item>2417781066</item>
<item>3186940620</item>
<item>1421489007</item>
<item>776215953</item>
<item>1775667486</item>
<item>159865104</item>
<item>2355967322</item>
<item>2748750790</item>
<item>1832705803</item>
<item>4239032041</item>
<item>3876107121</item>
<item>3479493952</item>
<item>2600961200</item>
<item>1241175627</item>
<item>258343568</item>
<item>1630722604</item>
<item>3255615729</item>
<item>5018725</item>
<item>2774454326</item>
<item>2825882502</item>
<item>581989062</item>
<item>178482033</item>
<item>1786883066</item>
<item>286273879</item>
<item>2298524549</item>
<item>259868705</item>
<item>601527218</item>
<item>411876340</item>
<item>4029502563</item>
<item>109292002</item>
<item>941660988</item>
<item>4256439559</item>
<item>3401943278</item>
<item>2663762324</item>
<item>3042379069</item>
<item>2509159060</item>
<item>1859681623</item>
<item>3356491351</item>
<item>2620626957</item>
<item>2652233125</item>
<item>1568788209</item>
<item>607596425</item>
<item>2868860431</item>
<item>670291604</item>
<item>2764558328</item>
<item>3226376894</item>
<item>3930851132</item>
<item>3801137760</item>
<item>287343763</item>
<item>2138619156</item>
<item>257760945</item>
<item>967560929</item>
<item>2056892401</item>
<item>1829132124</item>
<item>3807848133</item>
<item>310524955</item>
<item>190104374</item>
<item>1481537722</item>
<item>2361415202</item>
<item>2148764457</item>
<item>3862464713</item>
<item>3862418431</item>
<item>918842470</item>
<item>183526573</item>
<item>2097663454</item>
<item>3377617071</item>
<item>167237906</item>
<item>2492774796</item>
<item>3254104696</item>
<item>3551458167</item>
<item>3989581123</item>
<item>2427983947</item>
<item>430136711</item>
<item>2975706254</item>
<item>1198739057</item>
<item>473010817</item>
<item>2075478837</item>
<item>2956234822</item>
<item>3435288264</item>
<item>2491360284</item>
<item>4076377133</item>
<item>3869918764</item>
<item>647803737</item>
<item>669358715</item>
<item>177811234</item>
<item>1021729225</item>
<item>2327152015</item>
<item>3793441059</item>
<item>390937317</item>
<item>2421236149</item>
<item>3346291068</item>
<item>3880200042</item>
<item>2299140636</item>
<item>3743837736</item>
<item>1315739433</item>
<item>2784034063</item>
<item>1354395138</item>
<item>4062777255</item>
<item>3126701396</item>
</container>
<values class_id="1" tracking_level="0" version="0">
<count>152</count>
<item_version>0</item_version>
<item>3356491351</item>
<item>3356491351</item>
<item>2600961200</item>
<item>2509159060</item>
<item>1021729225</item>
<item>1021729225</item>
<item>1832705803</item>
<item>1832705803</item>
<item>581989062</item>
<item>1354395138</item>
<item>2097663454</item>
<item>3551458167</item>
<item>3551458167</item>
<item>3126701396</item>
<item>3880200042</item>
<item>3255615729</item>
<item>3255615729</item>
<item>167237906</item>
<item>177811234</item>
<item>3930851132</item>
<item>2361415202</item>
<item>259868705</item>
<item>259868705</item>
<item>3793441059</item>
<item>3793441059</item>
<item>776215953</item>
<item>776215953</item>
<item>1630722604</item>
<item>310524955</item>
<item>310524955</item>
<item>473010817</item>
<item>473010817</item>
<item>1970368353</item>
<item>1970368353</item>
<item>647803737</item>
<item>647803737</item>
<item>3042379069</item>
<item>3042379069</item>
<item>669358715</item>
<item>669358715</item>
<item>2075478837</item>
<item>2075478837</item>
<item>2299140636</item>
<item>109292002</item>
<item>1421489007</item>
<item>1421489007</item>
<item>287343763</item>
<item>287343763</item>
<item>3186940620</item>
<item>1829132124</item>
<item>2748750790</item>
<item>941660988</item>
<item>3989581123</item>
<item>3989581123</item>
<item>3479493952</item>
<item>2417781066</item>
<item>601527218</item>
<item>4256439559</item>
<item>4256439559</item>
<item>3226376894</item>
<item>1568788209</item>
<item>1568788209</item>
<item>1198739057</item>
<item>1198739057</item>
<item>2138619156</item>
<item>4076377133</item>
<item>4076377133</item>
<item>2825882502</item>
<item>3801137760</item>
<item>4062777255</item>
<item>4062777255</item>
<item>2620626957</item>
<item>2620626957</item>
<item>1775667486</item>
<item>3346291068</item>
<item>2956234822</item>
<item>178482033</item>
<item>178482033</item>
<item>918842470</item>
<item>3377617071</item>
<item>3377617071</item>
<item>390937317</item>
<item>390937317</item>
<item>3876107121</item>
<item>3876107121</item>
<item>670291604</item>
<item>1859681623</item>
<item>1859681623</item>
<item>1241175627</item>
<item>1241175627</item>
<item>3807848133</item>
<item>3807848133</item>
<item>1315739433</item>
<item>1315739433</item>
<item>2355967322</item>
<item>1786883066</item>
<item>4239032041</item>
<item>4239032041</item>
<item>2148764457</item>
<item>2148764457</item>
<item>2427983947</item>
<item>2427983947</item>
<item>607596425</item>
<item>607596425</item>
<item>3869918764</item>
<item>3401943278</item>
<item>2421236149</item>
<item>2421236149</item>
<item>159865104</item>
<item>411876340</item>
<item>2056892401</item>
<item>2056892401</item>
<item>2652233125</item>
<item>2652233125</item>
<item>2298524549</item>
<item>2298524549</item>
<item>257760945</item>
<item>257760945</item>
<item>2663762324</item>
<item>2492774796</item>
<item>3862418431</item>
<item>3862418431</item>
<item>3743837736</item>
<item>2975706254</item>
<item>3435288264</item>
<item>2784034063</item>
<item>2784034063</item>
<item>286273879</item>
<item>286273879</item>
<item>1481537722</item>
<item>258343568</item>
<item>4029502563</item>
<item>4029502563</item>
<item>3862464713</item>
<item>3862464713</item>
<item>2327152015</item>
<item>2327152015</item>
<item>2764558328</item>
<item>967560929</item>
<item>967560929</item>
<item>2868860431</item>
<item>2868860431</item>
<item>190104374</item>
<item>430136711</item>
<item>430136711</item>
<item>2491360284</item>
<item>2774454326</item>
<item>5018725</item>
<item>5018725</item>
<item>183526573</item>
<item>183526573</item>
<item>3254104696</item>
</values>
</boost_serialization>

View File

@ -1,6 +1,7 @@
// Copyright 2006-2009 Daniel James.
// Copyright 2022 Christian Mazakas
// Copyright 2023 Joaquin M Lopez Munoz
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@ -11,6 +12,7 @@
#include "../helpers/fwd.hpp"
#include "../helpers/memory.hpp"
#include <boost/config.hpp>
#include <boost/core/serialization.hpp>
#include <boost/limits.hpp>
#include <cstddef>
@ -74,6 +76,14 @@ namespace test {
{
return out << "(" << o.tag1_ << "," << o.tag2_ << ")";
}
template<typename Archive>
void serialize(Archive& ar,unsigned int)
{
ar & boost::core::make_nvp("tag1", tag1_);
ar & boost::core::make_nvp("tag2", tag2_);
}
};
class movable : private counted_object

View File

@ -18,6 +18,7 @@
#endif
#include "../helpers/check_return_type.hpp"
#include <boost/core/invoke_swap.hpp>
#include <boost/core/pointer_traits.hpp>
#include <boost/limits.hpp>
#include <boost/predef.h>
@ -26,7 +27,6 @@
#include <boost/type_traits/is_const.hpp>
#include <boost/type_traits/is_convertible.hpp>
#include <boost/type_traits/is_same.hpp>
#include <boost/utility/swap.hpp>
typedef long double comparison_type;
@ -165,7 +165,7 @@ template <class X, class T> void container_test(X& r, T const&)
X u5 = rvalue(a_const);
a.swap(b);
boost::swap(a, b);
boost::core::invoke_swap(a, b);
test::check_return_type<X>::equals_ref(r = a);
// Allocator
@ -254,7 +254,7 @@ template <class X> void unordered_destructible_test(X&)
test::check_return_type<const_iterator>::equals(a_const.cend());
a.swap(b);
boost::swap(a, b);
boost::core::invoke_swap(a, b);
test::check_return_type<size_type>::equals(a.size());
test::check_return_type<size_type>::equals(a.max_size());
@ -546,7 +546,7 @@ template <class X, class T> void unordered_unique_test(X& r, T const& t)
test::check_return_type<bool>::equals(insert_return.inserted);
test::check_return_type<iterator>::equals(insert_return.position);
test::check_return_type<node_type>::equals_ref(insert_return.node);
boost::swap(insert_return, insert_return2);
boost::core::invoke_swap(insert_return, insert_return2);
#endif
}

View File

@ -0,0 +1,251 @@
// Copyright (C) 2023 Joaquin M Lopez Munoz
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// temporary #define till all transitive includes comply with
// https://github.com/boostorg/core/commit/5f6fe65
#define BOOST_ALLOW_DEPRECATED_HEADERS
#include "../helpers/unordered.hpp"
#include "../objects/test.hpp"
#include "../helpers/random_values.hpp"
#include <algorithm>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/config.hpp>
#include <boost/config/workaround.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/vector.hpp>
#include <cstddef>
#include <cstdio>
#include <fstream>
#if defined(BOOST_NO_CXX11_HDR_RANDOM) || BOOST_WORKAROUND(BOOST_MSVC, < 1700)
#define BOOST_UNORDERED_TEST_USE_STD_RANDOM_SHUFFLE
#endif
#ifndef BOOST_UNORDERED_TEST_USE_STD_RANDOM_SHUFFLE
#include <random>
#endif
namespace {
template <class Container, typename ArchivePair>
void serialization_tests(
Container*, ArchivePair*, test::random_generator generator)
{
typedef typename Container::iterator iterator;
typedef std::vector<iterator> iterator_vector;
typedef typename ArchivePair::first_type output_archive;
typedef typename ArchivePair::second_type input_archive;
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "serialization_tests1\n";
{
Container c;
iterator it = c.end();
std::ostringstream oss;
{
output_archive oa(oss);
oa << boost::serialization::make_nvp("container", c);
oa << boost::serialization::make_nvp("iterator", it);
}
test::random_values<Container> values(100, generator);
Container c2(values.begin(), values.end());
iterator it2 = c2.begin();
std::istringstream iss(oss.str());
input_archive ia(iss);
ia >> boost::serialization::make_nvp("container", c2);
ia >> boost::serialization::make_nvp("iterator", it2);
BOOST_TEST(c2.empty());
BOOST_TEST(it2 == c2.end());
}
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "serialization_tests2\n";
{
test::random_values<Container> values(100, generator);
Container c(values.begin(), values.end());
iterator_vector v;
for (iterator first = c.begin(), last=c.end(); ; ) {
v.push_back(first);
if(first == last) break;
++first;
}
#ifdef BOOST_UNORDERED_TEST_USE_STD_RANDOM_SHUFFLE
std::random_shuffle(v.begin(), v.end());
#else
std::shuffle(v.begin(), v.end(), std::mt19937(4213));
#endif
std::ostringstream oss;
{
output_archive oa(oss);
oa << boost::serialization::make_nvp("container", c);
oa << boost::serialization::make_nvp("iterators", v);
}
Container c2;
iterator_vector v2;
std::istringstream iss(oss.str());
input_archive ia(iss);
ia >> boost::serialization::make_nvp("container", c2);
ia >> boost::serialization::make_nvp("iterators", v2);
BOOST_TEST(c == c2);
BOOST_TEST_EQ(v.size(), v2.size());
for (std::size_t i=0; i < v.size(); ++i) {
iterator it = v[i];
iterator it2 = v2[i];
if (it == c.end()) {
BOOST_TEST(it2 == c2.end());
}
else {
BOOST_TEST(it2 != c2.end());
BOOST_TEST(*it == *it2);
}
}
}
}
// used by legacy_serialization_test, passed as argv[1]
const char* test_dir=".";
using test::default_generator;
std::pair<
boost::archive::text_oarchive, boost::archive::text_iarchive>*
text_archive;
std::pair<
boost::archive::xml_oarchive, boost::archive::xml_iarchive>*
xml_archive;
#ifdef BOOST_UNORDERED_FOA_TESTS
boost::unordered_flat_map<
test::object, test::object, test::hash, test::equal_to>* test_flat_map;
boost::unordered_node_map<
test::object, test::object, test::hash, test::equal_to>* test_node_map;
boost::unordered_flat_set<
test::object, test::hash, test::equal_to>* test_flat_set;
boost::unordered_node_set<
test::object, test::hash, test::equal_to>* test_node_set;
UNORDERED_TEST(serialization_tests,
((test_flat_map)(test_node_map)(test_flat_set)(test_node_set))
((text_archive)(xml_archive))
((default_generator)))
#else
boost::unordered_map<
test::object, test::object, test::hash, test::equal_to>* test_map;
boost::unordered_multimap<
test::object, test::object, test::hash, test::equal_to>* test_multimap;
boost::unordered_set<
test::object, test::hash, test::equal_to>* test_set;
boost::unordered_multiset<
test::object, test::hash, test::equal_to>* test_multiset;
UNORDERED_TEST(serialization_tests,
((test_map)(test_multimap)(test_set)(test_multiset))
((text_archive)(xml_archive))
((default_generator)))
template<typename T>
struct non_const
{
typedef T type;
};
template<typename T>
struct non_const<const T>
{
typedef typename non_const<T>::type type;
};
template<typename T, typename Q>
struct non_const<std::pair<T, Q> >
{
typedef std::pair<
typename non_const<T>::type,
typename non_const<Q>::type> type;
};
template<typename T>
struct labeled
{
labeled(const char* label_): label(label_) {}
const char* label;
};
template <class Container, typename Archive>
void legacy_serialization_test(labeled<Container> lc, labeled<Archive> la)
{
typedef typename Container::value_type value_type;
typedef std::vector<typename non_const<value_type>::type> value_vector;
static const std::size_t sizes[] = {0, 10, 100};
BOOST_LIGHTWEIGHT_TEST_OSTREAM << "legacy_serialization_test\n";
for(int i = 0; i < sizeof(sizes)/sizeof(sizes[0]); ++i) {
char filename[1024];
std::sprintf(
filename, "%s/legacy_archives/%s_%d.%s",
test_dir, lc.label, (int)sizes[i], la.label);
std::ifstream ifs(filename);
Archive ia(ifs);
Container c;
value_vector v;
ia >> boost::serialization::make_nvp("container", c);
ia >> boost::serialization::make_nvp("values", v);
BOOST_TEST(v.size() >= sizes[i]); // values generated with repetition
BOOST_TEST((c==Container(v.begin(),v.end())));
}
}
labeled<boost::unordered_map<int, int> >
labeled_map_int("map_int");
labeled<boost::unordered_map<std::string, std::string> >
labeled_map_string("map_string");
labeled<boost::unordered_multimap<int, int> >
labeled_multimap_int("multimap_int");
labeled<boost::unordered_multimap<std::string, std::string> >
labeled_multimap_string("multimap_string");
labeled<boost::unordered_set<int> >
labeled_set_int("set_int");
labeled<boost::unordered_set<std::string> >
labeled_set_string("set_string");
labeled<boost::unordered_multiset<int> >
labeled_multiset_int("multiset_int");
labeled<boost::unordered_multiset<std::string> >
labeled_multiset_string("multiset_string");
labeled<boost::archive::text_iarchive> labeled_text_iarchive("txt");
labeled<boost::archive::xml_iarchive> labeled_xml_iarchive("xml");
UNORDERED_TEST(legacy_serialization_test,
((labeled_map_int)(labeled_map_string)
(labeled_multimap_int)(labeled_multimap_string)
(labeled_set_int)(labeled_set_string)
(labeled_multiset_int)(labeled_multiset_string))
((labeled_text_iarchive)(labeled_xml_iarchive)))
#endif
}
int main(int argc, char* argv[])
{
if (argc > 1) test_dir = argv[1];
BOOST_UNORDERED_TEST_COMPILER_INFO()
::test::get_state().run_tests();
return boost::report_errors();
}