forked from boostorg/container
Add Polymorphic Memory Resource utilities and rework the separately compiled library:
- Dlmalloc's based C function are boost_cont_xxx no longer exported, but wrapped into C++ linkage dlmalloc_xxx functions to effectively reuse Boost's dynamic library and autolink machinery instead of rewriting machinery to compile the C source file. - Refactored scoped_allocator_adaptor's construct logic as it was shared with polymorphic allocator's one. Moved common logic to detail/dispatch_uses_allocator.hpp. Refactored also scoped_allocator_adaptor test utilities to be reused with polymorphic_allocator tests.
This commit is contained in:
87
test/derived_from_memory_resource.hpp
Normal file
87
test/derived_from_memory_resource.hpp
Normal file
@@ -0,0 +1,87 @@
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// (C) Copyright Ion Gaztanaga 2015-2015. 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 http://www.boost.org/libs/container for documentation.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef BOOST_CONTAINER_TEST_DERIVED_FROM_MEMORY_RESOURCE_HPP
|
||||
#define BOOST_CONTAINER_TEST_DERIVED_FROM_MEMORY_RESOURCE_HPP
|
||||
|
||||
#include <boost/container/pmr/memory_resource.hpp>
|
||||
|
||||
class derived_from_memory_resource
|
||||
: public boost::container::pmr::memory_resource
|
||||
{
|
||||
public:
|
||||
explicit derived_from_memory_resource(unsigned i = 0u)
|
||||
: id(i)
|
||||
{}
|
||||
|
||||
virtual ~derived_from_memory_resource()
|
||||
{ destructor_called = true; }
|
||||
|
||||
virtual void* do_allocate(std::size_t bytes, std::size_t alignment)
|
||||
{
|
||||
do_allocate_called = true;
|
||||
do_allocate_bytes = bytes;
|
||||
do_allocate_alignment = alignment;
|
||||
return do_allocate_return;
|
||||
}
|
||||
|
||||
virtual void do_deallocate(void* p, std::size_t bytes, std::size_t alignment)
|
||||
{
|
||||
do_deallocate_called = true;
|
||||
do_deallocate_p = p;
|
||||
do_deallocate_bytes = bytes;
|
||||
do_deallocate_alignment = alignment;
|
||||
}
|
||||
|
||||
virtual bool do_is_equal(const boost::container::pmr::memory_resource& other) const BOOST_NOEXCEPT
|
||||
{
|
||||
do_is_equal_called = true;
|
||||
do_is_equal_other = &other;
|
||||
return static_cast<const derived_from_memory_resource&>(other).id == this->id;
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
destructor_called = false;
|
||||
|
||||
do_allocate_return = 0;
|
||||
do_allocate_called = false;
|
||||
do_allocate_bytes = 0u;
|
||||
do_allocate_alignment = 0u;
|
||||
|
||||
do_deallocate_called = false;
|
||||
do_deallocate_p = 0;
|
||||
do_deallocate_bytes = 0u;
|
||||
do_deallocate_alignment = 0u;
|
||||
|
||||
do_is_equal_called = false;
|
||||
do_is_equal_other = 0;
|
||||
}
|
||||
//checkers
|
||||
static bool destructor_called;
|
||||
|
||||
unsigned id;
|
||||
void *do_allocate_return;
|
||||
mutable bool do_allocate_called;
|
||||
mutable std::size_t do_allocate_bytes;
|
||||
mutable std::size_t do_allocate_alignment;
|
||||
|
||||
mutable bool do_deallocate_called;
|
||||
mutable void *do_deallocate_p;
|
||||
mutable std::size_t do_deallocate_bytes;
|
||||
mutable std::size_t do_deallocate_alignment;
|
||||
|
||||
mutable bool do_is_equal_called;
|
||||
mutable const boost::container::pmr::memory_resource *do_is_equal_other;
|
||||
};
|
||||
|
||||
bool derived_from_memory_resource::destructor_called = false;
|
||||
|
||||
#endif //#ifndef BOOST_CONTAINER_TEST_DERIVED_FROM_MEMORY_RESOURCE_HPP
|
||||
Reference in New Issue
Block a user