From 0bcc79baab535e4bb78f046abe2c180537e9396b Mon Sep 17 00:00:00 2001 From: Christian Mazakas Date: Fri, 20 May 2022 14:07:44 -0700 Subject: [PATCH] Update test allocators to be C++11 compliant by making them templates on the pointer type --- test/objects/cxx11_allocator.hpp | 27 ++++++++------- test/objects/exception.hpp | 58 ++++++++++++++++++-------------- test/objects/minimal.hpp | 50 ++++++++++++++++----------- test/objects/test.hpp | 24 +++++++------ 4 files changed, 91 insertions(+), 68 deletions(-) diff --git a/test/objects/cxx11_allocator.hpp b/test/objects/cxx11_allocator.hpp index 8f3a7711..9e5749ce 100644 --- a/test/objects/cxx11_allocator.hpp +++ b/test/objects/cxx11_allocator.hpp @@ -1,5 +1,6 @@ // Copyright 2006-2011 Daniel James. +// Copyright 2022 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) @@ -213,25 +214,27 @@ namespace test ::operator delete((void*)p); } - void construct(T* p, T const& t) +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) + template + void construct(U* p, V const& v) { - detail::tracker.track_construct((void*)p, sizeof(T), tag_); - new (p) T(t); + detail::tracker.track_construct((void*)p, sizeof(U), tag_); + new (p) U(v); } - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - template - void construct(T* p, BOOST_FWD_REF(Args)... args) +#else + template + void construct(U* p, BOOST_FWD_REF(Args)... args) { - detail::tracker.track_construct((void*)p, sizeof(T), tag_); - new (p) T(boost::forward(args)...); + detail::tracker.track_construct((void*)p, sizeof(U), tag_); + new (p) U(boost::forward(args)...); } #endif - void destroy(T* p) + template + void destroy(U* p) { - detail::tracker.track_destroy((void*)p, sizeof(T), tag_); - p->~T(); + detail::tracker.track_destroy((void*)p, sizeof(U), tag_); + p->~U(); } size_type max_size() const diff --git a/test/objects/exception.hpp b/test/objects/exception.hpp index b684d686..b5570e1d 100644 --- a/test/objects/exception.hpp +++ b/test/objects/exception.hpp @@ -1,5 +1,6 @@ // Copyright 2006-2009 Daniel James. +// Copyright 2022 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) @@ -475,32 +476,34 @@ namespace test { } } - void construct(pointer p, T const& t) +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) + template + void construct(U* p, Arg const& t) { - UNORDERED_SCOPE(allocator::construct(T*, T)) + UNORDERED_SCOPE(allocator::construct(U*, Arg)) { UNORDERED_EPOINT("Mock allocator construct function."); - new (p) T(t); + new (p) U(t); } - test::detail::tracker.track_construct((void*)p, sizeof(T), tag_); + test::detail::tracker.track_construct((void*)p, sizeof(U), tag_); } - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - template void construct(T* p, BOOST_FWD_REF(Args)... args) +#else + template void construct(U* p, BOOST_FWD_REF(Args)... args) { - UNORDERED_SCOPE(allocator::construct(pointer, BOOST_FWD_REF(Args)...)) + UNORDERED_SCOPE(allocator::construct(U*, BOOST_FWD_REF(Args)...)) { UNORDERED_EPOINT("Mock allocator construct function."); - new (p) T(boost::forward(args)...); + new (p) U(boost::forward(args)...); } - test::detail::tracker.track_construct((void*)p, sizeof(T), tag_); + test::detail::tracker.track_construct((void*)p, sizeof(U), tag_); } #endif - void destroy(T* p) + template + void destroy(U* p) { - test::detail::tracker.track_destroy((void*)p, sizeof(T), tag_); - p->~T(); + test::detail::tracker.track_destroy((void*)p, sizeof(U), tag_); + p->~U(); } size_type max_size() const @@ -654,32 +657,35 @@ namespace test { } } - void construct(pointer p, T const& t) +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) + template + void construct(U* p, V const& v) { - UNORDERED_SCOPE(allocator2::construct(T*, T)) + UNORDERED_SCOPE(allocator2::construct(U*, V)) { UNORDERED_EPOINT("Mock allocator2 construct function."); - new (p) T(t); + new (p) U(v); } - test::detail::tracker.track_construct((void*)p, sizeof(T), tag_); + test::detail::tracker.track_construct((void*)p, sizeof(U), tag_); } - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - template void construct(T* p, BOOST_FWD_REF(Args)... args) +#else + template + void construct(U* p, BOOST_FWD_REF(Args)... args) { - UNORDERED_SCOPE(allocator2::construct(pointer, BOOST_FWD_REF(Args)...)) + UNORDERED_SCOPE(allocator2::construct(U*, BOOST_FWD_REF(Args)...)) { UNORDERED_EPOINT("Mock allocator2 construct function."); - new (p) T(boost::forward(args)...); + new (p) U(boost::forward(args)...); } - test::detail::tracker.track_construct((void*)p, sizeof(T), tag_); + test::detail::tracker.track_construct((void*)p, sizeof(U), tag_); } #endif - void destroy(T* p) + template + void destroy(U* p) { - test::detail::tracker.track_destroy((void*)p, sizeof(T), tag_); - p->~T(); + test::detail::tracker.track_destroy((void*)p, sizeof(U), tag_); + p->~U(); } size_type max_size() const diff --git a/test/objects/minimal.hpp b/test/objects/minimal.hpp index b89e0af8..0b6ebf4a 100644 --- a/test/objects/minimal.hpp +++ b/test/objects/minimal.hpp @@ -1,5 +1,6 @@ // Copyright 2006-2009 Daniel James. +// Copyright 2022 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) @@ -428,16 +429,20 @@ namespace test { ::operator delete((void*)p.ptr_); } - void construct(T* p, T const& t) { new ((void*)p) T(t); } - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - template void construct(T* p, BOOST_FWD_REF(Args)... args) +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) + template void construct(U* p, V const& v) { - new ((void*)p) T(boost::forward(args)...); + new ((void*)p) U(v); + } +#else + template + void construct(U* p, BOOST_FWD_REF(Args)... args) + { + new ((void*)p) U(boost::forward(args)...); } #endif - void destroy(T* p) { p->~T(); } + template void destroy(U* p) { p->~U(); } size_type max_size() const { return 1000; } @@ -498,17 +503,20 @@ namespace test { ::operator delete((void*)p.ptr_); } - void construct(T const* p, T const& t) { new ((void*)p) T(t); } - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - template - void construct(T const* p, BOOST_FWD_REF(Args)... args) +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) + template void construct(U* p, U const& t) { - new ((void*)p) T(boost::forward(args)...); + new (p) U(t); + } +#else + template + void construct(U* p, BOOST_FWD_REF(Args)... args) + { + new (p) U(boost::forward(args)...); } #endif - void destroy(T const* p) { p->~T(); } + template void destroy(U* p) { p->~U(); } size_type max_size() const { return 1000; } @@ -573,16 +581,20 @@ namespace test { void deallocate(T* p, std::size_t) { ::operator delete((void*)p); } - void construct(T* p, T const& t) { new ((void*)p) T(t); } - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - template void construct(T* p, BOOST_FWD_REF(Args)... args) +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) + template void construct(U* p, V const& v) { - new ((void*)p) T(boost::forward(args)...); + new ((void*)p) U(v); + } +#else + template + void construct(U* p, BOOST_FWD_REF(Args)... args) + { + new ((void*)p) U(boost::forward(args)...); } #endif - void destroy(T* p) { p->~T(); } + template void destroy(U* p) { p->~U(); } std::size_t max_size() const { return 1000u; } }; diff --git a/test/objects/test.hpp b/test/objects/test.hpp index 137c01c8..53569d30 100644 --- a/test/objects/test.hpp +++ b/test/objects/test.hpp @@ -1,5 +1,6 @@ // Copyright 2006-2009 Daniel James. +// Copyright 2022 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) @@ -646,24 +647,25 @@ namespace test { ::operator delete((void*)p.ptr_); } - void construct(T* p, T const& t) +#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) + template void construct(U* p, V const& v) { - detail::tracker.track_construct((void*)p, sizeof(T), tag_); - new (p) T(t); + detail::tracker.track_construct((void*)p, sizeof(U), tag_); + new (p) U(v); } - -#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) - template void construct(T* p, BOOST_FWD_REF(Args)... args) +#else + template + void construct(U* p, BOOST_FWD_REF(Args)... args) { - detail::tracker.track_construct((void*)p, sizeof(T), tag_); - new (p) T(boost::forward(args)...); + detail::tracker.track_construct((void*)p, sizeof(U), tag_); + new (p) U(boost::forward(args)...); } #endif - void destroy(T* p) + template void destroy(U* p) { - detail::tracker.track_destroy((void*)p, sizeof(T), tag_); - p->~T(); + detail::tracker.track_destroy((void*)p, sizeof(U), tag_); + p->~U(); } size_type max_size() const