macOS compilation fix and polymorphic handler deleter fix

This commit is contained in:
Mindaugas Vinkelis
2019-08-05 18:24:29 +03:00
committed by Mindaugas Vinkelis
parent 01d56e00b8
commit c9619e3e3d
3 changed files with 13 additions and 8 deletions

View File

@@ -1,3 +1,9 @@
## future release...
### Bug fixes
* fixed polymorphic handler deleter in `PolymorphicContext`, now it is captured by value and doesn't depend on lifetime of `PolymorphicContext` instance.
* fixed compilation errors in `ext/utils/pointer_utils.h` on macOS.
# [5.0.0](https://github.com/fraillt/bitsery/compare/v4.6.1...v5.0.0) (2019-07-09)
This version reduces library complexity by removing redundant features and changing existing ones.

View File

@@ -153,7 +153,7 @@ namespace bitsery {
public:
explicit PointerLinkingContextSerialization(MemResourceBase* memResource = nullptr)
: _currId{0},
_ptrMap{StdPolyAlloc<std::pair<const void*, PLCInfoSerializer>>{memResource}} {}
_ptrMap{StdPolyAlloc<std::pair<const void* const, PLCInfoSerializer>>{memResource}} {}
PointerLinkingContextSerialization(const PointerLinkingContextSerialization&) = delete;
@@ -190,7 +190,7 @@ namespace bitsery {
size_t _currId;
std::unordered_map<const void*, PLCInfoSerializer,
std::hash<const void*>, std::equal_to<const void*>,
StdPolyAlloc<std::pair<const void*, PLCInfoSerializer>>
StdPolyAlloc<std::pair<const void* const, PLCInfoSerializer>>
> _ptrMap;
};
@@ -198,7 +198,7 @@ namespace bitsery {
public:
explicit PointerLinkingContextDeserialization(MemResourceBase* memResource = nullptr)
: _memResource{memResource},
_idMap{StdPolyAlloc<std::pair<size_t, PLCInfoDeserializer>>{memResource}} {}
_idMap{StdPolyAlloc<std::pair<const size_t, PLCInfoDeserializer>>{memResource}} {}
PointerLinkingContextDeserialization(const PointerLinkingContextDeserialization&) = delete;
@@ -244,7 +244,7 @@ namespace bitsery {
MemResourceBase* _memResource;
std::unordered_map<size_t, PLCInfoDeserializer,
std::hash<size_t>, std::equal_to<size_t>,
StdPolyAlloc<std::pair<size_t, PLCInfoDeserializer>>> _idMap;
StdPolyAlloc<std::pair<const size_t, PLCInfoDeserializer>>> _idMap;
};
}
@@ -257,7 +257,7 @@ namespace bitsery {
:pointer_utils::PointerLinkingContextSerialization(memResource),
pointer_utils::PointerLinkingContextDeserialization(memResource) {};
bool isValid() {
bool isValid() const {
return isPointerSerializationValid() && isPointerDeserializationValid();
}
};

View File

@@ -144,11 +144,10 @@ namespace bitsery {
BaseToDerivedKey key{RTTI::template get<TBase>(), RTTI::template get<TDerived>()};
pointer_utils::StdPolyAlloc<THandler> alloc{_memResource};
auto ptr = alloc.allocate(1);
std::shared_ptr<THandler> handler(new (ptr)THandler{}, [this](THandler* data) {
std::shared_ptr<THandler> handler(new (ptr)THandler{}, [alloc](THandler* data) mutable {
data->~THandler();
pointer_utils::StdPolyAlloc<THandler> alloc{_memResource};
alloc.deallocate(data, 1);
}, pointer_utils::StdPolyAlloc<THandler>(_memResource));
}, alloc);
if (_baseToDerivedMap
.emplace(key, std::move(handler))
.second) {