diff --git a/include/bitsery/details/serialization_common.h b/include/bitsery/details/serialization_common.h index 6d5a441..462cee2 100644 --- a/include/bitsery/details/serialization_common.h +++ b/include/bitsery/details/serialization_common.h @@ -380,7 +380,7 @@ namespace bitsery { template explicit AdapterAndContextRef(Context& ctx, TArgs&& ... args) : _adapter{std::forward(args)...}, - _context{ctx} + _context(ctx) { } diff --git a/include/bitsery/ext/inheritance.h b/include/bitsery/ext/inheritance.h index f4c6655..5cd44ab 100644 --- a/include/bitsery/ext/inheritance.h +++ b/include/bitsery/ext/inheritance.h @@ -36,7 +36,7 @@ namespace bitsery { class InheritanceContext { public: explicit InheritanceContext(MemResourceBase* memResource = nullptr) - :_virtualBases{pointer_utils::StdPolyAlloc{memResource}} + :_virtualBases{0, std::hash{}, std::equal_to{}, pointer_utils::StdPolyAlloc{memResource}} {} InheritanceContext(const InheritanceContext&) = delete; InheritanceContext&operator = (const InheritanceContext&) = delete; diff --git a/include/bitsery/ext/std_map.h b/include/bitsery/ext/std_map.h index 02d42ca..9cc430c 100644 --- a/include/bitsery/ext/std_map.h +++ b/include/bitsery/ext/std_map.h @@ -62,8 +62,8 @@ namespace bitsery { auto hint = obj.begin(); for (auto i = 0u; i < size; ++i) { - auto key{bitsery::Access::create()}; - auto value{bitsery::Access::create()}; + auto key = bitsery::Access::create(); + auto value = bitsery::Access::create(); fnc(des, key, value); hint = obj.emplace_hint(hint, std::move(key), std::move(value)); } diff --git a/include/bitsery/ext/std_set.h b/include/bitsery/ext/std_set.h index b9383ca..e2ba134 100644 --- a/include/bitsery/ext/std_set.h +++ b/include/bitsery/ext/std_set.h @@ -58,7 +58,7 @@ namespace bitsery { reserve(obj, size); auto hint = obj.begin(); for (auto i = 0u; i < size; ++i) { - auto key{bitsery::Access::create()}; + auto key = bitsery::Access::create(); fnc(des, key); hint = obj.emplace_hint(hint, std::move(key)); } diff --git a/include/bitsery/ext/utils/memory_resource.h b/include/bitsery/ext/utils/memory_resource.h index 472965a..758464a 100644 --- a/include/bitsery/ext/utils/memory_resource.h +++ b/include/bitsery/ext/utils/memory_resource.h @@ -24,6 +24,7 @@ #define BITSERY_EXT_MEMORY_RESOURCE_H #include "../../details/serialization_common.h" +#include #include namespace bitsery { @@ -127,6 +128,39 @@ namespace bitsery { class StdPolyAlloc { public: using value_type = T; + using pointer = T*; + using const_pointer = const T*; + using reference = T&; + using const_reference = const T&; + using size_type = size_t; + using difference_type = ptrdiff_t; + + size_t max_size() const noexcept { + return std::numeric_limits::max() / sizeof(value_type); + } + + void construct(T *p, const T &val) { + new((void *) p) T(val); + } + + template + void construct(U *p, Args &&... args) { + new((void *) p) U(std::forward(args)...); + } + + void destroy(T *p) { + p->~T(); + } + + template + void destroy(U *p) { + p->~U(); + } + + template + struct rebind { + using other = StdPolyAlloc; + }; explicit constexpr StdPolyAlloc(MemResourceBase* memResource) :_alloc{memResource} {} diff --git a/include/bitsery/ext/utils/pointer_utils.h b/include/bitsery/ext/utils/pointer_utils.h index f6f90da..6b65600 100644 --- a/include/bitsery/ext/utils/pointer_utils.h +++ b/include/bitsery/ext/utils/pointer_utils.h @@ -153,7 +153,7 @@ namespace bitsery { public: explicit PointerLinkingContextSerialization(MemResourceBase* memResource = nullptr) : _currId{0}, - _ptrMap{StdPolyAlloc>{memResource}} {} + _ptrMap{0, std::hash{}, std::equal_to{}, StdPolyAlloc>{memResource}} {} PointerLinkingContextSerialization(const PointerLinkingContextSerialization&) = delete; @@ -198,7 +198,7 @@ namespace bitsery { public: explicit PointerLinkingContextDeserialization(MemResourceBase* memResource = nullptr) : _memResource{memResource}, - _idMap{StdPolyAlloc>{memResource}} {} + _idMap{0, std::hash{}, std::equal_to{}, StdPolyAlloc>{memResource}} {} PointerLinkingContextDeserialization(const PointerLinkingContextDeserialization&) = delete; diff --git a/include/bitsery/ext/utils/polymorphism_utils.h b/include/bitsery/ext/utils/polymorphism_utils.h index 6678230..a2cef4d 100644 --- a/include/bitsery/ext/utils/polymorphism_utils.h +++ b/include/bitsery/ext/utils/polymorphism_utils.h @@ -185,11 +185,8 @@ namespace bitsery { explicit PolymorphicContext(MemResourceBase* memResource = nullptr) :_memResource{memResource}, - _baseToDerivedMap{pointer_utils::StdPolyAlloc>>{memResource}}, - _baseToDerivedArray{pointer_utils::StdPolyAlloc>>>{memResource}} - {} + _baseToDerivedMap{0, BaseToDerivedKeyHashier{}, std::equal_to{}, pointer_utils::StdPolyAlloc>>{memResource}}, + _baseToDerivedArray{0, std::hash{}, std::equal_to{}, pointer_utils::StdPolyAlloc>>>{memResource}} {} PolymorphicContext(const PolymorphicContext& ) = delete; PolymorphicContext& operator = (const PolymorphicContext&) = delete;