diff -Nru foonathan-memory-0.7/CHANGELOG.md foonathan-memory-0.7.1/CHANGELOG.md --- foonathan-memory-0.7/CHANGELOG.md 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/CHANGELOG.md 2021-09-05 17:18:55.000000000 +0000 @@ -1,5 +1,16 @@ # Upcoming Changes +# 0.7-1 + +Just bugfixes: + +* CMake: automatically link libatomic on platforms where that is necessary (#95) +* catch small block sizes of `memory_pool` (#113) +* fix buffer overflow in `memory_pool_collection`'s array allocation (#99) +* fix compatibility with Windows UWP (#102) +* fix computation of `memory_pool::min_block_size` (#110) +* fix debug assertion in free lists (#111) + # 0.7 BREAKING: Removed the use of the compatibility library to automatically generate macros and workaround for older compilers. diff -Nru foonathan-memory-0.7/cmake/atomic.cmake foonathan-memory-0.7.1/cmake/atomic.cmake --- foonathan-memory-0.7/cmake/atomic.cmake 1970-01-01 00:00:00.000000000 +0000 +++ foonathan-memory-0.7.1/cmake/atomic.cmake 2021-09-05 17:18:55.000000000 +0000 @@ -0,0 +1,44 @@ +# check for atomic library, which is needed on some architectures +include(CheckCXXSourceCompiles) +function(check_cxx_atomic_compiles varname) + check_cxx_source_compiles(" + #include + std::atomic x; + int main() { + bool y = false; + return !x.compare_exchange_strong(y, true); + }" ${varname}) +endfunction() +function(check_working_cxx_atomic varname) + check_cxx_atomic_compiles(${varname}_NOFLAG) + if(${varname}_NOFLAG) + set(${varname} TRUE PARENT_SCOPE) + return() + endif() + set(old_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") + list(APPEND CMAKE_REQUIRED_FLAGS "-std=c++11") + check_cxx_atomic_compiles(${varname}_STD11) + set(CMAKE_REQUIRED_FLAGS "${old_CMAKE_REQUIRED_FLAGS}") + if(${varname}_STD11) + set(${varname} TRUE PARENT_SCOPE) + return() + endif() + list(APPEND CMAKE_REQUIRED_FLAGS "-std=c++0x") + check_cxx_atomic_compiles(${varname}_STD0X) + set(CMAKE_REQUIRED_FLAGS "${old_CMAKE_REQUIRED_FLAGS}") + if(${varname}_STD0X) + set(${varname} TRUE PARENT_SCOPE) + return() + endif() + set(${varname} FALSE PARENT_SCOPE) +endfunction() +check_working_cxx_atomic(HAVE_CXX_ATOMIC) +if(NOT HAVE_CXX_ATOMIC) + set(old_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") + list(APPEND CMAKE_REQUIRED_LIBRARIES "-latomic") + check_working_cxx_atomic(NEED_LIBRARY_FOR_CXX_ATOMIC) + set(CMAKE_REQUIRED_LIBRARIES "${old_CMAKE_REQUIRED_LIBRARIES}") + if(NOT NEED_LIBRARY_FOR_CXX_ATOMIC) + message(FATAL_ERROR "Host compiler does not support std::atomic") + endif() +endif() diff -Nru foonathan-memory-0.7/CMakeLists.txt foonathan-memory-0.7.1/CMakeLists.txt --- foonathan-memory-0.7/CMakeLists.txt 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/CMakeLists.txt 2021-09-05 17:18:55.000000000 +0000 @@ -1,15 +1,15 @@ -# Copyright (C) 2015-2020 Jonathan Müller +# Copyright (C) 2015-2021 Müller # This file is subject to the license terms in the LICENSE file # found in the top-level directory of this distribution. # root CMakeLists.txt, specifies option and interface library -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.11) project(FOONATHAN_MEMORY) set(FOONATHAN_MEMORY_VERSION_MAJOR 0 CACHE STRING "major version of memory" FORCE) set(FOONATHAN_MEMORY_VERSION_MINOR 7 CACHE STRING "minor version of memory" FORCE) -set(FOONATHAN_MEMORY_VERSION_PATCH 0 CACHE STRING "patch version of memory" FORCE) +set(FOONATHAN_MEMORY_VERSION_PATCH 1 CACHE STRING "patch version of memory" FORCE) set(FOONATHAN_MEMORY_VERSION "${FOONATHAN_MEMORY_VERSION_MAJOR}.${FOONATHAN_MEMORY_VERSION_MINOR}.${FOONATHAN_MEMORY_VERSION_PATCH}" CACHE STRING "version of memory" FORCE) @@ -44,6 +44,7 @@ endif() include(cmake/configuration.cmake) +include(cmake/atomic.cmake) # subdirectories add_subdirectory(src) diff -Nru foonathan-memory-0.7/debian/changelog foonathan-memory-0.7.1/debian/changelog --- foonathan-memory-0.7/debian/changelog 2020-12-10 09:20:47.000000000 +0000 +++ foonathan-memory-0.7.1/debian/changelog 2021-10-12 12:37:06.000000000 +0000 @@ -1,3 +1,43 @@ +foonathan-memory (0.7.1-4) unstable; urgency=medium + + [ Debian Janitor ] + * Set upstream metadata fields: + Bug-Submit, Repository, Repository-Browse. + + [ Timo Röhling ] + * Make package cross-compilable + + -- Timo Röhling Tue, 12 Oct 2021 14:37:06 +0200 + +foonathan-memory (0.7.1-3) unstable; urgency=medium + + * Simplify d/rules + * Transfer package to new Debian Robotics Team + + -- Timo Röhling Sat, 09 Oct 2021 13:25:07 +0200 + +foonathan-memory (0.7.1-2) unstable; urgency=medium + + * Upload to unstable. + + -- Timo Röhling Tue, 21 Sep 2021 13:13:44 +0200 + +foonathan-memory (0.7.1-1) experimental; urgency=medium + + * New upstream version 0.7.1 + * Bump Standards-Version to 4.6.0 (no changes) + * Drop .symbols file + * Bump SOVERSION + + -- Timo Röhling Sat, 11 Sep 2021 01:35:56 +0200 + +foonathan-memory (0.7-4) unstable; urgency=medium + + * Handle vanished symbols with GCC-11 (Closes: #984133) + * Update maintainer email address + + -- Timo Röhling Sun, 15 Aug 2021 22:14:45 +0200 + foonathan-memory (0.7-3) unstable; urgency=medium * Mark lambda function symbols as optional diff -Nru foonathan-memory-0.7/debian/control foonathan-memory-0.7.1/debian/control --- foonathan-memory-0.7/debian/control 2020-12-10 09:20:47.000000000 +0000 +++ foonathan-memory-0.7.1/debian/control 2021-10-12 12:01:53.000000000 +0000 @@ -1,17 +1,19 @@ Source: foonathan-memory Section: libs Priority: optional -Maintainer: Timo Röhling +Maintainer: Debian Robotics Team +Uploaders: Timo Röhling Build-Depends: debhelper-compat (= 13), - cmake, pkg-kde-tools, - doxygen , catch2 -Standards-Version: 4.5.1 + cmake, + doxygen , doctest-dev , + qemu-user-static , +Standards-Version: 4.6.0 Homepage: https://github.com/foonathan/memory Rules-Requires-Root: no -Vcs-Git: https://salsa.debian.org/roehling/foonathan-memory.git -Vcs-Browser: https://salsa.debian.org/roehling/foonathan-memory +Vcs-Git: https://salsa.debian.org/robotics-team/foonathan-memory.git +Vcs-Browser: https://salsa.debian.org/robotics-team/foonathan-memory -Package: libfoonathan-memory0d +Package: libfoonathan-memory0.7.1 Architecture: any Multi-Arch: same Depends: ${shlibs:Depends}, ${misc:Depends} @@ -25,7 +27,7 @@ Section: libdevel Architecture: any Multi-Arch: same -Depends: libfoonathan-memory0d (= ${binary:Version}), ${misc:Depends} +Depends: libfoonathan-memory0.7.1 (= ${binary:Version}), ${misc:Depends} Description: STL compatible C++ memory allocator library - development headers The default STL allocator model has various flaws, for example you cannot easily share a single allocator for multiple types. This library is one of diff -Nru foonathan-memory-0.7/debian/libfoonathan-memory0.7.1.install foonathan-memory-0.7.1/debian/libfoonathan-memory0.7.1.install --- foonathan-memory-0.7/debian/libfoonathan-memory0.7.1.install 1970-01-01 00:00:00.000000000 +0000 +++ foonathan-memory-0.7.1/debian/libfoonathan-memory0.7.1.install 2021-10-12 12:01:32.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/lib*.so.* diff -Nru foonathan-memory-0.7/debian/libfoonathan-memory0d.install foonathan-memory-0.7.1/debian/libfoonathan-memory0d.install --- foonathan-memory-0.7/debian/libfoonathan-memory0d.install 2020-12-10 09:20:03.000000000 +0000 +++ foonathan-memory-0.7.1/debian/libfoonathan-memory0d.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/lib*.so.* diff -Nru foonathan-memory-0.7/debian/libfoonathan-memory0d.symbols foonathan-memory-0.7.1/debian/libfoonathan-memory0d.symbols --- foonathan-memory-0.7/debian/libfoonathan-memory0d.symbols 2020-12-10 09:20:47.000000000 +0000 +++ foonathan-memory-0.7.1/debian/libfoonathan-memory0d.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,761 +0,0 @@ -# SymbolsHelper-Confirmed: 0.7 amd64 i386 armhf mipsel s390x -libfoonathan_memory.so.0d libfoonathan-memory0d #MINVER# -* Build-Depends-Package: libfoonathan-memory-dev - _ZGVN9foonathan6memory6detail15free_list_arrayINS1_16free_memory_listENS1_18log2_access_policyEE14min_size_indexE@Base 0.7 - _ZGVN9foonathan6memory6detail15free_list_arrayINS1_16free_memory_listENS1_22identity_access_policyEE14min_size_indexE@Base 0.7 - _ZGVN9foonathan6memory6detail15free_list_arrayINS1_22small_free_memory_listENS1_18log2_access_policyEE14min_size_indexE@Base 0.7 - _ZGVN9foonathan6memory6detail15free_list_arrayINS1_22small_free_memory_listENS1_22identity_access_policyEE14min_size_indexE@Base 0.7 - _ZGVN9foonathan6memory6detail15free_list_arrayINS1_24ordered_free_memory_listENS1_18log2_access_policyEE14min_size_indexE@Base 0.7 - _ZGVN9foonathan6memory6detail15free_list_arrayINS1_24ordered_free_memory_listENS1_22identity_access_policyEE14min_size_indexE@Base 0.7 - (subst)_ZN9foonathan6memory10heap_allocE{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13allocate_nodeEv@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13min_node_sizeE@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_arrayE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14min_block_sizeE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE15deallocate_nodeEPv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE17try_allocate_nodeEv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE19try_deallocate_nodeEPv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEC1EOS7_@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEC2EOS7_@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEED1Ev@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEED2Ev@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEaSEOS7_@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13allocate_nodeEv@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13min_node_sizeE@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_arrayE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14min_block_sizeE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE15deallocate_nodeEPv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE17try_allocate_nodeEv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE19try_deallocate_nodeEPv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEC1EOS7_@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEC2EOS7_@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEED1Ev@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEED2Ev@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEaSEOS7_@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13allocate_nodeEv@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13min_node_sizeE@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_arrayE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE14min_block_sizeE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE15deallocate_nodeEPv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE17try_allocate_nodeEv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE19try_deallocate_nodeEPv@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEC1EOS7_@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEC2EOS7_@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEED1Ev@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEED2Ev@Base 0.7 - _ZN9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEaSEOS7_@Base 0.7 - (subst)_ZN9foonathan6memory12heap_deallocEPv{size_t}@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE13shrink_to_fitEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE16deallocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EEC1EOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EEC2EOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EED1Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EED2Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EEaSEOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE13shrink_to_fitEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE16deallocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EEC1EOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EEC2EOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EED1Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EED2Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EEaSEOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE13shrink_to_fitEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE16deallocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EEC1EOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EEC2EOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EED1Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EED2Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EEaSEOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE13shrink_to_fitEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE16deallocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EEC1EOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EEC2EOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EED1Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EED2Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EEaSEOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE13shrink_to_fitEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE16deallocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EEC1EOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EEC2EOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EED1Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EED2Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EEaSEOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE13shrink_to_fitEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE16deallocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EEC1EOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EEC2EOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EED1Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EED2Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EEaSEOS8_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE13shrink_to_fitEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE16deallocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EEC1EOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EEC2EOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EED1Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EED2Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EEaSEOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE13shrink_to_fitEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE16deallocate_blockEv@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EEC1EOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EEC2EOS3_@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EED1Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EED2Ev@Base 0.7 - _ZN9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EEaSEOS3_@Base 0.7 - (subst)_ZN9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE12try_allocateE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13shrink_to_fitEv@Base 0.7 - (subst)_ZN9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE14min_block_sizeE{size_t}@Base 0.7 - _ZN9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE6unwindENS2_12stack_markerE@Base 0.7 - (subst)_ZN9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE8allocateE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory13out_of_memory11get_handlerEv@Base 0.7 - (subst)_ZN9foonathan6memory13out_of_memory11set_handlerEPFvRKNS0_14allocator_infoE{size_t}E@Base 0.7 - (subst)_ZN9foonathan6memory13out_of_memoryC1ERKNS0_14allocator_infoE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory13out_of_memoryC2ERKNS0_14allocator_infoE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13allocate_nodeERS8_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13max_alignmentERKS8_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13max_node_sizeERKS8_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE14allocate_arrayERS8_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE14max_array_sizeERKS8_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE15deallocate_nodeERS8_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE16deallocate_arrayERS8_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13allocate_nodeERS8_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13max_alignmentERKS8_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13max_node_sizeERKS8_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE14allocate_arrayERS8_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE14max_array_sizeERKS8_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE15deallocate_nodeERS8_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE16deallocate_arrayERS8_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13allocate_nodeERS8_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13max_alignmentERKS8_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE13max_node_sizeERKS8_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE14allocate_arrayERS8_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE14max_array_sizeERKS8_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE15deallocate_nodeERS8_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE16deallocate_arrayERS8_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE13allocate_nodeERS7_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE13max_alignmentERKS7_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE13max_node_sizeERKS7_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE14allocate_arrayERS7_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE14max_array_sizeERKS7_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE15deallocate_nodeERS7_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE16deallocate_arrayERS7_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_16static_allocatorEE13allocate_nodeERS2_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_16static_allocatorEE13max_alignmentERKS2_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_16static_allocatorEE13max_node_sizeERKS2_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_16static_allocatorEE14allocate_arrayERS2_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_16static_allocatorEE14max_array_sizeERKS2_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_16static_allocatorEE15deallocate_nodeERS2_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_16static_allocatorEE16deallocate_arrayERS2_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE13allocate_nodeERS7_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE13max_alignmentERKS7_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE13max_node_sizeERKS7_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE14allocate_arrayERS7_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE14max_array_sizeERKS7_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE15deallocate_nodeERS7_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE16deallocate_arrayERS7_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_alignmentERKS9_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_node_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14max_array_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE15deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE16deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_alignmentERKS9_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_node_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14max_array_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE15deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE16deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_alignmentERKS9_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_node_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14max_array_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE15deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE16deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_alignmentERKS9_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_node_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14max_array_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE15deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE16deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_alignmentERKS9_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_node_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14max_array_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE15deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE16deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_alignmentERKS9_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE13max_node_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE14max_array_sizeERKS9_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE15deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE16deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_24virtual_memory_allocatorEE13allocate_nodeERS2_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_24virtual_memory_allocatorEE13max_alignmentERKS2_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_24virtual_memory_allocatorEE13max_node_sizeERKS2_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_24virtual_memory_allocatorEE14allocate_arrayERS2_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_24virtual_memory_allocatorEE14max_array_sizeERKS2_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_24virtual_memory_allocatorEE15deallocate_nodeERS2_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_24virtual_memory_allocatorEE16deallocate_arrayERS2_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_18new_allocator_implEEEE13allocate_nodeERS5_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_18new_allocator_implEEEE13max_alignmentERKS5_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_18new_allocator_implEEEE13max_node_sizeERKS5_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_18new_allocator_implEEEE14allocate_arrayERS5_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_18new_allocator_implEEEE14max_array_sizeERKS5_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_18new_allocator_implEEEE15deallocate_nodeERS5_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_18new_allocator_implEEEE16deallocate_arrayERS5_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13allocate_nodeERS5_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13max_alignmentERKS5_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13max_node_sizeERKS5_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE14allocate_arrayERS5_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE14max_array_sizeERKS5_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE15deallocate_nodeERS5_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE16deallocate_arrayERS5_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_21malloc_allocator_implEEEE13allocate_nodeERS5_{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_21malloc_allocator_implEEEE13max_alignmentERKS5_@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_21malloc_allocator_implEEEE13max_node_sizeERKS5_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_21malloc_allocator_implEEEE14allocate_arrayERS5_{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_21malloc_allocator_implEEEE14max_array_sizeERKS5_@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_21malloc_allocator_implEEEE15deallocate_nodeERS5_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory16allocator_traitsINS0_6detail18lowlevel_allocatorINS2_21malloc_allocator_implEEEE16deallocate_arrayERS5_Pv{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory16get_leak_handlerEv@Base 0.7 - (subst)_ZN9foonathan6memory16set_leak_handlerEPFvRKNS0_14allocator_infoE{ssize_t}E@Base 0.7 - (subst)_ZN9foonathan6memory16static_allocator13allocate_nodeE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory19bad_allocation_size11get_handlerEv@Base 0.7 - (subst)_ZN9foonathan6memory19bad_allocation_size11set_handlerEPFvRKNS0_14allocator_infoE{size_t}{size_t}E@Base 0.7 - (subst)_ZN9foonathan6memory19bad_allocation_sizeC1ERKNS0_14allocator_infoE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory19bad_allocation_sizeC2ERKNS0_14allocator_infoE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory19get_temporary_stackE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE12try_allocateE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE14max_iterationsEv@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE14next_iterationEv@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE8allocateE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEEC1EOS6_@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEEC2EOS6_@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEED1Ev@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEED2Ev@Base 0.7 - (subst)_ZN9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEEaSEOS6_@Base 0.7 - _ZN9foonathan6memory19temporary_allocator13shrink_to_fitEv@Base 0.7 - (subst)_ZN9foonathan6memory19temporary_allocator8allocateE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory19temporary_allocatorC1ERNS0_15temporary_stackE@Base 0.7 - _ZN9foonathan6memory19temporary_allocatorC1Ev@Base 0.7 - _ZN9foonathan6memory19temporary_allocatorC2ERNS0_15temporary_stackE@Base 0.7 - _ZN9foonathan6memory19temporary_allocatorC2Ev@Base 0.7 - _ZN9foonathan6memory19temporary_allocatorD1Ev@Base 0.7 - _ZN9foonathan6memory19temporary_allocatorD2Ev@Base 0.7 - _ZN9foonathan6memory21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE16deallocate_blockENS0_12memory_blockE@Base 0.7 - _ZN9foonathan6memory21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE4infoEv@Base 0.7 - (subst)_ZN9foonathan6memory21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEEC1E{size_t}S5_@Base 0.7 - (subst)_ZN9foonathan6memory21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEEC2E{size_t}S5_@Base 0.7 - (subst)_ZN9foonathan6memory21virtual_memory_commitEPv{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE11insert_restERNS4_24ordered_free_memory_listE@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13allocate_nodeE{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14reserve_memoryERNS4_24ordered_free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE15deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE17try_allocate_nodeE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_reserve_memoryERNS4_24ordered_free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE19try_deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE7reserveE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC1EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC2EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEaSEOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE11insert_restERNS4_24ordered_free_memory_listE@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13allocate_nodeE{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14reserve_memoryERNS4_24ordered_free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE15deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE17try_allocate_nodeE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_reserve_memoryERNS4_24ordered_free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE19try_deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE7reserveE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC1EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC2EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEaSEOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE11insert_restERNS4_22small_free_memory_listE@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13allocate_nodeE{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14reserve_memoryERNS4_22small_free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE15deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE17try_allocate_nodeE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_reserve_memoryERNS4_22small_free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE19try_deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE7reserveE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC1EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC2EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEaSEOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE11insert_restERNS4_22small_free_memory_listE@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13allocate_nodeE{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14reserve_memoryERNS4_22small_free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE15deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE17try_allocate_nodeE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_reserve_memoryERNS4_22small_free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE19try_deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE7reserveE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC1EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC2EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEaSEOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE11insert_restERNS4_16free_memory_listE@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13allocate_nodeE{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14reserve_memoryERNS4_16free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE15deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE17try_allocate_nodeE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_reserve_memoryERNS4_16free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE19try_deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE7reserveE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC1EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC2EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEaSEOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE11insert_restERNS4_16free_memory_listE@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13allocate_nodeE{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13get_allocatorEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_arrayE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14allocate_blockEv@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE14reserve_memoryERNS4_16free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE15deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE16deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE17try_allocate_nodeE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_allocate_arrayE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18try_reserve_memoryERNS4_16free_memory_listE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE19try_deallocate_nodeEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE20try_deallocate_arrayEPv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE7reserveE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC1EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEC2EOS8_@Base 0.7 - _ZN9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEaSEOS8_@Base 0.7 - _ZN9foonathan6memory22static_block_allocator14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory22static_block_allocator16deallocate_blockENS0_12memory_blockE@Base 0.7 - (subst)_ZN9foonathan6memory22virtual_memory_releaseEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory22virtual_memory_reserveE{size_t}@Base 0.7 - _ZN9foonathan6memory23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEELj2ELj1EE13get_allocatorEv@Base 0.7 - _ZN9foonathan6memory23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEELj2ELj1EE13growth_factorEv@Base 0.7 - _ZN9foonathan6memory23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEELj2ELj1EE14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEELj2ELj1EE16deallocate_blockENS0_12memory_blockE@Base 0.7 - (subst)_ZN9foonathan6memory23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEELj2ELj1EEC1E{size_t}S5_@Base 0.7 - (subst)_ZN9foonathan6memory23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEELj2ELj1EEC2E{size_t}S5_@Base 0.7 - _ZN9foonathan6memory23virtual_block_allocator14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory23virtual_block_allocator16deallocate_blockENS0_12memory_blockE@Base 0.7 - _ZN9foonathan6memory23virtual_block_allocator4infoEv@Base 0.7 - (subst)_ZN9foonathan6memory23virtual_block_allocatorC1E{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory23virtual_block_allocatorC2E{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory23virtual_block_allocatorD1Ev@Base 0.7 - _ZN9foonathan6memory23virtual_block_allocatorD2Ev@Base 0.7 - (subst)_ZN9foonathan6memory23virtual_memory_decommitEPv{size_t}@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE6unwindEv@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE7releaseEv@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEEC1EOS8_@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEEC1ERS7_@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEEC1ERS7_NS3_12stack_markerE@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEEC2EOS8_@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEEC2ERS7_@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEEC2ERS7_NS3_12stack_markerE@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEED1Ev@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEED2Ev@Base 0.7 - _ZN9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEEaSEOS8_@Base 0.7 - (subst)_ZN9foonathan6memory24virtual_memory_allocator13allocate_nodeE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory24virtual_memory_allocator15deallocate_nodeEPv{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory24virtual_memory_page_sizeE@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE17try_allocate_nodeERS8_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE18try_allocate_arrayERS8_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE19try_deallocate_nodeERS8_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE20try_deallocate_arrayERS8_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE17try_allocate_nodeERS8_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE18try_allocate_arrayERS8_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE19try_deallocate_nodeERS8_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE20try_deallocate_arrayERS8_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE17try_allocate_nodeERS8_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE18try_allocate_arrayERS8_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE19try_deallocate_nodeERS8_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEEEE20try_deallocate_arrayERS8_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE17try_allocate_nodeERS7_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE18try_allocate_arrayERS7_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE19try_deallocate_nodeERS7_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE20try_deallocate_arrayERS7_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE17try_allocate_nodeERS7_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE18try_allocate_arrayERS7_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE19try_deallocate_nodeERS7_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE20try_deallocate_arrayERS7_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE17try_allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE18try_allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE19try_deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE20try_deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE17try_allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE18try_allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE19try_deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE20try_deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE17try_allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE18try_allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE19try_deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE20try_deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE17try_allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE18try_allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE19try_deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE20try_deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE17try_allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE18try_allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE19try_deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE20try_deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE17try_allocate_nodeERS9_{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE18try_allocate_arrayERS9_{size_t}{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE19try_deallocate_nodeERS9_Pv{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27composable_allocator_traitsINS0_22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS5_19heap_allocator_implEEEEEE20try_deallocate_arrayERS9_Pv{size_t}{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory27get_buffer_overflow_handlerEv@Base 0.7 - _ZN9foonathan6memory27get_invalid_pointer_handlerEv@Base 0.7 - (subst)_ZN9foonathan6memory27set_buffer_overflow_handlerEPFvPKv{size_t}S2_E@Base 0.7 - _ZN9foonathan6memory27set_invalid_pointer_handlerEPFvRKNS0_14allocator_infoEPKvE@Base 0.7 - _ZN9foonathan6memory27temporary_stack_initializer12defer_createE@Base 0.7 - (subst)_ZN9foonathan6memory27temporary_stack_initializerC1E{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory27temporary_stack_initializerC2E{size_t}@Base 0.7 - _ZN9foonathan6memory27temporary_stack_initializerD1Ev@Base 0.7 - _ZN9foonathan6memory27temporary_stack_initializerD2Ev@Base 0.7 - (subst)_ZN9foonathan6memory6detail10is_alignedEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail13alignment_forE{size_t}@Base 0.7 - _ZN9foonathan6memory6detail14handle_warningEPKcS3_iS3_@Base 0.7 - _ZN9foonathan6memory6detail15free_list_arrayINS1_16free_memory_listENS1_18log2_access_policyEE14min_size_indexE@Base 0.7 - _ZN9foonathan6memory6detail15free_list_arrayINS1_16free_memory_listENS1_22identity_access_policyEE14min_size_indexE@Base 0.7 - _ZN9foonathan6memory6detail15free_list_arrayINS1_22small_free_memory_listENS1_18log2_access_policyEE14min_size_indexE@Base 0.7 - _ZN9foonathan6memory6detail15free_list_arrayINS1_22small_free_memory_listENS1_22identity_access_policyEE14min_size_indexE@Base 0.7 - _ZN9foonathan6memory6detail15free_list_arrayINS1_24ordered_free_memory_listENS1_18log2_access_policyEE14min_size_indexE@Base 0.7 - _ZN9foonathan6memory6detail15free_list_arrayINS1_24ordered_free_memory_listENS1_22identity_access_policyEE14min_size_indexE@Base 0.7 - _ZN9foonathan6memory6detail16free_memory_list10deallocateEPv@Base 0.7 - (subst)_ZN9foonathan6memory6detail16free_memory_list10deallocateEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail16free_memory_list11insert_implEPv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail16free_memory_list16min_element_sizeE@Base 0.7 - _ZN9foonathan6memory6detail16free_memory_list21min_element_alignmentE@Base 0.7 - (subst)_ZN9foonathan6memory6detail16free_memory_list6insertEPv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail16free_memory_list8allocateEv@Base 0.7 - (subst)_ZN9foonathan6memory6detail16free_memory_list8allocateE{size_t}@Base 0.7 - _ZN9foonathan6memory6detail16free_memory_listC1EOS2_@Base 0.7 - (subst)_ZN9foonathan6memory6detail16free_memory_listC1E{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail16free_memory_listC1E{size_t}Pv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail16free_memory_listC2EOS2_@Base 0.7 - (subst)_ZN9foonathan6memory6detail16free_memory_listC2E{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail16free_memory_listC2E{size_t}Pv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail16free_memory_listaSEOS2_@Base 0.7 - (subst)_ZN9foonathan6memory6detail18log2_access_policy15index_from_sizeE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail18log2_access_policy15size_from_indexE{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEE13allocate_nodeE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEE15deallocate_nodeEPv{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEEC1EOS4_@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEEC1Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEEC2EOS4_@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEEC2Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEED1Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEED2Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEEaSEOS4_@Base 0.7 - (subst)_ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEE13allocate_nodeE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEE15deallocate_nodeEPv{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEEC1EOS4_@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEEC1Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEEC2EOS4_@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEEC2Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEED1Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEED2Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEEaSEOS4_@Base 0.7 - (subst)_ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEE13allocate_nodeE{size_t}{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEE15deallocate_nodeEPv{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEEC1EOS4_@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEEC1Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEEC2EOS4_@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEEC2Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEED1Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEED2Ev@Base 0.7 - _ZN9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEEaSEOS4_@Base 0.7 - _ZN9foonathan6memory6detail18memory_block_stack3popEv@Base 0.7 - _ZN9foonathan6memory6detail18memory_block_stack4pushENS0_12memory_blockE@Base 0.7 - _ZN9foonathan6memory6detail18memory_block_stack9steal_topERS2_@Base 0.7 - (subst)_ZN9foonathan6memory6detail18new_allocator_impl10deallocateEPv{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory6detail18new_allocator_impl13max_node_sizeEv@Base 0.7 - _ZN9foonathan6memory6detail18new_allocator_impl4infoEv@Base 0.7 - (subst)_ZN9foonathan6memory6detail18new_allocator_impl8allocateE{size_t}{size_t}@Base 0.7 - _ZN9foonathan6memory6detail19heap_allocator_impl13max_node_sizeEv@Base 0.7 - _ZN9foonathan6memory6detail19heap_allocator_impl4infoEv@Base 0.7 - _ZN9foonathan6memory6detail20handle_failed_assertEPKcS3_iS3_@Base 0.7 - (optional=lambda|subst)_ZN9foonathan6memory6detail21check_allocation_sizeINS0_13bad_node_sizeEZNS1_21check_allocation_sizeIS3_EEv{size_t}{size_t}RKNS0_14allocator_infoEEUlvE_EEv{size_t}T0_S7_@Base 0.7 - (optional=lambda|subst)_ZN9foonathan6memory6detail21check_allocation_sizeINS0_14bad_array_sizeEZNS1_21check_allocation_sizeIS3_EEv{size_t}{size_t}RKNS0_14allocator_infoEEUlvE_EEv{size_t}T0_S7_@Base 0.7 - _ZN9foonathan6memory6detail21malloc_allocator_impl4infoEv@Base 0.7 - _ZN9foonathan6memory6detail22small_free_memory_list10deallocateEPv@Base 0.7 - _ZN9foonathan6memory6detail22small_free_memory_list15find_chunk_implEPh@Base 0.7 - _ZN9foonathan6memory6detail22small_free_memory_list15find_chunk_implEPhPNS1_10chunk_baseES5_@Base 0.7 - (subst)_ZN9foonathan6memory6detail22small_free_memory_list15find_chunk_implE{size_t}@Base 0.7 - _ZN9foonathan6memory6detail22small_free_memory_list16min_element_sizeE@Base 0.7 - _ZN9foonathan6memory6detail22small_free_memory_list21min_element_alignmentE@Base 0.7 - (subst)_ZN9foonathan6memory6detail22small_free_memory_list6insertEPv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail22small_free_memory_list8allocateEv@Base 0.7 - _ZN9foonathan6memory6detail22small_free_memory_listC1EOS2_@Base 0.7 - (subst)_ZN9foonathan6memory6detail22small_free_memory_listC1E{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail22small_free_memory_listC1E{size_t}Pv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail22small_free_memory_listC2EOS2_@Base 0.7 - (subst)_ZN9foonathan6memory6detail22small_free_memory_listC2E{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail22small_free_memory_listC2E{size_t}Pv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail24debug_handle_invalid_ptrERKNS0_14allocator_infoEPv@Base 0.7 - (subst)_ZN9foonathan6memory6detail24debug_handle_memory_leakERKNS0_14allocator_infoE{ssize_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail24memory_pool_leak_handlerclE{ssize_t}@Base 0.7 - _ZN9foonathan6memory6detail24ordered_free_memory_list10begin_nodeEv@Base 0.7 - _ZN9foonathan6memory6detail24ordered_free_memory_list10deallocateEPv@Base 0.7 - (subst)_ZN9foonathan6memory6detail24ordered_free_memory_list10deallocateEPv{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail24ordered_free_memory_list11insert_implEPv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail24ordered_free_memory_list16min_element_sizeE@Base 0.7 - _ZN9foonathan6memory6detail24ordered_free_memory_list21min_element_alignmentE@Base 0.7 - (subst)_ZN9foonathan6memory6detail24ordered_free_memory_list6insertEPv{size_t}@Base 0.7 - _ZN9foonathan6memory6detail24ordered_free_memory_list8allocateEv@Base 0.7 - (subst)_ZN9foonathan6memory6detail24ordered_free_memory_list8allocateE{size_t}@Base 0.7 - _ZN9foonathan6memory6detail24ordered_free_memory_list8end_nodeEv@Base 0.7 - _ZN9foonathan6memory6detail24ordered_free_memory_listC1EOS2_@Base 0.7 - (subst)_ZN9foonathan6memory6detail24ordered_free_memory_listC1E{size_t}@Base 0.7 - _ZN9foonathan6memory6detail24ordered_free_memory_listC2EOS2_@Base 0.7 - (subst)_ZN9foonathan6memory6detail24ordered_free_memory_listC2E{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail25memory_stack_leak_handlerclE{ssize_t}@Base 0.7 - _ZN9foonathan6memory6detail25temporary_block_allocator14allocate_blockEv@Base 0.7 - _ZN9foonathan6memory6detail25temporary_block_allocator16deallocate_blockENS0_12memory_blockE@Base 0.7 - _ZN9foonathan6memory6detail25temporary_block_allocator18get_growth_trackerEv@Base 0.7 - (subst)_ZN9foonathan6memory6detail25temporary_block_allocator18set_growth_trackerEPFv{size_t}E@Base 0.7 - (subst)_ZN9foonathan6memory6detail25temporary_block_allocatorC1E{size_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail25temporary_block_allocatorC2E{size_t}@Base 0.7 - _ZN9foonathan6memory6detail25temporary_stack_list_nodeC1Ei@Base 0.7 - _ZN9foonathan6memory6detail25temporary_stack_list_nodeC2Ei@Base 0.7 - _ZN9foonathan6memory6detail26temporary_allocator_dtor_tC1Ev@Base 0.7 - _ZN9foonathan6memory6detail26temporary_allocator_dtor_tC2Ev@Base 0.7 - _ZN9foonathan6memory6detail26temporary_allocator_dtor_tD1Ev@Base 0.7 - _ZN9foonathan6memory6detail26temporary_allocator_dtor_tD2Ev@Base 0.7 - (subst)_ZN9foonathan6memory6detail35memory_pool_collection_leak_handlerclE{ssize_t}@Base 0.7 - (subst)_ZN9foonathan6memory6detail37virtual_memory_allocator_leak_handlerclE{ssize_t}@Base 0.7 - _ZN9foonathan6memory6detail4swapERNS1_16free_memory_listES3_@Base 0.7 - _ZN9foonathan6memory6detail4swapERNS1_22small_free_memory_listES3_@Base 0.7 - _ZN9foonathan6memory6detail4swapERNS1_24ordered_free_memory_listES3_@Base 0.7 - _ZN9foonathan6memory6detail5chunk13memory_offsetE@Base 0.7 - _ZN9foonathan6memory6detail5chunk9max_nodesE@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_10array_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE9node_sizeEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_15small_node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE9node_sizeEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory11memory_poolINS0_9node_poolENS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEE9node_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE10cache_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE13current_blockEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE4sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb0EE8capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE10cache_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE13current_blockEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE4sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEELb1EE8capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE10cache_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE13current_blockEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE4sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb0EE8capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE10cache_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE13current_blockEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE4sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_22static_block_allocatorELb1EE8capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE10cache_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE13current_blockEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE4sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb0EE8capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE10cache_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE13current_blockEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE4sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEELj2ELj1EEELb1EE8capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE10cache_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE13current_blockEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE4sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb0EE8capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE10cache_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE13current_blockEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE4sizeEv@Base 0.7 - _ZNK9foonathan6memory12memory_arenaINS0_23virtual_block_allocatorELb1EE8capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - _ZNK9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE3topEv@Base 0.7 - _ZNK9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory12memory_stackINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE9block_endEv@Base 0.7 - _ZNK9foonathan6memory13bad_alignment4whatEv@Base 0.7 - _ZNK9foonathan6memory13bad_node_size4whatEv@Base 0.7 - _ZNK9foonathan6memory13out_of_memory4whatEv@Base 0.7 - _ZNK9foonathan6memory14bad_array_size4whatEv@Base 0.7 - _ZNK9foonathan6memory16static_allocator4infoEv@Base 0.7 - _ZNK9foonathan6memory19bad_allocation_size4whatEv@Base 0.7 - (subst)_ZNK9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE11block_startE{size_t}@Base 0.7 - (subst)_ZNK9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - (subst)_ZNK9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13capacity_leftE{size_t}@Base 0.7 - (subst)_ZNK9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE13cur_iterationEv@Base 0.7 - (subst)_ZNK9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE4infoEv@Base 0.7 - (subst)_ZNK9foonathan6memory19iteration_allocatorIL{size_t}2ENS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE9block_endE{size_t}@Base 0.7 - _ZNK9foonathan6memory19out_of_fixed_memory4whatEv@Base 0.7 - _ZNK9foonathan6memory19temporary_allocator9is_activeEv@Base 0.7 - _ZNK9foonathan6memory21fixed_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEEE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE12def_capacityEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - (subst)_ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18pool_capacity_leftE{size_t}@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE9block_endEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE12def_capacityEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - (subst)_ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18pool_capacity_leftE{size_t}@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_10array_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE9block_endEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE12def_capacityEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - (subst)_ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18pool_capacity_leftE{size_t}@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE9block_endEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE12def_capacityEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - (subst)_ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18pool_capacity_leftE{size_t}@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_15small_node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE9block_endEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE12def_capacityEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - (subst)_ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18pool_capacity_leftE{size_t}@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_12log2_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE9block_endEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE12def_capacityEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13capacity_leftEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE13next_capacityEv@Base 0.7 - (subst)_ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE18pool_capacity_leftE{size_t}@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE4infoEv@Base 0.7 - _ZNK9foonathan6memory22memory_pool_collectionINS0_9node_poolENS0_16identity_bucketsENS0_6detail18lowlevel_allocatorINS4_19heap_allocator_implEEEE9block_endEv@Base 0.7 - _ZNK9foonathan6memory22static_block_allocator4infoEv@Base 0.7 - _ZNK9foonathan6memory23growing_block_allocatorINS0_6detail18lowlevel_allocatorINS2_19heap_allocator_implEEELj2ELj1EE15next_block_sizeEv@Base 0.7 - _ZNK9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE10get_markerEv@Base 0.7 - _ZNK9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE11will_unwindEv@Base 0.7 - _ZNK9foonathan6memory24memory_stack_raii_unwindINS0_12memory_stackINS0_6detail18lowlevel_allocatorINS3_19heap_allocator_implEEEEEE9get_stackEv@Base 0.7 - _ZNK9foonathan6memory24virtual_memory_allocator13max_alignmentEv@Base 0.7 - _ZNK9foonathan6memory24virtual_memory_allocator13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory6detail16free_memory_list10fence_sizeEv@Base 0.7 - _ZNK9foonathan6memory6detail16free_memory_list9alignmentEv@Base 0.7 - _ZNK9foonathan6memory6detail18lowlevel_allocatorINS1_18new_allocator_implEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory6detail18lowlevel_allocatorINS1_19heap_allocator_implEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory6detail18lowlevel_allocatorINS1_21malloc_allocator_implEE13max_node_sizeEv@Base 0.7 - _ZNK9foonathan6memory6detail18memory_block_stack4ownsEPKv@Base 0.7 - _ZNK9foonathan6memory6detail18memory_block_stack4sizeEv@Base 0.7 - _ZNK9foonathan6memory6detail22small_free_memory_list10fence_sizeEv@Base 0.7 - (subst)_ZNK9foonathan6memory6detail22small_free_memory_list11usable_sizeE{size_t}@Base 0.7 - _ZNK9foonathan6memory6detail22small_free_memory_list9alignmentEv@Base 0.7 - _ZNK9foonathan6memory6detail24ordered_free_memory_list10fence_sizeEv@Base 0.7 - _ZNK9foonathan6memory6detail24ordered_free_memory_list9alignmentEv@Base 0.7 - _ZTIN9foonathan6memory13bad_alignmentE@Base 0.7 - _ZTIN9foonathan6memory13bad_node_sizeE@Base 0.7 - _ZTIN9foonathan6memory13out_of_memoryE@Base 0.7 - _ZTIN9foonathan6memory14bad_array_sizeE@Base 0.7 - _ZTIN9foonathan6memory19bad_allocation_sizeE@Base 0.7 - _ZTIN9foonathan6memory19out_of_fixed_memoryE@Base 0.7 - _ZTSN9foonathan6memory13bad_alignmentE@Base 0.7 - _ZTSN9foonathan6memory13bad_node_sizeE@Base 0.7 - _ZTSN9foonathan6memory13out_of_memoryE@Base 0.7 - _ZTSN9foonathan6memory14bad_array_sizeE@Base 0.7 - _ZTSN9foonathan6memory19bad_allocation_sizeE@Base 0.7 - _ZTSN9foonathan6memory19out_of_fixed_memoryE@Base 0.7 - _ZTVN9foonathan6memory13bad_alignmentE@Base 0.7 - _ZTVN9foonathan6memory13bad_node_sizeE@Base 0.7 - _ZTVN9foonathan6memory13out_of_memoryE@Base 0.7 - _ZTVN9foonathan6memory14bad_array_sizeE@Base 0.7 - _ZTVN9foonathan6memory19bad_allocation_sizeE@Base 0.7 - _ZTVN9foonathan6memory19out_of_fixed_memoryE@Base 0.7 diff -Nru foonathan-memory-0.7/debian/patches/0001-Use-system-Catch2.patch foonathan-memory-0.7.1/debian/patches/0001-Use-system-Catch2.patch --- foonathan-memory-0.7/debian/patches/0001-Use-system-Catch2.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0001-Use-system-Catch2.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,37 +0,0 @@ -From: =?utf-8?q?Timo_R=C3=B6hling?= -Date: Wed, 2 Dec 2020 15:59:22 +0100 -Subject: Use system Catch2 - -Forwarded: not-needed ---- - test/CMakeLists.txt | 17 ++--------------- - 1 file changed, 2 insertions(+), 15 deletions(-) - -diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt -index 74dd5b7..36e2f25 100644 ---- a/test/CMakeLists.txt -+++ b/test/CMakeLists.txt -@@ -9,21 +9,8 @@ target_link_libraries(foonathan_memory_profiling foonathan_memory) - target_include_directories(foonathan_memory_profiling PRIVATE - ${FOONATHAN_MEMORY_SOURCE_DIR}/include/foonathan/memory) - --if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/catch.hpp) -- file(DOWNLOAD -- https://raw.githubusercontent.com/catchorg/Catch2/2e61d38c7c3078e600c331257b5bebfb81aaa685/single_include/catch2/catch.hpp -- ${CMAKE_CURRENT_BINARY_DIR}/catch.hpp -- STATUS status -- LOG log) -- -- list(GET status 0 status_code) -- list(GET status 1 status_string) -- -- if(NOT status_code EQUAL 0) -- message(FATAL_ERROR "error downloading catch: ${status_string}" -- "${log}") -- endif() --endif() -+find_package(Catch2 REQUIRED) -+include_directories(/usr/include/catch2) - - set(tests - test_allocator.hpp diff -Nru foonathan-memory-0.7/debian/patches/0001-Use-system-doctest.patch foonathan-memory-0.7.1/debian/patches/0001-Use-system-doctest.patch --- foonathan-memory-0.7/debian/patches/0001-Use-system-doctest.patch 1970-01-01 00:00:00.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0001-Use-system-doctest.patch 2021-10-12 12:01:32.000000000 +0000 @@ -0,0 +1,26 @@ +From: =?utf-8?q?Timo_R=C3=B6hling?= +Date: Wed, 2 Dec 2020 15:59:22 +0100 +Subject: Use system doctest + +Forwarded: not-needed +--- + test/CMakeLists.txt | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt +index 3c62619..141d167 100644 +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -9,11 +9,7 @@ target_link_libraries(foonathan_memory_profiling foonathan_memory) + target_include_directories(foonathan_memory_profiling PRIVATE + ${FOONATHAN_MEMORY_SOURCE_DIR}/include/foonathan/memory) + +-# Fetch doctest. +-message(STATUS "Fetching doctest") +-include(FetchContent) +-FetchContent_Declare(doctest URL https://github.com/onqtam/doctest/archive/2.4.5.zip) +-FetchContent_MakeAvailable(doctest) ++find_package(doctest REQUIRED) + + set(tests + test_allocator.hpp diff -Nru foonathan-memory-0.7/debian/patches/0002-Fix-installation-destination-for-CMake-script.patch foonathan-memory-0.7.1/debian/patches/0002-Fix-installation-destination-for-CMake-script.patch --- foonathan-memory-0.7/debian/patches/0002-Fix-installation-destination-for-CMake-script.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0002-Fix-installation-destination-for-CMake-script.patch 2021-10-12 12:01:32.000000000 +0000 @@ -8,7 +8,7 @@ 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt -index 6f4ac1b..79f3f7d 100644 +index 73de5ae..b1c6774 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -27,7 +27,7 @@ if(UNIX OR VXWORKS) diff -Nru foonathan-memory-0.7/debian/patches/0003-Set-proper-library-version.patch foonathan-memory-0.7.1/debian/patches/0003-Set-proper-library-version.patch --- foonathan-memory-0.7/debian/patches/0003-Set-proper-library-version.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0003-Set-proper-library-version.patch 2021-10-12 12:01:32.000000000 +0000 @@ -4,20 +4,19 @@ Forwarded: not-needed --- - src/CMakeLists.txt | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + src/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 2b55e60..65df8a2 100644 +index 5a512c9..b4c413d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt -@@ -131,7 +131,8 @@ target_compile_features(foonathan_memory PUBLIC cxx_constexpr) +@@ -143,7 +143,7 @@ elseif(MSVC) endif() set_target_properties(foonathan_memory PROPERTIES - OUTPUT_NAME "foonathan_memory-${FOONATHAN_MEMORY_VERSION}" -+ VERSION "${FOONATHAN_MEMORY_VERSION_MAJOR}.${FOONATHAN_MEMORY_VERSION_MINOR}.${FOONATHAN_MEMORY_VERSION_PATCH}" -+ SOVERSION "${FOONATHAN_MEMORY_SOVERSION}" ++ VERSION "${FOONATHAN_MEMORY_VERSION}" POSITION_INDEPENDENT_CODE ON) - install(TARGETS foonathan_memory EXPORT foonathan_memoryTargets + if(NEED_LIBRARY_FOR_CXX_ATOMIC) diff -Nru foonathan-memory-0.7/debian/patches/0004-Fix-includes-so-unit-tests-can-be-run-in-autopkgtest.patch foonathan-memory-0.7.1/debian/patches/0004-Fix-includes-so-unit-tests-can-be-run-in-autopkgtest.patch --- foonathan-memory-0.7/debian/patches/0004-Fix-includes-so-unit-tests-can-be-run-in-autopkgtest.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0004-Fix-includes-so-unit-tests-can-be-run-in-autopkgtest.patch 2021-10-12 12:01:32.000000000 +0000 @@ -2,8 +2,9 @@ Date: Wed, 2 Dec 2020 18:06:42 +0100 Subject: Fix includes so unit tests can be run in autopkgtest +Forwarded: not-needed --- - test/CMakeLists.txt | 5 ----- + test/CMakeLists.txt | 4 ---- test/aligned_allocator.cpp | 8 ++++---- test/allocator_traits.cpp | 4 ++-- test/benchmark.hpp | 2 +- @@ -25,11 +26,10 @@ test/profiling.cpp | 10 +++++----- test/segregator.cpp | 2 +- test/smart_ptr.cpp | 6 +++--- - test/test.cpp | 2 +- - 23 files changed, 53 insertions(+), 58 deletions(-) + 22 files changed, 52 insertions(+), 56 deletions(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt -index 36e2f25..7c9660c 100644 +index 141d167..2643f20 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -6,8 +6,6 @@ @@ -39,19 +39,19 @@ -target_include_directories(foonathan_memory_profiling PRIVATE - ${FOONATHAN_MEMORY_SOURCE_DIR}/include/foonathan/memory) - find_package(Catch2 REQUIRED) - include_directories(/usr/include/catch2) -@@ -37,8 +35,5 @@ set(tests + find_package(doctest REQUIRED) + +@@ -36,8 +34,6 @@ set(tests add_executable(foonathan_memory_test ${tests}) - target_link_libraries(foonathan_memory_test foonathan_memory) + target_link_libraries(foonathan_memory_test PRIVATE foonathan_memory doctest::doctest) -target_include_directories(foonathan_memory_test PRIVATE -- ${CMAKE_CURRENT_BINARY_DIR} - ${FOONATHAN_MEMORY_SOURCE_DIR}/include/foonathan/memory) add_test(NAME test COMMAND foonathan_memory_test) + diff --git a/test/aligned_allocator.cpp b/test/aligned_allocator.cpp -index bd5974f..bfbf1ba 100644 +index 350a11b..0814f6e 100644 --- a/test/aligned_allocator.cpp +++ b/test/aligned_allocator.cpp @@ -2,13 +2,13 @@ @@ -61,7 +61,7 @@ -#include "aligned_allocator.hpp" +#include - #include + #include -#include "detail/align.hpp" -#include "allocator_storage.hpp" @@ -73,7 +73,7 @@ using namespace foonathan::memory; diff --git a/test/allocator_traits.cpp b/test/allocator_traits.cpp -index 0dccbf3..4b9fd7c 100644 +index b225724..cc40205 100644 --- a/test/allocator_traits.cpp +++ b/test/allocator_traits.cpp @@ -2,13 +2,13 @@ @@ -83,7 +83,7 @@ -#include "allocator_traits.hpp" +#include - #include + #include #include @@ -93,7 +93,7 @@ using namespace foonathan::memory; diff --git a/test/benchmark.hpp b/test/benchmark.hpp -index bad73ae..13a567f 100644 +index 90763e1..baf9d73 100644 --- a/test/benchmark.hpp +++ b/test/benchmark.hpp @@ -12,7 +12,7 @@ @@ -106,17 +106,18 @@ using unit = std::chrono::nanoseconds; diff --git a/test/default_allocator.cpp b/test/default_allocator.cpp -index c871f73..1941169 100644 +index 4d3ac5d..e3eda40 100644 --- a/test/default_allocator.cpp +++ b/test/default_allocator.cpp -@@ -4,11 +4,11 @@ +@@ -4,12 +4,12 @@ // tests all possible default allocator classes -#include "default_allocator.hpp" +#include - #include + #include + #include -#include "detail/align.hpp" +#include @@ -124,7 +125,7 @@ using namespace foonathan::memory; diff --git a/test/detail/align.cpp b/test/detail/align.cpp -index 0779935..2476f32 100644 +index 7bb2e8e..8516c63 100644 --- a/test/detail/align.cpp +++ b/test/detail/align.cpp @@ -2,7 +2,7 @@ @@ -134,10 +135,10 @@ -#include "detail/align.hpp" +#include - #include + #include diff --git a/test/detail/debug_helpers.cpp b/test/detail/debug_helpers.cpp -index 13fddc2..1465790 100644 +index 48ce6ef..bbfe13e 100644 --- a/test/detail/debug_helpers.cpp +++ b/test/detail/debug_helpers.cpp @@ -2,11 +2,11 @@ @@ -147,7 +148,7 @@ -#include "detail/debug_helpers.hpp" +#include - #include + #include -#include "debugging.hpp" +#include @@ -155,7 +156,7 @@ using namespace foonathan::memory; using namespace detail; diff --git a/test/detail/free_list.cpp b/test/detail/free_list.cpp -index 15cb95d..2fb77fe 100644 +index a1beb94..9863341 100644 --- a/test/detail/free_list.cpp +++ b/test/detail/free_list.cpp @@ -2,16 +2,16 @@ @@ -168,7 +169,7 @@ +#include #include - #include + #include #include #include @@ -180,7 +181,7 @@ using namespace foonathan::memory; using namespace detail; diff --git a/test/detail/free_list_array.cpp b/test/detail/free_list_array.cpp -index ed92975..fec5a17 100644 +index ef35205..1d4fe2e 100644 --- a/test/detail/free_list_array.cpp +++ b/test/detail/free_list_array.cpp @@ -2,13 +2,13 @@ @@ -190,7 +191,7 @@ -#include "detail/free_list_array.hpp" +#include - #include + #include -#include "detail/free_list.hpp" -#include "detail/small_free_list.hpp" @@ -202,7 +203,7 @@ using namespace foonathan::memory; using namespace detail; diff --git a/test/detail/ilog2.cpp b/test/detail/ilog2.cpp -index 2dd7773..51e7bab 100644 +index 816ad8c..e7756f3 100644 --- a/test/detail/ilog2.cpp +++ b/test/detail/ilog2.cpp @@ -2,7 +2,7 @@ @@ -212,10 +213,10 @@ -#include "detail/ilog2.hpp" +#include - #include + #include diff --git a/test/detail/memory_stack.cpp b/test/detail/memory_stack.cpp -index fb3baf9..3be5ec6 100644 +index fdf6e8f..c893a18 100644 --- a/test/detail/memory_stack.cpp +++ b/test/detail/memory_stack.cpp @@ -2,14 +2,14 @@ @@ -225,7 +226,7 @@ -#include "detail/memory_stack.hpp" +#include - #include + #include -#include "detail/align.hpp" -#include "detail/debug_helpers.hpp" @@ -239,7 +240,7 @@ using namespace foonathan::memory; using namespace detail; diff --git a/test/fallback_allocator.cpp b/test/fallback_allocator.cpp -index b0a2036..e3b3f5e 100644 +index aeaff5b..827fc53 100644 --- a/test/fallback_allocator.cpp +++ b/test/fallback_allocator.cpp @@ -2,11 +2,11 @@ @@ -249,7 +250,7 @@ -#include "fallback_allocator.hpp" +#include - #include + #include -#include "allocator_storage.hpp" +#include @@ -257,7 +258,7 @@ using namespace foonathan::memory; diff --git a/test/iteration_allocator.cpp b/test/iteration_allocator.cpp -index cf40969..1c37ac4 100644 +index 93ce93f..265e2c1 100644 --- a/test/iteration_allocator.cpp +++ b/test/iteration_allocator.cpp @@ -2,11 +2,11 @@ @@ -267,7 +268,7 @@ -#include "iteration_allocator.hpp" +#include - #include + #include -#include "allocator_storage.hpp" +#include @@ -275,7 +276,7 @@ using namespace foonathan::memory; diff --git a/test/joint_allocator.cpp b/test/joint_allocator.cpp -index 172cb17..7e6d6a3 100644 +index 3b588be..3e200ec 100644 --- a/test/joint_allocator.cpp +++ b/test/joint_allocator.cpp @@ -2,11 +2,11 @@ @@ -285,7 +286,7 @@ -#include "joint_allocator.hpp" +#include - #include + #include -#include "container.hpp" +#include @@ -293,7 +294,7 @@ using namespace foonathan::memory; diff --git a/test/memory_arena.cpp b/test/memory_arena.cpp -index 14b1664..9bfd7af 100644 +index 203f3f5..17304bb 100644 --- a/test/memory_arena.cpp +++ b/test/memory_arena.cpp @@ -2,11 +2,11 @@ @@ -303,7 +304,7 @@ -#include "memory_arena.hpp" +#include - #include + #include -#include "static_allocator.hpp" +#include @@ -311,7 +312,7 @@ using namespace foonathan::memory; using namespace detail; diff --git a/test/memory_pool.cpp b/test/memory_pool.cpp -index 49bd8d2..d94149d 100644 +index 2abf36c..d2bdfd6 100644 --- a/test/memory_pool.cpp +++ b/test/memory_pool.cpp @@ -2,14 +2,14 @@ @@ -322,7 +323,7 @@ +#include #include - #include + #include #include #include @@ -332,7 +333,7 @@ using namespace foonathan::memory; diff --git a/test/memory_pool_collection.cpp b/test/memory_pool_collection.cpp -index 744de8d..a75d341 100644 +index b3a06b5..5db6c9d 100644 --- a/test/memory_pool_collection.cpp +++ b/test/memory_pool_collection.cpp @@ -2,14 +2,14 @@ @@ -343,7 +344,7 @@ +#include #include - #include + #include #include #include @@ -353,7 +354,7 @@ using namespace foonathan::memory; diff --git a/test/memory_resource_adapter.cpp b/test/memory_resource_adapter.cpp -index 3ecb6a5..259d5d2 100644 +index 1e5d110..7f480e5 100644 --- a/test/memory_resource_adapter.cpp +++ b/test/memory_resource_adapter.cpp @@ -2,13 +2,13 @@ @@ -363,7 +364,7 @@ -#include "memory_resource_adapter.hpp" +#include - #include + #include #include -#include "allocator_storage.hpp" @@ -374,7 +375,7 @@ using namespace foonathan::memory; diff --git a/test/memory_stack.cpp b/test/memory_stack.cpp -index cbf9a22..73055cf 100644 +index c2d614b..2233f38 100644 --- a/test/memory_stack.cpp +++ b/test/memory_stack.cpp @@ -2,11 +2,11 @@ @@ -384,7 +385,7 @@ -#include "memory_stack.hpp" +#include - #include + #include -#include "allocator_storage.hpp" +#include @@ -392,7 +393,7 @@ using namespace foonathan::memory; diff --git a/test/profiling.cpp b/test/profiling.cpp -index b162c42..0dd9ea7 100644 +index 03463ea..075d935 100644 --- a/test/profiling.cpp +++ b/test/profiling.cpp @@ -8,11 +8,11 @@ @@ -413,7 +414,7 @@ using namespace foonathan::memory; diff --git a/test/segregator.cpp b/test/segregator.cpp -index 5979b7d..813b247 100644 +index 29e467d..173898b 100644 --- a/test/segregator.cpp +++ b/test/segregator.cpp @@ -2,7 +2,7 @@ @@ -423,10 +424,10 @@ -#include "segregator.hpp" +#include - #include + #include diff --git a/test/smart_ptr.cpp b/test/smart_ptr.cpp -index 70ecb0b..717630f 100644 +index 69ce909..182befb 100644 --- a/test/smart_ptr.cpp +++ b/test/smart_ptr.cpp @@ -2,12 +2,12 @@ @@ -436,7 +437,7 @@ -#include "smart_ptr.hpp" +#include - #include + #include -#include "container.hpp" -#include "memory_pool.hpp" @@ -445,13 +446,3 @@ using namespace foonathan::memory; -diff --git a/test/test.cpp b/test/test.cpp -index 70541b5..275b7ee 100644 ---- a/test/test.cpp -+++ b/test/test.cpp -@@ -6,4 +6,4 @@ - - #define CATCH_CONFIG_MAIN - #define CATCH_CONFIG_COLOUR_NONE --#include "catch.hpp" -+#include diff -Nru foonathan-memory-0.7/debian/patches/0005-Fix-config.hpp-include.patch foonathan-memory-0.7.1/debian/patches/0005-Fix-config.hpp-include.patch --- foonathan-memory-0.7/debian/patches/0005-Fix-config.hpp-include.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0005-Fix-config.hpp-include.patch 2021-10-12 12:01:32.000000000 +0000 @@ -7,7 +7,7 @@ 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/foonathan/memory/detail/ilog2.hpp b/include/foonathan/memory/detail/ilog2.hpp -index 877bb25..b6d9d26 100644 +index 624027a..c9f7e3a 100644 --- a/include/foonathan/memory/detail/ilog2.hpp +++ b/include/foonathan/memory/detail/ilog2.hpp @@ -8,7 +8,7 @@ diff -Nru foonathan-memory-0.7/debian/patches/0006-Do-not-export-tool.patch foonathan-memory-0.7.1/debian/patches/0006-Do-not-export-tool.patch --- foonathan-memory-0.7/debian/patches/0006-Do-not-export-tool.patch 1970-01-01 00:00:00.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0006-Do-not-export-tool.patch 2021-10-12 12:01:32.000000000 +0000 @@ -0,0 +1,19 @@ +From: =?utf-8?q?Timo_R=C3=B6hling?= +Date: Sat, 5 Dec 2020 00:44:23 +0100 +Subject: Do not export tool + +--- + tool/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt +index df51586..9041573 100644 +--- a/tool/CMakeLists.txt ++++ b/tool/CMakeLists.txt +@@ -23,5 +23,5 @@ if(NOT MSVC) + target_compile_features(foonathan_memory_node_size_debugger PUBLIC cxx_constexpr) + endif() + +-install(TARGETS foonathan_memory_node_size_debugger EXPORT foonathan_memoryTargets ++install(TARGETS foonathan_memory_node_size_debugger + RUNTIME DESTINATION ${FOONATHAN_MEMORY_RUNTIME_INSTALL_DIR}) diff -Nru foonathan-memory-0.7/debian/patches/0006-Fix-install-destination-for-config_impl.hpp.patch foonathan-memory-0.7.1/debian/patches/0006-Fix-install-destination-for-config_impl.hpp.patch --- foonathan-memory-0.7/debian/patches/0006-Fix-install-destination-for-config_impl.hpp.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0006-Fix-install-destination-for-config_impl.hpp.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,21 +0,0 @@ -From: =?utf-8?q?Timo_R=C3=B6hling?= -Date: Sat, 5 Dec 2020 00:42:36 +0100 -Subject: Fix install destination for config_impl.hpp - ---- - src/CMakeLists.txt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 65df8a2..04169d5 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -148,7 +148,7 @@ write_basic_package_version_file(${version_file} - VERSION ${FOONATHAN_MEMORY_VERSION} - COMPATIBILITY AnyNewerVersion) - --install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}) -+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) - install(FILES ${header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory) - install(FILES ${detail_header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) diff -Nru foonathan-memory-0.7/debian/patches/0007-Do-not-export-tool.patch foonathan-memory-0.7.1/debian/patches/0007-Do-not-export-tool.patch --- foonathan-memory-0.7/debian/patches/0007-Do-not-export-tool.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0007-Do-not-export-tool.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,19 +0,0 @@ -From: =?utf-8?q?Timo_R=C3=B6hling?= -Date: Sat, 5 Dec 2020 00:44:23 +0100 -Subject: Do not export tool - ---- - tool/CMakeLists.txt | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tool/CMakeLists.txt b/tool/CMakeLists.txt -index b81ca6d..8732b01 100644 ---- a/tool/CMakeLists.txt -+++ b/tool/CMakeLists.txt -@@ -23,5 +23,5 @@ if(NOT MSVC) - target_compile_features(foonathan_memory_node_size_debugger PUBLIC cxx_constexpr) - endif() - --install(TARGETS foonathan_memory_node_size_debugger EXPORT foonathan_memoryTargets -+install(TARGETS foonathan_memory_node_size_debugger - RUNTIME DESTINATION ${FOONATHAN_MEMORY_RUNTIME_INSTALL_DIR}) diff -Nru foonathan-memory-0.7/debian/patches/0007-Install-header-with-arch-specific-data-to-arch-speci.patch foonathan-memory-0.7.1/debian/patches/0007-Install-header-with-arch-specific-data-to-arch-speci.patch --- foonathan-memory-0.7/debian/patches/0007-Install-header-with-arch-specific-data-to-arch-speci.patch 1970-01-01 00:00:00.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0007-Install-header-with-arch-specific-data-to-arch-speci.patch 2021-10-12 12:01:32.000000000 +0000 @@ -0,0 +1,99 @@ +From: =?utf-8?q?Timo_R=C3=B6hling?= +Date: Sat, 5 Dec 2020 00:55:26 +0100 +Subject: Install header with arch-specific data to arch-specific location + +--- + CMakeLists.txt | 1 + + .../memory/detail/container_node_sizes.hpp | 2 +- + src/CMakeLists.txt | 21 +++++++++++---------- + 3 files changed, 13 insertions(+), 11 deletions(-) + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b1c6774..ebf6759 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -22,6 +22,7 @@ if(UNIX OR VXWORKS) + include(GNUInstallDirs) + + set(FOONATHAN_MEMORY_INC_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/foonathan_memory") ++ set(FOONATHAN_MEMORY_ARCH_INC_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${HOST_TRIPLET}/foonathan_memory") + set(FOONATHAN_MEMORY_RUNTIME_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") + set(FOONATHAN_MEMORY_LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") + set(FOONATHAN_MEMORY_ARCHIVE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") +diff --git a/include/foonathan/memory/detail/container_node_sizes.hpp b/include/foonathan/memory/detail/container_node_sizes.hpp +index ec27b09..49f5f65 100644 +--- a/include/foonathan/memory/detail/container_node_sizes.hpp ++++ b/include/foonathan/memory/detail/container_node_sizes.hpp +@@ -5,6 +5,6 @@ + #ifndef FOONATHAN_MEMORY_DETAIL_CONTAINER_NODE_SIZES_HPP_INCLUDED + #define FOONATHAN_MEMORY_DETAIL_CONTAINER_NODE_SIZES_HPP_INCLUDED + +-#include "container_node_sizes_impl.hpp" ++#include + + #endif //FOONATHAN_MEMORY_DETAIL_CONTAINER_NODE_SIZES_HPP_INCLUDED +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index b4c413d..aca60a6 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -48,8 +48,7 @@ set(header + ${header_path}/temporary_allocator.hpp + ${header_path}/threading.hpp + ${header_path}/tracking.hpp +- ${header_path}/virtual_memory.hpp +- ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp) ++ ${header_path}/virtual_memory.hpp) + + set(src + detail/align.cpp +@@ -79,21 +78,22 @@ configure_file("config.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp") + # generate container_node_sizes.hpp + # don't run it while cross-compiling and CMAKE_CROSSCOMPILING_EMULATOR is not defined + if(FOONATHAN_MEMORY_BUILD_TOOLS) ++ file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail") + if(NOT CMAKE_CROSSCOMPILING) +- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp +- COMMAND $ --code ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp ++ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp ++ COMMAND $ --code ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp + DEPENDS foonathan_memory_node_size_debugger + VERBATIM) + elseif(DEFINED CMAKE_CROSSCOMPILING_EMULATOR) +- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp +- COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ --code ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp ++ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp ++ COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ --code ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp + DEPENDS foonathan_memory_node_size_debugger + VERBATIM) + elseif(QNX OR QNXNTO) + if(EXISTS "${FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL}") + message("-- Using the pre-generated file: ${FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL}") +- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp +- COMMAND cp ${FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL} ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp ) ++ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp ++ COMMAND cp ${FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL} ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp ) + else() + message(FATAL_ERROR "\nError: Cannot find pre-generated file container_node_sizes_impl.hpp\n" + "Please pre-generate the header file container_node_sizes_impl.hpp by following the steps below:\n" +@@ -116,10 +116,11 @@ else() + set(FOONATHAN_MEMORY_NO_NODE_SIZE 1 PARENT_SCOPE) + endif() + +-add_library(foonathan_memory ${detail_header} ${header} ${src}) ++add_library(foonathan_memory ${detail_header} ${header} ${src} ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp) + target_include_directories(foonathan_memory PUBLIC $ # for client in subdirectory + $ # for generated files in build mode + $ # for client in install mode ++ $ # for arch-specific generated headers + PRIVATE ${header_path}) # for source files + target_compile_definitions(foonathan_memory PUBLIC + FOONATHAN_MEMORY=1 +@@ -164,7 +165,7 @@ write_basic_package_version_file(${version_file} + COMPATIBILITY AnyNewerVersion) + + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/) +-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) ++install(FILES ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp DESTINATION ${FOONATHAN_MEMORY_ARCH_INC_INSTALL_DIR}/foonathan/memory/detail) + install(FILES ${header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory) + install(FILES ${detail_header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) + install(FILES ${version_file} DESTINATION ${FOONATHAN_MEMORY_CMAKE_CONFIG_INSTALL_DIR}) diff -Nru foonathan-memory-0.7/debian/patches/0008-Install-header-with-arch-specific-data-to-arch-speci.patch foonathan-memory-0.7.1/debian/patches/0008-Install-header-with-arch-specific-data-to-arch-speci.patch --- foonathan-memory-0.7/debian/patches/0008-Install-header-with-arch-specific-data-to-arch-speci.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0008-Install-header-with-arch-specific-data-to-arch-speci.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -From: =?utf-8?q?Timo_R=C3=B6hling?= -Date: Sat, 5 Dec 2020 00:55:26 +0100 -Subject: Install header with arch-specific data to arch-specific location - ---- - CMakeLists.txt | 1 + - .../memory/detail/container_node_sizes.hpp | 2 +- - src/CMakeLists.txt | 21 +++++++++++---------- - 3 files changed, 13 insertions(+), 11 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 79f3f7d..211eb1f 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -22,6 +22,7 @@ if(UNIX OR VXWORKS) - include(GNUInstallDirs) - - set(FOONATHAN_MEMORY_INC_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/foonathan_memory") -+ set(FOONATHAN_MEMORY_ARCH_INC_INSTALL_DIR "${CMAKE_INSTALL_INCLUDEDIR}/${HOST_TRIPLET}/foonathan_memory") - set(FOONATHAN_MEMORY_RUNTIME_INSTALL_DIR "${CMAKE_INSTALL_BINDIR}") - set(FOONATHAN_MEMORY_LIBRARY_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") - set(FOONATHAN_MEMORY_ARCHIVE_INSTALL_DIR "${CMAKE_INSTALL_LIBDIR}") -diff --git a/include/foonathan/memory/detail/container_node_sizes.hpp b/include/foonathan/memory/detail/container_node_sizes.hpp -index 1f1e700..a981491 100644 ---- a/include/foonathan/memory/detail/container_node_sizes.hpp -+++ b/include/foonathan/memory/detail/container_node_sizes.hpp -@@ -5,6 +5,6 @@ - #ifndef FOONATHAN_MEMORY_DETAIL_CONTAINER_NODE_SIZES_HPP_INCLUDED - #define FOONATHAN_MEMORY_DETAIL_CONTAINER_NODE_SIZES_HPP_INCLUDED - --#include "container_node_sizes_impl.hpp" -+#include - - #endif //FOONATHAN_MEMORY_DETAIL_CONTAINER_NODE_SIZES_HPP_INCLUDED -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 04169d5..bb15e54 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -48,8 +48,7 @@ set(header - ${header_path}/temporary_allocator.hpp - ${header_path}/threading.hpp - ${header_path}/tracking.hpp -- ${header_path}/virtual_memory.hpp -- ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp) -+ ${header_path}/virtual_memory.hpp) - - set(src - detail/align.cpp -@@ -79,21 +78,22 @@ configure_file("config.hpp.in" "${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp") - # generate container_node_sizes.hpp - # don't run it while cross-compiling and CMAKE_CROSSCOMPILING_EMULATOR is not defined - if(FOONATHAN_MEMORY_BUILD_TOOLS) -+ file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail") - if(NOT CMAKE_CROSSCOMPILING) -- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp -- COMMAND $ --code ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp -+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp -+ COMMAND $ --code ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp - DEPENDS foonathan_memory_node_size_debugger - VERBATIM) - elseif(DEFINED CMAKE_CROSSCOMPILING_EMULATOR) -- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp -- COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ --code ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp -+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp -+ COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $ --code ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp - DEPENDS foonathan_memory_node_size_debugger - VERBATIM) - elseif(QNX OR QNXNTO) - if(EXISTS "${FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL}") - message("-- Using the pre-generated file: ${FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL}") -- add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp -- COMMAND cp ${FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL} ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp ) -+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp -+ COMMAND cp ${FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL} ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp ) - else() - message(FATAL_ERROR "\nError: Cannot find pre-generated file container_node_sizes_impl.hpp\n" - "Please pre-generate the header file container_node_sizes_impl.hpp by following the steps below:\n" -@@ -116,10 +116,11 @@ else() - set(FOONATHAN_MEMORY_NO_NODE_SIZE 1 PARENT_SCOPE) - endif() - --add_library(foonathan_memory ${detail_header} ${header} ${src}) -+add_library(foonathan_memory ${detail_header} ${header} ${src} ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp) - target_include_directories(foonathan_memory PUBLIC $ # for client in subdirectory - $ # for generated files in build mode - $ # for client in install mode -+ $ # for arch-specific generated headers - PRIVATE ${header_path}) # for source files - target_compile_definitions(foonathan_memory PUBLIC - FOONATHAN_MEMORY=1 -@@ -149,7 +150,7 @@ write_basic_package_version_file(${version_file} - COMPATIBILITY AnyNewerVersion) - - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory) --install(FILES ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) -+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/foonathan/memory/detail/container_node_sizes_impl.hpp DESTINATION ${FOONATHAN_MEMORY_ARCH_INC_INSTALL_DIR}/foonathan/memory/detail) - install(FILES ${header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory) - install(FILES ${detail_header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) - install(FILES ${version_file} DESTINATION ${FOONATHAN_MEMORY_CMAKE_CONFIG_INSTALL_DIR}) diff -Nru foonathan-memory-0.7/debian/patches/0008-Store-version-number-in-config_impl.hpp.patch foonathan-memory-0.7.1/debian/patches/0008-Store-version-number-in-config_impl.hpp.patch --- foonathan-memory-0.7/debian/patches/0008-Store-version-number-in-config_impl.hpp.patch 1970-01-01 00:00:00.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0008-Store-version-number-in-config_impl.hpp.patch 2021-10-12 12:01:32.000000000 +0000 @@ -0,0 +1,45 @@ +From: =?utf-8?q?Timo_R=C3=B6hling?= +Date: Sat, 5 Dec 2020 00:57:50 +0100 +Subject: Store version number in config_impl.hpp + +--- + src/CMakeLists.txt | 5 +---- + src/config.hpp.in | 9 +++++++++ + 2 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index aca60a6..07419b8 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -123,10 +123,7 @@ target_include_directories(foonathan_memory PUBLIC $ # for arch-specific generated headers + PRIVATE ${header_path}) # for source files + target_compile_definitions(foonathan_memory PUBLIC +- FOONATHAN_MEMORY=1 +- FOONATHAN_MEMORY_VERSION_MAJOR=${FOONATHAN_MEMORY_VERSION_MAJOR} +- FOONATHAN_MEMORY_VERSION_MINOR=${FOONATHAN_MEMORY_VERSION_MINOR} +- FOONATHAN_MEMORY_VERSION_PATCH=${FOONATHAN_MEMORY_VERSION_PATCH}) ++ FOONATHAN_MEMORY=1) + if(NOT MSVC) + target_compile_features(foonathan_memory PUBLIC cxx_constexpr) + endif() +diff --git a/src/config.hpp.in b/src/config.hpp.in +index af65f09..435d70a 100644 +--- a/src/config.hpp.in ++++ b/src/config.hpp.in +@@ -10,6 +10,15 @@ + + //=== options ===// + // clang-format off ++#ifndef FOONATHAN_MEMORY_VERSION_MAJOR ++#define FOONATHAN_MEMORY_VERSION_MAJOR ${FOONATHAN_MEMORY_VERSION_MAJOR} ++#endif ++#ifndef FOONATHAN_MEMORY_VERSION_MINOR ++#define FOONATHAN_MEMORY_VERSION_MINOR ${FOONATHAN_MEMORY_VERSION_MINOR} ++#endif ++#ifndef FOONATHAN_MEMORY_VERSION_PATCH ++#define FOONATHAN_MEMORY_VERSION_PATCH ${FOONATHAN_MEMORY_VERSION_PATCH} ++#endif + #cmakedefine01 FOONATHAN_MEMORY_CHECK_ALLOCATION_SIZE + #define FOONATHAN_MEMORY_IMPL_DEFAULT_ALLOCATOR ${FOONATHAN_MEMORY_DEFAULT_ALLOCATOR} + #cmakedefine01 FOONATHAN_MEMORY_DEBUG_ASSERT diff -Nru foonathan-memory-0.7/debian/patches/0009-Store-version-number-in-config_impl.hpp.patch foonathan-memory-0.7.1/debian/patches/0009-Store-version-number-in-config_impl.hpp.patch --- foonathan-memory-0.7/debian/patches/0009-Store-version-number-in-config_impl.hpp.patch 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0009-Store-version-number-in-config_impl.hpp.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,45 +0,0 @@ -From: =?utf-8?q?Timo_R=C3=B6hling?= -Date: Sat, 5 Dec 2020 00:57:50 +0100 -Subject: Store version number in config_impl.hpp - ---- - src/CMakeLists.txt | 5 +---- - src/config.hpp.in | 9 +++++++++ - 2 files changed, 10 insertions(+), 4 deletions(-) - -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index bb15e54..81cbabe 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -123,10 +123,7 @@ target_include_directories(foonathan_memory PUBLIC $ # for arch-specific generated headers - PRIVATE ${header_path}) # for source files - target_compile_definitions(foonathan_memory PUBLIC -- FOONATHAN_MEMORY=1 -- FOONATHAN_MEMORY_VERSION_MAJOR=${FOONATHAN_MEMORY_VERSION_MAJOR} -- FOONATHAN_MEMORY_VERSION_MINOR=${FOONATHAN_MEMORY_VERSION_MINOR} -- FOONATHAN_MEMORY_VERSION_PATCH=${FOONATHAN_MEMORY_VERSION_PATCH}) -+ FOONATHAN_MEMORY=1) - if(NOT MSVC) - target_compile_features(foonathan_memory PUBLIC cxx_constexpr) - endif() -diff --git a/src/config.hpp.in b/src/config.hpp.in -index af65f09..435d70a 100644 ---- a/src/config.hpp.in -+++ b/src/config.hpp.in -@@ -10,6 +10,15 @@ - - //=== options ===// - // clang-format off -+#ifndef FOONATHAN_MEMORY_VERSION_MAJOR -+#define FOONATHAN_MEMORY_VERSION_MAJOR ${FOONATHAN_MEMORY_VERSION_MAJOR} -+#endif -+#ifndef FOONATHAN_MEMORY_VERSION_MINOR -+#define FOONATHAN_MEMORY_VERSION_MINOR ${FOONATHAN_MEMORY_VERSION_MINOR} -+#endif -+#ifndef FOONATHAN_MEMORY_VERSION_PATCH -+#define FOONATHAN_MEMORY_VERSION_PATCH ${FOONATHAN_MEMORY_VERSION_PATCH} -+#endif - #cmakedefine01 FOONATHAN_MEMORY_CHECK_ALLOCATION_SIZE - #define FOONATHAN_MEMORY_IMPL_DEFAULT_ALLOCATOR ${FOONATHAN_MEMORY_DEFAULT_ALLOCATOR} - #cmakedefine01 FOONATHAN_MEMORY_DEBUG_ASSERT diff -Nru foonathan-memory-0.7/debian/patches/0010-Check-for-libatomic.patch foonathan-memory-0.7.1/debian/patches/0010-Check-for-libatomic.patch --- foonathan-memory-0.7/debian/patches/0010-Check-for-libatomic.patch 2020-12-10 09:20:47.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/0010-Check-for-libatomic.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,65 +0,0 @@ -From: =?utf-8?q?Timo_R=C3=B6hling?= -Date: Mon, 7 Dec 2020 11:10:57 +0100 -Subject: Check for libatomic - ---- - CMakeLists.txt | 1 + - cmake/atomic.cmake | 21 +++++++++++++++++++++ - src/CMakeLists.txt | 4 ++++ - 3 files changed, 26 insertions(+) - create mode 100644 cmake/atomic.cmake - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 211eb1f..bb5fa21 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -45,6 +45,7 @@ else() - endif() - - include(cmake/configuration.cmake) -+include(cmake/atomic.cmake) - - # subdirectories - add_subdirectory(src) -diff --git a/cmake/atomic.cmake b/cmake/atomic.cmake -new file mode 100644 -index 0000000..92f6615 ---- /dev/null -+++ b/cmake/atomic.cmake -@@ -0,0 +1,21 @@ -+# check for atomic library, which is needed on some architectures -+include(CheckCXXSourceCompiles) -+function(check_working_cxx_atomic varname) -+ check_cxx_source_compiles(" -+ #include -+ std::atomic x; -+ int main() { -+ bool y = false; -+ return !x.compare_exchange_strong(y, true); -+ }" ${varname}) -+endfunction() -+check_working_cxx_atomic(HAVE_CXX_ATOMIC) -+if(NOT HAVE_CXX_ATOMIC) -+ set(old_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}") -+ list(APPEND CMAKE_REQUIRED_LIBRARIES "-latomic") -+ check_working_cxx_atomic(NEED_LIBRARY_FOR_CXX_ATOMIC) -+ set(CMAKE_REQUIRED_LIBRARIES "${old_CMAKE_REQUIRED_LIBRARIES}") -+ if(NOT NEED_LIBRARY_FOR_CXX_ATOMIC) -+ message(FATAL_ERROR "Host compiler does not support std::atomic") -+ endif() -+endif() -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 81cbabe..9b83cd2 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -133,6 +133,10 @@ set_target_properties(foonathan_memory PROPERTIES - SOVERSION "${FOONATHAN_MEMORY_SOVERSION}" - POSITION_INDEPENDENT_CODE ON) - -+if(NEED_LIBRARY_FOR_CXX_ATOMIC) -+ target_link_libraries(foonathan_memory PUBLIC -latomic) -+endif() -+ - install(TARGETS foonathan_memory EXPORT foonathan_memoryTargets - RUNTIME DESTINATION ${FOONATHAN_MEMORY_RUNTIME_INSTALL_DIR} - LIBRARY DESTINATION ${FOONATHAN_MEMORY_LIBRARY_INSTALL_DIR} diff -Nru foonathan-memory-0.7/debian/patches/series foonathan-memory-0.7.1/debian/patches/series --- foonathan-memory-0.7/debian/patches/series 2020-12-10 09:20:10.000000000 +0000 +++ foonathan-memory-0.7.1/debian/patches/series 2021-10-12 12:01:32.000000000 +0000 @@ -1,10 +1,8 @@ -0001-Use-system-Catch2.patch +0001-Use-system-doctest.patch 0002-Fix-installation-destination-for-CMake-script.patch 0003-Set-proper-library-version.patch 0004-Fix-includes-so-unit-tests-can-be-run-in-autopkgtest.patch 0005-Fix-config.hpp-include.patch -0006-Fix-install-destination-for-config_impl.hpp.patch -0007-Do-not-export-tool.patch -0008-Install-header-with-arch-specific-data-to-arch-speci.patch -0009-Store-version-number-in-config_impl.hpp.patch -0010-Check-for-libatomic.patch +0006-Do-not-export-tool.patch +0007-Install-header-with-arch-specific-data-to-arch-speci.patch +0008-Store-version-number-in-config_impl.hpp.patch diff -Nru foonathan-memory-0.7/debian/rules foonathan-memory-0.7.1/debian/rules --- foonathan-memory-0.7/debian/rules 2020-12-10 09:20:03.000000000 +0000 +++ foonathan-memory-0.7.1/debian/rules 2021-10-12 12:31:19.000000000 +0000 @@ -7,20 +7,47 @@ ENABLE_TESTING = $(if $(filter nocheck,$(DEB_BUILD_OPTIONS)),OFF,ON) +# Unfortunately, foonathan-memory needs to run a host binary to determine +# the (otherwise not accessible) sizes of the internal allocations for +# various STL containers. This is not particularly elegant, but it works. +ifneq ($(filter cross,$(DEB_BUILD_PROFILES)),) +QEMU_ARCH = $(DEB_HOST_ARCH) +ifneq ($(filter armhf armel,$(DEB_HOST_ARCH)),) +QEMU_ARCH = arm +endif +ifneq ($(filter ppc64el,$(DEB_HOST_ARCH)),) +QEMU_ARCH = ppc64le +endif +ifneq ($(filter powerpc,$(DEB_HOST_ARCH)),) +QEMU_ARCH = ppc +endif +ifneq ($(filter arm64,$(DEB_HOST_ARCH)),) +QEMU_ARCH = aarch64 +endif +ifneq ($(filter amd64,$(DEB_HOST_ARCH)),) +QEMU_ARCH = x86_64 +endif +ifneq ($(shell command -v qemu-$(QEMU_ARCH)-static),) +CROSSCOMPILING_EMULATOR = -DCMAKE_CROSSCOMPILING_EMULATOR=qemu-$(QEMU_ARCH)-static +endif +endif + %: - dh $@ --buildsystem=cmake --with pkgkde_symbolshelper + dh $@ --buildsystem=cmake override_dh_auto_configure: dh_auto_configure --buildsystem=cmake -- \ + $(CROSSCOMPILING_EMULATOR) \ -DBUILD_SHARED_LIBS=ON \ -DHOST_TRIPLET=$(DEB_HOST_MULTIARCH) \ -DFOONATHAN_MEMORY_BUILD_TESTS=$(ENABLE_TESTING) \ -DFOONATHAN_MEMORY_BUILD_EXAMPLES=OFF \ - -DFOONATHAN_MEMORY_BUILD_TOOLS=ON \ - -DFOONATHAN_MEMORY_SOVERSION=0d + -DFOONATHAN_MEMORY_BUILD_TOOLS=ON execute_after_dh_auto_build-indep: - [ -n "$(filter nodoc,$(DEB_BUILD_OPTIONS))" ] || doxygen doc/Doxyfile +ifeq ($(filter nodoc,$(DEB_BUILD_OPTIONS)),) + doxygen doc/Doxyfile +endif execute_after_dh_auto_install: rm debian/tmp/usr/share/foonathan_memory/LICENSE \ @@ -28,4 +55,6 @@ debian/tmp/usr/bin/nodesize_dbg execute_after_dh_installdocs-indep: - [ -n "$(filter nodoc,$(DEB_BUILD_OPTIONS))" ] || dh_doxygen +ifeq ($(filter nodoc,$(DEB_BUILD_OPTIONS)),) + dh_doxygen +endif diff -Nru foonathan-memory-0.7/debian/tests/build-and-run-test-suite foonathan-memory-0.7.1/debian/tests/build-and-run-test-suite --- foonathan-memory-0.7/debian/tests/build-and-run-test-suite 2020-12-10 09:20:03.000000000 +0000 +++ foonathan-memory-0.7.1/debian/tests/build-and-run-test-suite 2021-10-12 12:01:32.000000000 +0000 @@ -12,7 +12,7 @@ project(build_and_run_test_suite) find_package(foonathan_memory REQUIRED) -find_package(Catch2 REQUIRED) +find_package(doctest REQUIRED) add_executable(memory_test test_allocator.hpp @@ -37,8 +37,7 @@ segregator.cpp smart_ptr.cpp ) -target_include_directories(memory_test PRIVATE /usr/include/catch2) -target_link_libraries(memory_test PRIVATE foonathan_memory Catch2::Catch2) +target_link_libraries(memory_test PRIVATE foonathan_memory doctest::doctest) EOF echo "8<--- snip ----------------------------------" cd "$tmpdir" diff -Nru foonathan-memory-0.7/debian/tests/control foonathan-memory-0.7.1/debian/tests/control --- foonathan-memory-0.7/debian/tests/control 2020-12-10 09:20:03.000000000 +0000 +++ foonathan-memory-0.7.1/debian/tests/control 2021-10-12 12:01:32.000000000 +0000 @@ -1,3 +1,3 @@ Tests: build-and-run-test-suite -Depends: libfoonathan-memory-dev, cmake, catch2, g++ +Depends: libfoonathan-memory-dev, cmake, doctest-dev, g++ Restrictions: allow-stderr diff -Nru foonathan-memory-0.7/debian/upstream/metadata foonathan-memory-0.7.1/debian/upstream/metadata --- foonathan-memory-0.7/debian/upstream/metadata 2020-12-10 09:20:03.000000000 +0000 +++ foonathan-memory-0.7.1/debian/upstream/metadata 2021-10-12 12:01:32.000000000 +0000 @@ -1,2 +1,4 @@ -Repository: https://github.com/foonathan/memory +Bug-Submit: https://github.com/foonathan/memory/issues/new +Repository: https://github.com/foonathan/memory.git Bug-Database: https://github.com/foonathan/memory/issues +Repository-Browse: https://github.com/foonathan/memory diff -Nru foonathan-memory-0.7/doc/Doxyfile foonathan-memory-0.7.1/doc/Doxyfile --- foonathan-memory-0.7/doc/Doxyfile 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/doc/Doxyfile 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -# Doxyfile 1.8.18 +# Doxyfile 1.9.2 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -93,14 +93,6 @@ OUTPUT_LANGUAGE = English -# The OUTPUT_TEXT_DIRECTION tag is used to specify the direction in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all generated output in the proper direction. -# Possible values are: None, LTR, RTL and Context. -# The default value is: None. - -OUTPUT_TEXT_DIRECTION = None - # If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member # descriptions after the members that are listed in the file and class # documentation (similar to Javadoc). Set to NO to disable this. @@ -228,6 +220,14 @@ MULTILINE_CPP_IS_BRIEF = NO +# By default Python docstrings are displayed as preformatted text and doxygen's +# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the +# doxygen's special commands can be used and the contents of the docstring +# documentation blocks is shown as doxygen documentation. +# The default value is: YES. + +PYTHON_DOCSTRING = YES + # If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the # documentation from any documented member that it re-implements. # The default value is: YES. @@ -251,16 +251,16 @@ # the documentation. An alias has the form: # name=value # For example adding -# "sideeffect=@par Side Effects:\n" +# "sideeffect=@par Side Effects:^^" # will allow you to put the command \sideeffect (or @sideeffect) in the # documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines (in the resulting output). You can put ^^ in the value part of an -# alias to insert a newline as if a physical newline was in the original file. -# When you need a literal { or } or , in the value part of an alias you have to -# escape them by means of a backslash (\), this can lead to conflicts with the -# commands \{ and \} for these it is advised to use the version @{ and @} or use -# a double escape (\\{ and \\}) +# "Side Effects:". Note that you cannot put \n's in the value part of an alias +# to insert newlines (in the resulting output). You can put ^^ in the value part +# of an alias to insert a newline as if a physical newline was in the original +# file. When you need a literal { or } or , in the value part of an alias you +# have to escape them by means of a backslash (\), this can lead to conflicts +# with the commands \{ and \} for these it is advised to use the version @{ and +# @} or use a double escape (\\{ and \\}) ALIASES = "effects=\par Effects:^^" \ "returns=\par Returns:^^" \ @@ -312,8 +312,8 @@ # extension. Doxygen has a built-in mapping, but you can override or extend it # using this tag. The format is ext=language, where ext is a file extension, and # language is one of the parsers supported by doxygen: IDL, Java, JavaScript, -# Csharp (C#), C, C++, D, PHP, md (Markdown), Objective-C, Python, Slice, VHDL, -# Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: +# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice, +# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran: # FortranFree, unknown formatted Fortran: Fortran. In the later case the parser # tries to guess whether the code is fixed or free formatted code, this is the # default for Fortran type files). For instance to make doxygen treat .inc files @@ -323,7 +323,10 @@ # Note: For files without extension you can use no_extension as a placeholder. # # Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. +# the files are not read by doxygen. When specifying no_extension you should add +# * to the FILE_PATTERNS. +# +# Note see also the list of default file extension mappings. EXTENSION_MAPPING = @@ -457,6 +460,19 @@ LOOKUP_CACHE_SIZE = 2 +# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# during processing. When set to 0 doxygen will based this on the number of +# cores available in the system. You can set it explicitly to a value larger +# than 0 to get more control over the balance between CPU load and processing +# speed. At this moment only the input processing can be done using multiple +# threads. Since this is still an experimental feature the default is set to 1, +# which effectively disables parallel processing. Please report any issues you +# encounter. Generating dot graphs in parallel is controlled by the +# DOT_NUM_THREADS setting. +# Minimum value: 0, maximum value: 32, default value: 1. + +NUM_PROC_THREADS = 1 + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -520,6 +536,13 @@ EXTRACT_ANON_NSPACES = NO +# If this flag is set to YES, the name of an unnamed parameter in a declaration +# will be determined by the corresponding definition. By default unnamed +# parameters remain unnamed in the output. +# The default value is: YES. + +RESOLVE_UNNAMED_PARAMS = YES + # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all # undocumented members inside documented classes or files. If set to NO these # members will be included in the various overviews, but no documentation @@ -557,11 +580,18 @@ INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# (including Cygwin) ands Mac users are advised to set this option to NO. +# With the correct setting of option CASE_SENSE_NAMES doxygen will better be +# able to match the capabilities of the underlying filesystem. In case the +# filesystem is case sensitive (i.e. it supports files in the same directory +# whose names only differ in casing), the option must be set to YES to properly +# deal with such files in case they appear in the input. For filesystems that +# are not case sensitive the option should be be set to NO to properly deal with +# output files written for symbols that only differ in casing, such as for two +# classes, one named CLASS and the other named Class, and to also support +# references to files without having to specify the exact matching casing. On +# Windows (including Cygwin) and MacOS, users should typically set this option +# to NO, whereas on Linux or other Unix flavors it should typically be set to +# YES. # The default value is: system dependent. CASE_SENSE_NAMES = NO @@ -580,6 +610,12 @@ HIDE_COMPOUND_REFERENCE= NO +# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class +# will show which file needs to be included to use the class. +# The default value is: YES. + +SHOW_HEADERFILE = YES + # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of # the files that are included by a file in the documentation of that file. # The default value is: YES. @@ -737,7 +773,8 @@ # output files in an output format independent way. To create the layout file # that represents doxygen's defaults, run doxygen with the -l option. You can # optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. +# will be used as the name of the layout file. See also section "Changing the +# layout of pages" for information. # # Note that if you run doxygen from a directory containing a file called # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE @@ -783,24 +820,35 @@ WARN_IF_UNDOCUMENTED = NO # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. +# potential errors in the documentation, such as documenting some parameters in +# a documented function twice, or documenting parameters that don't exist or +# using markup commands wrongly. # The default value is: YES. WARN_IF_DOC_ERROR = YES +# If WARN_IF_INCOMPLETE_DOC is set to YES, doxygen will warn about incomplete +# function parameter documentation. If set to NO, doxygen will accept that some +# parameters have no documentation without warning. +# The default value is: YES. + +WARN_IF_INCOMPLETE_DOC = YES + # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that # are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. If -# EXTRACT_ALL is set to YES then this flag will automatically be disabled. +# value. If set to NO, doxygen will only warn about wrong parameter +# documentation, but not about the absence of documentation. If EXTRACT_ALL is +# set to YES then this flag will automatically be disabled. See also +# WARN_IF_INCOMPLETE_DOC # The default value is: NO. WARN_NO_PARAMDOC = NO # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. +# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS +# then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but +# at the end of the doxygen process doxygen will return with a non-zero status. +# Possible values are: NO, YES and FAIL_ON_WARNINGS. # The default value is: NO. WARN_AS_ERROR = NO @@ -836,8 +884,8 @@ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: https://www.gnu.org/software/libiconv/) for the list of -# possible encodings. +# documentation (see: +# https://www.gnu.org/software/libiconv/) for the list of possible encodings. # The default value is: UTF-8. INPUT_ENCODING = UTF-8 @@ -850,12 +898,14 @@ # need to set EXTENSION_MAPPING for the extension otherwise the files are not # read by doxygen. # +# Note the list of default checked file patterns might differ from the list of +# default file extension mappings. +# # If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, # *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C comment), -# *.doc (to be provided as doxygen C comment), *.txt (to be provided as doxygen -# C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, +# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, +# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C +# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, # *.vhdl, *.ucf, *.qsf and *.ice. FILE_PATTERNS = *.hpp \ @@ -1088,13 +1138,6 @@ ALPHABETICAL_INDEX = YES -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - # In case all classes in a project start with a common prefix, all classes will # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag # can be used to specify a prefix (or a list of prefixes) that should be ignored @@ -1194,7 +1237,7 @@ # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see +# this color. Hue is specified as an angle on a color-wheel, see # https://en.wikipedia.org/wiki/Hue for more information. For instance the value # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 # purple, and 360 is red again. @@ -1204,7 +1247,7 @@ HTML_COLORSTYLE_HUE = 220 # The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A +# in the HTML output. For a value of 0 the output will use gray-scales only. A # value of 255 will produce the most vivid colors. # Minimum value: 0, maximum value: 255, default value: 100. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1265,10 +1308,11 @@ # If the GENERATE_DOCSET tag is set to YES, additional index files will be # generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: https://developer.apple.com/xcode/), introduced with OSX -# 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in +# environment (see: +# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To +# create a documentation set, doxygen will generate a Makefile in the HTML +# output directory. Running make will produce the docset in that directory and +# running make install will install the docset in # ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at # startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy # genXcode/_index.html for more information. @@ -1310,8 +1354,12 @@ # If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three # additional HTML index files: index.hhp, index.hhc, and index.hhk. The # index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: https://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. +# on Windows. In the beginning of 2021 Microsoft took the original page, with +# a.o. the download links, offline the HTML help workshop was already many years +# in maintenance mode). You can download the HTML help workshop from the web +# archives at Installation executable (see: +# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo +# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe). # # The HTML Help Workshop contains a compiler that can convert all HTML output # generated by doxygen into a single compiled HTML file (.chm). Compiled HTML @@ -1341,7 +1389,7 @@ HHC_LOCATION = # The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). +# (YES) or that it should be included in the main .chm file (NO). # The default value is: NO. # This tag requires that the tag GENERATE_HTMLHELP is set to YES. @@ -1386,7 +1434,8 @@ # The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help # Project output. For more information please see Qt Help Project / Namespace -# (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). +# (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace). # The default value is: org.doxygen.Project. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1394,8 +1443,8 @@ # The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt # Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual- -# folders). +# Folders (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders). # The default value is: doc. # This tag requires that the tag GENERATE_QHP is set to YES. @@ -1403,16 +1452,16 @@ # If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom # filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = # The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the # custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom- -# filters). +# Filters (see: +# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters). # This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = @@ -1424,9 +1473,9 @@ QHP_SECT_FILTER_ATTRS = -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. +# The QHG_LOCATION tag can be used to specify the location (absolute path +# including file name) of Qt's qhelpgenerator. If non-empty doxygen will try to +# run qhelpgenerator on the generated .qhp file. # This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = @@ -1469,16 +1518,28 @@ # to work a browser that supports JavaScript, DHTML, CSS and frames is required # (i.e. any modern browser). Windows users are probably better off using the # HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. +# further fine tune the look of the index (see "Fine-tuning the output"). As an +# example, the default style sheet generated by doxygen has an example that +# shows how to put an image at the root of the tree instead of the PROJECT_NAME. +# Since the tree basically has the same information as the tab index, you could +# consider setting DISABLE_INDEX to YES when enabling this option. # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO +# When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the +# FULL_SIDEBAR option determines if the side bar is limited to only the treeview +# area (value NO) or if it should extend to the full height of the window (value +# YES). Setting this to YES gives a layout similar to +# https://docs.readthedocs.io with more room for contents, but less room for the +# project logo, title, and description. If either GENERATOR_TREEVIEW or +# DISABLE_INDEX is set to NO, this option has no effect. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FULL_SIDEBAR = NO + # The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that # doxygen will group on one line in the generated HTML documentation. # @@ -1507,8 +1568,8 @@ # tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see # https://inkscape.org) to generate formulas as SVG images instead of PNGs for # the HTML output. These images will generally look nicer at scaled resolutions. -# Possible values are: png The default and svg Looks nicer but requires the -# pdf2svg tool. +# Possible values are: png (the default) and svg (looks nicer but requires the +# pdf2svg or inkscape tool). # The default value is: png. # This tag requires that the tag GENERATE_HTML is set to YES. @@ -1551,11 +1612,29 @@ USE_MATHJAX = NO +# With MATHJAX_VERSION it is possible to specify the MathJax version to be used. +# Note that the different versions of MathJax have different requirements with +# regards to the different settings, so it is possible that also other MathJax +# settings have to be changed when switching between the different MathJax +# versions. +# Possible values are: MathJax_2 and MathJax_3. +# The default value is: MathJax_2. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_VERSION = MathJax_2 + # When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. +# the MathJax output. For more details about the output format see MathJax +# version 2 (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3 +# (see: +# http://docs.mathjax.org/en/latest/web/components/output.html). # Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. +# compatibility. This is the name for Mathjax version 2, for MathJax version 3 +# this will be translated into chtml), NativeMML (i.e. MathML. Only supported +# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# is the name for Mathjax version 3, for MathJax version 2 this will be +# translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1568,22 +1647,29 @@ # MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax # Content Delivery Network so you can quickly see the result without installing # MathJax. However, it is strongly recommended to install a local copy of -# MathJax from https://www.mathjax.org before deployment. -# The default value is: https://cdn.jsdelivr.net/npm/mathjax@2. +# MathJax from https://www.mathjax.org before deployment. The default value is: +# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2 +# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# For example for MathJax version 3 (see +# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): +# MATHJAX_EXTENSIONS = ams # This tag requires that the tag USE_MATHJAX is set to YES. MATHJAX_EXTENSIONS = # The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces # of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# (see: +# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an # example see the documentation. # This tag requires that the tag USE_MATHJAX is set to YES. @@ -1630,7 +1716,8 @@ # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). +# Xapian (see: +# https://xapian.org/). # # See the section "External Indexing and Searching" for details. # The default value is: NO. @@ -1643,8 +1730,9 @@ # # Doxygen ships with an example indexer (doxyindexer) and search engine # (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: https://xapian.org/). See the section "External Indexing and -# Searching" for details. +# Xapian (see: +# https://xapian.org/). See the section "External Indexing and Searching" for +# details. # This tag requires that the tag SEARCHENGINE is set to YES. SEARCHENGINE_URL = @@ -1753,29 +1841,31 @@ EXTRA_PACKAGES = -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. -# -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. +# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for +# the generated LaTeX document. The header should contain everything until the +# first chapter. If it is left blank doxygen will generate a standard header. It +# is highly recommended to start with a default header using +# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty +# and then modify the file new_header.tex. See also section "Doxygen usage" for +# information on how to generate the default header that doxygen normally uses. +# +# Note: Only use a user-defined header if you know what you are doing! +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. The following +# commands have a special meaning inside the header (and footer): For a +# description of the possible markers and block names see the documentation. # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_HEADER = -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See +# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for +# the generated LaTeX document. The footer should contain everything after the +# last chapter. If it is left blank doxygen will generate a standard footer. See # LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! +# special commands can be used inside the footer. See also section "Doxygen +# usage" for information on how to generate the default footer that doxygen +# normally uses. Note: Only use a user-defined footer if you know what you are +# doing! # This tag requires that the tag GENERATE_LATEX is set to YES. LATEX_FOOTER = @@ -1808,9 +1898,11 @@ PDF_HYPERLINKS = YES -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. +# If the USE_PDFLATEX tag is set to YES, doxygen will use the engine as +# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX +# files. Set this option to YES, to get a higher quality PDF documentation. +# +# See also section LATEX_CMD_NAME for selecting the engine. # The default value is: YES. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1818,8 +1910,7 @@ # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode # command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. +# if errors occur, instead of asking the user for help. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1832,16 +1923,6 @@ LATEX_HIDE_INDICES = NO -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - # The LATEX_BIB_STYLE tag can be used to specify the style to use for the # bibliography, e.g. plainnat, or ieeetr. See # https://en.wikipedia.org/wiki/BibTeX and \cite for more info. @@ -1922,16 +2003,6 @@ RTF_EXTENSIONS_FILE = -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_SOURCE_CODE = NO - #--------------------------------------------------------------------------- # Configuration options related to the man page output #--------------------------------------------------------------------------- @@ -2028,15 +2099,6 @@ DOCBOOK_OUTPUT = docbook -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - #--------------------------------------------------------------------------- # Configuration options for the AutoGen Definitions output #--------------------------------------------------------------------------- @@ -2148,11 +2210,12 @@ FOONATHAN_NOEXCEPT:=noexcept \ FOONATHAN_SFINAE(x):= \ FOONATHAN_REQUIRES(x):= \ - FOONATHAN_REQUIRES_RET(x,r):= \ + FOONATHAN_REQUIRES_RET(...):= \ + FOONATHAN_ENABLE_IF(...):= \ FOONATHAN_CONSTEXPR:=constexpr \ FOONATHAN_CONSTEXPR_FNC:=constexpr \ - FOONATHAN_IMPL_DEFINED():=implementation_defined \ - FOONATHAN_EBO():= + FOONATHAN_IMPL_DEFINED(...):=implementation_defined \ + FOONATHAN_EBO(...):= # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this # tag can be used to specify a list of macro names that should be expanded. The @@ -2329,10 +2392,32 @@ # but if the number exceeds 15, the total amount of fields shown is limited to # 10. # Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. +# This tag requires that the tag UML_LOOK is set to YES. UML_LIMIT_NUM_FIELDS = 10 +# If the DOT_UML_DETAILS tag is set to NO, doxygen will show attributes and +# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS +# tag is set to YES, doxygen will add type and arguments for attributes and +# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, doxygen +# will not generate fields with class member information in the UML graphs. The +# class diagrams will look similar to the default class diagrams but using UML +# notation for the relationships. +# Possible values are: NO, YES and NONE. +# The default value is: NO. +# This tag requires that the tag UML_LOOK is set to YES. + +DOT_UML_DETAILS = NO + +# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters +# to display on a single line. If the actual line length exceeds this threshold +# significantly it will wrapped across multiple lines. Some heuristics are apply +# to avoid ugly line breaks. +# Minimum value: 0, maximum value: 1000, default value: 17. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_WRAP_THRESHOLD = 17 + # If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and # collaboration graphs will show the relations between templates and their # instances. @@ -2522,9 +2607,11 @@ GENERATE_LEGEND = YES -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate # files that are used to generate the various graphs. +# +# Note: This setting is not only used for dot files but also for msc temporary +# files. # The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. DOT_CLEANUP = YES diff -Nru foonathan-memory-0.7/doc/index.md foonathan-memory-0.7.1/doc/index.md --- foonathan-memory-0.7/doc/index.md 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/doc/index.md 2021-09-05 17:18:55.000000000 +0000 @@ -178,7 +178,7 @@ 5. Call `target_link_libraries(your_target PUBLIC foonathan_memory)` and activate C++11 to link to the library. -See http://foonathan.github.io/doc/memory/md_doc_installation.html for a detailed guide. +See https://memory.foonathan.net/md_doc_installation.html for a detailed guide. ## About this documentation diff -Nru foonathan-memory-0.7/example/allocator_storage.cpp foonathan-memory-0.7.1/example/allocator_storage.cpp --- foonathan-memory-0.7/example/allocator_storage.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/example/allocator_storage.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,9 +1,9 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. // this example shows how to store allocators by reference and type-erased -// see http://foonathan.github.io/doc/memory/md_doc_adapters_storage.html for further details +// see https://memory.foonathan.net/md_doc_adapters_storage.html for further details #include #include diff -Nru foonathan-memory-0.7/example/CMakeLists.txt foonathan-memory-0.7.1/example/CMakeLists.txt --- foonathan-memory-0.7/example/CMakeLists.txt 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/example/CMakeLists.txt 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Jonathan Müller +# Copyright (C) 2015-2021 Müller # This file is subject to the license terms in the LICENSE file # found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/example/joint_allocation.cpp foonathan-memory-0.7.1/example/joint_allocation.cpp --- foonathan-memory-0.7/example/joint_allocation.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/example/joint_allocation.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/example/taking_allocators.cpp foonathan-memory-0.7.1/example/taking_allocators.cpp --- foonathan-memory-0.7/example/taking_allocators.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/example/taking_allocators.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,10 +1,10 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. // this example provides two implementation of a deep_copy_ptr that performs a copy when copying the pointer // the first version takes an Allocator the second a RawAllocator -// see http://foonathan.github.io/doc/memory/md_doc_internal_usage.html for a step-by-step walkthrough +// see https://memory.foonathan.net/md_doc_internal_usage.html for a step-by-step walkthrough // I know the class is pretty dumb and not that great designed (copy performs deep copy, move invalidates), but that's not that the point #include @@ -44,8 +44,8 @@ { } - deep_copy_ptr(deep_copy_ptr&& other) noexcept : allocator_type(std::move(other)), - ptr_(other.ptr_) + deep_copy_ptr(deep_copy_ptr&& other) noexcept + : allocator_type(std::move(other)), ptr_(other.ptr_) { other.ptr_ = nullptr; } @@ -163,7 +163,7 @@ typename traits::pointer ptr_; }; -} +} // namespace using_std_allocator namespace using_raw_allocator { @@ -171,8 +171,8 @@ class RawAllocator = memory::default_allocator> // default allocator type, usually heap_allocator class deep_copy_ptr - : memory:: - allocator_reference // store the allocator by reference to allow sharing and copying + : memory::allocator_reference< + RawAllocator> // store the allocator by reference to allow sharing and copying // for stateless allocators like default_allocator, it does not store an actual reference // and can take a temporary, for stateful, the allocator must outlive the reference { @@ -192,12 +192,10 @@ { } - deep_copy_ptr(const deep_copy_ptr& other) : allocator_ref(other), ptr_(create(*other)) - { - } + deep_copy_ptr(const deep_copy_ptr& other) : allocator_ref(other), ptr_(create(*other)) {} - deep_copy_ptr(deep_copy_ptr&& other) noexcept : allocator_ref(std::move(other)), - ptr_(other.ptr_) + deep_copy_ptr(deep_copy_ptr&& other) noexcept + : allocator_ref(std::move(other)), ptr_(other.ptr_) { other.ptr_ = nullptr; } @@ -285,7 +283,7 @@ T* ptr_; }; -} +} // namespace using_raw_allocator // simple usage functions diff -Nru foonathan-memory-0.7/example/tracking.cpp foonathan-memory-0.7.1/example/tracking.cpp --- foonathan-memory-0.7/example/tracking.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/example/tracking.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,9 +1,9 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. // this example shows how to track allocations -// see https://foonathan.net/memory/md_doc_adapters_storage.html for further details +// see https://memory.foonathan.net/md_doc_adapters_storage.html for further details #include diff -Nru foonathan-memory-0.7/example/using_allocators.cpp foonathan-memory-0.7.1/example/using_allocators.cpp --- foonathan-memory-0.7/example/using_allocators.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/example/using_allocators.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,9 +1,9 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. // this examples shows the basic usage of RawAllocator classes with containers and smart pointers -// see http://foonathan.github.io/doc/memory/md_doc_external_usage.html for more details +// see https://memory.foonathan.net/md_doc_external_usage.html for more details #include #include diff -Nru foonathan-memory-0.7/.github/workflows/feature_ci.yml foonathan-memory-0.7.1/.github/workflows/feature_ci.yml --- foonathan-memory-0.7/.github/workflows/feature_ci.yml 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/.github/workflows/feature_ci.yml 2021-09-05 17:18:55.000000000 +0000 @@ -2,7 +2,7 @@ on: push: - branches-ignore: ['master'] + branches-ignore: ['main'] pull_request: jobs: @@ -71,14 +71,13 @@ - name: Create Build Environment run: cmake -E make_directory build - - name: Configure and build - uses: lukka/run-cmake@main - with: - cmakeGenerator: 'Ninja' - cmakeListsOrSettingsJson: 'CMakeListsTxtBasic' - cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt' - useVcpkgToolchainFile: true - buildDirectory: 'build/' + - name: Configure + shell: bash + working-directory: build/ + run: cmake $GITHUB_WORKSPACE -G"Visual Studio 16 2019" + - name: Build + working-directory: build/ + run: cmake --build . --config Debug - name: Test working-directory: build/ run: ctest -C Debug --output-on-failure diff -Nru foonathan-memory-0.7/.github/workflows/main_ci.yml foonathan-memory-0.7.1/.github/workflows/main_ci.yml --- foonathan-memory-0.7/.github/workflows/main_ci.yml 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/.github/workflows/main_ci.yml 2021-09-05 17:18:55.000000000 +0000 @@ -2,7 +2,7 @@ on: push: - branches: [master] + branches: [main] jobs: linux: @@ -88,15 +88,14 @@ - name: Create Build Environment run: cmake -E make_directory build - - name: Configure and build - uses: lukka/run-cmake@main - with: - cmakeGenerator: 'Ninja' - cmakeListsOrSettingsJson: 'CMakeListsTxtBasic' - cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt' - useVcpkgToolchainFile: true - buildDirectory: 'build/' + - name: Configure + shell: bash + working-directory: build/ + run: cmake $GITHUB_WORKSPACE -G"Visual Studio 16 2019" + - name: Build + working-directory: build/ + run: cmake --build . --config ${{matrix.build_type}} - name: Test working-directory: build/ - run: ctest -C Debug --output-on-failure + run: ctest -C ${{matrix.build_type}} --output-on-failure diff -Nru foonathan-memory-0.7/include/foonathan/memory/aligned_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/aligned_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/aligned_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/aligned_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/allocator_storage.hpp foonathan-memory-0.7.1/include/foonathan/memory/allocator_storage.hpp --- foonathan-memory-0.7/include/foonathan/memory/allocator_storage.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/allocator_storage.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -744,6 +744,14 @@ alloc.clone(&storage_); } + /// \effects Creates it from the internal base class for the type-erasure. + /// Has the same effect as if the actual stored allocator were passed to the other constructor overloads. + /// \note This constructor is used internally to avoid double-nesting. + reference_storage(FOONATHAN_IMPL_DEFINED(base_allocator) & alloc) noexcept + : reference_storage(static_cast(alloc)) + { + } + /// @{ /// \effects Copies the \c reference_storage object. /// It only copies the pointer to the allocator. diff -Nru foonathan-memory-0.7/include/foonathan/memory/allocator_traits.hpp foonathan-memory-0.7.1/include/foonathan/memory/allocator_traits.hpp --- foonathan-memory-0.7/include/foonathan/memory/allocator_traits.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/allocator_traits.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/config.hpp foonathan-memory-0.7.1/include/foonathan/memory/config.hpp --- foonathan-memory-0.7/include/foonathan/memory/config.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/config.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/container.hpp foonathan-memory-0.7.1/include/foonathan/memory/container.hpp --- foonathan-memory-0.7/include/foonathan/memory/container.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/container.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/debugging.hpp foonathan-memory-0.7.1/include/foonathan/memory/debugging.hpp --- foonathan-memory-0.7/include/foonathan/memory/debugging.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/debugging.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/default_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/default_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/default_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/default_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/deleter.hpp foonathan-memory-0.7.1/include/foonathan/memory/deleter.hpp --- foonathan-memory-0.7/include/foonathan/memory/deleter.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/deleter.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/align.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/align.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/align.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/align.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/assert.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/assert.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/assert.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/assert.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/container_node_sizes.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/container_node_sizes.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/container_node_sizes.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/container_node_sizes.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/debug_helpers.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/debug_helpers.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/debug_helpers.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/debug_helpers.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/ebo_storage.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/ebo_storage.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/ebo_storage.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/ebo_storage.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/free_list_array.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/free_list_array.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/free_list_array.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/free_list_array.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/free_list.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/free_list.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/free_list.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/free_list.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -29,12 +29,19 @@ // alignment static constexpr auto min_element_alignment = alignof(char*); + // minimal size of the block that needs to be inserted + static constexpr std::size_t min_block_size(std::size_t node_size, + std::size_t number_of_nodes) + { + return (node_size < min_element_size ? min_element_size : node_size) + * number_of_nodes; + } + //=== constructor ===// free_memory_list(std::size_t node_size) noexcept; // calls other constructor plus insert - free_memory_list(std::size_t node_size, void* mem, - std::size_t size) noexcept; + free_memory_list(std::size_t node_size, void* mem, std::size_t size) noexcept; free_memory_list(free_memory_list&& other) noexcept; ~free_memory_list() noexcept = default; @@ -54,7 +61,8 @@ // i.e. how many memory will be actually inserted and usable on a call to insert() std::size_t usable_size(std::size_t size) const noexcept { - return size; + // Round down to next multiple of node size. + return (size / node_size_) * node_size_; } // returns a single block from the list @@ -92,8 +100,7 @@ } private: - std::size_t fence_size() const noexcept; - void insert_impl(void* mem, std::size_t size) noexcept; + void insert_impl(void* mem, std::size_t size) noexcept; char* first_; std::size_t node_size_, capacity_; @@ -112,6 +119,14 @@ // alignment static constexpr auto min_element_alignment = alignof(char*); + // minimal size of the block that needs to be inserted + static constexpr std::size_t min_block_size(std::size_t node_size, + std::size_t number_of_nodes) + { + return (node_size < min_element_size ? min_element_size : node_size) + * number_of_nodes; + } + //=== constructor ===// ordered_free_memory_list(std::size_t node_size) noexcept; @@ -126,16 +141,14 @@ ~ordered_free_memory_list() noexcept = default; - ordered_free_memory_list& operator=(ordered_free_memory_list&& other) - noexcept + ordered_free_memory_list& operator=(ordered_free_memory_list&& other) noexcept { ordered_free_memory_list tmp(detail::move(other)); swap(*this, tmp); return *this; } - friend void swap(ordered_free_memory_list& a, - ordered_free_memory_list& b) noexcept; + friend void swap(ordered_free_memory_list& a, ordered_free_memory_list& b) noexcept; //=== insert/allocation/deallocation ===// // inserts a new memory block, by splitting it up and setting the links @@ -148,7 +161,8 @@ // i.e. how many memory will be actually inserted and usable on a call to insert() std::size_t usable_size(std::size_t size) const noexcept { - return size; + // Round down to next multiple of node size. + return (size / node_size_) * node_size_; } // returns a single block from the list @@ -186,8 +200,6 @@ } private: - std::size_t fence_size() const noexcept; - // returns previous pointer char* insert_impl(void* mem, std::size_t size) noexcept; @@ -201,7 +213,7 @@ void swap(ordered_free_memory_list& a, ordered_free_memory_list& b) noexcept; -#if FOONATHAN_MEMORY_DEBUG_DOUBLE_DEALLOC_CHECk +#if FOONATHAN_MEMORY_DEBUG_DOUBLE_DEALLOC_CHECK // use ordered version to allow pointer check using node_free_memory_list = ordered_free_memory_list; using array_free_memory_list = ordered_free_memory_list; @@ -210,7 +222,7 @@ using array_free_memory_list = ordered_free_memory_list; #endif } // namespace detail - } -} // namespace foonathan::memory + } // namespace memory +} // namespace foonathan #endif // FOONATHAN_MEMORY_DETAILL_FREE_LIST_HPP_INCLUDED diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/ilog2.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/ilog2.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/ilog2.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/ilog2.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -27,7 +27,7 @@ { #if defined(__GNUC__) unsigned long long value = x; - return sizeof(value) * CHAR_BIT - __builtin_clzll(value); + return sizeof(value) * CHAR_BIT - static_cast(__builtin_clzll(value)); #else // Adapted from https://stackoverflow.com/a/40943402 std::size_t clz = 64; diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/lowlevel_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/lowlevel_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/lowlevel_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/lowlevel_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -39,15 +39,9 @@ public: using is_stateful = std::false_type; - lowlevel_allocator() noexcept - { - } - lowlevel_allocator(lowlevel_allocator&&) noexcept - { - } - ~lowlevel_allocator() noexcept - { - } + lowlevel_allocator() noexcept {} + lowlevel_allocator(lowlevel_allocator&&) noexcept {} + ~lowlevel_allocator() noexcept {} lowlevel_allocator& operator=(lowlevel_allocator&&) noexcept { @@ -67,8 +61,7 @@ return debug_fill_new(memory, size, max_alignment); } - void deallocate_node(void* node, std::size_t size, - std::size_t alignment) noexcept + void deallocate_node(void* node, std::size_t size, std::size_t alignment) noexcept { auto actual_size = size + (debug_fence_size ? 2 * max_alignment : 0u); @@ -87,7 +80,7 @@ #define FOONATHAN_MEMORY_LL_ALLOCATOR_LEAK_CHECKER(functor, var_name) \ FOONATHAN_MEMORY_GLOBAL_LEAK_CHECKER(lowlevel_allocator_leak_handler, var_name) } // namespace detail - } -} // namespace foonathan::memory + } // namespace memory +} // namespace foonathan #endif // FOONATHAN_MEMORY_DETAIL_LOWLEVEL_ALLOCATOR_HPP_INCLUDED diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/memory_stack.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/memory_stack.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/memory_stack.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/memory_stack.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -22,13 +22,11 @@ class fixed_memory_stack { public: - fixed_memory_stack() noexcept : fixed_memory_stack(nullptr) - { - } + fixed_memory_stack() noexcept : fixed_memory_stack(nullptr) {} // gives it the current pointer, the end pointer must be maintained seperataly explicit fixed_memory_stack(void* memory) noexcept - : cur_(static_cast(memory)) + : cur_(static_cast(memory)) { } @@ -88,8 +86,7 @@ // same as allocate() but does not check the size // note: pass it the align OFFSET, not the alignment void* allocate_unchecked(std::size_t size, std::size_t align_offset, - std::size_t fence_size = debug_fence_size) - noexcept + std::size_t fence_size = debug_fence_size) noexcept { bump(fence_size, debug_magic::fence_memory); bump(align_offset, debug_magic::alignment_memory); @@ -117,7 +114,7 @@ char* cur_; }; } // namespace detail - } -} // namespace foonathan::memory + } // namespace memory +} // namespace foonathan #endif // FOONATHAN_MEMORY_DETAIL_MEMORY_STACK_HPP_INCLUDED diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/small_free_list.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/small_free_list.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/small_free_list.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/small_free_list.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -6,9 +6,11 @@ #define FOONATHAN_MEMORY_DETAIL_SMALL_FREE_LIST_HPP_INCLUDED #include +#include #include "../config.hpp" #include "utility.hpp" +#include "align.hpp" namespace foonathan { @@ -27,11 +29,15 @@ chunk_base() noexcept = default; - chunk_base(unsigned char no) noexcept : capacity(no), no_nodes(no) - { - } + chunk_base(unsigned char no) noexcept : capacity(no), no_nodes(no) {} }; + constexpr std::size_t chunk_memory_offset = + sizeof(chunk_base) % detail::max_alignment == 0 ? + sizeof(chunk_base) : + (sizeof(chunk_base) / detail::max_alignment + 1) * detail::max_alignment; + constexpr std::size_t chunk_max_nodes = UCHAR_MAX; + struct chunk; // the same as free_memory_list but optimized for small node sizes @@ -41,18 +47,31 @@ // node_size is increased via two times fence size and fence is put in front and after class small_free_memory_list { + static constexpr std::size_t chunk_count(std::size_t number_of_nodes) + { + return number_of_nodes / chunk_max_nodes + + (number_of_nodes % chunk_max_nodes == 0 ? 0 : 1); + } + public: // minimum element size static constexpr std::size_t min_element_size = 1; // alignment static constexpr std::size_t min_element_alignment = 1; + // minimal size of the block that needs to be inserted + static constexpr std::size_t min_block_size(std::size_t node_size, + std::size_t number_of_nodes) + { + return chunk_count(number_of_nodes) + * (chunk_memory_offset + chunk_max_nodes * node_size); + } + //=== constructor ===// small_free_memory_list(std::size_t node_size) noexcept; // does not own memory! - small_free_memory_list(std::size_t node_size, void* mem, - std::size_t size) noexcept; + small_free_memory_list(std::size_t node_size, void* mem, std::size_t size) noexcept; small_free_memory_list(small_free_memory_list&& other) noexcept; @@ -65,8 +84,7 @@ return *this; } - friend void swap(small_free_memory_list& a, - small_free_memory_list& b) noexcept; + friend void swap(small_free_memory_list& a, small_free_memory_list& b) noexcept; //=== insert/alloc/dealloc ===// // inserts new memory of given size into the free list @@ -127,8 +145,6 @@ } private: - std::size_t fence_size() const noexcept; - chunk* find_chunk_impl(std::size_t n = 1) noexcept; chunk* find_chunk_impl(unsigned char* node, chunk_base* first, chunk_base* last) noexcept; @@ -142,7 +158,7 @@ // for some reason, this is required in order to define it void swap(small_free_memory_list& a, small_free_memory_list& b) noexcept; } // namespace detail - } -} // namespace foonathan::memory + } // namespace memory +} // namespace foonathan #endif // FOONATHAN_MEMORY_DETAIL_SMALL_FREE_LIST_HPP_INCLUDED diff -Nru foonathan-memory-0.7/include/foonathan/memory/detail/utility.hpp foonathan-memory-0.7.1/include/foonathan/memory/detail/utility.hpp --- foonathan-memory-0.7/include/foonathan/memory/detail/utility.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/detail/utility.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/error.hpp foonathan-memory-0.7.1/include/foonathan/memory/error.hpp --- foonathan-memory-0.7/include/foonathan/memory/error.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/error.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/fallback_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/fallback_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/fallback_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/fallback_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/heap_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/heap_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/heap_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/heap_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/iteration_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/iteration_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/iteration_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/iteration_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/joint_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/joint_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/joint_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/joint_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/malloc_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/malloc_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/malloc_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/malloc_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/memory_arena.hpp foonathan-memory-0.7.1/include/foonathan/memory/memory_arena.hpp --- foonathan-memory-0.7/include/foonathan/memory/memory_arena.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/memory_arena.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -285,14 +285,23 @@ using allocator_type = BlockAllocator; using is_cached = std::integral_constant; + /// \returns The minimum block size required for an arena containing the given amount of memory. + /// If an arena is created with the result of `min_block_size(n)`, the resulting capacity will be exactly `n`. + /// \requires `byte_size` must be a positive number. + static constexpr std::size_t min_block_size(std::size_t byte_size) noexcept + { + return detail::memory_block_stack::implementation_offset() + byte_size; + } + /// \effects Creates it by giving it the size and other arguments for the \concept{concept_blockallocator,BlockAllocator}. /// It forwards these arguments to its constructor. - /// \requires \c block_size must be greater than \c 0 and other requirements depending on the \concept{concept_blockallocator,BlockAllocator}. + /// \requires \c block_size must be greater than \c min_block_size(0) and other requirements depending on the \concept{concept_blockallocator,BlockAllocator}. /// \throws Anything thrown by the constructor of the \c BlockAllocator. template explicit memory_arena(std::size_t block_size, Args&&... args) : allocator_type(block_size, detail::forward(args)...) { + FOONATHAN_MEMORY_ASSERT(block_size > min_block_size(0)); } /// \effects Deallocates all memory blocks that where requested back to the \concept{concept_blockallocator,BlockAllocator}. @@ -464,7 +473,7 @@ auto memory = traits::allocate_array(get_allocator(), block_size_, 1, detail::max_alignment); memory_block block(memory, block_size_); - block_size_ = std::size_t(block_size_ * growth_factor()); + block_size_ = grow_block_size(block_size_); return block; } @@ -496,6 +505,11 @@ return factor; } + static std::size_t grow_block_size(std::size_t block_size) noexcept + { + return block_size * Num / Den; + } + private: std::size_t block_size_; }; diff -Nru foonathan-memory-0.7/include/foonathan/memory/memory_pool_collection.hpp foonathan-memory-0.7.1/include/foonathan/memory/memory_pool_collection.hpp --- foonathan-memory-0.7/include/foonathan/memory/memory_pool_collection.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/memory_pool_collection.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -180,12 +180,24 @@ auto mem = pool.empty() ? nullptr : pool.allocate(count * node_size); if (!mem) { - // use stack for allocation - detail::check_allocation_size( - count * node_size, [&] { return next_capacity() - pool.alignment() + 1; }, - info()); - mem = reserve_memory(pool, count * node_size).memory; - FOONATHAN_MEMORY_ASSERT(mem); + // reserve more memory + auto block = reserve_memory(pool, def_capacity()); + pool.insert(block.memory, block.size); + + mem = pool.allocate(count * node_size); + if (!mem) + { + // reserve more then the default capacity if that didn't work either + detail::check_allocation_size( + count * node_size, + [&] { return next_capacity() - pool.alignment() + 1; }, info()); + + block = reserve_memory(pool, count * node_size); + pool.insert(block.memory, block.size); + + mem = pool.allocate(count * node_size); + FOONATHAN_MEMORY_ASSERT(mem); + } } return mem; diff -Nru foonathan-memory-0.7/include/foonathan/memory/memory_pool.hpp foonathan-memory-0.7.1/include/foonathan/memory/memory_pool.hpp --- foonathan-memory-0.7/include/foonathan/memory/memory_pool.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/memory_pool.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -65,9 +65,7 @@ std::size_t number_of_nodes) noexcept { return detail::memory_block_stack::implementation_offset() - + number_of_nodes - * (((node_size > min_node_size) ? node_size : min_node_size) - + (detail::debug_fence_size ? 2 * detail::max_alignment : 0)); + + free_list::min_block_size(node_size, number_of_nodes); } /// \effects Creates it by specifying the size each \concept{concept_node,node} will have, @@ -76,7 +74,7 @@ /// It will allocate an initial memory block with given size from the \concept{concept_blockallocator,BlockAllocator} /// and puts it onto the free list. /// \requires \c node_size must be a valid \concept{concept_node,node size} - /// and \c block_size must be a non-zero value. + /// and \c block_size must be at least \c min_block_size(node_size, 1). template memory_pool(std::size_t node_size, std::size_t block_size, Args&&... args) : arena_(block_size, detail::forward(args)...), free_list_(node_size) diff -Nru foonathan-memory-0.7/include/foonathan/memory/memory_pool_type.hpp foonathan-memory-0.7.1/include/foonathan/memory/memory_pool_type.hpp --- foonathan-memory-0.7/include/foonathan/memory/memory_pool_type.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/memory_pool_type.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/memory_resource_adapter.hpp foonathan-memory-0.7.1/include/foonathan/memory/memory_resource_adapter.hpp --- foonathan-memory-0.7/include/foonathan/memory/memory_resource_adapter.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/memory_resource_adapter.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/memory_stack.hpp foonathan-memory-0.7.1/include/foonathan/memory/memory_stack.hpp --- foonathan-memory-0.7/include/foonathan/memory/memory_stack.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/memory_stack.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -119,6 +119,7 @@ /// \effects Creates it with a given initial block size and and other constructor arguments for the \concept{concept_blockallocator,BlockAllocator}. /// It will allocate the first block and sets the top to its beginning. + /// \requires \c block_size must be at least \c min_block_size(1). template explicit memory_stack(std::size_t block_size, Args&&... args) : arena_(block_size, detail::forward(args)...), diff -Nru foonathan-memory-0.7/include/foonathan/memory/namespace_alias.hpp foonathan-memory-0.7.1/include/foonathan/memory/namespace_alias.hpp --- foonathan-memory-0.7/include/foonathan/memory/namespace_alias.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/namespace_alias.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/new_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/new_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/new_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/new_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/segregator.hpp foonathan-memory-0.7.1/include/foonathan/memory/segregator.hpp --- foonathan-memory-0.7/include/foonathan/memory/segregator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/segregator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/smart_ptr.hpp foonathan-memory-0.7.1/include/foonathan/memory/smart_ptr.hpp --- foonathan-memory-0.7/include/foonathan/memory/smart_ptr.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/smart_ptr.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -79,7 +79,7 @@ auto memory = alloc.allocate_array(size, sizeof(T), alignof(T)); // raw_ptr deallocates memory in case of constructor exception raw_ptr result(static_cast(memory), {alloc, size}); - construct(std::integral_constant{}, result.get(), + construct(std::integral_constant{}, result.get(), result.get() + size); // pass ownership to return value using a deleter that calls destructor return {result.release(), {alloc, size}}; diff -Nru foonathan-memory-0.7/include/foonathan/memory/static_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/static_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/static_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/static_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/std_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/std_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/std_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/std_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/temporary_allocator.hpp foonathan-memory-0.7.1/include/foonathan/memory/temporary_allocator.hpp --- foonathan-memory-0.7/include/foonathan/memory/temporary_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/temporary_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/threading.hpp foonathan-memory-0.7.1/include/foonathan/memory/threading.hpp --- foonathan-memory-0.7/include/foonathan/memory/threading.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/threading.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/tracking.hpp foonathan-memory-0.7.1/include/foonathan/memory/tracking.hpp --- foonathan-memory-0.7/include/foonathan/memory/tracking.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/tracking.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/include/foonathan/memory/virtual_memory.hpp foonathan-memory-0.7.1/include/foonathan/memory/virtual_memory.hpp --- foonathan-memory-0.7/include/foonathan/memory/virtual_memory.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/include/foonathan/memory/virtual_memory.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/README.md foonathan-memory-0.7.1/README.md --- foonathan-memory-0.7/README.md 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/README.md 2021-09-05 17:18:55.000000000 +0000 @@ -7,8 +7,10 @@ The C++ STL allocator model has various flaws. For example, they are fixed to a certain type, because they are almost necessarily required to be templates. So you can't easily share a single allocator for multiple types. In addition, you can only get a copy from the containers and not the original allocator object. At least with C++11 they are allowed to be stateful and so can be made object not instance based. But still, the model has many flaws. Over the course of the years many solutions have been proposed, for example [EASTL]. This library is another. But instead of trying to change the STL, it works with the current implementation. -If you like this project, consider [supporting me](https://jonathanmueller.dev/support-me/). -It would really help! +> |[![](https://www.jonathanmueller.dev/embarcadero-logo.png)](https://www.embarcadero.com/de/products/cbuilder/starter) | Sponsored by [Embarcadero C++Builder](https://www.embarcadero.com/de/products/cbuilder/starter). | +> |-------------------------------------|----------------| +> +> If you like this project, consider [supporting me](https://jonathanmueller.dev/support-me/). ## Features @@ -138,7 +140,7 @@ // is similar to alloca() but uses its own stack // this stack is thread_local and created on the first call to this function // as soon as the allocator object goes out of scope, everything allocated through it, will be freed - auto alloc = memory::make_temporary_allocator(); + auto alloc = memory::temporary_allocator(); // alias for std::vector> // a std::vector using a temporary_allocator @@ -178,13 +180,13 @@ 5. Call `target_link_libraries(your_target PUBLIC foonathan_memory)` to link to the library and setup all required options. -See https://foonathan.net/memory/md_doc_installation.html for a detailed guide. +See https://memory.foonathan.net/md_doc_installation.html for a detailed guide. ## Documentation -Full documentation can be found at https://foonathan.net/memory. +Full documentation can be found at https://memory.foonathan.net/. -A tutorial is also available at https://foonathan.net/memory/md_doc_tutorial.html. +A tutorial is also available at https://memory.foonathan.net/md_doc_tutorial.html. ## RawAllocator @@ -208,7 +210,7 @@ ``` A `RawAllocator` only needs to be moveable, all `Allocator` classes are `RawAllocators` too. -Classes not providing the interface can specialize the `allocator_traits`, read more about [writing allocators here](https://foonathan.net/memory/md_doc_writing_allocators.html) or about the technical details of the [concept here](https://foonathan.net/memory/md_doc_concepts.html). +Classes not providing the interface can specialize the `allocator_traits`, read more about [writing allocators here](https://memory.foonathan.net/md_doc_writing_allocators.html) or about the technical details of the [concept here](https://memory.foonathan.net/md_doc_concepts.html). ## Acknowledgements @@ -219,26 +221,29 @@ And big thanks to the contributors as well: +* @Guekka +* @Manu343726 +* @MiguelCompany * @asobhy-qnx * @bfierz -* @nicolastagliani * @cho3 +* @gabyx * @j-carl -* @myd7349 -* @moazzamak -* @maksqwe * @kaidokert -* @gabyx * @maksqwe -* @Manu343726 -* @MiguelCompany +* @maksqwe * @moazzamak +* @moazzamak +* @myd7349 * @myd7349 +* @nicolastagliani * @quattrinili * @razr +* @roehling * @seanyen * @wtsnyder * @zhouchengming1 +* @jwdevel [EASTL]: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2271.html [CMake]: www.cmake.org diff -Nru foonathan-memory-0.7/src/CMakeLists.txt foonathan-memory-0.7.1/src/CMakeLists.txt --- foonathan-memory-0.7/src/CMakeLists.txt 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/CMakeLists.txt 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Jonathan Müller +# Copyright (C) 2015-2021 Müller # This file is subject to the license terms in the LICENSE file # found in the top-level directory of this distribution. @@ -101,7 +101,7 @@ " ${PROJECT_SOURCE_DIR}/tool/node_size_debugger.cpp \n" "- Transfer nodesize_dbg to QNX target and execute:\n" " nodesize_dbg --code container_node_sizes_impl.hpp \n" - "- Transfer generated header file back to your development system \n" + "- Transfer generated header file back to your development system \n" "- Set FOONATHAN_MEMORY_CONTAINER_NODE_SIZES_IMPL to the path of the pre-generated file and pass it to cmake as an argument\n") endif() else() @@ -130,10 +130,26 @@ target_compile_features(foonathan_memory PUBLIC cxx_constexpr) endif() +if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Clang") + if("${CMAKE_CXX_SIMULATE_ID}" STREQUAL "MSVC") + target_compile_options(foonathan_memory PRIVATE /WX /W3 /D _CRT_SECURE_NO_WARNINGS) + else() + target_compile_options(foonathan_memory PRIVATE -pedantic-errors -Werror -Wall -Wextra -Wconversion -Wsign-conversion) + endif() +elseif(${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") + target_compile_options(foonathan_memory PRIVATE -pedantic-errors -Werror -Wall -Wextra -Wconversion -Wsign-conversion) +elseif(MSVC) + target_compile_options(foonathan_memory PRIVATE /WX /W3 /D _CRT_SECURE_NO_WARNINGS) +endif() + set_target_properties(foonathan_memory PROPERTIES OUTPUT_NAME "foonathan_memory-${FOONATHAN_MEMORY_VERSION}" POSITION_INDEPENDENT_CODE ON) +if(NEED_LIBRARY_FOR_CXX_ATOMIC) + target_link_libraries(foonathan_memory PRIVATE -latomic) +endif() + install(TARGETS foonathan_memory EXPORT foonathan_memoryTargets RUNTIME DESTINATION ${FOONATHAN_MEMORY_RUNTIME_INSTALL_DIR} LIBRARY DESTINATION ${FOONATHAN_MEMORY_LIBRARY_INSTALL_DIR} @@ -147,7 +163,7 @@ VERSION ${FOONATHAN_MEMORY_VERSION} COMPATIBILITY AnyNewerVersion) -install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/config_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/container_node_sizes_impl.hpp DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) install(FILES ${header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory) install(FILES ${detail_header} DESTINATION ${FOONATHAN_MEMORY_INC_INSTALL_DIR}/foonathan/memory/detail) diff -Nru foonathan-memory-0.7/src/debugging.cpp foonathan-memory-0.7.1/src/debugging.cpp --- foonathan-memory-0.7/src/debugging.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/debugging.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -86,7 +86,7 @@ #if FOONATHAN_HOSTED_IMPLEMENTATION std::fprintf(stderr, "[%s] Buffer overflow at address %p detected, corresponding memory " - "block %p has only size %zu.", + "block %p has only size %zu.\n", FOONATHAN_MEMORY_LOG_PREFIX, ptr, memory, node_size); #endif (void)memory; diff -Nru foonathan-memory-0.7/src/detail/align.cpp foonathan-memory-0.7.1/src/detail/align.cpp --- foonathan-memory-0.7/src/detail/align.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/detail/align.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/src/detail/assert.cpp foonathan-memory-0.7.1/src/detail/assert.cpp --- foonathan-memory-0.7/src/detail/assert.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/detail/assert.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -25,8 +25,7 @@ std::abort(); } -void detail::handle_warning(const char* msg, const char* file, int line, - const char* fnc) noexcept +void detail::handle_warning(const char* msg, const char* file, int line, const char* fnc) noexcept { #if FOONATHAN_HOSTED_IMPLEMENTATION std::fprintf(stderr, "[%s] Warning triggered in function %s (%s:%d): %s.\n", diff -Nru foonathan-memory-0.7/src/detail/debug_helpers.cpp foonathan-memory-0.7.1/src/detail/debug_helpers.cpp --- foonathan-memory-0.7/src/detail/debug_helpers.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/detail/debug_helpers.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,11 +1,11 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "detail/debug_helpers.hpp" #if FOONATHAN_HOSTED_IMPLEMENTATION - #include +#include #endif #include "debugging.hpp" @@ -14,75 +14,74 @@ using namespace detail; #if FOONATHAN_MEMORY_DEBUG_FILL - void detail::debug_fill(void *memory, std::size_t size, debug_magic m) noexcept - { - #if FOONATHAN_HOSTED_IMPLEMENTATION - std::memset(memory, static_cast(m), size); - #else - // do the naive loop :( - auto ptr = static_cast(memory); - for (std::size_t i = 0u; i != size; ++i) - *ptr++ = static_cast(m); - #endif - } - - void* detail::debug_is_filled(void *memory, std::size_t size, debug_magic m) noexcept - { - auto byte = static_cast(memory); - for (auto end = byte + size; byte != end; ++byte) - if (*byte != static_cast(m)) - return byte; - return nullptr; - } - - void* detail::debug_fill_new(void *memory, - std::size_t node_size, std::size_t fence_size) noexcept - { - if (!debug_fence_size) - fence_size = 0u; // force override of fence_size - - auto mem = static_cast(memory); - debug_fill(mem, fence_size, debug_magic::fence_memory); - - mem += fence_size; - debug_fill(mem, node_size, debug_magic::new_memory); - - debug_fill(mem + node_size, fence_size, debug_magic::fence_memory); - - return mem; - } - - void* detail::debug_fill_free(void *memory, - std::size_t node_size, std::size_t fence_size) noexcept - { - if (!debug_fence_size) - fence_size = 0u; // force override of fence_size - - debug_fill(memory, node_size, debug_magic::freed_memory); - - auto pre_fence = static_cast(memory) - fence_size; - if (auto pre_dirty = debug_is_filled(pre_fence, fence_size, debug_magic::fence_memory)) - get_buffer_overflow_handler()(memory, node_size, pre_dirty); - - auto post_mem = static_cast(memory) + node_size; - if (auto post_dirty = debug_is_filled(post_mem, fence_size, debug_magic::fence_memory)) - get_buffer_overflow_handler()(memory, node_size, post_dirty); - - return pre_fence; - } - - void detail::debug_fill_internal(void *memory, std::size_t size, bool free) noexcept - { - debug_fill(memory, size, free ? debug_magic::internal_freed_memory : debug_magic::internal_memory); - } +void detail::debug_fill(void* memory, std::size_t size, debug_magic m) noexcept +{ +#if FOONATHAN_HOSTED_IMPLEMENTATION + std::memset(memory, static_cast(m), size); +#else + // do the naive loop :( + auto ptr = static_cast(memory); + for (std::size_t i = 0u; i != size; ++i) + *ptr++ = static_cast(m); +#endif +} + +void* detail::debug_is_filled(void* memory, std::size_t size, debug_magic m) noexcept +{ + auto byte = static_cast(memory); + for (auto end = byte + size; byte != end; ++byte) + if (*byte != static_cast(m)) + return byte; + return nullptr; +} + +void* detail::debug_fill_new(void* memory, std::size_t node_size, std::size_t fence_size) noexcept +{ + if (!debug_fence_size) + fence_size = 0u; // force override of fence_size + + auto mem = static_cast(memory); + debug_fill(mem, fence_size, debug_magic::fence_memory); + + mem += fence_size; + debug_fill(mem, node_size, debug_magic::new_memory); + + debug_fill(mem + node_size, fence_size, debug_magic::fence_memory); + + return mem; +} + +void* detail::debug_fill_free(void* memory, std::size_t node_size, std::size_t fence_size) noexcept +{ + if (!debug_fence_size) + fence_size = 0u; // force override of fence_size + + debug_fill(memory, node_size, debug_magic::freed_memory); + + auto pre_fence = static_cast(memory) - fence_size; + if (auto pre_dirty = debug_is_filled(pre_fence, fence_size, debug_magic::fence_memory)) + get_buffer_overflow_handler()(memory, node_size, pre_dirty); + + auto post_mem = static_cast(memory) + node_size; + if (auto post_dirty = debug_is_filled(post_mem, fence_size, debug_magic::fence_memory)) + get_buffer_overflow_handler()(memory, node_size, post_dirty); + + return pre_fence; +} + +void detail::debug_fill_internal(void* memory, std::size_t size, bool free) noexcept +{ + debug_fill(memory, size, + free ? debug_magic::internal_freed_memory : debug_magic::internal_memory); +} #endif -void detail::debug_handle_invalid_ptr(const allocator_info &info, void *ptr) +void detail::debug_handle_invalid_ptr(const allocator_info& info, void* ptr) { get_invalid_pointer_handler()(info, ptr); } -void detail::debug_handle_memory_leak(const allocator_info &info, std::ptrdiff_t amount) +void detail::debug_handle_memory_leak(const allocator_info& info, std::ptrdiff_t amount) { get_leak_handler()(info, amount); } diff -Nru foonathan-memory-0.7/src/detail/free_list_array.cpp foonathan-memory-0.7.1/src/detail/free_list_array.cpp --- foonathan-memory-0.7/src/detail/free_list_array.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/detail/free_list_array.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/src/detail/free_list.cpp foonathan-memory-0.7.1/src/detail/free_list.cpp --- foonathan-memory-0.7/src/detail/free_list.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/detail/free_list.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -31,8 +31,8 @@ // last is inclusive, so add actual_size to it // note: cannot use next, might not be directly after auto end = last + node_size; - FOONATHAN_MEMORY_ASSERT((end - first) % node_size == 0u); - return (end - first) / node_size; + FOONATHAN_MEMORY_ASSERT(static_cast(end - first) % node_size == 0u); + return static_cast(end - first) / node_size; } }; @@ -131,17 +131,14 @@ { } -free_memory_list::free_memory_list(std::size_t node_size, void* mem, - std::size_t size) noexcept +free_memory_list::free_memory_list(std::size_t node_size, void* mem, std::size_t size) noexcept : free_memory_list(node_size) { insert(mem, size); } free_memory_list::free_memory_list(free_memory_list&& other) noexcept -: first_(other.first_), - node_size_(other.node_size_), - capacity_(other.capacity_) +: first_(other.first_), node_size_(other.node_size_), capacity_(other.capacity_) { other.first_ = nullptr; other.capacity_ = 0u; @@ -177,7 +174,7 @@ auto mem = first_; first_ = list_get_next(first_); - return debug_fill_new(mem, node_size_, fence_size()); + return detail::debug_fill_new(mem, node_size_, 0); } void* free_memory_list::allocate(std::size_t n) noexcept @@ -186,9 +183,7 @@ if (n <= node_size_) return allocate(); - auto actual_size = node_size_ + 2 * fence_size(); - - auto i = list_search_array(first_, n + 2 * fence_size(), actual_size); + auto i = list_search_array(first_, n, node_size_); if (i.first == nullptr) return nullptr; @@ -196,16 +191,16 @@ list_set_next(i.prev, i.next); // change next from previous to first after else first_ = i.next; - capacity_ -= i.size(actual_size); + capacity_ -= i.size(node_size_); - return debug_fill_new(i.first, n, fence_size()); + return detail::debug_fill_new(i.first, n, 0); } void free_memory_list::deallocate(void* ptr) noexcept { ++capacity_; - auto node = static_cast(debug_fill_free(ptr, node_size_, fence_size())); + auto node = static_cast(detail::debug_fill_free(ptr, node_size_, 0)); list_set_next(node, first_); first_ = node; } @@ -216,8 +211,8 @@ deallocate(ptr); else { - auto mem = debug_fill_free(ptr, n, fence_size()); - insert_impl(mem, n + 2 * fence_size()); + auto mem = detail::debug_fill_free(ptr, n, 0); + insert_impl(mem, n); } } @@ -226,23 +221,16 @@ return alignment_for(node_size_); } -std::size_t free_memory_list::fence_size() const noexcept -{ - // fence size is max alignment - return debug_fence_size ? max_alignment : 0u; -} - void free_memory_list::insert_impl(void* mem, std::size_t size) noexcept { - auto actual_size = node_size_ + 2 * fence_size(); - auto no_nodes = size / actual_size; + auto no_nodes = size / node_size_; FOONATHAN_MEMORY_ASSERT(no_nodes > 0); auto cur = static_cast(mem); for (std::size_t i = 0u; i != no_nodes - 1; ++i) { - list_set_next(cur, cur + actual_size); - cur += actual_size; + list_set_next(cur, cur + node_size_); + cur += node_size_; } list_set_next(cur, first_); first_ = static_cast(mem); @@ -300,8 +288,9 @@ else if (less(cur_backward, memory)) // the next position is the previous backwards pointer return {cur_backward, prev_backward}; - debug_check_double_dealloc( - [&] { return cur_forward != memory && cur_backward != memory; }, info, memory); + debug_check_double_dealloc([&] + { return cur_forward != memory && cur_backward != memory; }, + info, memory); xor_list_iter_next(cur_forward, prev_forward); xor_list_iter_next(cur_backward, prev_backward); } while (less(prev_forward, prev_backward)); @@ -353,9 +342,8 @@ xor_list_set(end_node(), begin_node(), nullptr); } -ordered_free_memory_list::ordered_free_memory_list(ordered_free_memory_list&& other) - noexcept : node_size_(other.node_size_), - capacity_(other.capacity_) +ordered_free_memory_list::ordered_free_memory_list(ordered_free_memory_list&& other) noexcept +: node_size_(other.node_size_), capacity_(other.capacity_) { if (!other.empty()) { @@ -432,7 +420,7 @@ { FOONATHAN_MEMORY_ASSERT(mem); FOONATHAN_MEMORY_ASSERT(is_aligned(mem, alignment())); - debug_fill_internal(mem, size, false); + detail::debug_fill_internal(mem, size, false); insert_impl(mem, size); } @@ -456,8 +444,14 @@ last_dealloc_ = next; FOONATHAN_MEMORY_ASSERT(last_dealloc_prev_ == prev); } + else if (node == last_dealloc_prev_) + { + // now the previous node is the node before ours + last_dealloc_prev_ = prev; + FOONATHAN_MEMORY_ASSERT(last_dealloc_ == next); + } - return debug_fill_new(node, node_size_, fence_size()); + return detail::debug_fill_new(node, node_size_, 0); } void* ordered_free_memory_list::allocate(std::size_t n) noexcept @@ -467,30 +461,35 @@ if (n <= node_size_) return allocate(); - auto actual_size = node_size_ + 2 * fence_size(); - - auto i = xor_list_search_array(begin_node(), end_node(), n + 2 * fence_size(), actual_size); + auto i = xor_list_search_array(begin_node(), end_node(), n, node_size_); if (i.first == nullptr) return nullptr; xor_list_change(i.prev, i.first, i.next); // change next pointer from i.prev to i.next xor_list_change(i.next, i.last, i.prev); // change prev pointer from i.next to i.prev - capacity_ -= i.size(actual_size); + capacity_ -= i.size(node_size_); // if last_dealloc_ points into the array being removed - if (less_equal(i.first, last_dealloc_) && less_equal(last_dealloc_, i.last)) + if ((less_equal(i.first, last_dealloc_) && less_equal(last_dealloc_, i.last))) { // move last_dealloc just outside range last_dealloc_ = i.next; last_dealloc_prev_ = i.prev; } + // if the previous deallocation is the last element of the array + else if (last_dealloc_prev_ == i.last) + { + // it is now the last element before the array + FOONATHAN_MEMORY_ASSERT(last_dealloc_ == i.next); + last_dealloc_prev_ = i.prev; + } - return debug_fill_new(i.first, n, fence_size()); + return detail::debug_fill_new(i.first, n, 0); } void ordered_free_memory_list::deallocate(void* ptr) noexcept { - auto node = static_cast(debug_fill_free(ptr, node_size_, fence_size())); + auto node = static_cast(debug_fill_free(ptr, node_size_, 0)); auto p = find_pos(allocator_info(FOONATHAN_MEMORY_LOG_PREFIX "::detail::ordered_free_memory_list", @@ -510,8 +509,8 @@ deallocate(ptr); else { - auto mem = debug_fill_free(ptr, n, fence_size()); - auto prev = insert_impl(mem, n + 2 * fence_size()); + auto mem = detail::debug_fill_free(ptr, n, 0); + auto prev = insert_impl(mem, n); last_dealloc_ = static_cast(mem); last_dealloc_prev_ = prev; @@ -523,16 +522,9 @@ return alignment_for(node_size_); } -std::size_t ordered_free_memory_list::fence_size() const noexcept -{ - // node size is fence size - return debug_fence_size ? node_size_ : 0u; -} - char* ordered_free_memory_list::insert_impl(void* mem, std::size_t size) noexcept { - auto actual_size = node_size_ + 2 * fence_size(); - auto no_nodes = size / actual_size; + auto no_nodes = size / node_size_; FOONATHAN_MEMORY_ASSERT(no_nodes > 0); auto p = @@ -541,7 +533,7 @@ static_cast(mem), begin_node(), end_node(), last_dealloc_, last_dealloc_prev_); - xor_link_block(mem, actual_size, no_nodes, p.prev, p.next); + xor_link_block(mem, node_size_, no_nodes, p.prev, p.next); capacity_ += no_nodes; if (p.prev == last_dealloc_prev_) diff -Nru foonathan-memory-0.7/src/detail/free_list_utils.hpp foonathan-memory-0.7.1/src/detail/free_list_utils.hpp --- foonathan-memory-0.7/src/detail/free_list_utils.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/detail/free_list_utils.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -12,135 +12,138 @@ #include "detail/assert.hpp" #if FOONATHAN_HOSTED_IMPLEMENTATION - #include - #include +#include +#include #endif -namespace foonathan { namespace memory +namespace foonathan { - namespace detail + namespace memory { - //=== storage ===/// - // reads stored integer value - inline std::uintptr_t get_int(void *address) noexcept + namespace detail { - FOONATHAN_MEMORY_ASSERT(address); - std::uintptr_t res; - #if FOONATHAN_HOSTED_IMPLEMENTATION - std::memcpy(&res, address, sizeof(std::uintptr_t)); - #else - auto mem = static_cast(static_cast(&res)); - for (auto i = 0u; i != sizeof(std::uintptr_t); ++i) - mem[i] = static_cast(address)[i]; - #endif - return res; - } - - // sets stored integer value - inline void set_int(void *address, std::uintptr_t i) noexcept - { - FOONATHAN_MEMORY_ASSERT(address); - #if FOONATHAN_HOSTED_IMPLEMENTATION - std::memcpy(address, &i, sizeof(std::uintptr_t)); - #else - auto mem = static_cast(static_cast(&i)); - for (auto i = 0u; i != sizeof(std::uintptr_t); ++i) - static_cast(address)[i] = mem[i]; - #endif - } - - // pointer to integer - inline std::uintptr_t to_int(char *ptr) noexcept - { - return reinterpret_cast(ptr); - } - - // integer to pointer - inline char *from_int(std::uintptr_t i) noexcept - { - return reinterpret_cast(i); - } - - //=== intrusive linked list ===// - // reads a stored pointer value - inline char *list_get_next(void *address) noexcept - { - return from_int(get_int(address)); - } - - // stores a pointer value - inline void list_set_next(void *address, char *ptr) noexcept - { - set_int(address, to_int(ptr)); - } - - //=== intrusive xor linked list ===// - // returns the other pointer given one pointer - inline char *xor_list_get_other(void *address, char *prev_or_next) noexcept - { - return from_int(get_int(address) ^ to_int(prev_or_next)); - } - - // sets the next and previous pointer (order actually does not matter) - inline void xor_list_set(void *address, char *prev, char *next) noexcept - { - set_int(address, to_int(prev) ^ to_int(next)); - } - - // changes other pointer given one pointer - inline void xor_list_change(void *address, char *old_ptr, char *new_ptr) noexcept - { - FOONATHAN_MEMORY_ASSERT(address); - auto other = xor_list_get_other(address, old_ptr); - xor_list_set(address, other, new_ptr); - } + //=== storage ===/// + // reads stored integer value + inline std::uintptr_t get_int(void* address) noexcept + { + FOONATHAN_MEMORY_ASSERT(address); + std::uintptr_t res; +#if FOONATHAN_HOSTED_IMPLEMENTATION + std::memcpy(&res, address, sizeof(std::uintptr_t)); +#else + auto mem = static_cast(static_cast(&res)); + for (auto i = 0u; i != sizeof(std::uintptr_t); ++i) + mem[i] = static_cast(address)[i]; +#endif + return res; + } - // advances a pointer pair forward/backward - inline void xor_list_iter_next(char *&cur, char *&prev) noexcept - { - auto next = xor_list_get_other(cur, prev); - prev = cur; - cur = next; - } + // sets stored integer value + inline void set_int(void* address, std::uintptr_t i) noexcept + { + FOONATHAN_MEMORY_ASSERT(address); +#if FOONATHAN_HOSTED_IMPLEMENTATION + std::memcpy(address, &i, sizeof(std::uintptr_t)); +#else + auto mem = static_cast(static_cast(&i)); + for (auto i = 0u; i != sizeof(std::uintptr_t); ++i) + static_cast(address)[i] = mem[i]; +#endif + } - // links new node between prev and next - inline void xor_list_insert(char *new_node, char *prev, char *next) noexcept - { - xor_list_set(new_node, prev, next); - xor_list_change(prev, next, new_node); // change prev's next to new_node - xor_list_change(next, prev, new_node); // change next's prev to new_node - } - - //=== sorted list utils ===// - // if std::less/std::greater not available compare integer representation and hope it works - inline bool less(void *a, void *b) noexcept - { + // pointer to integer + inline std::uintptr_t to_int(char* ptr) noexcept + { + return reinterpret_cast(ptr); + } + + // integer to pointer + inline char* from_int(std::uintptr_t i) noexcept + { + return reinterpret_cast(i); + } + + //=== intrusive linked list ===// + // reads a stored pointer value + inline char* list_get_next(void* address) noexcept + { + return from_int(get_int(address)); + } + + // stores a pointer value + inline void list_set_next(void* address, char* ptr) noexcept + { + set_int(address, to_int(ptr)); + } + + //=== intrusive xor linked list ===// + // returns the other pointer given one pointer + inline char* xor_list_get_other(void* address, char* prev_or_next) noexcept + { + return from_int(get_int(address) ^ to_int(prev_or_next)); + } + + // sets the next and previous pointer (order actually does not matter) + inline void xor_list_set(void* address, char* prev, char* next) noexcept + { + set_int(address, to_int(prev) ^ to_int(next)); + } + + // changes other pointer given one pointer + inline void xor_list_change(void* address, char* old_ptr, char* new_ptr) noexcept + { + FOONATHAN_MEMORY_ASSERT(address); + auto other = xor_list_get_other(address, old_ptr); + xor_list_set(address, other, new_ptr); + } + + // advances a pointer pair forward/backward + inline void xor_list_iter_next(char*& cur, char*& prev) noexcept + { + auto next = xor_list_get_other(cur, prev); + prev = cur; + cur = next; + } + + // links new node between prev and next + inline void xor_list_insert(char* new_node, char* prev, char* next) noexcept + { + xor_list_set(new_node, prev, next); + xor_list_change(prev, next, new_node); // change prev's next to new_node + xor_list_change(next, prev, new_node); // change next's prev to new_node + } + + //=== sorted list utils ===// + // if std::less/std::greater not available compare integer representation and hope it works + inline bool less(void* a, void* b) noexcept + { #if FOONATHAN_HOSTED_IMPLEMENTATION - return std::less()(a, b); + return std::less()(a, b); #else - return to_int(a) < to_int(b); + return to_int(a) < to_int(b); #endif - } + } - inline bool less_equal(void *a, void *b) noexcept - { - return a == b || less(a, b); - } + inline bool less_equal(void* a, void* b) noexcept + { + return a == b || less(a, b); + } - inline bool greater(void *a, void *b) noexcept - { + inline bool greater(void* a, void* b) noexcept + { #if FOONATHAN_HOSTED_IMPLEMENTATION - return std::greater()(a, b); + return std::greater()(a, b); #else - return to_int(a) < to_int(b); + return to_int(a) < to_int(b); #endif - } + } - inline bool greater_equal(void *a, void *b) noexcept - { - return a == b || greater(a, b); - } - } // namespace detail -}} // namespace foonathan::memory + inline bool greater_equal(void* a, void* b) noexcept + { + return a == b || greater(a, b); + } + } // namespace detail + } // namespace memory +} // namespace foonathan #endif // FOONATHAN_MEMORY_SRC_DETAIL_FREE_LIST_UTILS_HPP_INCLUDED diff -Nru foonathan-memory-0.7/src/detail/small_free_list.cpp foonathan-memory-0.7.1/src/detail/small_free_list.cpp --- foonathan-memory-0.7/src/detail/small_free_list.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/detail/small_free_list.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,13 +1,11 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "detail/small_free_list.hpp" -#include #include -#include "detail/align.hpp" #include "detail/debug_helpers.hpp" #include "detail/assert.hpp" #include "error.hpp" @@ -19,14 +17,13 @@ struct foonathan::memory::detail::chunk : chunk_base { - static const std::size_t memory_offset; - static const std::size_t max_nodes; - // gives it the size of the memory block it is created in and the size of a node chunk(std::size_t total_memory, std::size_t node_size) noexcept - : chunk_base(static_cast((total_memory - memory_offset) / node_size)) + : chunk_base(static_cast((total_memory - chunk_memory_offset) / node_size)) { - FOONATHAN_MEMORY_ASSERT((total_memory - memory_offset) / node_size <= max_nodes); + static_assert(sizeof(chunk) == sizeof(chunk_base), "chunk must not have members"); + FOONATHAN_MEMORY_ASSERT((total_memory - chunk_memory_offset) / node_size + <= chunk_max_nodes); FOONATHAN_MEMORY_ASSERT(capacity > 0); auto p = list_memory(); for (unsigned char i = 0u; i != no_nodes; p += node_size) @@ -37,7 +34,7 @@ unsigned char* list_memory() noexcept { auto mem = static_cast(this); - return static_cast(mem) + memory_offset; + return static_cast(mem) + chunk_memory_offset; } // returns the nth node @@ -91,12 +88,6 @@ } }; -const std::size_t chunk::memory_offset = - sizeof(chunk) % detail::max_alignment == 0 ? - sizeof(chunk) : - (sizeof(chunk) / detail::max_alignment + 1) * detail::max_alignment; -const std::size_t chunk::max_nodes = std::numeric_limits::max(); - namespace { // converts a chunk_base to a chunk (if it is one) @@ -108,7 +99,7 @@ // same as above but also requires a certain size chunk* make_chunk(chunk_base* c, std::size_t size_needed) noexcept { - FOONATHAN_MEMORY_ASSERT(size_needed <= std::numeric_limits::max()); + FOONATHAN_MEMORY_ASSERT(size_needed <= chunk_max_nodes); return c->capacity >= size_needed ? make_chunk(c) : nullptr; } @@ -162,10 +153,7 @@ constexpr std::size_t small_free_memory_list::min_element_alignment; small_free_memory_list::small_free_memory_list(std::size_t node_size) noexcept -: node_size_(node_size), - capacity_(0u), - alloc_chunk_(&base_), - dealloc_chunk_(&base_) +: node_size_(node_size), capacity_(0u), alloc_chunk_(&base_), dealloc_chunk_(&base_) { } @@ -201,8 +189,7 @@ } } -void foonathan::memory::detail::swap(small_free_memory_list& a, - small_free_memory_list& b) noexcept +void foonathan::memory::detail::swap(small_free_memory_list& a, small_free_memory_list& b) noexcept { auto b_next = b.base_.next; auto b_prev = b.base_.prev; @@ -247,15 +234,15 @@ FOONATHAN_MEMORY_ASSERT(is_aligned(mem, max_alignment)); debug_fill_internal(mem, size, false); - auto actual_size = node_size_ + 2 * fence_size(); - auto total_chunk_size = chunk::memory_offset + actual_size * chunk::max_nodes; + auto total_chunk_size = chunk_memory_offset + node_size_ * chunk_max_nodes; auto align_buffer = align_offset(total_chunk_size, alignof(chunk)); auto no_chunks = size / (total_chunk_size + align_buffer); auto remainder = size % (total_chunk_size + align_buffer); auto memory = static_cast(mem); - auto construct_chunk = [&](std::size_t total_memory, std::size_t node_size) { + auto construct_chunk = [&](std::size_t total_memory, std::size_t node_size) + { FOONATHAN_MEMORY_ASSERT(align_offset(memory, alignof(chunk)) == 0); return ::new (static_cast(memory)) chunk(total_memory, node_size); }; @@ -263,7 +250,7 @@ auto prev = static_cast(nullptr); for (auto i = std::size_t(0); i != no_chunks; ++i) { - auto c = construct_chunk(total_chunk_size, actual_size); + auto c = construct_chunk(total_chunk_size, node_size_); c->prev = prev; if (prev) @@ -274,10 +261,10 @@ memory += align_buffer; } - auto new_nodes = no_chunks * chunk::max_nodes; - if (remainder >= chunk::memory_offset + actual_size) // at least one node + auto new_nodes = no_chunks * chunk_max_nodes; + if (remainder >= chunk_memory_offset + node_size_) // at least one node { - auto c = construct_chunk(remainder, actual_size); + auto c = construct_chunk(remainder, node_size_); c->prev = prev; if (prev) @@ -294,13 +281,12 @@ std::size_t small_free_memory_list::usable_size(std::size_t size) const noexcept { - auto actual_size = node_size_ + 2 * fence_size(); - auto total_chunk_size = chunk::memory_offset + actual_size * chunk::max_nodes; + auto total_chunk_size = chunk_memory_offset + node_size_ * chunk_max_nodes; auto no_chunks = size / total_chunk_size; auto remainder = size % total_chunk_size; - return no_chunks * chunk::max_nodes * actual_size - + (remainder > chunk::memory_offset ? remainder - chunk::memory_offset : 0u); + return no_chunks * chunk_max_nodes * node_size_ + + (remainder > chunk_memory_offset ? remainder - chunk_memory_offset : 0u); } void* small_free_memory_list::allocate() noexcept @@ -311,9 +297,9 @@ --capacity_; - auto mem = chunk->allocate(node_size_ + 2 * fence_size()); + auto mem = chunk->allocate(node_size_); FOONATHAN_MEMORY_ASSERT(mem); - return detail::debug_fill_new(mem, node_size_, fence_size()); + return detail::debug_fill_new(mem, node_size_, 0); } void small_free_memory_list::deallocate(void* mem) noexcept @@ -321,21 +307,20 @@ auto info = allocator_info(FOONATHAN_MEMORY_LOG_PREFIX "::detail::small_free_memory_list", this); - auto actual_size = node_size_ + 2 * fence_size(); - auto node = static_cast(detail::debug_fill_free(mem, node_size_, fence_size())); + auto node = static_cast(detail::debug_fill_free(mem, node_size_, 0)); auto chunk = find_chunk_impl(node); dealloc_chunk_ = chunk; // memory was never allocated from list detail::debug_check_pointer([&] { return chunk != nullptr; }, info, mem); - auto offset = node - chunk->list_memory(); + auto offset = static_cast(node - chunk->list_memory()); // memory is not at the right position - debug_check_pointer([&] { return offset % actual_size == 0u; }, info, mem); + debug_check_pointer([&] { return offset % node_size_ == 0u; }, info, mem); // double-free - debug_check_double_dealloc([&] { return !chunk->contains(node, actual_size); }, info, mem); + debug_check_double_dealloc([&] { return !chunk->contains(node, node_size_); }, info, mem); - auto index = offset / actual_size; + auto index = offset / node_size_; FOONATHAN_MEMORY_ASSERT(index < chunk->no_nodes); chunk->deallocate(node, static_cast(index)); @@ -347,12 +332,6 @@ return alignment_for(node_size_); } -std::size_t small_free_memory_list::fence_size() const noexcept -{ - // node size is fence size - return debug_fence_size ? node_size_ : 0u; -} - chunk* small_free_memory_list::find_chunk_impl(std::size_t n) noexcept { if (auto c = make_chunk(alloc_chunk_, n)) @@ -382,13 +361,11 @@ chunk* small_free_memory_list::find_chunk_impl(unsigned char* node, chunk_base* first, chunk_base* last) noexcept { - auto actual_size = node_size_ + 2 * fence_size(); - do { - if (auto c = from_chunk(first, node, actual_size)) + if (auto c = from_chunk(first, node, node_size_)) return c; - else if ((c = from_chunk(last, node, actual_size)) != nullptr) + else if ((c = from_chunk(last, node, node_size_)) != nullptr) return c; first = first->next; @@ -399,11 +376,9 @@ chunk* small_free_memory_list::find_chunk_impl(unsigned char* node) noexcept { - auto actual_size = node_size_ + 2 * fence_size(); - - if (auto c = from_chunk(dealloc_chunk_, node, actual_size)) + if (auto c = from_chunk(dealloc_chunk_, node, node_size_)) return c; - else if ((c = from_chunk(alloc_chunk_, node, actual_size)) != nullptr) + else if ((c = from_chunk(alloc_chunk_, node, node_size_)) != nullptr) return c; else if (less(dealloc_chunk_, node)) { diff -Nru foonathan-memory-0.7/src/error.cpp foonathan-memory-0.7.1/src/error.cpp --- foonathan-memory-0.7/src/error.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/error.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -60,7 +60,7 @@ #if FOONATHAN_HOSTED_IMPLEMENTATION std::fprintf(stderr, "[%s] Allocator %s (at %p) received invalid size/alignment %zu, " - "max supported is %zu", + "max supported is %zu\n", FOONATHAN_MEMORY_LOG_PREFIX, info.name, info.allocator, passed, supported); #endif } diff -Nru foonathan-memory-0.7/src/heap_allocator.cpp foonathan-memory-0.7.1/src/heap_allocator.cpp --- foonathan-memory-0.7/src/heap_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/heap_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -24,7 +24,7 @@ { return _HEAP_MAXREQ; } -} +} // namespace void* foonathan::memory::heap_alloc(std::size_t size) noexcept { @@ -56,7 +56,7 @@ { return std::allocator_traits>::max_size({}); } -} +} // namespace #else // no implementation for heap_alloc/heap_dealloc @@ -66,7 +66,7 @@ { return std::size_t(-1); } -} +} // namespace #endif allocator_info detail::heap_allocator_impl::info() noexcept diff -Nru foonathan-memory-0.7/src/iteration_allocator.cpp foonathan-memory-0.7.1/src/iteration_allocator.cpp --- foonathan-memory-0.7/src/iteration_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/iteration_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/src/malloc_allocator.cpp foonathan-memory-0.7.1/src/malloc_allocator.cpp --- foonathan-memory-0.7/src/malloc_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/malloc_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/src/memory_arena.cpp foonathan-memory-0.7.1/src/memory_arena.cpp --- foonathan-memory-0.7/src/memory_arena.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/memory_arena.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -13,6 +13,7 @@ void memory_block_stack::push(allocated_mb block) noexcept { + FOONATHAN_MEMORY_ASSERT(block.size >= sizeof(node)); FOONATHAN_MEMORY_ASSERT(is_aligned(block.memory, max_alignment)); auto next = ::new (block.memory) node(head_, block.size - implementation_offset()); head_ = next; diff -Nru foonathan-memory-0.7/src/memory_pool_collection.cpp foonathan-memory-0.7.1/src/memory_pool_collection.cpp --- foonathan-memory-0.7/src/memory_pool_collection.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/memory_pool_collection.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -22,30 +22,30 @@ template class foonathan::memory::memory_pool_collection; template class foonathan::memory::memory_pool_collection; -template class foonathan::memory::allocator_traits>; -template class foonathan::memory::allocator_traits>; -template class foonathan::memory::allocator_traits>; +template class foonathan::memory::allocator_traits< + memory_pool_collection>; +template class foonathan::memory::allocator_traits< + memory_pool_collection>; +template class foonathan::memory::allocator_traits< + memory_pool_collection>; template class foonathan::memory::allocator_traits>; -template class foonathan::memory::allocator_traits>; -template class foonathan::memory::allocator_traits>; - -template class foonathan::memory:: - composable_allocator_traits>; -template class foonathan::memory:: - composable_allocator_traits>; -template class foonathan::memory:: - composable_allocator_traits>; - -template class foonathan::memory::composable_allocator_traits>; -template class foonathan::memory::composable_allocator_traits>; -template class foonathan::memory:: - composable_allocator_traits>; +template class foonathan::memory::allocator_traits< + memory_pool_collection>; +template class foonathan::memory::allocator_traits< + memory_pool_collection>; + +template class foonathan::memory::composable_allocator_traits< + memory_pool_collection>; +template class foonathan::memory::composable_allocator_traits< + memory_pool_collection>; +template class foonathan::memory::composable_allocator_traits< + memory_pool_collection>; + +template class foonathan::memory::composable_allocator_traits< + memory_pool_collection>; +template class foonathan::memory::composable_allocator_traits< + memory_pool_collection>; +template class foonathan::memory::composable_allocator_traits< + memory_pool_collection>; #endif diff -Nru foonathan-memory-0.7/src/memory_pool.cpp foonathan-memory-0.7.1/src/memory_pool.cpp --- foonathan-memory-0.7/src/memory_pool.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/memory_pool.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/src/memory_stack.cpp foonathan-memory-0.7.1/src/memory_stack.cpp --- foonathan-memory-0.7/src/memory_stack.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/memory_stack.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/src/new_allocator.cpp foonathan-memory-0.7.1/src/new_allocator.cpp --- foonathan-memory-0.7/src/new_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/new_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/src/static_allocator.cpp foonathan-memory-0.7.1/src/static_allocator.cpp --- foonathan-memory-0.7/src/static_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/static_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/src/temporary_allocator.cpp foonathan-memory-0.7.1/src/temporary_allocator.cpp --- foonathan-memory-0.7/src/temporary_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/temporary_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -46,8 +46,7 @@ auto memory = temporary_impl_allocator_traits::allocate_array(alloc, block_size_, 1, detail::max_alignment); auto block = memory_block(memory, block_size_); - block_size_ = std::size_t(block_size_ - * growing_block_allocator::growth_factor()); + block_size_ = growing_block_allocator::grow_block_size(block_size_); return block; } diff -Nru foonathan-memory-0.7/src/virtual_memory.cpp foonathan-memory-0.7.1/src/virtual_memory.cpp --- foonathan-memory-0.7/src/virtual_memory.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/src/virtual_memory.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -37,7 +37,7 @@ void* foonathan::memory::virtual_memory_reserve(std::size_t no_pages) noexcept { auto pages = -#if (_MSC_VER <= 1900) +#if (_MSC_VER <= 1900) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) VirtualAlloc(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, PAGE_READWRITE); #else VirtualAllocFromApp(nullptr, no_pages * virtual_memory_page_size, MEM_RESERVE, @@ -55,7 +55,7 @@ void* foonathan::memory::virtual_memory_commit(void* memory, std::size_t no_pages) noexcept { auto region = -#if (_MSC_VER <= 1900) +#if (_MSC_VER <= 1900) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) VirtualAlloc(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, PAGE_READWRITE); #else VirtualAllocFromApp(memory, no_pages * virtual_memory_page_size, MEM_COMMIT, @@ -82,7 +82,8 @@ #elif defined(PAGE_SIZE) const std::size_t foonathan::memory::virtual_memory_page_size = PAGE_SIZE; #else -const std::size_t foonathan::memory::virtual_memory_page_size = sysconf(_SC_PAGESIZE); +const std::size_t foonathan::memory::virtual_memory_page_size = + static_cast(sysconf(_SC_PAGESIZE)); #endif #ifndef MAP_ANONYMOUS @@ -107,7 +108,7 @@ { auto size = no_pages * virtual_memory_page_size; auto result = mprotect(memory, size, PROT_WRITE | PROT_READ); - if (result != 0u) + if (result != 0) return nullptr; // advise that the memory will be needed @@ -205,7 +206,7 @@ virtual_block_allocator::~virtual_block_allocator() noexcept { - virtual_memory_release(cur_, (end_ - cur_) / virtual_memory_page_size); + virtual_memory_release(cur_, static_cast(end_ - cur_) / virtual_memory_page_size); } memory_block virtual_block_allocator::allocate_block() @@ -221,9 +222,9 @@ void virtual_block_allocator::deallocate_block(memory_block block) noexcept { - detail:: - debug_check_pointer([&] { return static_cast(block.memory) == cur_ - block_size_; }, - info(), block.memory); + detail::debug_check_pointer([&] + { return static_cast(block.memory) == cur_ - block_size_; }, + info(), block.memory); cur_ -= block_size_; virtual_memory_decommit(cur_, block_size_); } diff -Nru foonathan-memory-0.7/test/aligned_allocator.cpp foonathan-memory-0.7.1/test/aligned_allocator.cpp --- foonathan-memory-0.7/test/aligned_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/aligned_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,10 +1,10 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "aligned_allocator.hpp" -#include +#include #include "detail/align.hpp" #include "allocator_storage.hpp" @@ -12,7 +12,7 @@ using namespace foonathan::memory; -TEST_CASE("aligned_allocator", "[adapter]") +TEST_CASE("aligned_allocator") { using allocator_t = aligned_allocator>>; diff -Nru foonathan-memory-0.7/test/allocator_traits.cpp foonathan-memory-0.7.1/test/allocator_traits.cpp --- foonathan-memory-0.7/test/allocator_traits.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/allocator_traits.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,10 +1,10 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "allocator_traits.hpp" -#include +#include #include @@ -25,9 +25,7 @@ using value_type = T; using pointer = T; - void construct(pointer, T) - { - } + void construct(pointer, T) {} }; static_assert(!allocator_is_raw_allocator>::value, ""); @@ -45,8 +43,8 @@ struct allocator_traits { }; - } -} // namespace foonathan::memory + } // namespace memory +} // namespace foonathan static_assert(is_raw_allocator::value, ""); @@ -151,7 +149,7 @@ REQUIRE(i == array); } -TEST_CASE("allocator_traits", "[core]") +TEST_CASE("allocator_traits") { struct min_raw_allocator { @@ -191,7 +189,7 @@ static_assert(is_raw_allocator::value, ""); - SECTION("node") + SUBCASE("node") { // minimum interface works min_raw_allocator min; @@ -219,7 +217,7 @@ REQUIRE(!both.alloc); REQUIRE(!both.dealloc); } - SECTION("array") + SUBCASE("array") { // minimum interface works min_raw_allocator min; @@ -292,7 +290,7 @@ REQUIRE(!array4.alloc); REQUIRE(!array4.dealloc); } - SECTION("max getter") + SUBCASE("max getter") { min_raw_allocator min; test_max_getter(min, detail::max_alignment, std::size_t(-1), std::size_t(-1)); @@ -366,9 +364,7 @@ return nullptr; } - void deallocate_node(void*, std::size_t, std::size_t) noexcept - { - } + void deallocate_node(void*, std::size_t, std::size_t) noexcept {} void* try_allocate_node(std::size_t, std::size_t) { @@ -384,14 +380,14 @@ }; static_assert(is_composable_allocator::value, ""); - SECTION("node") + SUBCASE("node") { min_composable_allocator alloc; test_try_node(alloc); REQUIRE(alloc.alloc_node); REQUIRE(alloc.dealloc_node); } - SECTION("array") + SUBCASE("array") { min_composable_allocator min; test_try_array(min); @@ -408,8 +404,7 @@ return nullptr; } - bool try_deallocate_array(void*, std::size_t, std::size_t, - std::size_t) noexcept + bool try_deallocate_array(void*, std::size_t, std::size_t, std::size_t) noexcept { dealloc_array = true; return true; diff -Nru foonathan-memory-0.7/test/benchmark.hpp foonathan-memory-0.7.1/test/benchmark.hpp --- foonathan-memory-0.7/test/benchmark.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/benchmark.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -45,9 +45,7 @@ { std::size_t count; - single(std::size_t c) : count(c) - { - } + single(std::size_t c) : count(c) {} template std::size_t operator()(RawAllocator& alloc, std::size_t size) @@ -89,9 +87,7 @@ order_func func; std::size_t count; - basic_bulk(order_func f, std::size_t c) : func(f), count(c) - { - } + basic_bulk(order_func f, std::size_t c) : func(f), count(c) {} template std::size_t operator()(RawAllocator& alloc, std::size_t node_size) @@ -138,9 +134,7 @@ struct bulk : basic_bulk { - bulk(std::size_t c) : basic_bulk([](std::vector&) {}, c) - { - } + bulk(std::size_t c) : basic_bulk([](std::vector&) {}, c) {} static const char* name() { diff -Nru foonathan-memory-0.7/test/CMakeLists.txt foonathan-memory-0.7.1/test/CMakeLists.txt --- foonathan-memory-0.7/test/CMakeLists.txt 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/CMakeLists.txt 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Jonathan Müller +# Copyright (C) 2015-2021 Müller # This file is subject to the license terms in the LICENSE file # found in the top-level directory of this distribution. @@ -9,21 +9,11 @@ target_include_directories(foonathan_memory_profiling PRIVATE ${FOONATHAN_MEMORY_SOURCE_DIR}/include/foonathan/memory) -if(NOT EXISTS ${CMAKE_CURRENT_BINARY_DIR}/catch.hpp) - file(DOWNLOAD - https://raw.githubusercontent.com/catchorg/Catch2/2e61d38c7c3078e600c331257b5bebfb81aaa685/single_include/catch2/catch.hpp - ${CMAKE_CURRENT_BINARY_DIR}/catch.hpp - STATUS status - LOG log) - - list(GET status 0 status_code) - list(GET status 1 status_string) - - if(NOT status_code EQUAL 0) - message(FATAL_ERROR "error downloading catch: ${status_string}" - "${log}") - endif() -endif() +# Fetch doctest. +message(STATUS "Fetching doctest") +include(FetchContent) +FetchContent_Declare(doctest URL https://github.com/onqtam/doctest/archive/2.4.5.zip) +FetchContent_MakeAvailable(doctest) set(tests test_allocator.hpp @@ -49,9 +39,9 @@ smart_ptr.cpp) add_executable(foonathan_memory_test ${tests}) -target_link_libraries(foonathan_memory_test foonathan_memory) +target_link_libraries(foonathan_memory_test PRIVATE foonathan_memory doctest::doctest) target_include_directories(foonathan_memory_test PRIVATE - ${CMAKE_CURRENT_BINARY_DIR} ${FOONATHAN_MEMORY_SOURCE_DIR}/include/foonathan/memory) add_test(NAME test COMMAND foonathan_memory_test) + diff -Nru foonathan-memory-0.7/test/default_allocator.cpp foonathan-memory-0.7.1/test/default_allocator.cpp --- foonathan-memory-0.7/test/default_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/default_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -6,7 +6,8 @@ #include "default_allocator.hpp" -#include +#include +#include #include "detail/align.hpp" @@ -40,25 +41,25 @@ alloc.deallocate_node(nodes[i], i, 1); } -TEST_CASE("heap_allocator", "[default_allocator]") +TEST_CASE("heap_allocator") { heap_allocator alloc; check_default_allocator(alloc); } -TEST_CASE("new_allocator", "[default_allocator]") +TEST_CASE("new_allocator") { new_allocator alloc; check_default_allocator(alloc); } -TEST_CASE("malloc_allocator", "[default_allocator]") +TEST_CASE("malloc_allocator") { malloc_allocator alloc; check_default_allocator(alloc); } -TEST_CASE("static_allocator", "[default_allocator]") +TEST_CASE("static_allocator") { static_allocator_storage<1024> storage; static_allocator alloc(storage); @@ -67,7 +68,7 @@ check_default_allocator(alloc, 1); } -TEST_CASE("virtual_memory_allocator", "[default_allocator]") +TEST_CASE("virtual_memory_allocator") { virtual_memory_allocator alloc; check_default_allocator(alloc, virtual_memory_page_size); diff -Nru foonathan-memory-0.7/test/detail/align.cpp foonathan-memory-0.7.1/test/detail/align.cpp --- foonathan-memory-0.7/test/detail/align.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/detail/align.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,15 +1,15 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "detail/align.hpp" -#include +#include using namespace foonathan::memory; using namespace detail; -TEST_CASE("detail::align_offset", "[detail][core]") +TEST_CASE("detail::align_offset") { auto ptr = reinterpret_cast(0); REQUIRE(align_offset(ptr, 1) == 0u); @@ -27,7 +27,7 @@ REQUIRE(align_offset(ptr, 16) == 15u); } -TEST_CASE("detail::is_aligned", "[detail][core]") +TEST_CASE("detail::is_aligned") { auto ptr = reinterpret_cast(0); REQUIRE(is_aligned(ptr, 1)); @@ -50,7 +50,7 @@ REQUIRE(!is_aligned(ptr, 16)); } -TEST_CASE("detail::alignment_for", "[detail][core]") +TEST_CASE("detail::alignment_for") { static_assert(max_alignment >= 8, "test case not working"); REQUIRE(alignment_for(1) == 1); diff -Nru foonathan-memory-0.7/test/detail/debug_helpers.cpp foonathan-memory-0.7.1/test/detail/debug_helpers.cpp --- foonathan-memory-0.7/test/detail/debug_helpers.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/detail/debug_helpers.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,17 +1,17 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "detail/debug_helpers.hpp" -#include +#include #include "debugging.hpp" using namespace foonathan::memory; using namespace detail; -TEST_CASE("detail::debug_fill", "[detail][core]") +TEST_CASE("detail::debug_fill") { debug_magic array[10]; for (auto& el : array) @@ -27,7 +27,7 @@ #endif } -TEST_CASE("detail::debug_is_filled", "[detail][core]") +TEST_CASE("detail::debug_is_filled") { debug_magic array[10]; for (auto& el : array) @@ -45,7 +45,7 @@ #endif } -TEST_CASE("detail::debug_fill_new/free", "[detail][core]") +TEST_CASE("detail::debug_fill_new/free") { debug_magic array[10]; diff -Nru foonathan-memory-0.7/test/detail/free_list_array.cpp foonathan-memory-0.7.1/test/detail/free_list_array.cpp --- foonathan-memory-0.7/test/detail/free_list_array.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/detail/free_list_array.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,10 +1,10 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "detail/free_list_array.hpp" -#include +#include #include "detail/free_list.hpp" #include "detail/small_free_list.hpp" @@ -13,7 +13,7 @@ using namespace foonathan::memory; using namespace detail; -TEST_CASE("detail::log2_access_policy", "[detail][pool]") +TEST_CASE("detail::log2_access_policy") { using ap = detail::log2_access_policy; REQUIRE(ap::index_from_size(1) == 0u); @@ -31,11 +31,11 @@ REQUIRE(ap::size_from_index(3) == 8u); } -TEST_CASE("detail::free_list_array", "[detail][pool]") +TEST_CASE("detail::free_list_array") { static_allocator_storage<1024> memory; detail::fixed_memory_stack stack(&memory); - SECTION("power of two max size, small list") + SUBCASE("power of two max size, small list") { using array = detail::free_list_array; @@ -51,7 +51,7 @@ REQUIRE(arr.get(9u).node_size() == 16u); REQUIRE(arr.get(16u).node_size() == 16u); } - SECTION("non power of two max size, small list") + SUBCASE("non power of two max size, small list") { using array = detail::free_list_array; @@ -67,7 +67,7 @@ REQUIRE(arr.get(9u).node_size() == 16u); REQUIRE(arr.get(15u).node_size() == 16u); } - SECTION("non power of two max size, normal list") + SUBCASE("non power of two max size, normal list") { using array = detail::free_list_array; array arr(stack, stack.top() + 1024, 15); diff -Nru foonathan-memory-0.7/test/detail/free_list.cpp foonathan-memory-0.7.1/test/detail/free_list.cpp --- foonathan-memory-0.7/test/detail/free_list.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/detail/free_list.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. @@ -6,7 +6,7 @@ #include "detail/small_free_list.hpp" #include -#include +#include #include #include @@ -21,22 +21,67 @@ { std::vector ptrs; auto capacity = list.capacity(); - for (std::size_t i = 0u; i != capacity; ++i) + + // allocate and deallocate in reverse order { - auto ptr = list.allocate(); - REQUIRE(ptr); - REQUIRE(is_aligned(ptr, list.alignment())); - ptrs.push_back(ptr); + for (std::size_t i = 0u; i != capacity; ++i) + { + auto ptr = list.allocate(); + REQUIRE(ptr); + REQUIRE(is_aligned(ptr, list.alignment())); + ptrs.push_back(ptr); + } + REQUIRE(list.capacity() == 0u); + REQUIRE(list.empty()); + + std::reverse(ptrs.begin(), ptrs.end()); + + for (auto p : ptrs) + list.deallocate(p); + REQUIRE(list.capacity() == capacity); + REQUIRE(!list.empty()); + ptrs.clear(); } - REQUIRE(list.capacity() == 0u); - REQUIRE(list.empty()); - std::shuffle(ptrs.begin(), ptrs.end(), std::mt19937{}); + // allocate and deallocate in same order + { + for (std::size_t i = 0u; i != capacity; ++i) + { + auto ptr = list.allocate(); + REQUIRE(ptr); + REQUIRE(is_aligned(ptr, list.alignment())); + ptrs.push_back(ptr); + } + REQUIRE(list.capacity() == 0u); + REQUIRE(list.empty()); + + for (auto p : ptrs) + list.deallocate(p); + REQUIRE(list.capacity() == capacity); + REQUIRE(!list.empty()); + ptrs.clear(); + } - for (auto p : ptrs) - list.deallocate(p); - REQUIRE(list.capacity() == capacity); - REQUIRE(!list.empty()); + // allocate and deallocate in random order + { + for (std::size_t i = 0u; i != capacity; ++i) + { + auto ptr = list.allocate(); + REQUIRE(ptr); + REQUIRE(is_aligned(ptr, list.alignment())); + ptrs.push_back(ptr); + } + REQUIRE(list.capacity() == 0u); + REQUIRE(list.empty()); + + std::shuffle(ptrs.begin(), ptrs.end(), std::mt19937{}); + + for (auto p : ptrs) + list.deallocate(p); + REQUIRE(list.capacity() == capacity); + REQUIRE(!list.empty()); + ptrs.clear(); + } } template @@ -101,28 +146,28 @@ list.deallocate(ptr); } -TEST_CASE("free_memory_list", "[detail][pool]") +TEST_CASE("free_memory_list") { free_memory_list list(4); REQUIRE(list.empty()); REQUIRE(list.node_size() >= 4); REQUIRE(list.capacity() == 0u); - SECTION("normal insert") + SUBCASE("normal insert") { static_allocator_storage<1024> memory; check_list(list, &memory, 1024); check_move(list); } - SECTION("uneven insert") + SUBCASE("uneven insert") { static_allocator_storage<1023> memory; // not dividable check_list(list, &memory, 1023); check_move(list); } - SECTION("multiple insert") + SUBCASE("multiple insert") { static_allocator_storage<1024> a; static_allocator_storage<100> b; @@ -137,43 +182,74 @@ void use_list_array(ordered_free_memory_list& list) { - // just hoping to catch segfaults - - auto array = list.allocate(3 * list.node_size()); - REQUIRE(array); - REQUIRE(is_aligned(array, list.alignment())); - auto array2 = list.allocate(2 * 3); - REQUIRE(array2); - REQUIRE(is_aligned(array2, list.alignment())); - auto node = list.allocate(); - REQUIRE(node); - REQUIRE(is_aligned(node, list.alignment())); - - list.deallocate(array2, 2 * 3); - list.deallocate(node); - - array2 = list.allocate(4 * 10); - REQUIRE(array2); - REQUIRE(is_aligned(array2, list.alignment())); + std::vector ptrs; + auto capacity = list.capacity(); + // We would need capacity / 3 nodes, but the memory might not be contiguous. + auto number_of_allocations = capacity / 6; - list.deallocate(array, 3 * list.node_size()); + // allocate and deallocate in reverse order + { + for (std::size_t i = 0u; i != number_of_allocations; ++i) + { + auto ptr = list.allocate(3 * list.node_size()); + REQUIRE(ptr); + REQUIRE(is_aligned(ptr, list.alignment())); + ptrs.push_back(ptr); + } + + std::reverse(ptrs.begin(), ptrs.end()); + + for (auto p : ptrs) + list.deallocate(p, 3 * list.node_size()); + REQUIRE(list.capacity() == capacity); + ptrs.clear(); + } - node = list.allocate(); - REQUIRE(node); - REQUIRE(is_aligned(node, list.alignment())); - list.deallocate(node); + // allocate and deallocate in same order + { + for (std::size_t i = 0u; i != number_of_allocations; ++i) + { + auto ptr = list.allocate(3 * list.node_size()); + REQUIRE(ptr); + REQUIRE(is_aligned(ptr, list.alignment())); + ptrs.push_back(ptr); + } + + for (auto p : ptrs) + list.deallocate(p, 3 * list.node_size()); + REQUIRE(list.capacity() == capacity); + REQUIRE(!list.empty()); + ptrs.clear(); + } - list.deallocate(array2, 4 * 10); + // allocate and deallocate in random order + { + for (std::size_t i = 0u; i != number_of_allocations; ++i) + { + auto ptr = list.allocate(3 * list.node_size()); + REQUIRE(ptr); + REQUIRE(is_aligned(ptr, list.alignment())); + ptrs.push_back(ptr); + } + + std::shuffle(ptrs.begin(), ptrs.end(), std::mt19937{}); + + for (auto p : ptrs) + list.deallocate(p, 3 * list.node_size()); + REQUIRE(list.capacity() == capacity); + REQUIRE(!list.empty()); + ptrs.clear(); + } } -TEST_CASE("ordered_free_memory_list", "[detail][pool]") +TEST_CASE("ordered_free_memory_list") { ordered_free_memory_list list(4); REQUIRE(list.empty()); REQUIRE(list.node_size() >= 4); REQUIRE(list.capacity() == 0u); - SECTION("normal insert") + SUBCASE("normal insert") { static_allocator_storage<1024> memory; check_list(list, &memory, 1024); @@ -181,7 +257,7 @@ check_move(list); } - SECTION("uneven insert") + SUBCASE("uneven insert") { static_allocator_storage<1023> memory; // not dividable check_list(list, &memory, 1023); @@ -189,7 +265,7 @@ check_move(list); } - SECTION("multiple insert") + SUBCASE("multiple insert") { static_allocator_storage<1024> a; static_allocator_storage<100> b; @@ -205,35 +281,35 @@ } } -TEST_CASE("small_free_memory_list", "[detail][pool]") +TEST_CASE("small_free_memory_list") { small_free_memory_list list(4); REQUIRE(list.empty()); REQUIRE(list.node_size() == 4); REQUIRE(list.capacity() == 0u); - SECTION("normal insert") + SUBCASE("normal insert") { static_allocator_storage<1024> memory; check_list(list, &memory, 1024); check_move(list); } - SECTION("uneven insert") + SUBCASE("uneven insert") { static_allocator_storage<1023> memory; // not dividable check_list(list, &memory, 1023); check_move(list); } - SECTION("big insert") + SUBCASE("big insert") { static_allocator_storage<4096> memory; // should use multiple chunks check_list(list, &memory, 4096); check_move(list); } - SECTION("multiple insert") + SUBCASE("multiple insert") { static_allocator_storage<1024> a; static_allocator_storage<100> b; diff -Nru foonathan-memory-0.7/test/detail/ilog2.cpp foonathan-memory-0.7.1/test/detail/ilog2.cpp --- foonathan-memory-0.7/test/detail/ilog2.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/detail/ilog2.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,15 +1,15 @@ -// Copyright (C) 2016-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "detail/ilog2.hpp" -#include +#include using namespace foonathan::memory; using namespace detail; -TEST_CASE("detail::ilog2()", "[detail][core]") +TEST_CASE("detail::ilog2()") { // Check everything up to 2^16. for (std::size_t i = 0; i != 16; ++i) @@ -34,7 +34,7 @@ CHECK(ilog2((std::uint64_t(1) << 63) + 2063) == 63); } -TEST_CASE("detail::ilog2_ceil()", "[detail][core]") +TEST_CASE("detail::ilog2_ceil()") { // Check everything up to 2^16. for (std::size_t i = 0; i != 16; ++i) diff -Nru foonathan-memory-0.7/test/detail/memory_stack.cpp foonathan-memory-0.7.1/test/detail/memory_stack.cpp --- foonathan-memory-0.7/test/detail/memory_stack.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/detail/memory_stack.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,10 +1,10 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "detail/memory_stack.hpp" -#include +#include #include "detail/align.hpp" #include "detail/debug_helpers.hpp" @@ -14,12 +14,12 @@ using namespace foonathan::memory; using namespace detail; -TEST_CASE("detail::fixed_memory_stack", "[detail][stack]") +TEST_CASE("detail::fixed_memory_stack") { fixed_memory_stack stack; REQUIRE(stack.top() == nullptr); - SECTION("allocate") + SUBCASE("allocate") { static_allocator_storage<1024> memory; stack = fixed_memory_stack{&memory}; @@ -27,7 +27,7 @@ REQUIRE(stack.top() == reinterpret_cast(&memory)); - SECTION("alignment for allocate") + SUBCASE("alignment for allocate") { auto ptr = stack.allocate(end, 13, 1u); REQUIRE(ptr); @@ -45,7 +45,7 @@ REQUIRE(ptr); REQUIRE(is_aligned(ptr, 2 * max_alignment)); } - SECTION("allocate/unwind") + SUBCASE("allocate/unwind") { REQUIRE(stack.allocate(end, 10u, 1u)); auto diff = std::size_t(stack.top() - reinterpret_cast(&memory)); @@ -63,7 +63,7 @@ REQUIRE(stack.top() == top); } } - SECTION("move") + SUBCASE("move") { static_allocator_storage<1024> memory; auto end = reinterpret_cast(&memory) + 1024; diff -Nru foonathan-memory-0.7/test/fallback_allocator.cpp foonathan-memory-0.7.1/test/fallback_allocator.cpp --- foonathan-memory-0.7/test/fallback_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/fallback_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,17 +1,17 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "fallback_allocator.hpp" -#include +#include #include "allocator_storage.hpp" #include "test_allocator.hpp" using namespace foonathan::memory; -TEST_CASE("fallback_allocator", "[adapter]") +TEST_CASE("fallback_allocator") { struct test_compositioning : test_allocator { diff -Nru foonathan-memory-0.7/test/iteration_allocator.cpp foonathan-memory-0.7.1/test/iteration_allocator.cpp --- foonathan-memory-0.7/test/iteration_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/iteration_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,19 +1,19 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "iteration_allocator.hpp" -#include +#include #include "allocator_storage.hpp" #include "test_allocator.hpp" using namespace foonathan::memory; -TEST_CASE("iteration_allocator", "[stack]") +TEST_CASE("iteration_allocator") { - SECTION("basic") + SUBCASE("basic") { test_allocator alloc; iteration_allocator<2, allocator_reference> iter_alloc(100, alloc); @@ -46,7 +46,7 @@ REQUIRE(iter_alloc.cur_iteration() == 1u); REQUIRE(iter_alloc.capacity_left() == 50); } - SECTION("overaligned") + SUBCASE("overaligned") { test_allocator alloc; iteration_allocator<1, allocator_reference> iter_alloc(100, alloc); diff -Nru foonathan-memory-0.7/test/joint_allocator.cpp foonathan-memory-0.7.1/test/joint_allocator.cpp --- foonathan-memory-0.7/test/joint_allocator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/joint_allocator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,10 +1,10 @@ -// Copyright (C) 2016 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "joint_allocator.hpp" -#include +#include #include "container.hpp" #include "test_allocator.hpp" @@ -30,7 +30,7 @@ REQUIRE(&ptr.get_allocator() == &alloc); } -TEST_CASE("joint_ptr", "[allocator]") +TEST_CASE("joint_ptr") { struct joint_test : joint_type { @@ -43,7 +43,7 @@ test_allocator alloc; - SECTION("allocator constructor") + SUBCASE("allocator constructor") { joint_ptr ptr(alloc); verify_null(ptr, alloc); @@ -51,7 +51,7 @@ REQUIRE(alloc.no_allocated() == 0u); REQUIRE(alloc.no_deallocated() == 0u); } - SECTION("creation constructor") + SUBCASE("creation constructor") { joint_ptr ptr(alloc, joint_size(10u), 5); verify(ptr, alloc, 5); @@ -61,7 +61,7 @@ REQUIRE(alloc.last_allocated().alignment == alignof(joint_test)); REQUIRE(alloc.no_deallocated() == 0u); } - SECTION("move constructor") + SUBCASE("move constructor") { auto ptr1 = allocate_joint(alloc, joint_size(10u), 5); verify(ptr1, alloc, 5); @@ -75,7 +75,7 @@ REQUIRE(alloc.no_allocated() == 1u); } - SECTION("move assignment") + SUBCASE("move assignment") { joint_ptr ptr1(alloc); verify_null(ptr1, alloc); @@ -94,7 +94,7 @@ verify_null(ptr2, alloc); REQUIRE(alloc.no_allocated() == 0u); } - SECTION("swap") + SUBCASE("swap") { joint_ptr ptr1(alloc); verify_null(ptr1, alloc); @@ -108,7 +108,7 @@ REQUIRE(alloc.no_allocated() == 1u); } - SECTION("reset") + SUBCASE("reset") { joint_ptr ptr1(alloc); verify_null(ptr1, alloc); @@ -123,7 +123,7 @@ verify_null(ptr2, alloc); REQUIRE(alloc.no_allocated() == 0u); } - SECTION("compare") + SUBCASE("compare") { joint_ptr ptr1(alloc); verify_null(ptr1, alloc); @@ -151,7 +151,7 @@ REQUIRE_FALSE(ptr2 != ptr2.get()); REQUIRE_FALSE(ptr2.get() != ptr2); } - SECTION("clone") + SUBCASE("clone") { auto ptr1 = allocate_joint(alloc, joint_size(10u), 5); verify(ptr1, alloc, 5); @@ -173,7 +173,7 @@ REQUIRE(alloc.no_allocated() == 0u); } -TEST_CASE("joint_allocator", "[allocator]") +TEST_CASE("joint_allocator") { struct joint_test : joint_type { @@ -220,7 +220,7 @@ } } -TEST_CASE("joint_array", "[allocator]") +TEST_CASE("joint_array") { struct joint_test : joint_type { @@ -233,21 +233,21 @@ auto ptr = allocate_joint(alloc, joint_size(20 * sizeof(int)), 5); verify(ptr, alloc, 5); - SECTION("size constructor") + SUBCASE("size constructor") { joint_array arr(5, *ptr); verify(arr, 5); for (auto el : arr) REQUIRE(el == 0); } - SECTION("size value constructor") + SUBCASE("size value constructor") { joint_array arr(5, 1, *ptr); verify(arr, 5); for (auto el : arr) REQUIRE(el == 1); } - SECTION("ilist constructor") + SUBCASE("ilist constructor") { joint_array arr({1, 2, 3}, *ptr); verify(arr, 3); @@ -255,7 +255,7 @@ REQUIRE(arr[1] == 2); REQUIRE(arr[2] == 3); } - SECTION("iterator constructor") + SUBCASE("iterator constructor") { int input[] = {1, 2, 3}; joint_array arr(std::begin(input), std::end(input), *ptr); @@ -264,7 +264,7 @@ REQUIRE(arr[1] == 2); REQUIRE(arr[2] == 3); } - SECTION("copy/move constructor") + SUBCASE("copy/move constructor") { joint_array arr1({1, 2, 3}, *ptr); verify(arr1, 3); diff -Nru foonathan-memory-0.7/test/memory_arena.cpp foonathan-memory-0.7.1/test/memory_arena.cpp --- foonathan-memory-0.7/test/memory_arena.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/memory_arena.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,17 +1,17 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "memory_arena.hpp" -#include +#include #include "static_allocator.hpp" using namespace foonathan::memory; using namespace detail; -TEST_CASE("detail::memory_block_stack", "[detail][arena]") +TEST_CASE("detail::memory_block_stack") { memory_block_stack stack; REQUIRE(stack.empty()); @@ -26,13 +26,13 @@ REQUIRE(top.size <= 1024); REQUIRE(is_aligned(top.memory, max_alignment)); - SECTION("pop") + SUBCASE("pop") { auto block = stack.pop(); REQUIRE(block.size == 1024); REQUIRE(block.memory == static_cast(&memory)); } - SECTION("steal_top") + SUBCASE("steal_top") { memory_block_stack other; @@ -51,7 +51,7 @@ stack.push({&b, 1024}); stack.push({&c, 1024}); - SECTION("multiple pop") + SUBCASE("multiple pop") { auto block = stack.pop(); REQUIRE(block.memory == static_cast(&c)); @@ -62,7 +62,7 @@ block = stack.pop(); REQUIRE(block.memory == static_cast(&memory)); } - SECTION("multiple steal_from") + SUBCASE("multiple steal_from") { memory_block_stack other; @@ -82,7 +82,7 @@ block = other.pop(); REQUIRE(block.memory == static_cast(&c)); } - SECTION("move") + SUBCASE("move") { memory_block_stack other = detail::move(stack); REQUIRE(stack.empty()); @@ -131,87 +131,119 @@ } }; -TEST_CASE("memory_arena w/ caching", "[arena]") +TEST_CASE("memory_arena w/ caching") { - memory_arena> arena(1024); - REQUIRE(arena.get_allocator().i == 0u); - REQUIRE(arena.size() == 0u); - REQUIRE(arena.capacity() == 0u); - - arena.allocate_block(); - REQUIRE(arena.get_allocator().i == 1u); - REQUIRE(arena.size() == 1u); - REQUIRE(arena.capacity() == 1u); - - arena.allocate_block(); - REQUIRE(arena.get_allocator().i == 2u); - REQUIRE(arena.size() == 2u); - REQUIRE(arena.capacity() == 2u); - - arena.deallocate_block(); - REQUIRE(arena.get_allocator().i == 2u); - REQUIRE(arena.size() == 1u); - REQUIRE(arena.capacity() == 2u); - - arena.allocate_block(); - REQUIRE(arena.get_allocator().i == 2u); - REQUIRE(arena.size() == 2u); - REQUIRE(arena.capacity() == 2u); - - arena.deallocate_block(); - arena.deallocate_block(); - REQUIRE(arena.get_allocator().i == 2u); - REQUIRE(arena.size() == 0u); - REQUIRE(arena.capacity() == 2u); - - arena.shrink_to_fit(); - REQUIRE(arena.get_allocator().i == 0u); - REQUIRE(arena.size() == 0u); - REQUIRE(arena.capacity() == 0u); - - arena.allocate_block(); - REQUIRE(arena.get_allocator().i == 1u); - REQUIRE(arena.size() == 1u); - REQUIRE(arena.capacity() == 1u); + using arena_type = memory_arena>; + SUBCASE("basic") + { + arena_type arena(1024); + REQUIRE(arena.get_allocator().i == 0u); + REQUIRE(arena.size() == 0u); + REQUIRE(arena.capacity() == 0u); + + arena.allocate_block(); + REQUIRE(arena.get_allocator().i == 1u); + REQUIRE(arena.size() == 1u); + REQUIRE(arena.capacity() == 1u); + + arena.allocate_block(); + REQUIRE(arena.get_allocator().i == 2u); + REQUIRE(arena.size() == 2u); + REQUIRE(arena.capacity() == 2u); + + arena.deallocate_block(); + REQUIRE(arena.get_allocator().i == 2u); + REQUIRE(arena.size() == 1u); + REQUIRE(arena.capacity() == 2u); + + arena.allocate_block(); + REQUIRE(arena.get_allocator().i == 2u); + REQUIRE(arena.size() == 2u); + REQUIRE(arena.capacity() == 2u); + + arena.deallocate_block(); + arena.deallocate_block(); + REQUIRE(arena.get_allocator().i == 2u); + REQUIRE(arena.size() == 0u); + REQUIRE(arena.capacity() == 2u); + + arena.shrink_to_fit(); + REQUIRE(arena.get_allocator().i == 0u); + REQUIRE(arena.size() == 0u); + REQUIRE(arena.capacity() == 0u); + + arena.allocate_block(); + REQUIRE(arena.get_allocator().i == 1u); + REQUIRE(arena.size() == 1u); + REQUIRE(arena.capacity() == 1u); + } + SUBCASE("small arena") + { + arena_type small_arena(arena_type::min_block_size(1)); + REQUIRE(small_arena.get_allocator().i == 0u); + REQUIRE(small_arena.size() == 0u); + REQUIRE(small_arena.capacity() == 0u); + + small_arena.allocate_block(); + REQUIRE(small_arena.get_allocator().i == 1u); + REQUIRE(small_arena.size() == 1u); + REQUIRE(small_arena.capacity() == 1u); + } } -TEST_CASE("memory_arena w/o caching", "[arena]") +TEST_CASE("memory_arena w/o caching") { - memory_arena, false> arena(1024); - REQUIRE(arena.get_allocator().i == 0u); - REQUIRE(arena.size() == 0u); - REQUIRE(arena.capacity() == 0u); - - arena.allocate_block(); - REQUIRE(arena.get_allocator().i == 1u); - REQUIRE(arena.size() == 1u); - REQUIRE(arena.capacity() == 1u); - - arena.allocate_block(); - REQUIRE(arena.get_allocator().i == 2u); - REQUIRE(arena.size() == 2u); - REQUIRE(arena.capacity() == 2u); - - arena.deallocate_block(); - REQUIRE(arena.get_allocator().i == 1u); - REQUIRE(arena.size() == 1u); - REQUIRE(arena.capacity() == 1u); - - arena.allocate_block(); - REQUIRE(arena.get_allocator().i == 2u); - REQUIRE(arena.size() == 2u); - REQUIRE(arena.capacity() == 2u); - - arena.deallocate_block(); - arena.deallocate_block(); - REQUIRE(arena.get_allocator().i == 0u); - REQUIRE(arena.size() == 0u); - REQUIRE(arena.capacity() == 0u); - - arena.allocate_block(); - REQUIRE(arena.get_allocator().i == 1u); - REQUIRE(arena.size() == 1u); - REQUIRE(arena.capacity() == 1u); + using arena_type = memory_arena, false>; + SUBCASE("normal") + { + arena_type arena(1024); + REQUIRE(arena.get_allocator().i == 0u); + REQUIRE(arena.size() == 0u); + REQUIRE(arena.capacity() == 0u); + + arena.allocate_block(); + REQUIRE(arena.get_allocator().i == 1u); + REQUIRE(arena.size() == 1u); + REQUIRE(arena.capacity() == 1u); + + arena.allocate_block(); + REQUIRE(arena.get_allocator().i == 2u); + REQUIRE(arena.size() == 2u); + REQUIRE(arena.capacity() == 2u); + + arena.deallocate_block(); + REQUIRE(arena.get_allocator().i == 1u); + REQUIRE(arena.size() == 1u); + REQUIRE(arena.capacity() == 1u); + + arena.allocate_block(); + REQUIRE(arena.get_allocator().i == 2u); + REQUIRE(arena.size() == 2u); + REQUIRE(arena.capacity() == 2u); + + arena.deallocate_block(); + arena.deallocate_block(); + REQUIRE(arena.get_allocator().i == 0u); + REQUIRE(arena.size() == 0u); + REQUIRE(arena.capacity() == 0u); + + arena.allocate_block(); + REQUIRE(arena.get_allocator().i == 1u); + REQUIRE(arena.size() == 1u); + REQUIRE(arena.capacity() == 1u); + } + SUBCASE("small arena") + { + arena_type small_arena(arena_type::min_block_size(1)); + REQUIRE(small_arena.get_allocator().i == 0u); + REQUIRE(small_arena.size() == 0u); + REQUIRE(small_arena.capacity() == 0u); + + small_arena.allocate_block(); + REQUIRE(small_arena.get_allocator().i == 1u); + REQUIRE(small_arena.size() == 1u); + REQUIRE(small_arena.capacity() == 1u); + } } static_assert( @@ -225,7 +257,7 @@ template using block_wrapper = growing_block_allocator; -TEST_CASE("make_block_allocator", "[arena]") +TEST_CASE("make_block_allocator") { growing_block_allocator a1 = make_block_allocator(1024); REQUIRE(a1.next_block_size() == 1024); diff -Nru foonathan-memory-0.7/test/memory_pool_collection.cpp foonathan-memory-0.7.1/test/memory_pool_collection.cpp --- foonathan-memory-0.7/test/memory_pool_collection.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/memory_pool_collection.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,11 +1,11 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "memory_pool_collection.hpp" #include -#include +#include #include #include @@ -15,23 +15,23 @@ using namespace foonathan::memory; using namespace detail; -TEST_CASE("memory_pool_collection", "[pool]") +TEST_CASE("memory_pool_collection") { using pools = memory_pool_collection>; test_allocator alloc; { const auto max_size = 16u; - pools pool(max_size, 2000, alloc); + pools pool(max_size, 4000, alloc); REQUIRE(pool.max_node_size() == max_size); - REQUIRE(pool.capacity_left() <= 2000u); - REQUIRE(pool.next_capacity() >= 2000u); + REQUIRE(pool.capacity_left() <= 4000u); + REQUIRE(pool.next_capacity() >= 4000u); REQUIRE(alloc.no_allocated() == 1u); for (auto i = 0u; i != max_size; ++i) REQUIRE(pool.pool_capacity_left(i) == 0u); - SECTION("normal alloc/dealloc") + SUBCASE("normal alloc/dealloc") { std::vector a, b; for (auto i = 0u; i != 5u; ++i) @@ -41,7 +41,7 @@ REQUIRE(b.back()); } REQUIRE(alloc.no_allocated() == 1u); - REQUIRE(pool.capacity_left() <= 2000u); + REQUIRE(pool.capacity_left() <= 4000u); std::shuffle(a.begin(), a.end(), std::mt19937{}); std::shuffle(b.begin(), b.end(), std::mt19937{}); @@ -51,7 +51,32 @@ for (auto ptr : b) pool.deallocate_node(ptr, 5); } - SECTION("multiple block alloc/dealloc") + SUBCASE("single array alloc") + { + auto memory = pool.allocate_array(4, 4); + pool.deallocate_array(memory, 4, 4); + } + SUBCASE("array alloc/dealloc") + { + std::vector a, b; + for (auto i = 0u; i != 5u; ++i) + { + a.push_back(pool.allocate_array(4, 4)); + b.push_back(pool.try_allocate_array(5, 5)); + REQUIRE(b.back()); + } + REQUIRE(alloc.no_allocated() == 1u); + REQUIRE(pool.capacity_left() <= 4000u); + + std::shuffle(a.begin(), a.end(), std::mt19937{}); + std::shuffle(b.begin(), b.end(), std::mt19937{}); + + for (auto ptr : a) + REQUIRE(pool.try_deallocate_array(ptr, 4, 4)); + for (auto ptr : b) + pool.deallocate_array(ptr, 5, 5); + } + SUBCASE("multiple block alloc/dealloc") { std::vector a, b; for (auto i = 0u; i != 1000u; ++i) diff -Nru foonathan-memory-0.7/test/memory_pool.cpp foonathan-memory-0.7.1/test/memory_pool.cpp --- foonathan-memory-0.7/test/memory_pool.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/memory_pool.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,11 +1,11 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "memory_pool.hpp" #include -#include +#include #include #include @@ -16,7 +16,7 @@ // don't test actual node allocationg, but the connection between arena and the implementation // so only test for memory_pool -TEST_CASE("memory_pool", "[pool]") +TEST_CASE("memory_pool") { using pool_type = memory_pool>; test_allocator alloc; @@ -27,14 +27,14 @@ REQUIRE(pool.next_capacity() >= 25 * 4u); REQUIRE(alloc.no_allocated() == 1u); - SECTION("normal alloc/dealloc") + SUBCASE("normal alloc/dealloc") { std::vector ptrs; auto capacity = pool.capacity_left(); REQUIRE(capacity / 4 >= 25); for (std::size_t i = 0u; i != 25; ++i) ptrs.push_back(pool.allocate_node()); - REQUIRE(pool.capacity_left() == 0u); + REQUIRE(pool.capacity_left() >= 0u); REQUIRE(alloc.no_allocated() == 1u); std::shuffle(ptrs.begin(), ptrs.end(), std::mt19937{}); @@ -43,13 +43,13 @@ pool.deallocate_node(ptr); REQUIRE(pool.capacity_left() == capacity); } - SECTION("multiple block alloc/dealloc") + SUBCASE("multiple block alloc/dealloc") { std::vector ptrs; auto capacity = pool.capacity_left(); for (std::size_t i = 0u; i != capacity / pool.node_size(); ++i) ptrs.push_back(pool.allocate_node()); - REQUIRE(pool.capacity_left() == 0u); + REQUIRE(pool.capacity_left() >= 0u); ptrs.push_back(pool.allocate_node()); REQUIRE(pool.capacity_left() >= capacity - pool.node_size()); @@ -63,5 +63,65 @@ REQUIRE(alloc.no_allocated() == 2u); } } + { + pool_type pool(16, pool_type::min_block_size(16, 1), alloc); + REQUIRE(pool.node_size() == 16u); + REQUIRE(pool.capacity_left() == 16u); + REQUIRE(pool.next_capacity() >= 16u); + REQUIRE(alloc.no_allocated() == 1u); + + auto ptr = pool.allocate_node(); + REQUIRE(ptr); + + pool.deallocate_node(ptr); + } REQUIRE(alloc.no_allocated() == 0u); } + +namespace +{ + template + void use_min_block_size(std::size_t node_size, std::size_t number_of_nodes) + { + auto min_size = memory_pool::min_block_size(node_size, number_of_nodes); + memory_pool pool(node_size, min_size); + CHECK(pool.capacity_left() >= node_size * number_of_nodes); + + // First allocations should not require realloc. + for (auto i = 0u; i != number_of_nodes; ++i) + { + auto ptr = pool.try_allocate_node(); + CHECK(ptr); + } + + // Further allocation might require it, but should still succeed then. + auto ptr = pool.allocate_node(); + CHECK(ptr); + } +} // namespace + +TEST_CASE("memory_pool::min_block_size()") +{ + SUBCASE("node_pool") + { + use_min_block_size(1, 1); + use_min_block_size(16, 1); + use_min_block_size(1, 1000); + use_min_block_size(16, 1000); + } + SUBCASE("array_pool") + { + use_min_block_size(1, 1); + use_min_block_size(16, 1); + use_min_block_size(1, 1000); + use_min_block_size(16, 1000); + } + SUBCASE("small_node_pool") + { + use_min_block_size(1, 1); + use_min_block_size(16, 1); + use_min_block_size(1, 1000); + use_min_block_size(16, 1000); + } +} + diff -Nru foonathan-memory-0.7/test/memory_resource_adapter.cpp foonathan-memory-0.7.1/test/memory_resource_adapter.cpp --- foonathan-memory-0.7/test/memory_resource_adapter.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/memory_resource_adapter.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,10 +1,10 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "memory_resource_adapter.hpp" -#include +#include #include #include "allocator_storage.hpp" @@ -46,7 +46,7 @@ } }; -TEST_CASE("memory_resource_adapter", "[adapter]") +TEST_CASE("memory_resource_adapter") { auto max_node = pmr_test_allocator{}.max_node_size(); diff -Nru foonathan-memory-0.7/test/memory_stack.cpp foonathan-memory-0.7.1/test/memory_stack.cpp --- foonathan-memory-0.7/test/memory_stack.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/memory_stack.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,17 +1,17 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "memory_stack.hpp" -#include +#include #include "allocator_storage.hpp" #include "test_allocator.hpp" using namespace foonathan::memory; -TEST_CASE("memory_stack", "[stack]") +TEST_CASE("memory_stack") { test_allocator alloc; @@ -21,7 +21,7 @@ REQUIRE(stack.capacity_left() == 100); auto capacity = stack.capacity_left(); - SECTION("empty unwind") + SUBCASE("empty unwind") { auto m = stack.top(); stack.unwind(m); @@ -29,7 +29,7 @@ REQUIRE(alloc.no_allocated() == 1u); REQUIRE(alloc.no_deallocated() == 0u); } - SECTION("normal allocation/unwind") + SUBCASE("normal allocation/unwind") { stack.allocate(10, 1); REQUIRE(stack.capacity_left() == capacity - 10 - 2 * detail::debug_fence_size); @@ -46,7 +46,7 @@ REQUIRE(alloc.no_allocated() == 1u); REQUIRE(alloc.no_deallocated() == 0u); } - SECTION("multiple block allocation/unwind") + SUBCASE("multiple block allocation/unwind") { // note: tests are mostly hoping not to get a segfault @@ -76,7 +76,7 @@ REQUIRE(alloc.no_allocated() == 1u); REQUIRE(alloc.no_deallocated() == 1u); } - SECTION("move") + SUBCASE("move") { auto other = detail::move(stack); auto m = other.top(); @@ -90,7 +90,7 @@ REQUIRE(alloc.no_allocated() == 1u); stack.unwind(m); } - SECTION("marker comparision") + SUBCASE("marker comparision") { auto m1 = stack.top(); auto m2 = stack.top(); @@ -103,7 +103,7 @@ stack.unwind(m2); REQUIRE(stack.top() == m2); } - SECTION("unwinder") + SUBCASE("unwinder") { auto m = stack.top(); { @@ -141,7 +141,7 @@ REQUIRE(unwind2.get_marker() == m); REQUIRE(!unwind.will_unwind()); } - SECTION("overaligned") + SUBCASE("overaligned") { auto align = 2 * detail::max_alignment; auto mem = stack.allocate(align, align); diff -Nru foonathan-memory-0.7/test/profiling.cpp foonathan-memory-0.7.1/test/profiling.cpp --- foonathan-memory-0.7/test/profiling.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/profiling.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/test/segregator.cpp foonathan-memory-0.7.1/test/segregator.cpp --- foonathan-memory-0.7/test/segregator.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/segregator.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,16 +1,16 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "segregator.hpp" -#include +#include #include "test_allocator.hpp" using namespace foonathan::memory; -TEST_CASE("threshold_segregatable", "[adapter]") +TEST_CASE("threshold_segregatable") { using segregatable = threshold_segregatable; segregatable s(8u); @@ -28,7 +28,7 @@ REQUIRE(!s.use_allocate_array(1u, 9u, 1u)); } -TEST_CASE("binary_segregator", "[adapter]") +TEST_CASE("binary_segregator") { using segregatable = threshold_segregatable; using segregator = binary_segregator; @@ -82,7 +82,7 @@ REQUIRE(s.get_fallback_allocator().no_deallocated() == 2u); } -TEST_CASE("segregator", "[adapter]") +TEST_CASE("segregator") { using segregatable = threshold_segregatable; using segregator_0 = segregator; diff -Nru foonathan-memory-0.7/test/smart_ptr.cpp foonathan-memory-0.7.1/test/smart_ptr.cpp --- foonathan-memory-0.7/test/smart_ptr.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/smart_ptr.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,10 +1,10 @@ -// Copyright (C) 2018 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. #include "smart_ptr.hpp" -#include +#include #include "container.hpp" #include "memory_pool.hpp" @@ -29,9 +29,9 @@ std::size_t dummy_allocator::size = 0; -TEST_CASE("allocate_shared", "[adapter]") +TEST_CASE("allocate_shared") { - SECTION("stateless") + SUBCASE("stateless") { dummy_allocator::size = 0; auto ptr = allocate_shared(dummy_allocator{}, 42); @@ -40,7 +40,7 @@ REQUIRE((dummy_allocator::size <= allocate_shared_node_size::value)); #endif } - SECTION("stateful") + SUBCASE("stateful") { #if defined(FOONATHAN_MEMORY_NO_NODE_SIZE) memory_pool<> pool(128, 1024); // hope that's enough diff -Nru foonathan-memory-0.7/test/test_allocator.hpp foonathan-memory-0.7.1/test/test_allocator.hpp --- foonathan-memory-0.7/test/test_allocator.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/test_allocator.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/test/test.cpp foonathan-memory-0.7.1/test/test.cpp --- foonathan-memory-0.7/test/test.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/test/test.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,9 +1,7 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. -// catch main file, generates main function +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include -#define CATCH_CONFIG_MAIN -#define CATCH_CONFIG_COLOUR_NONE -#include "catch.hpp" diff -Nru foonathan-memory-0.7/tool/CMakeLists.txt foonathan-memory-0.7.1/tool/CMakeLists.txt --- foonathan-memory-0.7/tool/CMakeLists.txt 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/tool/CMakeLists.txt 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020 Jonathan Müller +# Copyright (C) 2015-2021 Müller # This file is subject to the license terms in the LICENSE file # found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/tool/node_size_debugger.cpp foonathan-memory-0.7.1/tool/node_size_debugger.cpp --- foonathan-memory-0.7/tool/node_size_debugger.cpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/tool/node_size_debugger.cpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/tool/node_size_debugger.hpp foonathan-memory-0.7.1/tool/node_size_debugger.hpp --- foonathan-memory-0.7/tool/node_size_debugger.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/tool/node_size_debugger.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution. diff -Nru foonathan-memory-0.7/tool/test_types.hpp foonathan-memory-0.7.1/tool/test_types.hpp --- foonathan-memory-0.7/tool/test_types.hpp 2020-12-02 13:32:19.000000000 +0000 +++ foonathan-memory-0.7.1/tool/test_types.hpp 2021-09-05 17:18:55.000000000 +0000 @@ -1,4 +1,4 @@ -// Copyright (C) 2015-2020 Jonathan Müller +// Copyright (C) 2015-2021 Müller // This file is subject to the license terms in the LICENSE file // found in the top-level directory of this distribution.