1
0
mirror of https://git.suyu.dev/suyu/suyu synced 2025-09-11 16:56:32 -05:00

Initial commit

This commit is contained in:
Crimson-Hawk
2024-03-05 16:42:40 +08:00
commit f1e4595ebf
39576 changed files with 7006612 additions and 0 deletions

View File

@@ -0,0 +1,52 @@
set(VCPKG_DETECTED_CMAKE_CROSSCOMPILING "OFF")
set(VCPKG_DETECTED_CMAKE_SYSTEM_NAME "Windows")
set(VCPKG_DETECTED_CMAKE_HOST_SYSTEM_NAME "Windows")
set(VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR "AMD64")
set(VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR "AMD64")
set(VCPKG_DETECTED_CMAKE_SIZEOF_VOID_P "8")
set(VCPKG_DETECTED_MSVC "1")
set(VCPKG_DETECTED_MSVC_VERSION "1929")
set(VCPKG_DETECTED_CMAKE_AR "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/lib.exe")
set(VCPKG_DETECTED_CMAKE_RANLIB ":")
set(VCPKG_DETECTED_CMAKE_STRIP "")
set(VCPKG_DETECTED_CMAKE_NM "")
set(VCPKG_DETECTED_CMAKE_OBJDUMP "")
set(VCPKG_DETECTED_CMAKE_DLLTOOL "")
set(VCPKG_DETECTED_CMAKE_MT "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64/mt.exe")
set(VCPKG_DETECTED_CMAKE_LINKER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/link.exe")
set(VCPKG_DETECTED_CMAKE_C_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe")
set(VCPKG_DETECTED_CMAKE_C_COMPILER_ID "MSVC")
set(VCPKG_DETECTED_CMAKE_CXX_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe")
set(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID "MSVC")
set(VCPKG_DETECTED_CMAKE_RC_COMPILER "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64/rc.exe")
set(VCPKG_DETECTED_CMAKE_RC_COMPILER_ID "")
set(VCPKG_DETECTED_CMAKE_C_STANDARD_INCLUDE_DIRECTORIES "")
set(VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib")
set(VCPKG_DETECTED_CMAKE_C_STANDARD "")
set(VCPKG_DETECTED_CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17")
set(VCPKG_DETECTED_CMAKE_C_EXTENSION "")
set(VCPKG_DETECTED_CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES "")
set(VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib")
set(VCPKG_DETECTED_CMAKE_CXX_STANDARD "")
set(VCPKG_DETECTED_CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23")
set(VCPKG_DETECTED_CMAKE_CXX_EXTENSION "")
set(VCPKG_DETECTED_CMAKE_C_FLAGS " /nologo /DWIN32 /D_WINDOWS /W3 /utf-8 /MP ")
set(VCPKG_DETECTED_CMAKE_CXX_FLAGS " /nologo /DWIN32 /D_WINDOWS /W3 /utf-8 /GR /EHsc /MP ")
set(VCPKG_DETECTED_CMAKE_RC_FLAGS "-c65001 /DWIN32")
set(VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS "/machine:x64")
set(VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS "/machine:x64")
set(VCPKG_DETECTED_CMAKE_EXE_LINKER_FLAGS "/machine:x64")
set(VCPKG_DETECTED_ENV_PATH "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE//Extensions/Microsoft/IntelliCode/CLI;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/HostX64/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/VC/VCPackages;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TestWindow;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/bin/Roslyn;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Team Tools/Performance Tools/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Team Tools/Performance Tools;C:/Program Files (x86)/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools/vs2019//x64;C:/Program Files (x86)/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools/vs2019/;C:/Program Files (x86)/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.8 Tools/x64/;C:/Program Files (x86)/HTML Help Workshop;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/FSharp/Tools;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/Tools/devinit;C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64;C:/Program Files (x86)/Windows Kits/10/bin/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise//MSBuild/Current/Bin;C:/Windows/Microsoft.NET/Framework64/v4.0.30319;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/Tools/;C:/Program Files/PowerShell/7;C:/Windows/system32;C:/Windows;C:/Windows/system32/Wbem;C:/Windows/system32/WindowsPowerShell/v1.0/;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/Llvm/x64/bin;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/VC/Linux/bin/ConnectionManagerExe;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja")
set(VCPKG_DETECTED_ENV_INCLUDE "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/ATLMFC/include;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/include;C:/Program Files (x86)/Windows Kits/NETFXSDK/4.8/include/um;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/ucrt;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/shared;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/um;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/winrt;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/cppwinrt")
set(VCPKG_DETECTED_ENV_C_INCLUDE_PATH "")
set(VCPKG_DETECTED_ENV_CPLUS_INCLUDE_PATH "")
set(VCPKG_DETECTED_ENV_LIB "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/ATLMFC/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64;C:/Program Files (x86)/Windows Kits/NETFXSDK/4.8/lib/um/x64;C:/Program Files (x86)/Windows Kits/10/lib/10.0.22000.0/ucrt/x64;C:/Program Files (x86)/Windows Kits/10/lib/10.0.22000.0/um/x64")
set(VCPKG_DETECTED_ENV_LIBPATH "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/ATLMFC/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x86/store/references;C:/Program Files (x86)/Windows Kits/10/UnionMetadata/10.0.22000.0;C:/Program Files (x86)/Windows Kits/10/References/10.0.22000.0;C:/Windows/Microsoft.NET/Framework64/v4.0.30319")
set(VCPKG_DETECTED_ENV_LIBRARY_PATH "")
set(VCPKG_DETECTED_ENV_LD_LIBRARY_PATH "")
set(VCPKG_COMBINED_CXX_FLAGS_DEBUG " -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 ")
set(VCPKG_COMBINED_C_FLAGS_DEBUG " -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 ")
set(VCPKG_COMBINED_SHARED_LINKER_FLAGS_DEBUG "-machine:x64 -nologo -debug -INCREMENTAL ")
set(VCPKG_COMBINED_EXE_LINKER_FLAGS_DEBUG "-machine:x64 -nologo -debug -INCREMENTAL ")
set(VCPKG_COMBINED_STATIC_LINKER_FLAGS_DEBUG "-machine:x64 -nologo")
set(VCPKG_COMBINED_RC_FLAGS_DEBUG "-c65001 -DWIN32 -D_DEBUG")

View File

@@ -0,0 +1,50 @@
[1/2] cmd /c "cd .. && "C:/Program Files/CMake/bin/cmake.exe" "D:/a/1/s/build/vcpkg_installed/x64-windows/share/vcpkg-cmake-get-vars/cmake_get_vars" "-G" "Ninja" "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=D:/a/1/s/externals/vcpkg/packages/boost-container_x64-windows" "-DCMAKE_MAKE_PROGRAM=C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" "-DBUILD_SHARED_LIBS=ON" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=D:/a/1/s/externals/vcpkg/scripts/toolchains/windows.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" "-DVCPKG_SET_CHARSET_FLAG=ON" "-DVCPKG_PLATFORM_TOOLSET=v142" "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" "-DCMAKE_VERBOSE_MAKEFILE=ON" "-DVCPKG_APPLOCAL_DEPS=OFF" "-DCMAKE_TOOLCHAIN_FILE=D:/a/1/s/externals/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" "-DVCPKG_CXX_FLAGS=" "-DVCPKG_CXX_FLAGS_RELEASE=" "-DVCPKG_CXX_FLAGS_DEBUG=" "-DVCPKG_C_FLAGS=" "-DVCPKG_C_FLAGS_RELEASE=" "-DVCPKG_C_FLAGS_DEBUG=" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_LINKER_FLAGS=" "-DVCPKG_LINKER_FLAGS_RELEASE=" "-DVCPKG_LINKER_FLAGS_DEBUG=" "-DVCPKG_TARGET_ARCHITECTURE=x64" "-DCMAKE_INSTALL_LIBDIR:STRING=lib" "-DCMAKE_INSTALL_BINDIR:STRING=bin" "-D_VCPKG_ROOT_DIR=D:/a/1/s/externals/vcpkg" "-D_VCPKG_INSTALLED_DIR=D:/a/1/s/build/vcpkg_installed" "-DVCPKG_MANIFEST_INSTALL=OFF" "-DVCPKG_OUTPUT_FILE:PATH=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/cmake-get-vars-x64-windows-rel.cmake.log""
-- The C compiler identification is MSVC 19.29.30146.0
-- The CXX compiler identification is MSVC 19.29.30146.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
BUILD_SHARED_LIBS
CMAKE_INSTALL_BINDIR
CMAKE_INSTALL_LIBDIR
_VCPKG_ROOT_DIR
-- Build files have been written to: D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel
[2/2] cmd /c "cd ../../x64-windows-dbg && "C:/Program Files/CMake/bin/cmake.exe" "D:/a/1/s/build/vcpkg_installed/x64-windows/share/vcpkg-cmake-get-vars/cmake_get_vars" "-G" "Ninja" "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_INSTALL_PREFIX=D:/a/1/s/externals/vcpkg/packages/boost-container_x64-windows/debug" "-DCMAKE_MAKE_PROGRAM=C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" "-DBUILD_SHARED_LIBS=ON" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=D:/a/1/s/externals/vcpkg/scripts/toolchains/windows.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" "-DVCPKG_SET_CHARSET_FLAG=ON" "-DVCPKG_PLATFORM_TOOLSET=v142" "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" "-DCMAKE_VERBOSE_MAKEFILE=ON" "-DVCPKG_APPLOCAL_DEPS=OFF" "-DCMAKE_TOOLCHAIN_FILE=D:/a/1/s/externals/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" "-DVCPKG_CXX_FLAGS=" "-DVCPKG_CXX_FLAGS_RELEASE=" "-DVCPKG_CXX_FLAGS_DEBUG=" "-DVCPKG_C_FLAGS=" "-DVCPKG_C_FLAGS_RELEASE=" "-DVCPKG_C_FLAGS_DEBUG=" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_LINKER_FLAGS=" "-DVCPKG_LINKER_FLAGS_RELEASE=" "-DVCPKG_LINKER_FLAGS_DEBUG=" "-DVCPKG_TARGET_ARCHITECTURE=x64" "-DCMAKE_INSTALL_LIBDIR:STRING=lib" "-DCMAKE_INSTALL_BINDIR:STRING=bin" "-D_VCPKG_ROOT_DIR=D:/a/1/s/externals/vcpkg" "-D_VCPKG_INSTALLED_DIR=D:/a/1/s/build/vcpkg_installed" "-DVCPKG_MANIFEST_INSTALL=OFF" "-DVCPKG_OUTPUT_FILE:PATH=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/cmake-get-vars-x64-windows-dbg.cmake.log""
-- The C compiler identification is MSVC 19.29.30146.0
-- The CXX compiler identification is MSVC 19.29.30146.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
BUILD_SHARED_LIBS
CMAKE_INSTALL_BINDIR
CMAKE_INSTALL_LIBDIR
_VCPKG_ROOT_DIR
-- Build files have been written to: D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg

View File

@@ -0,0 +1,52 @@
set(VCPKG_DETECTED_CMAKE_CROSSCOMPILING "OFF")
set(VCPKG_DETECTED_CMAKE_SYSTEM_NAME "Windows")
set(VCPKG_DETECTED_CMAKE_HOST_SYSTEM_NAME "Windows")
set(VCPKG_DETECTED_CMAKE_SYSTEM_PROCESSOR "AMD64")
set(VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR "AMD64")
set(VCPKG_DETECTED_CMAKE_SIZEOF_VOID_P "8")
set(VCPKG_DETECTED_MSVC "1")
set(VCPKG_DETECTED_MSVC_VERSION "1929")
set(VCPKG_DETECTED_CMAKE_AR "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/lib.exe")
set(VCPKG_DETECTED_CMAKE_RANLIB ":")
set(VCPKG_DETECTED_CMAKE_STRIP "")
set(VCPKG_DETECTED_CMAKE_NM "")
set(VCPKG_DETECTED_CMAKE_OBJDUMP "")
set(VCPKG_DETECTED_CMAKE_DLLTOOL "")
set(VCPKG_DETECTED_CMAKE_MT "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64/mt.exe")
set(VCPKG_DETECTED_CMAKE_LINKER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/link.exe")
set(VCPKG_DETECTED_CMAKE_C_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe")
set(VCPKG_DETECTED_CMAKE_C_COMPILER_ID "MSVC")
set(VCPKG_DETECTED_CMAKE_CXX_COMPILER "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe")
set(VCPKG_DETECTED_CMAKE_CXX_COMPILER_ID "MSVC")
set(VCPKG_DETECTED_CMAKE_RC_COMPILER "C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64/rc.exe")
set(VCPKG_DETECTED_CMAKE_RC_COMPILER_ID "")
set(VCPKG_DETECTED_CMAKE_C_STANDARD_INCLUDE_DIRECTORIES "")
set(VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib")
set(VCPKG_DETECTED_CMAKE_C_STANDARD "")
set(VCPKG_DETECTED_CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17")
set(VCPKG_DETECTED_CMAKE_C_EXTENSION "")
set(VCPKG_DETECTED_CMAKE_CXX_STANDARD_INCLUDE_DIRECTORIES "")
set(VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES "kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib")
set(VCPKG_DETECTED_CMAKE_CXX_STANDARD "")
set(VCPKG_DETECTED_CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23")
set(VCPKG_DETECTED_CMAKE_CXX_EXTENSION "")
set(VCPKG_DETECTED_CMAKE_C_FLAGS " /nologo /DWIN32 /D_WINDOWS /W3 /utf-8 /MP ")
set(VCPKG_DETECTED_CMAKE_CXX_FLAGS " /nologo /DWIN32 /D_WINDOWS /W3 /utf-8 /GR /EHsc /MP ")
set(VCPKG_DETECTED_CMAKE_RC_FLAGS "-c65001 /DWIN32")
set(VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS "/machine:x64")
set(VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS "/machine:x64")
set(VCPKG_DETECTED_CMAKE_EXE_LINKER_FLAGS "/machine:x64")
set(VCPKG_DETECTED_ENV_PATH "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE//Extensions/Microsoft/IntelliCode/CLI;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/HostX64/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/VC/VCPackages;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TestWindow;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/MSBuild/Current/bin/Roslyn;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Team Tools/Performance Tools/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Team Tools/Performance Tools;C:/Program Files (x86)/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools/vs2019//x64;C:/Program Files (x86)/Microsoft Visual Studio/Shared/Common/VSPerfCollectionTools/vs2019/;C:/Program Files (x86)/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.8 Tools/x64/;C:/Program Files (x86)/HTML Help Workshop;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/FSharp/Tools;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/Tools/devinit;C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64;C:/Program Files (x86)/Windows Kits/10/bin/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise//MSBuild/Current/Bin;C:/Windows/Microsoft.NET/Framework64/v4.0.30319;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/Tools/;C:/Program Files/PowerShell/7;C:/Windows/system32;C:/Windows;C:/Windows/system32/Wbem;C:/Windows/system32/WindowsPowerShell/v1.0/;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/Llvm/x64/bin;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/CMake/bin;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/VC/Linux/bin/ConnectionManagerExe;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja")
set(VCPKG_DETECTED_ENV_INCLUDE "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/ATLMFC/include;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/include;C:/Program Files (x86)/Windows Kits/NETFXSDK/4.8/include/um;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/ucrt;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/shared;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/um;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/winrt;C:/Program Files (x86)/Windows Kits/10/include/10.0.22000.0/cppwinrt")
set(VCPKG_DETECTED_ENV_C_INCLUDE_PATH "")
set(VCPKG_DETECTED_ENV_CPLUS_INCLUDE_PATH "")
set(VCPKG_DETECTED_ENV_LIB "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/ATLMFC/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64;C:/Program Files (x86)/Windows Kits/NETFXSDK/4.8/lib/um/x64;C:/Program Files (x86)/Windows Kits/10/lib/10.0.22000.0/ucrt/x64;C:/Program Files (x86)/Windows Kits/10/lib/10.0.22000.0/um/x64")
set(VCPKG_DETECTED_ENV_LIBPATH "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/ATLMFC/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x64;C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/lib/x86/store/references;C:/Program Files (x86)/Windows Kits/10/UnionMetadata/10.0.22000.0;C:/Program Files (x86)/Windows Kits/10/References/10.0.22000.0;C:/Windows/Microsoft.NET/Framework64/v4.0.30319")
set(VCPKG_DETECTED_ENV_LIBRARY_PATH "")
set(VCPKG_DETECTED_ENV_LD_LIBRARY_PATH "")
set(VCPKG_COMBINED_CXX_FLAGS_RELEASE " -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 ")
set(VCPKG_COMBINED_C_FLAGS_RELEASE " -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 ")
set(VCPKG_COMBINED_SHARED_LINKER_FLAGS_RELEASE "-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF ")
set(VCPKG_COMBINED_EXE_LINKER_FLAGS_RELEASE "-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF ")
set(VCPKG_COMBINED_STATIC_LINKER_FLAGS_RELEASE "-machine:x64 -nologo")
set(VCPKG_COMBINED_RC_FLAGS_RELEASE "-c65001 -DWIN32 ")

View File

@@ -0,0 +1,2 @@
include("${CMAKE_CURRENT_LIST_DIR}/cmake-get-vars-x64-windows-rel.cmake.log")
include("${CMAKE_CURRENT_LIST_DIR}/cmake-get-vars-x64-windows-dbg.cmake.log")

View File

@@ -0,0 +1,26 @@
[1/2] cmd /c "cd .. && "C:/Program Files/CMake/bin/cmake.exe" "D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build" "-G" "Ninja" "-DCMAKE_BUILD_TYPE=Release" "-DCMAKE_INSTALL_PREFIX=D:/a/1/s/externals/vcpkg/packages/boost-container_x64-windows" "-DPORT=boost-container" "-DFEATURES=core" "-DWITH_PYTHON2=OFF" "-DWITH_PYTHON3=OFF" "-DCURRENT_INSTALLED_DIR=D:/a/1/s/build/vcpkg_installed/x64-windows" "-DB2_EXE=D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build/b2.exe" "-DSOURCE_PATH=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/src/ost-1.79.0-5f46531285.clean" "-DBOOST_BUILD_PATH=D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_CMAKE_VARS_FILE=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/cmake-get-vars-x64-windows.cmake.log" "-DCMAKE_MAKE_PROGRAM=C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" "-DBUILD_SHARED_LIBS=ON" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=D:/a/1/s/externals/vcpkg/scripts/toolchains/windows.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" "-DVCPKG_SET_CHARSET_FLAG=ON" "-DVCPKG_PLATFORM_TOOLSET=v142" "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" "-DCMAKE_VERBOSE_MAKEFILE=ON" "-DVCPKG_APPLOCAL_DEPS=OFF" "-DCMAKE_TOOLCHAIN_FILE=D:/a/1/s/externals/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" "-DVCPKG_CXX_FLAGS=" "-DVCPKG_CXX_FLAGS_RELEASE=" "-DVCPKG_CXX_FLAGS_DEBUG=" "-DVCPKG_C_FLAGS=" "-DVCPKG_C_FLAGS_RELEASE=" "-DVCPKG_C_FLAGS_DEBUG=" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_LINKER_FLAGS=" "-DVCPKG_LINKER_FLAGS_RELEASE=" "-DVCPKG_LINKER_FLAGS_DEBUG=" "-DVCPKG_TARGET_ARCHITECTURE=x64" "-DCMAKE_INSTALL_LIBDIR:STRING=lib" "-DCMAKE_INSTALL_BINDIR:STRING=bin" "-D_VCPKG_ROOT_DIR=D:/a/1/s/externals/vcpkg" "-D_VCPKG_INSTALLED_DIR=D:/a/1/s/build/vcpkg_installed" "-DVCPKG_MANIFEST_INSTALL=OFF""
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
CMAKE_INSTALL_BINDIR
CMAKE_INSTALL_LIBDIR
FEATURES
_VCPKG_ROOT_DIR
-- Build files have been written to: D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel
[2/2] cmd /c "cd ../../x64-windows-dbg && "C:/Program Files/CMake/bin/cmake.exe" "D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build" "-G" "Ninja" "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_INSTALL_PREFIX=D:/a/1/s/externals/vcpkg/packages/boost-container_x64-windows/debug" "-DPORT=boost-container" "-DFEATURES=core" "-DWITH_PYTHON2=OFF" "-DWITH_PYTHON3=OFF" "-DCURRENT_INSTALLED_DIR=D:/a/1/s/build/vcpkg_installed/x64-windows" "-DB2_EXE=D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build/b2.exe" "-DSOURCE_PATH=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/src/ost-1.79.0-5f46531285.clean" "-DBOOST_BUILD_PATH=D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_CMAKE_VARS_FILE=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/cmake-get-vars-x64-windows.cmake.log" "-DCMAKE_MAKE_PROGRAM=C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/Common7/IDE/CommonExtensions/Microsoft/CMake/Ninja/ninja.exe" "-DBUILD_SHARED_LIBS=ON" "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=D:/a/1/s/externals/vcpkg/scripts/toolchains/windows.cmake" "-DVCPKG_TARGET_TRIPLET=x64-windows" "-DVCPKG_SET_CHARSET_FLAG=ON" "-DVCPKG_PLATFORM_TOOLSET=v142" "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" "-DCMAKE_VERBOSE_MAKEFILE=ON" "-DVCPKG_APPLOCAL_DEPS=OFF" "-DCMAKE_TOOLCHAIN_FILE=D:/a/1/s/externals/vcpkg/scripts/buildsystems/vcpkg.cmake" "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" "-DVCPKG_CXX_FLAGS=" "-DVCPKG_CXX_FLAGS_RELEASE=" "-DVCPKG_CXX_FLAGS_DEBUG=" "-DVCPKG_C_FLAGS=" "-DVCPKG_C_FLAGS_RELEASE=" "-DVCPKG_C_FLAGS_DEBUG=" "-DVCPKG_CRT_LINKAGE=dynamic" "-DVCPKG_LINKER_FLAGS=" "-DVCPKG_LINKER_FLAGS_RELEASE=" "-DVCPKG_LINKER_FLAGS_DEBUG=" "-DVCPKG_TARGET_ARCHITECTURE=x64" "-DCMAKE_INSTALL_LIBDIR:STRING=lib" "-DCMAKE_INSTALL_BINDIR:STRING=bin" "-D_VCPKG_ROOT_DIR=D:/a/1/s/externals/vcpkg" "-D_VCPKG_INSTALLED_DIR=D:/a/1/s/build/vcpkg_installed" "-DVCPKG_MANIFEST_INSTALL=OFF""
-- Configuring done
-- Generating done
CMake Warning:
Manually-specified variables were not used by the project:
CMAKE_INSTALL_BINDIR
CMAKE_INSTALL_LIBDIR
FEATURES
_VCPKG_ROOT_DIR
-- Build files have been written to: D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg

View File

View File

View File

@@ -0,0 +1,510 @@
[1/2] cmd.exe /C "cd /D D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build && D:\a\1\s\build\vcpkg_installed\x64-windows\tools\boost-build\b2.exe toolset=msvc --user-config=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/user-config.jam --stagedir=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/stage --build-dir=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg runtime-link=shared link=shared address-model=64 architecture=x86 target-os=windows threadapi=win32 variant=debug --disable-icu --with-atomic --with-random --with-date_time --with-filesystem --with-system --with-thread --with-chrono -j2 -sBOOST_ROOT=D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build -sBOOST_BUILD_PATH=D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build --debug-configuration --debug-building --debug-generators --ignore-site-config --hash -q debug-symbols=on -d +2 threading=multi stage"
notice: found boost-build.jam at D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build/boost-build.jam
notice: loading B2 from D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build/src/kernel/bootstrap.jam
notice: Site configuration files will be ignored due to the
notice: --ignore-site-config command-line option.
notice: Loading explicitly specified user configuration file:
D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\user-config.jam
notice: Searching 'D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg' for user-config configuration file 'user-config.jam'.
notice: Loading user-config configuration file 'user-config.jam' from 'D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg'.
notice: [msvc-cfg] msvc-14.0 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\cl.exe'
notice: [msvc-cfg] msvc-14.2 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.16.27023\bin\HostX64\arm\cl.exe'
notice: will use 'C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe' for msvc, condition <toolset>msvc-142
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>x86/<address-model>32', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>/<address-model>32', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>x86/<address-model>64', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat amd64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>/<address-model>64', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat amd64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>x86/<address-model>', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat amd64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>/<address-model>', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat amd64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>ia64/<address-model>64', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86_ia64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>ia64/<address-model>', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86_ia64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>arm/<address-model>32', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86_arm'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>arm/<address-model>64', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86_arm64'
Building target '../build/stage'
Build request: object(property-set)@373 <address-model>64 <architecture>x86 <debug-symbols>on <link>shared <runtime-link>shared <target-os>windows <threadapi>win32 <threading>multi <toolset>msvc <variant>debug
Command line free features:
Target requirements: <archiveflags>-machine:x64 -nologo <define>BOOST_ALL_NO_LIB=1 <hardcode-dll-paths>false <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <location>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/stage/lib <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <toolset>msvc,<runtime-link>shared:<threading>multi <translate-path>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>.stage-translate-path
Common properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>false <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <location>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/stage/lib <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <translate-path>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>.stage-translate-path <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
Building target '../build/boost_container'
Build request: object(property-set)@380 <address-model>64 <architecture>x86 <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <inlining>off <link>shared <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
Command line free features:
Target requirements: <archiveflags>-machine:x64 -nologo <define>BOOST_ALL_NO_LIB=1 <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <link>shared:<define>BOOST_CONTAINER_DYN_LINK=1 <link>static:<define>BOOST_CONTAINER_STATIC_LINK=1 <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <relevant>define:<relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <toolset>msvc,<runtime-link>shared:<threading>multi
Common properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
Usage requirements for boost_container:
Build properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** construct LIB
from { alloc_lib.c.C }
from { dlmalloc.cpp.CPP }
from { global_resource.cpp.CPP }
from { monotonic_buffer_resource.cpp.CPP }
from { pool_resource.cpp.CPP }
from { synchronized_pool_resource.cpp.CPP }
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= LIB property-set=
trying type LIB
there are generators for this type
trying generator builtin.lib-generator ( -> LIB )
is viable
trying generator builtin.prebuilt ( -> LIB )
*** 1 viable generators
*** construct SHARED_LIB
from { alloc_lib.c.C }
from { dlmalloc.cpp.CPP }
from { global_resource.cpp.CPP }
from { monotonic_buffer_resource.cpp.CPP }
from { pool_resource.cpp.CPP }
from { synchronized_pool_resource.cpp.CPP }
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= SHARED_LIB property-set=
trying type SHARED_LIB
there are generators for this type
trying generator msvc.link.dll ( OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB -> SHARED_LIB IMPORT_LIB )
is viable
trying generator msvc.link.dll ( OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB -> SHARED_LIB )
*** 1 viable generators
** generator msvc.link.dll
composing: true
*** construct OBJ
from { alloc_lib.c.C }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= OBJ property-set=
trying type OBJ
there are generators for this type
trying generator rc.compile.resource ( RC -> OBJ )
is viable
trying generator msvc.compile.c++ ( CPP -> OBJ )
is viable
trying generator msvc.compile.c ( C -> OBJ )
is viable
trying generator msvc.compile.rc ( RC -> OBJ )
is viable
trying generator msvc.compile.asm ( ASM -> OBJ )
is viable
trying generator msvc.compile.c.pch ( H -> C_PCH OBJ )
is viable
trying generator msvc.compile.c++.pch ( H -> CPP_PCH OBJ )
is viable
*** 6 viable generators
** generator 'msvc.compile.c++' pruned
** generator msvc.compile.c
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } }
generator msvc.compile.c spawned
{ msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { alloc_lib.c.C }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= SEARCHED_LIB property-set=
trying type SEARCHED_LIB
there are generators for this type
trying generator searched-lib-generator ( -> SEARCHED_LIB )
is viable
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { alloc_lib.c.C }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= STATIC_LIB property-set=
trying type STATIC_LIB
there are generators for this type
trying generator msvc.archive ( OBJ -> STATIC_LIB )
is viable
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { alloc_lib.c.C }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= IMPORT_LIB property-set=
trying type IMPORT_LIB
there are generators for this type
trying generator msvc.link.dll ( OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB -> SHARED_LIB IMPORT_LIB )
is viable
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { dlmalloc.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { dlmalloc.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { dlmalloc.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { dlmalloc.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { global_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { global_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { global_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { global_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { monotonic_buffer_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { monotonic_buffer_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { monotonic_buffer_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { monotonic_buffer_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { synchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { synchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { synchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { synchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>find-shared-library <relevant>find-static-library <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>response-file <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>toolset <relevant>toolset-msvc:version <relevant>user-interface <relevant>windows-api ] { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/boost/build/390fd8092bb4d388fcb8550939707c7a ] { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
generator msvc.link.dll spawned
{ msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/boost/build/390fd8092bb4d388fcb8550939707c7a ]
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/boost/build/390fd8092bb4d388fcb8550939707c7a ] { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
generator builtin.lib-generator spawned
{ msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/boost/build/390fd8092bb4d388fcb8550939707c7a ]
Usage requirements from boost_container: <define>BOOST_CONTAINER_DYN_LINK=1 <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cxxstd <relevant>cxxstd-dialect <relevant>debug-store <relevant>debug-symbols <relevant>deduced-address-model <relevant>deduced-architecture <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>inlining <relevant>instruction-set <relevant>link <relevant>lto <relevant>lto-mode <relevant>optimization <relevant>pch <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>segmented-stacks <relevant>threading <relevant>toolset <relevant>toolset-msvc:vendor <relevant>toolset-msvc:version <relevant>variant <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/boost/build/390fd8092bb4d388fcb8550939707c7a
Usage requirements for stage: <define>BOOST_CONTAINER_DYN_LINK=1 <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cxxstd <relevant>cxxstd-dialect <relevant>debug-store <relevant>debug-symbols <relevant>deduced-address-model <relevant>deduced-architecture <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>inlining <relevant>instruction-set <relevant>link <relevant>lto <relevant>lto-mode <relevant>optimization <relevant>pch <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>segmented-stacks <relevant>threading <relevant>toolset <relevant>toolset-msvc:vendor <relevant>toolset-msvc:version <relevant>variant <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/boost/build/390fd8092bb4d388fcb8550939707c7a
Build properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>false <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <location>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/stage/lib <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cxxstd <relevant>cxxstd-dialect <relevant>debug-store <relevant>debug-symbols <relevant>deduced-address-model <relevant>deduced-architecture <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>inlining <relevant>instruction-set <relevant>link <relevant>lto <relevant>lto-mode <relevant>optimization <relevant>pch <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>segmented-stacks <relevant>threading <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <relevant>toolset <relevant>toolset-msvc:vendor <relevant>toolset-msvc:version <relevant>variant <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <translate-path>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>.stage-translate-path <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/boost/build/390fd8092bb4d388fcb8550939707c7a
*** construct INSTALLED_SHARED_LIB
from { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>off <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -debug -INCREMENTAL <location>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/stage/lib <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>off <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <response-file>auto <rtti>on <runtime-debugging>on <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>debug <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= INSTALLED_SHARED_LIB property-set= msvc-142/debug/address-model-64/architecture-x86/threading-multi
trying type INSTALLED_SHARED_LIB
there are generators for this type
trying generator install-shared-lib ( SHARED_LIB -> INSTALLED_SHARED_LIB )
is viable
*** 1 viable generators
returned { common%common.copy-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } }
generator install-shared-lib spawned
{ common%common.copy-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.link.dll-boost_container-vc142-mt-gd-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } }
with usage requirements: [ ]
Usage requirements from stage: <define>BOOST_CONTAINER_DYN_LINK=1 <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cxxstd <relevant>cxxstd-dialect <relevant>debug-store <relevant>debug-symbols <relevant>deduced-address-model <relevant>deduced-architecture <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>inlining <relevant>instruction-set <relevant>link <relevant>lto <relevant>lto-mode <relevant>optimization <relevant>pch <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>segmented-stacks <relevant>threading <relevant>toolset <relevant>toolset-msvc:vendor <relevant>toolset-msvc:version <relevant>variant <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-dbg/boost/build/390fd8092bb4d388fcb8550939707c7a
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a"
msvc.read-setup <pD:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18>msvc-setup.read
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18"
file C:\Users\VssAdministrator\AppData\Local\Temp\jam131caffe.000
msvc.write-setup-script D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat
type "C:\Users\VssAdministrator\AppData\Local\Temp\jam131caffe.000" > "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat"
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\dlmalloc.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\dlmalloc.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\dlmalloc.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
dlmalloc.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\global_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\global_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\global_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
global_resource.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\alloc_lib.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\alloc_lib.c" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\alloc_lib.obj" -TC -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
alloc_lib.c
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\monotonic_buffer_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\monotonic_buffer_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\monotonic_buffer_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
monotonic_buffer_resource.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\pool_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\pool_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\pool_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
pool_resource.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\synchronized_pool_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\synchronized_pool_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\synchronized_pool_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
synchronized_pool_resource.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\unsynchronized_pool_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\unsynchronized_pool_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\unsynchronized_pool_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -D_DEBUG -MDd -Z7 -Ob0 -Od -RTC1 /Z7 /Od /Ob0 /W3 /MDd /Zc:forScope /Zc:wchar_t /Zc:inline /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
unsynchronized_pool_resource.cpp
msvc.link.dll D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.dll
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
link /NOLOGO /INCREMENTAL:NO "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\alloc_lib.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\dlmalloc.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\global_resource.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\monotonic_buffer_resource.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\pool_resource.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\synchronized_pool_resource.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\unsynchronized_pool_resource.obj" /DEBUG -machine:x64 -nologo -debug -INCREMENTAL /MACHINE:X64 /MANIFEST:EMBED /subsystem:console /out:"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.dll" /DLL /IMPLIB:"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.lib"
Creating library D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.lib and object D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.exp
common.copy D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib\boost_container-vc142-mt-gd-x64-1_79.lib
copy /b "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.lib" + this-file-does-not-exist-A698EE7806899E69 "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib\boost_container-vc142-mt-gd-x64-1_79.lib"
D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.lib
1 file(s) copied.
common.copy D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib\boost_container-vc142-mt-gd-x64-1_79.dll
copy /b "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.dll" + this-file-does-not-exist-A698EE7806899E69 "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib\boost_container-vc142-mt-gd-x64-1_79.dll"
D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.dll
1 file(s) copied.
common.copy D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib\boost_container-vc142-mt-gd-x64-1_79.pdb
copy /b "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.pdb" + this-file-does-not-exist-A698EE7806899E69 "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\stage\lib\boost_container-vc142-mt-gd-x64-1_79.pdb"
D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg\boost\build\390fd8092bb4d388fcb8550939707c7a\boost_container-vc142-mt-gd-x64-1_79.pdb
1 file(s) copied.
[1/2] cmd.exe /C "cd /D D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-dbg && "C:\Program Files\CMake\bin\cmake.exe" -P cmake_install.cmake"
-- Install configuration: "Debug"
-- Installing: D:/a/1/s/externals/vcpkg/packages/boost-container_x64-windows/debug/lib/boost_container-vc142-mt-gd-x64-1_79.lib
-- Installing: D:/a/1/s/externals/vcpkg/packages/boost-container_x64-windows/debug/bin/boost_container-vc142-mt-gd-x64-1_79.dll

View File

@@ -0,0 +1,510 @@
[1/2] cmd.exe /C "cd /D D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build && D:\a\1\s\build\vcpkg_installed\x64-windows\tools\boost-build\b2.exe toolset=msvc --user-config=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/user-config.jam --stagedir=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/stage --build-dir=D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel runtime-link=shared link=shared address-model=64 architecture=x86 target-os=windows threadapi=win32 variant=release --disable-icu --with-atomic --with-random --with-date_time --with-filesystem --with-system --with-thread --with-chrono -j2 -sBOOST_ROOT=D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build -sBOOST_BUILD_PATH=D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build --debug-configuration --debug-building --debug-generators --ignore-site-config --hash -q debug-symbols=on -d +2 threading=multi stage"
notice: found boost-build.jam at D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build/boost-build.jam
notice: loading B2 from D:/a/1/s/build/vcpkg_installed/x64-windows/tools/boost-build/src/kernel/bootstrap.jam
notice: Site configuration files will be ignored due to the
notice: --ignore-site-config command-line option.
notice: Loading explicitly specified user configuration file:
D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\user-config.jam
notice: Searching 'D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel' for user-config configuration file 'user-config.jam'.
notice: Loading user-config configuration file 'user-config.jam' from 'D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel'.
notice: [msvc-cfg] msvc-14.0 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\cl.exe'
notice: [msvc-cfg] msvc-14.2 detected, command: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.16.27023\bin\HostX64\arm\cl.exe'
notice: will use 'C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe' for msvc, condition <toolset>msvc-142
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>x86/<address-model>32', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>/<address-model>32', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>x86/<address-model>64', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat amd64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>/<address-model>64', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat amd64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>x86/<address-model>', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat amd64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>/<address-model>', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat amd64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>ia64/<address-model>64', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86_ia64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>ia64/<address-model>', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86_ia64'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>arm/<address-model>32', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86_arm'
notice: [msvc-cfg] condition: '<toolset>msvc-142/<architecture>arm/<address-model>64', setup: 'D:/a/1/s/build/vcpkg_installed/x64-windows/share/boost-build/nothing.bat x86_arm64'
Building target '../build/stage'
Build request: object(property-set)@373 <address-model>64 <architecture>x86 <debug-symbols>on <link>shared <runtime-link>shared <target-os>windows <threadapi>win32 <threading>multi <toolset>msvc <variant>release
Command line free features:
Target requirements: <archiveflags>-machine:x64 -nologo <define>BOOST_ALL_NO_LIB=1 <hardcode-dll-paths>false <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <location>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/stage/lib <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <toolset>msvc,<runtime-link>shared:<threading>multi <translate-path>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>.stage-translate-path
Common properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>false <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <location>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/stage/lib <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <translate-path>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>.stage-translate-path <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
Building target '../build/boost_container'
Build request: object(property-set)@380 <address-model>64 <architecture>x86 <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <inlining>full <link>shared <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
Command line free features:
Target requirements: <archiveflags>-machine:x64 -nologo <define>BOOST_ALL_NO_LIB=1 <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <link>shared:<define>BOOST_CONTAINER_DYN_LINK=1 <link>static:<define>BOOST_CONTAINER_STATIC_LINK=1 <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <relevant>define:<relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <toolset>msvc,<runtime-link>shared:<threading>multi
Common properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
Usage requirements for boost_container:
Build properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** construct LIB
from { alloc_lib.c.C }
from { dlmalloc.cpp.CPP }
from { global_resource.cpp.CPP }
from { monotonic_buffer_resource.cpp.CPP }
from { pool_resource.cpp.CPP }
from { synchronized_pool_resource.cpp.CPP }
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= LIB property-set=
trying type LIB
there are generators for this type
trying generator builtin.lib-generator ( -> LIB )
is viable
trying generator builtin.prebuilt ( -> LIB )
*** 1 viable generators
*** construct SHARED_LIB
from { alloc_lib.c.C }
from { dlmalloc.cpp.CPP }
from { global_resource.cpp.CPP }
from { monotonic_buffer_resource.cpp.CPP }
from { pool_resource.cpp.CPP }
from { synchronized_pool_resource.cpp.CPP }
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= SHARED_LIB property-set=
trying type SHARED_LIB
there are generators for this type
trying generator msvc.link.dll ( OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB -> SHARED_LIB IMPORT_LIB )
is viable
trying generator msvc.link.dll ( OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB -> SHARED_LIB )
*** 1 viable generators
** generator msvc.link.dll
composing: true
*** construct OBJ
from { alloc_lib.c.C }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= OBJ property-set=
trying type OBJ
there are generators for this type
trying generator rc.compile.resource ( RC -> OBJ )
is viable
trying generator msvc.compile.c++ ( CPP -> OBJ )
is viable
trying generator msvc.compile.c ( C -> OBJ )
is viable
trying generator msvc.compile.rc ( RC -> OBJ )
is viable
trying generator msvc.compile.asm ( ASM -> OBJ )
is viable
trying generator msvc.compile.c.pch ( H -> C_PCH OBJ )
is viable
trying generator msvc.compile.c++.pch ( H -> CPP_PCH OBJ )
is viable
*** 6 viable generators
** generator 'msvc.compile.c++' pruned
** generator msvc.compile.c
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } }
generator msvc.compile.c spawned
{ msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { alloc_lib.c.C }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= SEARCHED_LIB property-set=
trying type SEARCHED_LIB
there are generators for this type
trying generator searched-lib-generator ( -> SEARCHED_LIB )
is viable
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { alloc_lib.c.C }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= STATIC_LIB property-set=
trying type STATIC_LIB
there are generators for this type
trying generator msvc.archive ( OBJ -> STATIC_LIB )
is viable
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { alloc_lib.c.C }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= IMPORT_LIB property-set=
trying type IMPORT_LIB
there are generators for this type
trying generator msvc.link.dll ( OBJ SEARCHED_LIB STATIC_LIB IMPORT_LIB -> SHARED_LIB IMPORT_LIB )
is viable
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { dlmalloc.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { dlmalloc.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { dlmalloc.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { dlmalloc.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { global_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { global_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { global_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { global_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { monotonic_buffer_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { monotonic_buffer_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { monotonic_buffer_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { monotonic_buffer_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { synchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { synchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { synchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { synchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
*** construct OBJ
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 6 viable generators
** generator msvc.compile.c++
composing:
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ] { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } }
generator msvc.compile.c++ spawned
{ msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>define <relevant>exception-handling <relevant>extern-c-nothrow <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>lto <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api ]
** generator 'msvc.compile.c' pruned
** generator 'msvc.compile.rc' pruned
** generator 'msvc.compile.asm' pruned
** generator 'msvc.compile.c.pch' pruned
** generator 'msvc.compile.c++.pch' pruned
*** construct SEARCHED_LIB
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
returned
generator searched-lib-generator spawned
*** construct STATIC_LIB
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
*** 1 viable generators
** generator msvc.archive
composing: true
returned
generator msvc.archive spawned
*** construct IMPORT_LIB
from { unsynchronized_pool_resource.cpp.CPP }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>define:<relevant>link <relevant>link <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
generator msvc.link.dll is active, discaring
*** 0 viable generators
SUCCESS: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>find-shared-library <relevant>find-static-library <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>response-file <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>toolset <relevant>toolset-msvc:version <relevant>user-interface <relevant>windows-api ] { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/boost/build/aa84e6e880a9d383ddf248bc50c22218 ] { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
generator msvc.link.dll spawned
{ msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/boost/build/aa84e6e880a9d383ddf248bc50c22218 ]
returned [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/boost/build/aa84e6e880a9d383ddf248bc50c22218 ] { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
generator builtin.lib-generator spawned
{ msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.lib.IMPORT_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.pdb.PDB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
with usage requirements: [ <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/boost/build/aa84e6e880a9d383ddf248bc50c22218 ]
Usage requirements from boost_container: <define>BOOST_CONTAINER_DYN_LINK=1 <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cxxstd <relevant>cxxstd-dialect <relevant>debug-store <relevant>debug-symbols <relevant>deduced-address-model <relevant>deduced-architecture <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>inlining <relevant>instruction-set <relevant>link <relevant>lto <relevant>lto-mode <relevant>optimization <relevant>pch <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>segmented-stacks <relevant>threading <relevant>toolset <relevant>toolset-msvc:vendor <relevant>toolset-msvc:version <relevant>variant <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/boost/build/aa84e6e880a9d383ddf248bc50c22218
Usage requirements for stage: <define>BOOST_CONTAINER_DYN_LINK=1 <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cxxstd <relevant>cxxstd-dialect <relevant>debug-store <relevant>debug-symbols <relevant>deduced-address-model <relevant>deduced-architecture <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>inlining <relevant>instruction-set <relevant>link <relevant>lto <relevant>lto-mode <relevant>optimization <relevant>pch <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>segmented-stacks <relevant>threading <relevant>toolset <relevant>toolset-msvc:vendor <relevant>toolset-msvc:version <relevant>variant <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/boost/build/aa84e6e880a9d383ddf248bc50c22218
Build properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>false <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <location>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/stage/lib <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cxxstd <relevant>cxxstd-dialect <relevant>debug-store <relevant>debug-symbols <relevant>deduced-address-model <relevant>deduced-architecture <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>inlining <relevant>instruction-set <relevant>link <relevant>lto <relevant>lto-mode <relevant>optimization <relevant>pch <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>segmented-stacks <relevant>threading <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <relevant>toolset <relevant>toolset-msvc:vendor <relevant>toolset-msvc:version <relevant>variant <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <tag>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean>.tag <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <translate-path>@Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>%Jamfile<D:\a\1\s\externals\vcpkg\buildtrees\boost-container\src\ost-1.79.0-5f46531285.clean\build>.stage-translate-path <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/boost/build/aa84e6e880a9d383ddf248bc50c22218
*** construct INSTALLED_SHARED_LIB
from { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } }
properties: <address-model>64 <architecture>x86 <archiveflags>-machine:x64 -nologo <asynch-exceptions>off <coverage>off <debug-store>object <debug-symbols>on <define>BOOST_ALL_NO_LIB=1 <define>BOOST_CONTAINER_DYN_LINK=1 <define>NDEBUG <embed-manifest-via>linker <embed-manifest>on <exception-handling>on <extern-c-nothrow>off <hardcode-dll-paths>true <host-os>windows <include>../include&&/D:/a/1/s/build/vcpkg_installed/x64-windows/include <inlining>full <install-dependencies>off <link>shared <linkflags>-machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF <location>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/stage/lib <main-target-type>LIB <midl-robust>yes <midl-stubless-proxy>yes <optimization>speed <os>NT <pch>on <preserve-test-targets>on <profiling>off <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cflags <relevant>cxxflags <relevant>cxxstd <relevant>debug-store <relevant>debug-symbols <relevant>def-file <relevant>define <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-file <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>find-shared-library <relevant>find-static-library <relevant>force-include <relevant>include <relevant>inlining <relevant>instruction-set <relevant>library-file <relevant>library-path <relevant>link <relevant>linkflags <relevant>lto <relevant>main-target-type <relevant>mc-input-encoding <relevant>mc-output-encoding <relevant>mc-set-customer-bit <relevant>optimization <relevant>pch <relevant>pch-file <relevant>pch-header <relevant>pch-source <relevant>response-file <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>suppress-import-lib <relevant>threading <relevant>threading:<relevant>runtime-link <relevant>threading:<relevant>toolset <relevant>toolset <relevant>toolset-msvc:version <relevant>undef <relevant>user-interface <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <response-file>auto <rtti>on <runtime-debugging>off <runtime-link>shared <stdlib>native <strip>off <suppress-import-lib>false <symlink-location>project-relative <target-os>windows <testing.execute>on <threadapi>win32 <threading>multi <toolset-msvc:version>142 <toolset>msvc <user-interface>console <variant>release <vectorize>off <warnings-as-errors>off <warnings>on <windows-api>desktop
find-viable-generators target-type= INSTALLED_SHARED_LIB property-set= msvc-142/release/address-model-64/architecture-x86/debug-symbols-on/threading-multi
trying type INSTALLED_SHARED_LIB
there are generators for this type
trying generator install-shared-lib ( SHARED_LIB -> INSTALLED_SHARED_LIB )
is viable
*** 1 viable generators
returned { common%common.copy-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } }
generator install-shared-lib spawned
{ common%common.copy-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.link.dll-boost_container-vc142-mt-x64-1_79.dll.SHARED_LIB { msvc%msvc.compile.c-alloc_lib.obj.OBJ { alloc_lib.c.C } } { msvc%msvc.compile.c++-dlmalloc.obj.OBJ { dlmalloc.cpp.CPP } } { msvc%msvc.compile.c++-global_resource.obj.OBJ { global_resource.cpp.CPP } } { msvc%msvc.compile.c++-monotonic_buffer_resource.obj.OBJ { monotonic_buffer_resource.cpp.CPP } } { msvc%msvc.compile.c++-pool_resource.obj.OBJ { pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-synchronized_pool_resource.obj.OBJ { synchronized_pool_resource.cpp.CPP } } { msvc%msvc.compile.c++-unsynchronized_pool_resource.obj.OBJ { unsynchronized_pool_resource.cpp.CPP } } } }
with usage requirements: [ ]
Usage requirements from stage: <define>BOOST_CONTAINER_DYN_LINK=1 <relevant>address-model <relevant>address-sanitizer <relevant>architecture <relevant>asynch-exceptions <relevant>cxxstd <relevant>cxxstd-dialect <relevant>debug-store <relevant>debug-symbols <relevant>deduced-address-model <relevant>deduced-architecture <relevant>define:<relevant>link <relevant>embed-manifest <relevant>embed-manifest-via <relevant>exception-handling <relevant>extern-c-nothrow <relevant>inlining <relevant>instruction-set <relevant>link <relevant>lto <relevant>lto-mode <relevant>optimization <relevant>pch <relevant>rtti <relevant>runtime-debugging <relevant>runtime-link <relevant>segmented-stacks <relevant>threading <relevant>toolset <relevant>toolset-msvc:vendor <relevant>toolset-msvc:version <relevant>variant <relevant>warnings <relevant>warnings-as-errors <relevant>windows-api <xdll-path>/D:/a/1/s/externals/vcpkg/buildtrees/boost-container/x64-windows-rel/boost/build/aa84e6e880a9d383ddf248bc50c22218
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218"
msvc.read-setup <pD:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18>msvc-setup.read
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc"
common.mkdir D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18
if not exist "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\\" mkdir "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18"
file C:\Users\VssAdministrator\AppData\Local\Temp\jamc84afff.000
msvc.write-setup-script D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat
type "C:\Users\VssAdministrator\AppData\Local\Temp\jamc84afff.000" > "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat"
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\dlmalloc.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\dlmalloc.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\dlmalloc.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 /O2 /Z7 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 -DNDEBUG "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
dlmalloc.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\global_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\global_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\global_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 /O2 /Z7 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 -DNDEBUG "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
global_resource.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\monotonic_buffer_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\monotonic_buffer_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\monotonic_buffer_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 /O2 /Z7 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 -DNDEBUG "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
monotonic_buffer_resource.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\alloc_lib.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\alloc_lib.c" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\alloc_lib.obj" -TC -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 /O2 /Z7 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 -DNDEBUG "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
alloc_lib.c
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\synchronized_pool_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\synchronized_pool_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\synchronized_pool_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 /O2 /Z7 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 -DNDEBUG "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
synchronized_pool_resource.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\pool_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\pool_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\pool_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 /O2 /Z7 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 -DNDEBUG "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
pool_resource.cpp
compile-c-c++ D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\unsynchronized_pool_resource.obj
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
cl "..\src\unsynchronized_pool_resource.cpp" -c -Fo"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\unsynchronized_pool_resource.obj" -TP /wd4675 /EHs /GR /Zc:throwingNew -nologo -DWIN32 -D_WINDOWS -W3 -utf-8 -GR -EHsc -MP -MD -O2 -Oi -Gy -DNDEBUG -Z7 /O2 /Z7 /Ob2 /W3 /MD /Zc:forScope /Zc:wchar_t /Zc:inline /Gw /favor:blend -DBOOST_ALL_NO_LIB=1 -DBOOST_CONTAINER_DYN_LINK=1 -DNDEBUG "-I..\include" "-ID:\a\1\s\build\vcpkg_installed\x64-windows\include"
unsynchronized_pool_resource.cpp
msvc.link.dll D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.dll
call "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\standalone\msvc\19858a0c092d6daed3b7579665d68f18\msvc-setup.bat" amd64 >nul
link /NOLOGO /INCREMENTAL:NO "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\alloc_lib.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\dlmalloc.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\global_resource.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\monotonic_buffer_resource.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\pool_resource.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\synchronized_pool_resource.obj" "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\unsynchronized_pool_resource.obj" /DEBUG -machine:x64 -nologo -DEBUG -INCREMENTAL:NO -OPT:REF -OPT:ICF /MACHINE:X64 /MANIFEST:EMBED /OPT:REF,ICF /subsystem:console /out:"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.dll" /DLL /IMPLIB:"D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.lib"
Creating library D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.lib and object D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.exp
common.copy D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib\boost_container-vc142-mt-x64-1_79.dll
copy /b "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.dll" + this-file-does-not-exist-A698EE7806899E69 "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib\boost_container-vc142-mt-x64-1_79.dll"
D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.dll
1 file(s) copied.
common.copy D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib\boost_container-vc142-mt-x64-1_79.lib
copy /b "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.lib" + this-file-does-not-exist-A698EE7806899E69 "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib\boost_container-vc142-mt-x64-1_79.lib"
D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.lib
1 file(s) copied.
common.copy D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib\boost_container-vc142-mt-x64-1_79.pdb
copy /b "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.pdb" + this-file-does-not-exist-A698EE7806899E69 "D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\stage\lib\boost_container-vc142-mt-x64-1_79.pdb"
D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel\boost\build\aa84e6e880a9d383ddf248bc50c22218\boost_container-vc142-mt-x64-1_79.pdb
1 file(s) copied.
[1/2] cmd.exe /C "cd /D D:\a\1\s\externals\vcpkg\buildtrees\boost-container\x64-windows-rel && "C:\Program Files\CMake\bin\cmake.exe" -P cmake_install.cmake"
-- Install configuration: "Release"
-- Installing: D:/a/1/s/externals/vcpkg/packages/boost-container_x64-windows/lib/boost_container-vc142-mt-x64-1_79.lib
-- Installing: D:/a/1/s/externals/vcpkg/packages/boost-container_x64-windows/bin/boost_container-vc142-mt-x64-1_79.dll

View File

@@ -0,0 +1,23 @@
# Use, modification, and distribution are
# subject to the Boost Software License, Version 1.0. (See accompanying
# file LICENSE.txt)
#
# Copyright Rene Rivera 2020.
# For Drone CI we use the Starlark scripting language to reduce duplication.
# As the yaml syntax for Drone CI is rather limited.
#
#
globalenv={}
linuxglobalimage="cppalliance/droneubuntu1604:1"
windowsglobalimage="cppalliance/dronevs2019"
def main(ctx):
return [
linux_cxx("TOOLSET=gcc CXXSTD=03,11 Job 0", "g++", packages="", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'gcc', 'CXXSTD': '03,11', 'DRONE_JOB_UUID': 'b6589fc6ab'}, globalenv=globalenv),
linux_cxx("TOOLSET=clang CXXSTD=03,11,14,1z Job 1", "clang++", packages="libstdc++-4.9-dev", buildtype="boost", buildscript="drone", image=linuxglobalimage, environment={'TOOLSET': 'clang', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': '356a192b79'}, globalenv=globalenv),
osx_cxx("TOOLSET=clang CXXSTD=03,11,14,1z Job 2", "clang++", packages="", buildtype="boost", buildscript="drone", environment={'TOOLSET': 'clang', 'CXXSTD': '03,11,14,1z', 'DRONE_JOB_UUID': 'da4b9237ba'}, globalenv=globalenv),
]
# from https://github.com/boostorg/boost-ci
load("@boost_ci//ci/drone/:functions.star", "linux_cxx","windows_cxx","osx_cxx","freebsd_cxx")

View File

@@ -0,0 +1,36 @@
#!/bin/bash
# Copyright 2020 Rene Rivera, Sam Darwin
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE.txt or copy at http://boost.org/LICENSE_1_0.txt)
set -e
export TRAVIS_BUILD_DIR=$(pwd)
export DRONE_BUILD_DIR=$(pwd)
export TRAVIS_BRANCH=$DRONE_BRANCH
export VCS_COMMIT_ID=$DRONE_COMMIT
export GIT_COMMIT=$DRONE_COMMIT
export REPO_NAME=$DRONE_REPO
export PATH=~/.local/bin:/usr/local/bin:$PATH
if [ "$DRONE_JOB_BUILDTYPE" == "boost" ]; then
echo '==================================> INSTALL'
BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
cd ..
git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
cd boost-root
git submodule update --init tools/build
git submodule update --init libs/config
git submodule update --init tools/boostdep
cp -r $TRAVIS_BUILD_DIR/* libs/container
python tools/boostdep/depinst/depinst.py container
./bootstrap.sh
./b2 headers
echo '==================================> SCRIPT'
./b2 libs/container/test toolset=$TOOLSET cxxstd=$CXXSTD
fi

View File

@@ -0,0 +1,96 @@
* text=auto !eol svneol=native#text/plain
*.gitattributes text svneol=native#text/plain
# Scriptish formats
*.bat text svneol=native#text/plain
*.bsh text svneol=native#text/x-beanshell
*.cgi text svneol=native#text/plain
*.cmd text svneol=native#text/plain
*.js text svneol=native#text/javascript
*.php text svneol=native#text/x-php
*.pl text svneol=native#text/x-perl
*.pm text svneol=native#text/x-perl
*.py text svneol=native#text/x-python
*.sh eol=lf svneol=LF#text/x-sh
configure eol=lf svneol=LF#text/x-sh
# Image formats
*.bmp binary svneol=unset#image/bmp
*.gif binary svneol=unset#image/gif
*.ico binary svneol=unset#image/ico
*.jpeg binary svneol=unset#image/jpeg
*.jpg binary svneol=unset#image/jpeg
*.png binary svneol=unset#image/png
*.tif binary svneol=unset#image/tiff
*.tiff binary svneol=unset#image/tiff
*.svg text svneol=native#image/svg%2Bxml
# Data formats
*.pdf binary svneol=unset#application/pdf
*.avi binary svneol=unset#video/avi
*.doc binary svneol=unset#application/msword
*.dsp text svneol=crlf#text/plain
*.dsw text svneol=crlf#text/plain
*.eps binary svneol=unset#application/postscript
*.gz binary svneol=unset#application/gzip
*.mov binary svneol=unset#video/quicktime
*.mp3 binary svneol=unset#audio/mpeg
*.ppt binary svneol=unset#application/vnd.ms-powerpoint
*.ps binary svneol=unset#application/postscript
*.psd binary svneol=unset#application/photoshop
*.rdf binary svneol=unset#text/rdf
*.rss text svneol=unset#text/xml
*.rtf binary svneol=unset#text/rtf
*.sln text svneol=native#text/plain
*.swf binary svneol=unset#application/x-shockwave-flash
*.tgz binary svneol=unset#application/gzip
*.vcproj text svneol=native#text/xml
*.vcxproj text svneol=native#text/xml
*.vsprops text svneol=native#text/xml
*.wav binary svneol=unset#audio/wav
*.xls binary svneol=unset#application/vnd.ms-excel
*.zip binary svneol=unset#application/zip
# Text formats
.htaccess text svneol=native#text/plain
*.bbk text svneol=native#text/xml
*.cmake text svneol=native#text/plain
*.css text svneol=native#text/css
*.dtd text svneol=native#text/xml
*.htm text svneol=native#text/html
*.html text svneol=native#text/html
*.ini text svneol=native#text/plain
*.log text svneol=native#text/plain
*.mak text svneol=native#text/plain
*.qbk text svneol=native#text/plain
*.rst text svneol=native#text/plain
*.sql text svneol=native#text/x-sql
*.txt text svneol=native#text/plain
*.xhtml text svneol=native#text/xhtml%2Bxml
*.xml text svneol=native#text/xml
*.xsd text svneol=native#text/xml
*.xsl text svneol=native#text/xml
*.xslt text svneol=native#text/xml
*.xul text svneol=native#text/xul
*.yml text svneol=native#text/plain
boost-no-inspect text svneol=native#text/plain
CHANGES text svneol=native#text/plain
COPYING text svneol=native#text/plain
INSTALL text svneol=native#text/plain
Jamfile text svneol=native#text/plain
Jamroot text svneol=native#text/plain
Jamfile.v2 text svneol=native#text/plain
Jamrules text svneol=native#text/plain
Makefile* text svneol=native#text/plain
README text svneol=native#text/plain
TODO text svneol=native#text/plain
# Code formats
*.c text svneol=native#text/plain
*.cpp text svneol=native#text/plain
*.h text svneol=native#text/plain
*.hpp text svneol=native#text/plain
*.ipp text svneol=native#text/plain
*.tpp text svneol=native#text/plain
*.jam text svneol=native#text/plain
*.java text svneol=native#text/plain

View File

@@ -0,0 +1,198 @@
name: CI
on:
pull_request:
push:
branches:
- master
- develop
- feature/**
env:
UBSAN_OPTIONS: print_stacktrace=1
jobs:
posix:
strategy:
fail-fast: false
matrix:
include:
- toolset: gcc-4.8
cxxstd: "03,11"
os: ubuntu-18.04
install: g++-4.8
- toolset: gcc-5
cxxstd: "03,11,14,1z"
os: ubuntu-18.04
install: g++-5
- toolset: gcc-6
cxxstd: "03,11,14,1z"
os: ubuntu-18.04
install: g++-6
- toolset: gcc-7
cxxstd: "03,11,14,17"
os: ubuntu-18.04
- toolset: gcc-8
cxxstd: "03,11,14,17,2a"
os: ubuntu-18.04
install: g++-8
- toolset: gcc-9
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
- toolset: gcc-10
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: g++-10
- toolset: gcc-11
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: g++-11
- toolset: clang
compiler: clang++-3.9
cxxstd: "03,11,14"
os: ubuntu-18.04
install: clang-3.9
- toolset: clang
compiler: clang++-4.0
cxxstd: "03,11,14"
os: ubuntu-18.04
install: clang-4.0
- toolset: clang
compiler: clang++-5.0
cxxstd: "03,11,14,1z"
os: ubuntu-18.04
install: clang-5.0
- toolset: clang
compiler: clang++-6.0
cxxstd: "03,11,14,17"
os: ubuntu-18.04
install: clang-6.0
- toolset: clang
compiler: clang++-7
cxxstd: "03,11,14,17"
os: ubuntu-18.04
install: clang-7
- toolset: clang
compiler: clang++-8
cxxstd: "03,11,14,17"
os: ubuntu-20.04
install: clang-8
- toolset: clang
compiler: clang++-9
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: clang-9
- toolset: clang
compiler: clang++-10
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: clang-10
- toolset: clang
compiler: clang++-11
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: clang-11
- toolset: clang
compiler: clang++-12
cxxstd: "03,11,14,17,2a"
os: ubuntu-20.04
install: clang-12
- toolset: clang
cxxstd: "03,11,14,17,2a"
os: macos-10.15
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v2
- name: Install packages
if: matrix.install
run: sudo apt install ${{matrix.install}}
- name: Setup Boost
run: |
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
LIBRARY=${GITHUB_REPOSITORY#*/}
echo LIBRARY: $LIBRARY
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
echo GITHUB_REF: $GITHUB_REF
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
REF=${REF#refs/heads/}
echo REF: $REF
BOOST_BRANCH=develop && [ "$REF" == "master" ] && BOOST_BRANCH=master || true
echo BOOST_BRANCH: $BOOST_BRANCH
cd ..
git clone -b $BOOST_BRANCH --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" $LIBRARY
./bootstrap.sh
./b2 -d0 headers
- name: Create user-config.jam
if: matrix.compiler
run: |
echo "using ${{matrix.toolset}} : : ${{matrix.compiler}} ;" > ~/user-config.jam
- name: Run tests
run: |
cd ../boost-root
./b2 -j3 libs/$LIBRARY/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} variant=debug,release
windows:
strategy:
fail-fast: false
matrix:
include:
- toolset: msvc-14.1
cxxstd: "14,17,latest"
addrmd: 32,64
os: windows-2016
- toolset: msvc-14.2
cxxstd: "14,17,20,latest"
addrmd: 32,64
os: windows-2019
- toolset: msvc-14.3
cxxstd: "14,17,20,latest"
addrmd: 32,64
os: windows-2022
- toolset: gcc
cxxstd: "03,11,14,17,2a"
addrmd: 64
os: windows-2019
runs-on: ${{matrix.os}}
steps:
- uses: actions/checkout@v2
- name: Setup Boost
shell: cmd
run: |
echo GITHUB_REPOSITORY: %GITHUB_REPOSITORY%
for /f %%i in ("%GITHUB_REPOSITORY%") do set LIBRARY=%%~nxi
echo LIBRARY: %LIBRARY%
echo LIBRARY=%LIBRARY%>>%GITHUB_ENV%
echo GITHUB_BASE_REF: %GITHUB_BASE_REF%
echo GITHUB_REF: %GITHUB_REF%
if "%GITHUB_BASE_REF%" == "" set GITHUB_BASE_REF=%GITHUB_REF%
set BOOST_BRANCH=develop
for /f %%i in ("%GITHUB_BASE_REF%") do if "%%~nxi" == "master" set BOOST_BRANCH=master
echo BOOST_BRANCH: %BOOST_BRANCH%
cd ..
git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
cd boost-root
xcopy /s /e /q %GITHUB_WORKSPACE% libs\%LIBRARY%\
git submodule update --init tools/boostdep
python tools/boostdep/depinst/depinst.py --git_args "--jobs 3" %LIBRARY%
cmd /c bootstrap
b2 -d0 headers
- name: Run tests
shell: cmd
run: |
cd ../boost-root
b2 -j3 libs/%LIBRARY%/test toolset=${{matrix.toolset}} cxxstd=${{matrix.cxxstd}} address-model=${{matrix.addrmd}} variant=debug,release

View File

@@ -0,0 +1,63 @@
# Copyright 2016, 2017 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
language: cpp
sudo: false
python: "2.7"
branches:
only:
- master
- develop
- /feature\/.*/
env:
matrix:
- BOGUS_JOB=true
matrix:
exclude:
- env: BOGUS_JOB=true
include:
- os: linux
compiler: g++
env: TOOLSET=gcc CXXSTD=03,11
- os: linux
compiler: clang++
env: TOOLSET=clang CXXSTD=03,11,14,1z
addons:
apt:
packages:
- libstdc++-4.9-dev
sources:
- ubuntu-toolchain-r-test
- os: osx
compiler: clang++
env: TOOLSET=clang CXXSTD=03,11,14,1z
install:
- BOOST_BRANCH=develop && [ "$TRAVIS_BRANCH" == "master" ] && BOOST_BRANCH=master || true
- cd ..
- git clone -b $BOOST_BRANCH https://github.com/boostorg/boost.git boost-root
- cd boost-root
- git submodule update --init tools/build
- git submodule update --init libs/config
- git submodule update --init tools/boostdep
- cp -r $TRAVIS_BUILD_DIR/* libs/container
- python tools/boostdep/depinst/depinst.py container
- ./bootstrap.sh
- ./b2 headers
script:
- ./b2 libs/container/test toolset=$TOOLSET cxxstd=$CXXSTD
notifications:
email:
on_success: always

View File

@@ -0,0 +1,51 @@
# Copyright 2020, 2021 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.16)
project(boost_container VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES C CXX)
add_library(boost_container
src/alloc_lib.c
src/dlmalloc.cpp
src/global_resource.cpp
src/monotonic_buffer_resource.cpp
src/pool_resource.cpp
src/synchronized_pool_resource.cpp
src/unsynchronized_pool_resource.cpp
)
add_library(Boost::container ALIAS boost_container)
target_include_directories(boost_container PUBLIC include)
target_link_libraries(boost_container
PUBLIC
Boost::assert
Boost::config
Boost::core
Boost::intrusive
Boost::move
Boost::static_assert
Boost::type_traits
Boost::winapi
)
target_compile_definitions(boost_container
PUBLIC BOOST_CONTAINER_NO_LIB
# Source files already define BOOST_CONTAINER_SOURCE
# PRIVATE BOOST_CONTAINER_SOURCE
)
if(BUILD_SHARED_LIBS)
target_compile_definitions(boost_container PUBLIC BOOST_CONTAINER_DYN_LINK)
else()
target_compile_definitions(boost_container PUBLIC BOOST_CONTAINER_STATIC_LINK)
endif()
if(BUILD_TESTING AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/test/CMakeLists.txt")
add_subdirectory(test)
endif()

View File

@@ -0,0 +1,11 @@
# Boost.Container Library Jamfile
#
# Copyright (c) 2018 Ion Gaztanaga
#
# Use, modification, and distribution are subject to the
# Boost Software License, Version 1.0. (See accompanying file
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
# please order by name to ease maintenance
build-project example ;
build-project test ;

View File

@@ -0,0 +1,180 @@
constant BOOST_VERSION : 1.79.0 ;
constant BOOST_VERSION_ABI_TAG : 1_79 ;
constant BOOST_JAMROOT_MODULE : $(__name__) ;
import boostcpp ;
import feature ;
boostcpp.set-version $(BOOST_VERSION) ;
project boost : requirements
<include>include&&"D:/a/1/s/build/vcpkg_installed/x64-windows/include"
<define>BOOST_ALL_NO_LIB=1
<tag>@$(__name__).tag
;
rule boost-install ( libraries * )
{
stagedir = [ option.get stagedir ] ;
install stage
: $(libraries)
: <location>$(stagedir)/lib ;
}
rule tag ( name : type ? : property-set )
{
return [ boostcpp.tag $(name) : $(type) : $(property-set) ] ;
}
rule python-tag ( name : type ? : property-set )
{
return [ boostcpp.python-tag $(name) : $(type) : $(property-set) ] ;
}
if "boost-container" != "boost-system"
{
use-project /boost/system : . ;
lib boost_system : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_system-vc140-mt.lib" <variant>release ;
lib boost_system : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_system-vc140-mt-gd.lib" <variant>debug ;
explicit boost_system ;
use-project /boost : . ;
alias system : boost_system ;
}
if "boost-container" != "boost-chrono"
{
use-project /boost/chrono : . ;
lib boost_chrono : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_chrono-vc140-mt.lib" <variant>release ;
lib boost_chrono : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_chrono-vc140-mt-gd.lib" <variant>debug ;
explicit boost_chrono ;
}
if "boost-container" != "boost-regex"
{
use-project /boost/regex : . ;
lib boost_regex : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_regex-vc140-mt.lib" <variant>release ;
lib boost_regex : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_regex-vc140-mt-gd.lib" <variant>debug ;
explicit boost_regex ;
}
if "boost-container" != "boost-date-time"
{
use-project /boost/date_time : . ;
lib boost_date_time : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_date_time-vc140-mt.lib" <variant>release -<library>/boost/date_time//boost_date_time ;
lib boost_date_time : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_date_time-vc140-mt-gd.lib" <variant>debug -<library>/boost/date_time//boost_date_time ;
explicit boost_date_time ;
}
if "boost-container" != "boost-thread"
{
use-project /boost/thread : . ;
lib boost_thread : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_thread-vc140-mt.lib" <variant>release : : <library>/boost/date_time//boost_date_time ;
lib boost_thread : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_thread-vc140-mt-gd.lib" <variant>debug : : <library>/boost/date_time//boost_date_time ;
explicit boost_thread ;
}
if "boost-container" != "boost-timer"
{
use-project /boost/timer : . ;
lib boost_timer : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_timer-vc140-mt.lib" <variant>release ;
lib boost_timer : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_timer-vc140-mt-gd.lib" <variant>debug ;
explicit boost_timer ;
}
if "boost-container" != "boost-filesystem"
{
use-project /boost/filesystem : . ;
lib boost_filesystem : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_filesystem-vc140-mt.lib" <variant>release : : <library>/boost/system//boost_system ;
lib boost_filesystem : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_filesystem-vc140-mt-gd.lib" <variant>debug : : <library>/boost/system//boost_system ;
explicit boost_filesystem ;
}
if "boost-container" != "boost-atomic"
{
use-project /boost/atomic : . ;
lib boost_atomic : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_atomic-vc140-mt.lib" <variant>release ;
lib boost_atomic : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_atomic-vc140-mt-gd.lib" <variant>debug ;
explicit boost_atomic ;
}
if "boost-container" != "boost-context"
{
feature.feature segmented-stacks : on : optional propagated composite ;
feature.compose <segmented-stacks>on : <define>BOOST_USE_SEGMENTED_STACKS ;
use-project /boost/context : . ;
lib boost_context : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_context-vc140-mt.lib" <variant>release ;
lib boost_context : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_context-vc140-mt-gd.lib" <variant>debug ;
explicit boost_context ;
}
if "boost-container" != "boost-test"
{
use-project /boost/test : . ;
lib boost_unit_test_framework : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_unit_test_framework-vc140-mt.lib" <variant>release ;
lib boost_unit_test_framework : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_unit_test_framework-vc140-mt-gd.lib" <variant>debug ;
explicit boost_unit_test_framework ;
}
if "boost-container" != "boost-serialization"
{
use-project /boost/serialization : . ;
lib boost_serialization : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_serialization-vc140-mt.lib" <variant>release ;
lib boost_serialization : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_serialization-vc140-mt-gd.lib" <variant>debug ;
explicit boost_serialization ;
}
if "boost-container" != "boost-mpi"
{
use-project /boost/mpi : . ;
lib boost_mpi : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_mpi-vc140-mt.lib" <variant>release : : <library>/boost/serialization//boost_serialization ;
lib boost_mpi : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_mpi-vc140-mt-gd.lib" <variant>debug : : <library>/boost/serialization//boost_serialization ;
explicit boost_mpi ;
}
if "boost-container" != "boost-container"
{
use-project /boost/container : . ;
lib boost_container : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_container-vc140-mt.lib" <variant>release ;
lib boost_container : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_container-vc140-mt-gd.lib" <variant>debug ;
explicit boost_container ;
}
if "boost-container" != "boost-python"
{
use-project /boost/python : . ;
lib boost_python : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/lib/boost_python-vc140-mt.lib" <variant>release ;
lib boost_python : : <file>"D:/a/1/s/build/vcpkg_installed/x64-windows/debug/lib/boost_python-vc140-mt-gd.lib" <variant>debug ;
explicit boost_python ;
}
rule requires ( foo * )
{
}
rule boost-lib ( name : sources * : requirements * : default-build * : usage-requirements * )
{
name = boost_$(name) ;
lib $(name) : $(sources) : $(requirements) : $(default-build) : $(usage-requirements) ;
boost-install $(name) ;
}
use-project /boost/boost-container : build ;
build-project build ;

View File

@@ -0,0 +1,23 @@
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1,39 @@
Boost.Container
==========
Boost.Container, part of collection of the [Boost C++ Libraries](http://github.com/boostorg), implements several well-known containers, including STL containers. The aim of the library is to offer advanced features not present in standard containers, to offer the latest standard draft features for compilers that don't comply with the latest C++ standard and to offer useful non-STL containers.
### License
Distributed under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
### Properties
* C++03
* Mostly header-only, library compilation is required for few features.
* Supports compiler modes without exceptions support (e.g. `-fno-exceptions`).
### Build Status
Branch | Travis | Appveyor | Coverity Scan | codecov.io | Deps | Docs | Tests |
:-------------: | ------ | -------- | ------------- | ---------- | ---- | ---- | ----- |
[`master`](https://github.com/boostorg/container/tree/master) | [![Build Status](https://travis-ci.org/boostorg/container.svg?branch=master)](https://travis-ci.org/boostorg/container) | [![Build status](https://ci.appveyor.com/api/projects/status/9ckrveolxsonxfnb/branch/master?svg=true)](https://ci.appveyor.com/project/jeking3/container-0k1xg/branch/master) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16048/badge.svg)](https://scan.coverity.com/projects/boostorg-container) | [![codecov](https://codecov.io/gh/boostorg/container/branch/master/graph/badge.svg)](https://codecov.io/gh/boostorg/container/branch/master)| [![Deps](https://img.shields.io/badge/deps-master-brightgreen.svg)](https://pdimov.github.io/boostdep-report/master/container.html) | [![Documentation](https://img.shields.io/badge/docs-master-brightgreen.svg)](http://www.boost.org/doc/libs/master/doc/html/container.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-master-brightgreen.svg)](http://www.boost.org/development/tests/master/developer/container.html)
[`develop`](https://github.com/boostorg/container/tree/develop) | [![Build Status](https://travis-ci.org/boostorg/container.svg?branch=develop)](https://travis-ci.org/boostorg/container) | [![Build status](https://ci.appveyor.com/api/projects/status/9ckrveolxsonxfnb/branch/develop?svg=true)](https://ci.appveyor.com/project/jeking3/container-0k1xg/branch/develop) | [![Coverity Scan Build Status](https://scan.coverity.com/projects/16048/badge.svg)](https://scan.coverity.com/projects/boostorg-container) | [![codecov](https://codecov.io/gh/boostorg/container/branch/develop/graph/badge.svg)](https://codecov.io/gh/boostorg/container/branch/develop) | [![Deps](https://img.shields.io/badge/deps-develop-brightgreen.svg)](https://pdimov.github.io/boostdep-report/develop/container.html) | [![Documentation](https://img.shields.io/badge/docs-develop-brightgreen.svg)](http://www.boost.org/doc/libs/develop/doc/html/container.html) | [![Enter the Matrix](https://img.shields.io/badge/matrix-develop-brightgreen.svg)](http://www.boost.org/development/tests/develop/developer/container.html)
### Directories
| Name | Purpose |
| ----------- | ------------------------------ |
| `doc` | documentation |
| `example` | examples |
| `include` | headers |
| `proj` | ide projects |
| `test` | unit tests |
### More information
* [Ask questions](http://stackoverflow.com/questions/ask?tags=c%2B%2B,boost,boost-container)
* [Report bugs](https://github.com/boostorg/container/issues): Be sure to mention Boost version, platform and compiler you're using. A small compilable code sample to reproduce the problem is always good as well.
* Submit your patches as pull requests against **develop** branch. Note that by submitting patches you agree to license your modifications under the [Boost Software License, Version 1.0](http://www.boost.org/LICENSE_1_0.txt).
* Discussions about the library are held on the [Boost developers mailing list](http://www.boost.org/community/groups.html#main). Be sure to read the [discussion policy](http://www.boost.org/community/policy.html) before posting and add the `[container]` tag at the beginning of the subject line.

View File

@@ -0,0 +1,34 @@
# Boost Container Library Test Jamfile
# (C) Copyright Ion Gaztanaga 2009.
# Use, modification and distribution are subject to the
# Boost Software License, Version 1.0. (See accompanying file
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
# Adapted from John Maddock's TR1 Jamfile.v2
# Copyright John Maddock 2005.
# Use, modification and distribution are subject to the
# Boost Software License, Version 1.0. (See accompanying file
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
# this rule enumerates through all the sources and invokes
# the run rule for each source, the result is a list of all
# the run rules, which we can pass on to the test_suite rule:
rule test_all
{
local all_rules = ;
for local fileb in [ glob *.cpp ]
{
all_rules += [ run $(fileb) /boost/container//boost_container
: # additional args
: # test-files
: # requirements
] ;
}
return $(all_rules) ;
}
test-suite container_bench : [ test_all r ] ;

View File

@@ -0,0 +1,340 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//Enable checks in debug mode
#ifndef NDEBUG
#define BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
#endif
#ifdef _MSC_VER
#pragma warning (disable : 4512)
#pragma warning (disable : 4127)
#pragma warning (disable : 4244)
#pragma warning (disable : 4267)
#endif
#include <boost/container/adaptive_pool.hpp>
#include <boost/container/node_allocator.hpp>
#include <boost/container/allocator.hpp>
#include <boost/container/list.hpp>
#include <memory> //std::allocator
#include <iostream> //std::cout, std::endl
#include <vector> //std::vector
#include <cstddef> //std::size_t
#include <cassert> //assert
#include <boost/move/detail/nsec_clock.hpp>
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
namespace bc = boost::container;
typedef std::allocator<int> StdAllocator;
typedef bc::allocator<int, 2> AllocatorPlusV2;
typedef bc::allocator<int, 1> AllocatorPlusV1;
typedef bc::adaptive_pool
< int
, bc::ADP_nodes_per_block
, bc::ADP_max_free_blocks
, bc::ADP_only_alignment
, 1> AdPoolAlignOnlyV1;
typedef bc::adaptive_pool
< int
, bc::ADP_nodes_per_block
, bc::ADP_max_free_blocks
, bc::ADP_only_alignment
, 2> AdPoolAlignOnlyV2;
typedef bc::adaptive_pool
< int
, bc::ADP_nodes_per_block
, bc::ADP_max_free_blocks
, 2
, 1> AdPool2PercentV1;
typedef bc::adaptive_pool
< int
, bc::ADP_nodes_per_block
, bc::ADP_max_free_blocks
, 2
, 2> AdPool2PercentV2;
typedef bc::node_allocator
< int
, bc::NodeAlloc_nodes_per_block
, 1> SimpleSegregatedStorageV1;
typedef bc::node_allocator
< int
, bc::NodeAlloc_nodes_per_block
, 2> SimpleSegregatedStorageV2;
//Explicit instantiation
template class bc::adaptive_pool
< int
, bc::ADP_nodes_per_block
, bc::ADP_max_free_blocks
, bc::ADP_only_alignment
, 2>;
template class bc::node_allocator
< int
, bc::NodeAlloc_nodes_per_block
, 2>;
template<class Allocator> struct get_allocator_name;
template<> struct get_allocator_name<StdAllocator>
{ static const char *get() { return "StdAllocator"; } };
template<> struct get_allocator_name<AllocatorPlusV2>
{ static const char *get() { return "AllocatorPlusV2"; } };
template<> struct get_allocator_name<AllocatorPlusV1>
{ static const char *get() { return "AllocatorPlusV1"; } };
template<> struct get_allocator_name<AdPoolAlignOnlyV1>
{ static const char *get() { return "AdPoolAlignOnlyV1"; } };
template<> struct get_allocator_name<AdPoolAlignOnlyV2>
{ static const char *get() { return "AdPoolAlignOnlyV2"; } };
template<> struct get_allocator_name<AdPool2PercentV1>
{ static const char *get() { return "AdPool2PercentV1"; } };
template<> struct get_allocator_name<AdPool2PercentV2>
{ static const char *get() { return "AdPool2PercentV2"; } };
template<> struct get_allocator_name<SimpleSegregatedStorageV1>
{ static const char *get() { return "SimpleSegregatedStorageV1"; } };
template<> struct get_allocator_name<SimpleSegregatedStorageV2>
{ static const char *get() { return "SimpleSegregatedStorageV2"; } };
class MyInt
{
std::size_t int_;
public:
explicit MyInt(std::size_t i = 0) : int_(i){}
MyInt(const MyInt &other)
: int_(other.int_)
{}
MyInt & operator=(const MyInt &other)
{
int_ = other.int_;
return *this;
}
};
template<class Allocator>
void list_test_template(std::size_t num_iterations, std::size_t num_elements, bool csv_output)
{
typedef typename Allocator::template rebind<MyInt>::other IntAllocator;
nanosecond_type tinsert, terase;
bc::dlmalloc_malloc_stats_t insert_stats, erase_stats;
std::size_t insert_inuse, erase_inuse;
const size_t sizeof_node = 2*sizeof(void*)+sizeof(int);
typedef bc::list<MyInt, IntAllocator> list_t;
typedef typename list_t::iterator iterator_t;
{
cpu_timer timer;
timer.resume();
list_t l;
for(std::size_t r = 0; r != num_iterations; ++r){
l.insert(l.end(), num_elements, MyInt(r));
}
timer.stop();
tinsert = timer.elapsed().wall;
insert_inuse = bc::dlmalloc_in_use_memory();
insert_stats = bc::dlmalloc_malloc_stats();
/*
iterator_t it(l.begin());
iterator_t last(--l.end());
for(std::size_t n_elem = 0, n_max = l.size()/2-1; n_elem != n_max; ++n_elem)
{
l.splice(it++, l, last--);
}
*/
//l.reverse();
//Now preprocess erase ranges
std::vector<iterator_t> ranges_to_erase;
ranges_to_erase.push_back(l.begin());
for(std::size_t r = 0; r != num_iterations; ++r){
iterator_t next_pos(ranges_to_erase[r]);
std::size_t n = num_elements;
while(n--){ ++next_pos; }
ranges_to_erase.push_back(next_pos);
}
//Measure range erasure function
timer.start();
for(std::size_t r = 0; r != num_iterations; ++r){
assert((r+1) < ranges_to_erase.size());
l.erase(ranges_to_erase[r], ranges_to_erase[r+1]);
}
timer.stop();
terase = timer.elapsed().wall;
erase_inuse = bc::dlmalloc_in_use_memory();
erase_stats = bc::dlmalloc_malloc_stats();
}
if(csv_output){
std::cout << get_allocator_name<Allocator>::get()
<< ";"
<< num_iterations
<< ";"
<< num_elements
<< ";"
<< float(tinsert)/float(num_iterations*num_elements)
<< ";"
<< (unsigned int)insert_stats.system_bytes
<< ";"
<< float(insert_stats.system_bytes)/float(num_iterations*num_elements*sizeof_node)*100.0-100.0
<< ";"
<< (unsigned int)insert_inuse
<< ";"
<< (float(insert_inuse)/float(num_iterations*num_elements*sizeof_node)*100.0)-100.0
<< ";";
std::cout << float(terase)/float(num_iterations*num_elements)
<< ";"
<< (unsigned int)erase_stats.system_bytes
<< ";"
<< (unsigned int)erase_inuse
<< std::endl;
}
else{
std::cout << std::endl
<< "Allocator: " << get_allocator_name<Allocator>::get()
<< std::endl
<< " allocation/deallocation(ns): " << float(tinsert)/float(num_iterations*num_elements) << '\t' << float(terase)/float(num_iterations*num_elements)
<< std::endl
<< " Sys MB(overh.)/Inuse MB(overh.): " << (float)insert_stats.system_bytes/(1024*1024) << "(" << float(insert_stats.system_bytes)/float(num_iterations*num_elements*sizeof_node)*100.0-100.0 << "%)"
<< " / "
<< (float)insert_inuse/(1024*1024) << "(" << (float(insert_inuse)/float(num_iterations*num_elements*sizeof_node)*100.0)-100.0 << "%)"
<< std::endl
<< " system MB/inuse bytes after: " << (float)erase_stats.system_bytes/(1024*1024) << '\t' << bc::dlmalloc_in_use_memory()
<< std::endl << std::endl;
}
//Release node_allocator cache
typedef boost::container::dtl::shared_node_pool
< (2*sizeof(void*)+sizeof(int))
, AdPoolAlignOnlyV2::nodes_per_block> shared_node_pool_t;
boost::container::dtl::singleton_default
<shared_node_pool_t>::instance().purge_blocks();
//Release adaptive_pool cache
typedef boost::container::dtl::shared_adaptive_node_pool
< (2*sizeof(void*)+sizeof(int))
, AdPool2PercentV2::nodes_per_block
, AdPool2PercentV2::max_free_blocks
, AdPool2PercentV2::overhead_percent> shared_adaptive_pool_plus_t;
boost::container::dtl::singleton_default
<shared_adaptive_pool_plus_t>::instance().deallocate_free_blocks();
//Release adaptive_pool cache
typedef boost::container::dtl::shared_adaptive_node_pool
< (2*sizeof(void*)+sizeof(int))
, AdPool2PercentV2::nodes_per_block
, AdPool2PercentV2::max_free_blocks
, 0u> shared_adaptive_pool_plus_align_only_t;
boost::container::dtl::singleton_default
<shared_adaptive_pool_plus_align_only_t>::instance().deallocate_free_blocks();
//Release dlmalloc memory
bc::dlmalloc_trim(0);
}
void print_header()
{
std::cout << "Allocator" << ";" << "Iterations" << ";" << "Size" << ";"
<< "Insertion time(ns)" << ";"
<< "System bytes" << ";"
<< "System overhead(%)" << ";"
<< "In use bytes" << ";"
<< "In use overhead(%)" << ";"
<< "Erasure time (ns)" << ";"
<< "System bytes after" << ";"
<< "In use bytes after"
<< std::endl;
}
int main(int argc, const char *argv[])
{
//#define SINGLE_TEST
#define SIMPLE_IT
#ifdef SINGLE_TEST
#ifdef BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
std::size_t numrep[] = { 1000 };
#elif defined(NDEBUG)
std::size_t numrep [] = { 15000 };
#else
std::size_t numrep [] = { 1000 };
#endif
std::size_t numele [] = { 100 };
#elif defined(SIMPLE_IT)
std::size_t numrep [] = { 3 };
std::size_t numele [] = { 100 };
#else
#ifdef NDEBUG
std::size_t numrep [] = { 300, 3000, 30000, 300000, 600000, 1500000, 3000000 };
#else
std::size_t numrep [] = { 20, 200, 2000, 20000, 40000, 100000, 200000 };
#endif
std::size_t numele [] = { 10000, 1000, 100, 10, 5, 2, 1 };
#endif
bool csv_output = argc == 2 && (strcmp(argv[1], "--csv-output") == 0);
if(csv_output){/*
print_header();
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
list_test_template<AllocatorPlusV1>(numrep[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
list_test_template<AllocatorPlusV2>(numrep[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
list_test_template<AdPoolAlignOnlyV1>(numrep[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
list_test_template<AdPoolAlignOnlyV2>(numrep[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
list_test_template<AdPool2PercentV1>(numrep[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
list_test_template<AdPool2PercentV2>(numrep[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
list_test_template<SimpleSegregatedStorageV1>(numrep[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
list_test_template<SimpleSegregatedStorageV2>(numrep[i], numele[i], csv_output);
}*/
}
else{
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
std::cout << "\n ----------------------------------- \n"
<< " Iterations/Elements: " << numrep[i] << "/" << numele[i]
<< "\n ----------------------------------- \n";
list_test_template<AllocatorPlusV1>(numrep[i], numele[i], csv_output);
list_test_template<AllocatorPlusV2>(numrep[i], numele[i], csv_output);
list_test_template<AdPoolAlignOnlyV1>(numrep[i], numele[i], csv_output);
list_test_template<AdPoolAlignOnlyV2>(numrep[i], numele[i], csv_output);
list_test_template<AdPool2PercentV1>(numrep[i], numele[i], csv_output);
list_test_template<AdPool2PercentV2>(numrep[i], numele[i], csv_output);
list_test_template<SimpleSegregatedStorageV1>(numrep[i], numele[i], csv_output);
list_test_template<SimpleSegregatedStorageV2>(numrep[i], numele[i], csv_output);
}
}
return 0;
}

View File

@@ -0,0 +1,190 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifdef _MSC_VER
#pragma warning (disable : 4512)
#endif
#include <boost/container/detail/dlmalloc.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include <boost/container/throw_exception.hpp>
#define BOOST_INTERPROCESS_VECTOR_ALLOC_STATS
#include <iostream> //std::cout, std::endl
#include <typeinfo> //typeid
#include <cassert> //assert
#include <boost/move/detail/nsec_clock.hpp>
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
using namespace boost::container;
template <class POD>
void allocation_timing_test(std::size_t num_iterations, std::size_t num_elements)
{
size_t capacity = 0;
std::size_t numalloc = 0, numexpand = 0;
std::cout
<< " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"
<< " Iterations/Elements: " << num_iterations << "/" << num_elements << '\n'
<< " ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \n"
<< std::endl;
allocation_type malloc_types[] = { BOOST_CONTAINER_EXPAND_BWD, BOOST_CONTAINER_EXPAND_FWD, BOOST_CONTAINER_ALLOCATE_NEW };
const char * malloc_names[] = { "Backwards expansion", "Forward expansion", "New allocation" };
for(size_t i = 0; i < sizeof(malloc_types)/sizeof(allocation_type); ++i){
numalloc = 0; numexpand = 0;
const allocation_type m_mode = malloc_types[i];
const char *malloc_name = malloc_names[i];
cpu_timer timer;
timer.resume();
for(std::size_t r = 0; r != num_iterations; ++r){
void *first_mem = 0;
if(m_mode != BOOST_CONTAINER_EXPAND_FWD)
first_mem = dlmalloc_malloc(sizeof(POD)*num_elements*3/2);
void *addr = dlmalloc_malloc(1*sizeof(POD));
if(m_mode == BOOST_CONTAINER_EXPAND_FWD)
first_mem = dlmalloc_malloc(sizeof(POD)*num_elements*3/2);
capacity = dlmalloc_size(addr)/sizeof(POD);
dlmalloc_free(first_mem);
++numalloc;
BOOST_TRY{
dlmalloc_command_ret_t ret;
for(size_t e = capacity + 1; e < num_elements; ++e){
size_t received_size;
size_t min = (capacity+1)*sizeof(POD);
size_t max = (capacity*3/2)*sizeof(POD);
if(min > max)
max = min;
ret = dlmalloc_allocation_command
( m_mode, sizeof(POD)
, min, max, &received_size, addr);
if(!ret.first){
throw_runtime_error("!ret.first)");
}
if(!ret.second){
assert(m_mode == BOOST_CONTAINER_ALLOCATE_NEW);
if(m_mode != BOOST_CONTAINER_ALLOCATE_NEW){
std::cout << "m_mode != BOOST_CONTAINER_ALLOCATE_NEW!" << std::endl;
return;
}
dlmalloc_free(addr);
addr = ret.first;
++numalloc;
}
else{
assert(m_mode != BOOST_CONTAINER_ALLOCATE_NEW);
if(m_mode == BOOST_CONTAINER_ALLOCATE_NEW){
std::cout << "m_mode == BOOST_CONTAINER_ALLOCATE_NEW!" << std::endl;
return;
}
++numexpand;
}
capacity = received_size/sizeof(POD);
addr = ret.first;
e = capacity + 1;
}
dlmalloc_free(addr);
}
BOOST_CATCH(...){
dlmalloc_free(addr);
BOOST_RETHROW;
}
BOOST_CATCH_END
}
assert( dlmalloc_allocated_memory() == 0);
if(dlmalloc_allocated_memory()!= 0){
std::cout << "Memory leak!" << std::endl;
return;
}
timer.stop();
nanosecond_type nseconds = timer.elapsed().wall;
std::cout << " Malloc type: " << malloc_name
<< std::endl
<< " allocation ns: "
<< float(nseconds)/float(num_iterations*num_elements)
<< std::endl
<< " capacity - alloc calls (new/expand): "
<< (std::size_t)capacity << " - "
<< (float(numalloc) + float(numexpand))/float(num_iterations)
<< "(" << float(numalloc)/float(num_iterations) << "/" << float(numexpand)/float(num_iterations) << ")"
<< std::endl << std::endl;
dlmalloc_trim(0);
}
}
template<unsigned N>
struct char_holder
{
char ints_[N];
};
template<class POD>
int allocation_loop()
{
std::cout << std::endl
<< "-------------------------------------------\n"
<< "-------------------------------------------\n"
<< " Type(sizeof): " << typeid(POD).name() << " (" << sizeof(POD) << ")\n"
<< "-------------------------------------------\n"
<< "-------------------------------------------\n"
<< std::endl;
//#define SINGLE_TEST
#define SIMPLE_IT
#ifdef SINGLE_TEST
#ifdef NDEBUG
std::size_t numrep [] = { 50000 };
#else
std::size_t numrep [] = { 5000 };
#endif
std::size_t numele [] = { 100 };
#elif defined(SIMPLE_IT)
std::size_t numrep [] = { 3 };
std::size_t numele [] = { 100 };
#else
#ifdef NDEBUG
std::size_t numrep [] = { /*10000, */10000, 100000, 1000000 };
#else
std::size_t numrep [] = { /*10000, */1000, 10000, 100000 };
#endif
std::size_t numele [] = { /*10000, */1000, 100, 10 };
#endif
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
allocation_timing_test<POD>(numrep[i], numele[i]);
}
return 0;
}
int main()
{
dlmalloc_mallopt( (-3)//M_MMAP_THRESHOLD
, 100*10000000);
//allocation_loop<char_holder<4> >();
//allocation_loop<char_holder<6> >();
allocation_loop<char_holder<8> >();
allocation_loop<char_holder<12> >();
//allocation_loop<char_holder<14> >();
allocation_loop<char_holder<24> >();
return 0;
}

View File

@@ -0,0 +1,230 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifdef _MSC_VER
#pragma warning (disable : 4512)
#endif
#include <boost/container/allocator.hpp>
#include <boost/core/no_exceptions_support.hpp>
#define BOOST_CONTAINER_VECTOR_ALLOC_STATS
#include <boost/container/vector.hpp>
#include <memory> //std::allocator
#include <iostream> //std::cout, std::endl
#include <cassert> //assert
#include <boost/move/detail/nsec_clock.hpp>
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
//typedef int MyInt;
class MyInt
{
int int_;
public:
MyInt(int i = 0)
: int_(i)
{}
MyInt(const MyInt &other)
: int_(other.int_)
{}
MyInt & operator=(const MyInt &other)
{
int_ = other.int_;
return *this;
}
~MyInt()
{
int_ = 0;
}
};
namespace boost{
template<class T>
struct has_trivial_destructor_after_move;
template<>
struct has_trivial_destructor_after_move<MyInt>
{
static const bool value = true;
//static const bool value = false;
};
} //namespace boost{
namespace bc = boost::container;
typedef std::allocator<MyInt> StdAllocator;
typedef bc::allocator<MyInt, 2, bc::expand_bwd | bc::expand_fwd> AllocatorPlusV2Mask;
typedef bc::allocator<MyInt, 2, bc::expand_fwd> AllocatorPlusV2;
typedef bc::allocator<MyInt, 1> AllocatorPlusV1;
template<class Allocator> struct get_allocator_name;
template<> struct get_allocator_name<StdAllocator>
{ static const char *get() { return "StdAllocator"; } };
template<> struct get_allocator_name<AllocatorPlusV2Mask>
{ static const char *get() { return "AllocatorPlusV2Mask"; } };
template<> struct get_allocator_name<AllocatorPlusV2>
{ static const char *get() { return "AllocatorPlusV2"; } };
template<> struct get_allocator_name<AllocatorPlusV1>
{ static const char *get() { return "AllocatorPlusV1"; } };
void print_header()
{
std::cout << "Allocator" << ";" << "Iterations" << ";" << "Size" << ";"
<< "Capacity" << ";" << "push_back(ns)" << ";" << "Allocator calls" << ";"
<< "New allocations" << ";" << "Bwd expansions" << std::endl;
}
template<class Allocator>
void vector_test_template(std::size_t num_iterations, std::size_t num_elements, bool csv_output)
{
typedef Allocator IntAllocator;
std::size_t numalloc = 0, numexpand = 0;
cpu_timer timer;
timer.resume();
std::size_t capacity = 0;
for(std::size_t r = 0; r != num_iterations; ++r){
bc::vector<MyInt, IntAllocator> v;
v.reset_alloc_stats();
void *first_mem = 0;
BOOST_TRY{
first_mem = bc::dlmalloc_malloc(sizeof(MyInt)*num_elements*3/2);
v.push_back(MyInt(0));
bc::dlmalloc_free(first_mem);
for(std::size_t e = 0; e != num_elements; ++e){
v.push_back(MyInt((int)e));
}
numalloc += v.num_alloc;
numexpand += v.num_expand_bwd;
capacity = static_cast<std::size_t>(v.capacity());
}
BOOST_CATCH(...){
bc::dlmalloc_free(first_mem);
BOOST_RETHROW;
}
BOOST_CATCH_END
}
assert(bc::dlmalloc_allocated_memory() == 0);
timer.stop();
nanosecond_type nseconds = timer.elapsed().wall;
if(csv_output){
std::cout << get_allocator_name<Allocator>::get()
<< ";"
<< num_iterations
<< ";"
<< num_elements
<< ";"
<< capacity
<< ";"
<< float(nseconds)/float(num_iterations*num_elements)
<< ";"
<< (float(numalloc) + float(numexpand))/float(num_iterations)
<< ";"
<< float(numalloc)/float(num_iterations)
<< ";"
<< float(numexpand)/float(num_iterations)
<< std::endl;
}
else{
std::cout << std::endl
<< "Allocator: " << get_allocator_name<Allocator>::get()
<< std::endl
<< " push_back ns: "
<< float(nseconds)/float(num_iterations*num_elements)
<< std::endl
<< " capacity - alloc calls (new/expand): "
<< (std::size_t)capacity << " - "
<< (float(numalloc) + float(numexpand))/float(num_iterations)
<< "(" << float(numalloc)/float(num_iterations) << "/" << float(numexpand)/float(num_iterations) << ")"
<< std::endl;
std::cout << '\n'
<< " ----------------------------------- "
<< std::endl;
}
bc::dlmalloc_trim(0);
}
int main(int argc, const char *argv[])
{
//#define SINGLE_TEST
#define SIMPLE_IT
#ifdef SINGLE_TEST
#ifdef NDEBUG
std::size_t numit [] = { 10 };
#else
std::size_t numit [] = { 10 };
#endif
std::size_t numele [] = { 10000 };
#elif defined(SIMPLE_IT)
std::size_t numit [] = { 3 };
std::size_t numele[] = { 10000 };
#else
#ifdef NDEBUG
std::size_t numit [] = { 2000, 20000, 200000, 2000000 };
#else
std::size_t numit [] = { 100, 1000, 10000, 100000 };
#endif
std::size_t numele [] = { 10000, 1000, 100, 10 };
#endif
bool csv_output = argc == 2 && (strcmp(argv[1], "--csv-output") == 0);
if(csv_output){
print_header();
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template<StdAllocator>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template<AllocatorPlusV1>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template<AllocatorPlusV2Mask>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template<AllocatorPlusV2>(numit[i], numele[i], csv_output);
}
}
else{
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
std::cout << "\n ----------------------------------- \n"
<< " Iterations/Elements: " << numit[i] << "/" << numele[i]
<< "\n ----------------------------------- \n";
vector_test_template<StdAllocator>(numit[i], numele[i], csv_output);
vector_test_template<AllocatorPlusV1>(numit[i], numele[i], csv_output);
vector_test_template<AllocatorPlusV2Mask>(numit[i], numele[i], csv_output);
vector_test_template<AllocatorPlusV2>(numit[i], numele[i], csv_output);
}
}
return 0;
}

View File

@@ -0,0 +1,202 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifdef _MSC_VER
#pragma warning (disable : 4512)
#pragma warning (disable : 4267)
#pragma warning (disable : 4244)
#endif
#define BOOST_CONTAINER_VECTOR_ALLOC_STATS
#include <boost/container/allocator.hpp>
#include <vector>
#include <boost/container/vector.hpp>
#include <memory> //std::allocator
#include <iostream> //std::cout, std::endl
#include <cstring> //std::strcmp
#include <boost/move/detail/nsec_clock.hpp>
#include <typeinfo>
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
namespace bc = boost::container;
#if defined(BOOST_CONTAINER_VECTOR_ALLOC_STATS)
template<class T, class Allocator>
static void reset_alloc_stats(std::vector<T, Allocator> &)
{}
template<class T, class Allocator>
static std::size_t get_num_alloc(std::vector<T, Allocator> &)
{ return 0; }
template<class T, class Allocator>
static std::size_t get_num_expand(std::vector<T, Allocator> &)
{ return 0; }
template<class T, class Allocator>
static void reset_alloc_stats(bc::vector<T, Allocator> &v)
{ v.reset_alloc_stats(); }
template<class T, class Allocator>
static std::size_t get_num_alloc(bc::vector<T, Allocator> &v)
{ return v.num_alloc; }
template<class T, class Allocator>
static std::size_t get_num_expand(bc::vector<T, Allocator> &v)
{ return v.num_expand_fwd; }
#endif //BOOST_CONTAINER_VECTOR_ALLOC_STATS
class MyInt
{
int int_;
public:
explicit MyInt(int i = 0)
: int_(i)
{}
MyInt(const MyInt &other)
: int_(other.int_)
{}
MyInt & operator=(const MyInt &other)
{
int_ = other.int_;
return *this;
}
~MyInt()
{
int_ = 0;
}
};
template<class Container>
void vector_test_template(std::size_t num_iterations, std::size_t num_elements)
{
std::size_t numalloc = 0, numexpand = 0;
cpu_timer timer;
timer.resume();
std::size_t capacity = 0;
for(std::size_t r = 0; r != num_iterations; ++r){
Container v;
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
reset_alloc_stats(v);
#endif
//v.reserve(num_elements);
//MyInt a[3];
/*
for(std::size_t e = 0; e != num_elements/3; ++e){
v.insert(v.end(), &a[0], &a[0]+3);
}*/
/*
for(std::size_t e = 0; e != num_elements/3; ++e){
v.insert(v.end(), 3, MyInt((int)e));
}*/
/*
for(std::size_t e = 0; e != num_elements/3; ++e){
v.insert(v.empty() ? v.end() : --v.end(), &a[0], &a[0]+3);
}*/
/*
for(std::size_t e = 0; e != num_elements/3; ++e){
v.insert(v.empty() ? v.end() : --v.end(), 3, MyInt((int)e));
}*/
/*
for(std::size_t e = 0; e != num_elements/3; ++e){
v.insert(v.size() >= 3 ? v.end()-3 : v.begin(), &a[0], &a[0]+3);
}*/
/*
for(std::size_t e = 0; e != num_elements/3; ++e){
v.insert(v.size() >= 3 ? v.end()-3 : v.begin(), 3, MyInt((int)e));
}*/
/*
for(std::size_t e = 0; e != num_elements; ++e){
v.insert(v.end(), MyInt((int)e));
}*/
/*
for(std::size_t e = 0; e != num_elements; ++e){
v.insert(v.empty() ? v.end() : --v.end(), MyInt((int)e));
}*/
for(std::size_t e = 0; e != num_elements; ++e){
v.push_back(MyInt((int)e));
}
#ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
numalloc += get_num_alloc(v);
numexpand += get_num_expand(v);
#endif
capacity = static_cast<std::size_t>(v.capacity());
}
timer.stop();
nanosecond_type nseconds = timer.elapsed().wall;
std::cout << std::endl
<< "Allocator: " << typeid(typename Container::allocator_type).name()
<< std::endl
<< " push_back ns: "
<< float(nseconds)/float(num_iterations*num_elements)
<< std::endl
<< " capacity - alloc calls (new/expand): "
<< (std::size_t)capacity << " - "
<< (float(numalloc) + float(numexpand))/float(num_iterations)
<< "(" << float(numalloc)/float(num_iterations) << "/" << float(numexpand)/float(num_iterations) << ")"
<< std::endl << std::endl;
bc::dlmalloc_trim(0);
}
void print_header()
{
std::cout << "Allocator" << ";" << "Iterations" << ";" << "Size" << ";"
<< "Capacity" << ";" << "push_back(ns)" << ";" << "Allocator calls" << ";"
<< "New allocations" << ";" << "Fwd expansions" << std::endl;
}
int main()
{
//#define SINGLE_TEST
#define SIMPLE_IT
#ifdef SINGLE_TEST
#ifdef NDEBUG
std::size_t numit [] = { 1000 };
#else
std::size_t numit [] = { 100 };
#endif
std::size_t numele [] = { 10000 };
#elif defined SIMPLE_IT
std::size_t numit [] = { 3 };
std::size_t numele [] = { 10000 };
#else
#ifdef NDEBUG
std::size_t numit [] = { 1000, 10000, 100000, 1000000 };
#else
std::size_t numit [] = { 100, 1000, 10000, 100000 };
#endif
std::size_t numele [] = { 10000, 1000, 100, 10 };
#endif
print_header();
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template< bc::vector<MyInt, std::allocator<MyInt> > >(numit[i], numele[i]);
vector_test_template< bc::vector<MyInt, bc::allocator<MyInt, 1> > >(numit[i], numele[i]);
vector_test_template<bc::vector<MyInt, bc::allocator<MyInt, 2, bc::expand_bwd | bc::expand_fwd> > >(numit[i], numele[i]);
vector_test_template<bc::vector<MyInt, bc::allocator<MyInt, 2> > >(numit[i], numele[i]);
}
return 0;
}

View File

@@ -0,0 +1,181 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifdef _MSC_VER
#pragma warning (disable : 4512)
#endif
#include <boost/container/allocator.hpp>
#define BOOST_CONTAINER_VECTOR_ALLOC_STATS
#include <boost/container/vector.hpp>
#undef BOOST_CONTAINER_VECTOR_ALLOC_STATS
#include <memory> //std::allocator
#include <iostream> //std::cout, std::endl
#include <cassert> //assert
#include <boost/move/detail/nsec_clock.hpp>
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
namespace bc = boost::container;
class MyInt
{
std::ptrdiff_t int_; //Use a type that will grow on 64 bit machines
public:
MyInt(int i = 0) : int_(i){}
MyInt(const MyInt &other)
: int_(other.int_)
{}
MyInt & operator=(const MyInt &other)
{
int_ = other.int_;
return *this;
}
};
typedef std::allocator<MyInt> StdAllocator;
typedef bc::allocator<MyInt, 2> AllocatorPlusV2;
typedef bc::allocator<MyInt, 1> AllocatorPlusV1;
template<class Allocator> struct get_allocator_name;
template<> struct get_allocator_name<StdAllocator>
{ static const char *get() { return "StdAllocator"; } };
template<> struct get_allocator_name<AllocatorPlusV2>
{ static const char *get() { return "AllocatorPlusV2"; } };
template<> struct get_allocator_name<AllocatorPlusV1>
{ static const char *get() { return "AllocatorPlusV1"; } };
void print_header()
{
std::cout << "Allocator" << ";" << "Iterations" << ";" << "Size" << ";"
<< "num_shrink" << ";" << "shrink_to_fit(ns)" << std::endl;
}
template<class Allocator>
void vector_test_template(std::size_t num_iterations, std::size_t num_elements, bool csv_output)
{
typedef Allocator IntAllocator;
std::size_t capacity = 0;
const std::size_t Step = 5;
std::size_t num_shrink = 0;
(void)capacity;
cpu_timer timer;
timer.resume();
#ifndef NDEBUG
typedef bc::dtl::integral_constant
<unsigned, bc::dtl::version<Allocator>::value> alloc_version;
#endif
for(std::size_t r = 0; r != num_iterations; ++r){
bc::vector<MyInt, IntAllocator> v(num_elements);
v.reset_alloc_stats();
num_shrink = 0;
for(std::size_t e = num_elements; e != 0; e -= Step){
v.erase(v.end() - std::ptrdiff_t(Step), v.end());
v.shrink_to_fit();
assert( (alloc_version::value != 2) || (e == Step) || (v.num_shrink > num_shrink) );
num_shrink = v.num_shrink;
}
assert(v.empty());
assert(0 == v.capacity());
}
timer.stop();
nanosecond_type nseconds = timer.elapsed().wall;
if(csv_output){
std::cout << get_allocator_name<Allocator>::get()
<< ";"
<< num_iterations
<< ";"
<< num_elements
<< ";"
<< num_shrink
<< ";"
<< float(nseconds)/float(num_iterations*num_elements)
<< std::endl;
}
else{
std::cout << std::endl
<< "Allocator: " << get_allocator_name<Allocator>::get()
<< std::endl
<< " num_shrink: " << num_shrink
<< std::endl
<< " shrink_to_fit ns: "
<< float(nseconds)/float(num_iterations*num_elements)
<< std::endl << std::endl;
}
bc::dlmalloc_trim(0);
}
int main(int argc, const char *argv[])
{
//#define SINGLE_TEST
#define SIMPLE_IT
#ifdef SINGLE_TEST
#ifdef NDEBUG
std::size_t numit [] = { 10 };
#else
std::size_t numit [] = { 50 };
std::size_t numele[] = { 2000 };
#endif
#elif defined SIMPLE_IT
std::size_t numit [] = { 3 };
std::size_t numele[] = { 2000 };
#else
#ifdef NDEBUG
std::size_t numit [] = { 100, 1000, 10000 };
#else
std::size_t numit [] = { 10, 100, 1000 };
#endif
std::size_t numele [] = { 10000, 2000, 500 };
#endif
bool csv_output = argc == 2 && (strcmp(argv[1], "--csv-output") == 0);
if(csv_output){
print_header();
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template<StdAllocator>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template<AllocatorPlusV1>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template<AllocatorPlusV2>(numit[i], numele[i], csv_output);
}
}
else{
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
std::cout << "\n ----------------------------------- \n"
<< " Iterations/Elements: " << numit[i] << "/" << numele[i]
<< "\n ----------------------------------- \n";
vector_test_template<StdAllocator>(numit[i], numele[i], csv_output);
vector_test_template<AllocatorPlusV1>(numit[i], numele[i], csv_output);
vector_test_template<AllocatorPlusV2>(numit[i], numele[i], csv_output);
}
}
return 0;
}

View File

@@ -0,0 +1,293 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifdef _MSC_VER
#pragma warning (disable : 4512)
#pragma warning (disable : 4541)
#pragma warning (disable : 4673)
#pragma warning (disable : 4671)
#pragma warning (disable : 4244)
#endif
#include <memory> //std::allocator
#include <iostream> //std::cout, std::endl
#include <vector> //std::vector
#include <cstddef> //std::size_t
#include <cassert> //assert
#include <boost/container/allocator.hpp>
#include <boost/container/adaptive_pool.hpp>
#include <boost/container/stable_vector.hpp>
#include <boost/container/vector.hpp>
#include <boost/move/detail/nsec_clock.hpp>
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
namespace bc = boost::container;
class MyInt
{
int int_;
public:
MyInt(int i = 0) : int_(i){}
MyInt(const MyInt &other)
: int_(other.int_)
{}
MyInt & operator=(const MyInt &other)
{
int_ = other.int_;
return *this;
}
};
typedef std::allocator<MyInt> StdAllocator;
typedef bc::allocator<MyInt, 1> AllocatorPlusV1;
typedef bc::allocator<MyInt, 2> AllocatorPlusV2;
typedef bc::adaptive_pool
< MyInt
, bc::ADP_nodes_per_block
, 0//bc::ADP_max_free_blocks
, 2
, 2> AdPool2PercentV2;
template<class Allocator> struct get_allocator_name;
template<> struct get_allocator_name<StdAllocator>
{ static const char *get() { return "StdAllocator"; } };
template<> struct get_allocator_name<AllocatorPlusV1>
{ static const char *get() { return "AllocatorPlusV1"; } };
template<> struct get_allocator_name<AllocatorPlusV2>
{ static const char *get() { return "AllocatorPlusV2"; } };
template<> struct get_allocator_name<AdPool2PercentV2>
{ static const char *get() { return "AdPool2PercentV2"; } };
template<class Allocator>
struct get_vector
{
typedef bc::vector<MyInt, Allocator> type;
static const char *vector_name()
{
return "vector<MyInt>";
}
};
template<class Allocator>
struct get_stable_vector
{
typedef bc::stable_vector
<MyInt, Allocator> type;
static const char *vector_name()
{
return "stable_vector<MyInt>";
}
};
template<template<class> class GetContainer, class Allocator>
void stable_vector_test_template(std::size_t num_iterations, std::size_t num_elements, bool csv_output)
{
typedef typename GetContainer<Allocator>::type vector_type;
//std::size_t top_capacity = 0;
nanosecond_type nseconds;
{
{
vector_type l;
cpu_timer timer;
timer.resume();
for(std::size_t r = 0; r != num_iterations; ++r){
l.insert(l.end(), num_elements, MyInt((int)r));
}
timer.stop();
nseconds = timer.elapsed().wall;
if(csv_output){
std::cout << get_allocator_name<Allocator>::get()
<< ";"
<< GetContainer<Allocator>::vector_name()
<< ";"
<< num_iterations
<< ";"
<< num_elements
<< ";"
<< float(nseconds)/float(num_iterations*num_elements)
<< ";";
}
else{
std::cout << "Allocator: " << get_allocator_name<Allocator>::get()
<< '\t'
<< GetContainer<Allocator>::vector_name()
<< std::endl
<< " allocation ns: "
<< float(nseconds)/float(num_iterations*num_elements);
}
// top_capacity = l.capacity();
//Now preprocess ranges to erase
std::vector<typename vector_type::iterator> ranges_to_erase;
ranges_to_erase.push_back(l.begin());
for(std::size_t r = 0; r != num_iterations; ++r){
typename vector_type::iterator next_pos(ranges_to_erase[r]);
std::size_t n = num_elements;
while(n--){ ++next_pos; }
ranges_to_erase.push_back(next_pos);
}
//Measure range erasure function
timer.stop();
timer.start();
for(std::size_t r = 0; r != num_iterations; ++r){
std::size_t init_pos = (num_iterations-1)-r;
l.erase(ranges_to_erase[init_pos], l.end());
}
timer.stop();
nseconds = timer.elapsed().wall;
assert(l.empty());
}
}
if(csv_output){
std::cout << float(nseconds)/float(num_iterations*num_elements)
<< std::endl;
}
else{
std::cout << '\t'
<< " deallocation ns: "
<< float(nseconds)/float(num_iterations*num_elements)/*
<< std::endl
<< " max capacity: "
<< static_cast<std::size_t>(top_capacity)
<< std::endl
<< " remaining cap. "
<< static_cast<std::size_t>(top_capacity - num_iterations*num_elements)
<< " (" << (float(top_capacity)/float(num_iterations*num_elements) - 1)*100 << " %)"*/
<< std::endl << std::endl;
}
assert(bc::dlmalloc_all_deallocated());
bc::dlmalloc_trim(0);
}
void print_header()
{
std::cout << "Allocator" << ";" << "Iterations" << ";" << "Size" << ";"
<< "Insertion time(ns)" << ";" << "Erasure time(ns)" << ";"
<< std::endl;
}
void stable_vector_operations()
{
{
bc::stable_vector<int> a(bc::stable_vector<int>::size_type(5), 4);
bc::stable_vector<int> b(a);
bc::stable_vector<int> c(a.cbegin(), a.cend());
b.insert(b.cend(), 0);
c.pop_back();
a.assign(b.cbegin(), b.cend());
a.assign(c.cbegin(), c.cend());
a.assign(1, 2);
}
{
typedef bc::stable_vector<int, std::allocator<int> > stable_vector_t;
stable_vector_t a(bc::stable_vector<int>::size_type(5), 4);
stable_vector_t b(a);
stable_vector_t c(a.cbegin(), a.cend());
b.insert(b.cend(), 0);
c.pop_back();
assert(static_cast<std::size_t>(a.end() - a.begin()) == a.size());
a.assign(b.cbegin(), b.cend());
assert(static_cast<std::size_t>(a.end() - a.begin()) == a.size());
a.assign(c.cbegin(), c.cend());
assert(static_cast<std::size_t>(a.end() - a.begin()) == a.size());
a.assign(1, 2);
assert(static_cast<std::size_t>(a.end() - a.begin()) == a.size());
a.reserve(100);
assert(static_cast<std::size_t>(a.end() - a.begin()) == a.size());
}
}
int main(int argc, const char *argv[])
{
//#define SINGLE_TEST
#define SIMPLE_IT
#ifdef SINGLE_TEST
#ifdef NDEBUG
std::size_t numit [] = { 40 };
#else
std::size_t numit [] = { 4 };
#endif
std::size_t numele [] = { 10000 };
#elif defined(SIMPLE_IT)
std::size_t numit [] = { 3 };
std::size_t numele [] = { 10000 };
#else
#ifdef NDEBUG
std::size_t numit [] = { 40, 400, 4000, 40000 };
#else
std::size_t numit [] = { 4, 40, 400, 4000 };
#endif
std::size_t numele [] = { 10000, 1000, 100, 10 };
#endif
//Warning: range erasure is buggy. Vector iterators are not stable, so it is not
//possible to cache iterators, but indexes!!!
bool csv_output = argc == 2 && (strcmp(argv[1], "--csv-output") == 0);
if(csv_output){
print_header();
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
stable_vector_test_template<get_stable_vector, StdAllocator>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
stable_vector_test_template<get_vector, StdAllocator>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
stable_vector_test_template<get_stable_vector, AllocatorPlusV1>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
stable_vector_test_template<get_vector, AllocatorPlusV1>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
stable_vector_test_template<get_stable_vector, AllocatorPlusV2>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
stable_vector_test_template<get_vector, AllocatorPlusV2>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
stable_vector_test_template<get_stable_vector, AdPool2PercentV2>(numit[i], numele[i], csv_output);
}
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
stable_vector_test_template<get_vector, AdPool2PercentV2>(numit[i], numele[i], csv_output);
}
}
else{
for(std::size_t i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
std::cout << "\n ----------------------------------- \n"
<< " Iterations/Elements: " << numit[i] << "/" << numele[i]
<< "\n ----------------------------------- \n";
stable_vector_test_template<get_stable_vector, StdAllocator>(numit[i], numele[i], csv_output);
stable_vector_test_template<get_vector, StdAllocator>(numit[i], numele[i], csv_output);
stable_vector_test_template<get_stable_vector, AllocatorPlusV1>(numit[i], numele[i], csv_output);
stable_vector_test_template<get_vector, AllocatorPlusV1>(numit[i], numele[i], csv_output);
stable_vector_test_template<get_stable_vector, AllocatorPlusV2>(numit[i], numele[i], csv_output);
stable_vector_test_template<get_vector, AllocatorPlusV2>(numit[i], numele[i], csv_output);
stable_vector_test_template<get_stable_vector, AdPool2PercentV2>(numit[i], numele[i], csv_output);
stable_vector_test_template<get_vector, AdPool2PercentV2>(numit[i], numele[i], csv_output);
}
}
return 0;
}

View File

@@ -0,0 +1,29 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include "boost/container/set.hpp"
#include "boost/container/flat_set.hpp"
#include "bench_set.hpp"
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//flat_set vs set
launch_tests< flat_multiset<int> , multiset<int> >
("flat_multiset<int>", "multiset<int>");
launch_tests< flat_multiset<string> , multiset<string> >
("flat_multiset<string>", "multiset<string>");
return 0;
}

View File

@@ -0,0 +1,29 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include "boost/container/set.hpp"
#include "boost/container/flat_set.hpp"
#include "bench_set.hpp"
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//flat_set vs set
launch_tests< flat_set<int> , set<int> >
("flat_set<int>", "set<int>");
launch_tests< flat_set<string> , set<string> >
("flat_set<string>", "set<string>");
return 0;
}

View File

@@ -0,0 +1,35 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include "boost/container/set.hpp"
#include <set>
#include "bench_set.hpp"
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//set vs std::set
launch_tests< set<int> , std::set<int> >
("set<int>", "std::set<int>");
launch_tests< set<string> , std::set<string> >
("set<string>", "std::set<string>");
//set(sizeopt) vs set(!sizeopt)
launch_tests< set<int>, set<int, std::less<int>, std::allocator<int>, tree_assoc_options< optimize_size<false> >::type > >
("set<int>(sizeopt=true)", "set<int>(sizeopt=false)");
launch_tests< set<string>, set<string, std::less<string>, std::allocator<string>, tree_assoc_options< optimize_size<false> >::type > >
("set<string>(sizeopt=true)", "set<string>(sizeopt=false)");
return 0;
}

View File

@@ -0,0 +1,483 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2014. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_BENCH_BENCH_SET_HPP
#define BOOST_CONTAINER_BENCH_BENCH_SET_HPP
#include <iostream>
#include <boost/move/detail/nsec_clock.hpp>
#include <algorithm> //sort
#include <exception>
#include <sstream>
#include <iomanip>
#include <boost/container/vector.hpp>
#include <boost/container/string.hpp>
#include <boost/core/no_exceptions_support.hpp>
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
#define SIMPLE_IT
#ifdef SIMPLE_IT
static const std::size_t NIter = 3;
#else
#ifdef NDEBUG
static const std::size_t NIter = 250;
#else
static const std::size_t NIter = 25;
#endif
#endif
static const std::size_t NElements = 1000;
void compare_times(cpu_times time_numerator, cpu_times time_denominator)
{
std::cout << ((double)time_numerator.wall/(double)time_denominator.wall) << '\n' << std::endl;
}
template< class RandomIt >
void random_shuffle( RandomIt first, RandomIt last )
{
typedef typename boost::container::iterator_traits<RandomIt>::difference_type difference_type;
difference_type n = last - first;
for (difference_type i = n-1; i > 0; --i) {
difference_type j = std::rand() % (i+1);
if(j != i) {
boost::adl_move_swap(first[i], first[j]);
}
}
}
boost::container::vector<int> sorted_unique_range_int;
boost::container::vector<int> sorted_range_int;
boost::container::vector<int> random_unique_range_int;
boost::container::vector<int> random_range_int;
void fill_range_ints()
{
//sorted_unique_range_int
sorted_unique_range_int.resize(NElements);
for(std::size_t i = 0, max = sorted_unique_range_int.size(); i != max; ++i){
sorted_unique_range_int[i] = static_cast<int>(i);
}
//sorted_range_int
sorted_range_int = sorted_unique_range_int;
sorted_range_int.insert(sorted_range_int.end(), sorted_unique_range_int.begin(), sorted_unique_range_int.end());
std::sort(sorted_range_int.begin(), sorted_range_int.end());
//random_range_int
std::srand(0);
random_range_int.assign(sorted_range_int.begin(), sorted_range_int.end());
::random_shuffle(random_range_int.begin(), random_range_int.end());
//random_unique_range_int
std::srand(0);
random_unique_range_int.assign(sorted_unique_range_int.begin(), sorted_unique_range_int.end());
::random_shuffle(random_unique_range_int.begin(), random_unique_range_int.end());
}
boost::container::vector<boost::container::string> sorted_unique_range_string;
boost::container::vector<boost::container::string> sorted_range_string;
boost::container::vector<boost::container::string> random_unique_range_string;
boost::container::vector<boost::container::string> random_range_string;
void fill_range_strings()
{
boost::container::string model_s;
model_s.append(sizeof(boost::container::string), '*');
//sorted_unique_range_int
sorted_unique_range_string.resize(NElements);
std::stringstream sstr;
for(std::size_t i = 0, max = sorted_unique_range_string.size(); i != max; ++i){
sstr.str(std::string());
sstr << std::setfill('0') << std::setw(10) << i;
sorted_unique_range_string[i] = model_s;
const std::string &s = sstr.str();
sorted_unique_range_string[i].append(s.begin(), s.end());
}
//sorted_range_string
sorted_range_string = sorted_unique_range_string;
sorted_range_string.insert(sorted_range_string.end(), sorted_unique_range_string.begin(), sorted_unique_range_string.end());
std::sort(sorted_range_string.begin(), sorted_range_string.end());
//random_range_string
std::srand(0);
random_range_string.assign(sorted_range_string.begin(), sorted_range_string.end());
::random_shuffle(random_range_string.begin(), random_range_string.end());
//random_unique_range_string
std::srand(0);
random_unique_range_string.assign(sorted_unique_range_string.begin(), sorted_unique_range_string.end());
::random_shuffle(random_unique_range_string.begin(), random_unique_range_string.end());
}
template<class T>
struct range_provider;
template<>
struct range_provider<int>
{
typedef boost::container::vector<int> type;
static type &sorted_unique()
{ return sorted_unique_range_int; }
static type &sorted()
{ return sorted_range_int; }
static type &random_unique()
{ return random_unique_range_int; }
static type &random()
{ return random_range_int; }
};
template<>
struct range_provider<boost::container::string>
{
typedef boost::container::vector<boost::container::string> type;
static type &sorted_unique()
{ return sorted_unique_range_string; }
static type &sorted()
{ return sorted_range_string; }
static type &random_unique()
{ return random_unique_range_string; }
static type &random()
{ return random_range_string; }
};
template<typename C>
cpu_times copy_destroy_time(boost::container::vector<typename C::value_type> &unique_range)
{
cpu_timer copy_timer, assign_timer, destroy_timer;
cpu_timer total_time;
for(std::size_t i = 0; i != NIter; ++i){
{
C c(unique_range.begin(), unique_range.end());
total_time.resume();
copy_timer.resume();
C caux(c);
copy_timer.stop();
assign_timer.resume();
c = caux;
assign_timer.stop();
destroy_timer.resume();
}
destroy_timer.stop();
total_time.stop();
}
total_time.stop();
std::cout << " Copy sorted range " << double(copy_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Assign sorted range " << double(assign_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Destroy " << double(destroy_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Total time = " << double(total_time.elapsed().wall)/double(1000000000) << "s\n";
return total_time.elapsed();
}
template<typename C>
cpu_times construct_time( boost::container::vector<typename C::value_type> &unique_range
, boost::container::vector<typename C::value_type> &range
, const char *RangeType)
{
cpu_timer sur_timer, sr_timer;
cpu_timer total_time;
for(std::size_t i = 0; i != NIter; ++i){
{
sur_timer.resume();
total_time.resume();
C c(unique_range.begin(), unique_range.end());
sur_timer.stop();
total_time.stop();
}
{
total_time.resume();
sr_timer.resume();
C c(range.begin(), range.end());
sr_timer.stop();
total_time.stop();
}
}
std::cout << " Construct " << RangeType << " unique_range " << double(sur_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Construct " << RangeType << " range " << double(sr_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Total time = " << double(total_time.elapsed().wall)/double(1000000000) << "s\n";
return total_time.elapsed();
}
template<typename C>
cpu_times insert_time( boost::container::vector<typename C::value_type> &unique_range
, boost::container::vector<typename C::value_type> &range
, const char *RangeType)
{
cpu_timer ur_timer,r_timer;
ur_timer.stop();r_timer.stop();
cpu_timer total_time;
total_time.resume();
for(std::size_t i = 0; i != NIter; ++i){
{
total_time.resume();
ur_timer.resume();
C c;
c.insert(unique_range.begin(), unique_range.end());
ur_timer.stop();
total_time.stop();
}
{
total_time.resume();
r_timer.resume();
C c;
c.insert(range.begin(), range.end());
r_timer.stop();
total_time.stop();
}
}
std::cout << " Insert " << RangeType << " unique_range " << double(ur_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Insert " << RangeType << " range " << double(r_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Total time = " << double(total_time.elapsed().wall)/double(1000000000) << "s\n";
return total_time.elapsed();
}
template<typename Iterator>
bool check_not_end(boost::container::vector<Iterator> &iterators, Iterator itend, std::size_t number_of_ends = 0)
{
std::size_t end_count = 0;
for(std::size_t i = 0, max = iterators.size(); i != max; ++i){
if(iterators[i] == itend && (++end_count > number_of_ends) )
return false;
}
return true;
}
template<typename Iterator>
bool check_all_not_empty(boost::container::vector< std::pair<Iterator, Iterator > > &iterator_pairs)
{
for(std::size_t i = 0, max = iterator_pairs.size(); i != max; ++i){
if(iterator_pairs[i].first == iterator_pairs[i].second)
return false;
}
return true;
}
template<typename C>
cpu_times search_time(boost::container::vector<typename C::value_type> &unique_range, const char *RangeType)
{
cpu_timer find_timer, lower_timer, upper_timer, equal_range_timer, count_timer;
C c(unique_range.begin(), unique_range.end());
cpu_timer total_time;
total_time.resume();
boost::container::vector<typename C::iterator> v_it(NElements);
boost::container::vector< std::pair<typename C::iterator, typename C::iterator> > v_itp(NElements);
for(std::size_t i = 0; i != NIter; ++i){
//Find
{
find_timer.resume();
for(std::size_t rep = 0; rep != 2; ++rep)
for(std::size_t j = 0, max = unique_range.size(); j != max; ++j){
v_it[j] = c.find(unique_range[j]);
}
find_timer.stop();
if(!check_not_end(v_it, c.end())){
std::cout << "ERROR! find all elements not found" << std::endl;
}
}
//Lower
{
lower_timer.resume();
for(std::size_t rep = 0; rep != 2; ++rep)
for(std::size_t j = 0, max = unique_range.size(); j != max; ++j){
v_it[j] = c.lower_bound(unique_range[j]);
}
lower_timer.stop();
if(!check_not_end(v_it, c.end())){
std::cout << "ERROR! lower_bound all elements not found" << std::endl;
}
}
//Upper
{
upper_timer.resume();
for(std::size_t rep = 0; rep != 2; ++rep)
for(std::size_t j = 0, max = unique_range.size(); j != max; ++j){
v_it[j] = c.upper_bound(unique_range[j]);
}
upper_timer.stop();
if(!check_not_end(v_it, c.end(), 1u)){
std::cout << "ERROR! upper_bound all elements not found" << std::endl;
}
}
//Equal
{
equal_range_timer.resume();
for(std::size_t rep = 0; rep != 2; ++rep)
for(std::size_t j = 0, max = unique_range.size(); j != max; ++j){
v_itp[j] = c.equal_range(unique_range[j]);
}
equal_range_timer.stop();
if(!check_all_not_empty(v_itp)){
std::cout << "ERROR! equal_range all elements not found" << std::endl;
}
}
//Count
{
std::size_t count = 0;
count_timer.resume();
for(std::size_t rep = 0; rep != 2; ++rep)
for(std::size_t j = 0, max = unique_range.size(); j != max; ++j){
count += c.count(unique_range[j]);
}
count_timer.stop();
if(count/2 != c.size()){
std::cout << "ERROR! count all elements not found" << std::endl;
}
}
}
total_time.stop();
std::cout << " Find " << RangeType << " " << double(find_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Lower Bound " << RangeType << " " << double(lower_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Upper Bound " << RangeType << " " << double(upper_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Equal Range " << RangeType << " " << double(equal_range_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Count " << RangeType << " " << double(count_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Total time = " << double(total_time.elapsed().wall)/double(1000000000) << "s\n";
return total_time.elapsed();
}
template<typename C>
void extensions_time(boost::container::vector<typename C::value_type> &sorted_unique_range)
{
cpu_timer sur_timer,sur_opt_timer;
sur_timer.stop();sur_opt_timer.stop();
for(std::size_t i = 0; i != NIter; ++i){
{
sur_timer.resume();
C c(sorted_unique_range.begin(), sorted_unique_range.end());
sur_timer.stop();
}
{
sur_opt_timer.resume();
C c(boost::container::ordered_unique_range, sorted_unique_range.begin(), sorted_unique_range.end());
sur_opt_timer.stop();
}
}
std::cout << " Construct sorted_unique_range " << double(sur_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Construct sorted_unique_range (extension) " << double(sur_opt_timer.elapsed().wall)/double(1000000000) << "s\n";
std::cout << "Extension/Standard: ";
compare_times(sur_opt_timer.elapsed(), sur_timer.elapsed());
}
template<class BoostClass, class StdClass>
void launch_tests(const char *BoostContName, const char *StdContName)
{
typedef range_provider<typename BoostClass::value_type> get_range_t;
std::cout << std::fixed << std::setw( 11 );
std::cout << "**********************************************" << '\n';
std::cout << "**********************************************" << '\n';
std::cout << '\n';
std::cout << BoostContName << " .VS " << StdContName << '\n';
std::cout << '\n';
std::cout << "**********************************************" << '\n';
std::cout << "**********************************************" << '\n' << std::endl;
{
std::cout << "Copy/Assign/Destroy benchmark:" << BoostContName << std::endl;
cpu_times boost_set_time = copy_destroy_time< BoostClass >(get_range_t::sorted_unique());
std::cout << "Copy/Assign/Destroy benchmark:" << StdContName << std::endl;
cpu_times std_set_time = copy_destroy_time< StdClass >(get_range_t::sorted_unique());
std::cout << BoostContName << "/" << StdContName << ": ";
compare_times(boost_set_time, std_set_time);
}
{
std::cout << "Ordered construct benchmark:" << BoostContName << std::endl;
cpu_times boost_set_time = construct_time< BoostClass >(get_range_t::sorted_unique(), get_range_t::sorted(), "(ord)");
std::cout << "Ordered construct benchmark:" << StdContName << std::endl;
cpu_times std_set_time = construct_time< StdClass >(get_range_t::sorted_unique(), get_range_t::sorted(), "(ord)");;
std::cout << BoostContName << "/" << StdContName << ": ";
compare_times(boost_set_time, std_set_time);
}
{
std::cout << "Random construct benchmark:" << BoostContName << std::endl;
cpu_times boost_set_time = construct_time< BoostClass >(get_range_t::random_unique(), get_range_t::random(), "(rnd)");
std::cout << "Random construct benchmark:" << StdContName << std::endl;
cpu_times std_set_time = construct_time< StdClass >(get_range_t::random_unique(), get_range_t::random(), "(rnd)");;
std::cout << BoostContName << "/" << StdContName << ": ";
compare_times(boost_set_time, std_set_time);
}
{
std::cout << "Ordered Insert benchmark:" << BoostContName << std::endl;
cpu_times boost_set_time = insert_time< BoostClass >(get_range_t::sorted_unique(), get_range_t::sorted(), "(ord)");
std::cout << "Ordered Insert benchmark:" << StdContName << std::endl;
cpu_times std_set_time = insert_time< StdClass >(get_range_t::sorted_unique(), get_range_t::sorted(), "(ord)");
std::cout << BoostContName << "/" << StdContName << ": ";
compare_times(boost_set_time, std_set_time);
}
{
std::cout << "Random Insert benchmark:" << BoostContName << std::endl;
cpu_times boost_set_time = insert_time< BoostClass >(get_range_t::random_unique(), get_range_t::random(), "(rnd)");
std::cout << "Random Insert benchmark:" << StdContName << std::endl;
cpu_times std_set_time = insert_time< StdClass >(get_range_t::random_unique(), get_range_t::random(), "(rnd)");
std::cout << BoostContName << "/" << StdContName << ": ";
compare_times(boost_set_time, std_set_time);
}
{
std::cout << "Ordered Search benchmark:" << BoostContName << std::endl;
cpu_times boost_set_time = search_time< BoostClass >(get_range_t::sorted_unique(), "(ord)");
std::cout << "Ordered Search benchmark:" << StdContName << std::endl;
cpu_times std_set_time = search_time< StdClass >(get_range_t::sorted_unique(), "(ord)");
std::cout << BoostContName << "/" << StdContName << ": ";
compare_times(boost_set_time, std_set_time);
}
{
std::cout << "Random Search benchmark:" << BoostContName << std::endl;
cpu_times boost_set_time = search_time< BoostClass >(get_range_t::random_unique(), "(rnd)");
std::cout << "Random Search benchmark:" << StdContName << std::endl;
cpu_times std_set_time = search_time< StdClass >(get_range_t::random_unique(), "(rnd)");
std::cout << BoostContName << "/" << StdContName << ": ";
compare_times(boost_set_time, std_set_time);
}
{
std::cout << "Extensions benchmark:" << BoostContName << std::endl;
extensions_time< BoostClass >(get_range_t::sorted_unique());
}
}
#endif //#ifndef BOOST_CONTAINER_BENCH_BENCH_SET_HPP

View File

@@ -0,0 +1,34 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//Enable checks in debug mode
#ifndef NDEBUG
#define BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS
#endif
#include "bench_set.hpp"
#include <boost/container/set.hpp>
#include <boost/container/allocator.hpp>
#include <boost/container/adaptive_pool.hpp>
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//set<..., adaptive_pool> vs. set
launch_tests< set<int, std::less<int>, private_adaptive_pool<int> >, set<int> >
("set<int, ..., private_adaptive_pool<int>", "set<int>");
launch_tests< set<string, std::less<string>, private_adaptive_pool<string> >, set<string> >
("set<string, ..., private_adaptive_pool<string>", "set<string>");
return 0;
}

View File

@@ -0,0 +1,29 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include "bench_set.hpp"
#include <boost/container/set.hpp>
#include <boost/container/allocator.hpp>
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//set<..., version_2> vs. set
launch_tests< set<int, std::less<int>, allocator<int> >, set<int> >
("set<int, ..., allocator<int>", "set<int>");
launch_tests< set<string, std::less<string>, allocator<string> >, set<string> >
("set<string, ..., allocator<string>", "set<string>");
return 0;
}

View File

@@ -0,0 +1,38 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include "boost/container/set.hpp"
#include <set>
#include "bench_set.hpp"
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//set(AVL) vs set(RB)
launch_tests< set<int, std::less<int>, std::allocator<int>, tree_assoc_options< tree_type<avl_tree> >::type >, set<int> >
("set<int>(AVL)", "set<int>(RB)");
launch_tests< set<string, std::less<string>, std::allocator<string>, tree_assoc_options< tree_type<avl_tree> >::type >, set<string> >
("set<string>(AVL)", "set<string>(RB)");
//set(AVL,sizeopt) vs set(AVL,!sizeopt)
launch_tests< set<int, std::less<int>, std::allocator<int>, tree_assoc_options< tree_type<avl_tree> >::type >
, set<int, std::less<int>, std::allocator<int>, tree_assoc_options< tree_type<avl_tree>, optimize_size<false> >::type > >
("set<int>(AVL,sizeopt=true)", "set<int>(AVL,sizeopt=false)");
launch_tests< set<string, std::less<string>, std::allocator<string>, tree_assoc_options< tree_type<avl_tree> >::type >
, set<string, std::less<string>, std::allocator<string>, tree_assoc_options< tree_type<avl_tree>, optimize_size<false> >::type > >
("set<string>(AVL,sizeopt=true)", "set<string>(AVL,sizeopt=false)");
return 0;
}

View File

@@ -0,0 +1,30 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include "boost/container/set.hpp"
#include <set>
#include "bench_set.hpp"
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//multiset vs std::multiset
launch_tests< multiset<int> , std::multiset<int> >
("multiset<int>", "std::multiset<int>");
launch_tests< multiset<string> , std::multiset<string> >
("multiset<string>", "std::multiset<string>");
return 0;
}

View File

@@ -0,0 +1,28 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include "boost/container/set.hpp"
#include "bench_set.hpp"
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//set(RB) vs set(SG)
launch_tests< set<int, std::less<int>, std::allocator<int>, tree_assoc_options< tree_type<scapegoat_tree> >::type >, set<int> >
("set<int>(SG)", "set<int>(RB)");
launch_tests< set<string, std::less<string>, std::allocator<string>, tree_assoc_options< tree_type<scapegoat_tree> >::type >, set<string> >
("set<string>(SG)", "set<string>(RB)");
return 0;
}

View File

@@ -0,0 +1,28 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include "boost/container/set.hpp"
#include "bench_set.hpp"
int main()
{
using namespace boost::container;
fill_range_ints();
fill_range_strings();
//set(RB) vs set(SP)
launch_tests< set<int, std::less<int>, std::allocator<int>, tree_assoc_options< tree_type<splay_tree> >::type >, set<int> >
("set<int>(SP)", "set<int>(RB)");
launch_tests< set<string, std::less<string>, std::allocator<string>, tree_assoc_options< tree_type<splay_tree> >::type >, set<string> >
("set<string>(SP)", "set<string>(RB)");
return 0;
}

View File

@@ -0,0 +1,144 @@
// benchmark based on: http://cpp-next.com/archive/2010/10/howards-stl-move-semantics-benchmark/
//
// @file bench_static_vector.cpp
// @date Aug 14, 2011
// @author Andrew Hundt <ATHundt@gmail.com>
//
// (C) Copyright 2011-2013 Andrew Hundt <ATHundt@gmail.com>
// (C) Copyright 2013-2013 Ion Gaztanaga
//
// Distributed under the Boost Software License, Version 1.0. (See
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// @brief varray_benchmark.cpp compares the performance of boost::container::varray to boost::container::vector
#include "varray.hpp"
#include <boost/container/vector.hpp>
#include <boost/container/static_vector.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include "../test/movable_int.hpp"
#include <vector>
#include <iostream>
#include <boost/move/detail/nsec_clock.hpp>
#include <algorithm>
#include <exception>
#include <iomanip>
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
static const std::size_t N = 500;
#ifdef NDEBUG
static const std::size_t Iter = 50;
#else
static const std::size_t Iter = 5;
#endif
//#define BENCH_SIMPLE_CONSTRUCTION
//#define BENCH_TRIVIAL_TYPE
#ifdef BENCH_TRIVIAL_TYPE
typedef std::size_t basic_type_t;
#else
typedef boost::container::test::copyable_int basic_type_t;
#endif
template<typename T>
T &get_set(std::size_t)
{
#ifdef BENCH_SIMPLE_CONSTRUCTION
T &t = *new T(N);
for (std::size_t i = 0; i < N; ++i)
t[i] = basic_type_t(std::rand());
#else
T &t = *new T;
t.reserve(N);
for (std::size_t i = 0; i < N; ++i)
t.push_back(basic_type_t(std::rand()));
#endif
return t;
}
template<typename T>
T &generate()
{
T &v = *new T;
v.reserve(N);
for (std::size_t i = 0; i < N; ++i){
typename T::reference r = get_set<typename T::value_type>(i);
v.push_back(boost::move(r));
delete &r;
}
return v;
}
template<typename T>
cpu_times time_it()
{
cpu_timer sortTime,rotateTime,destructionTime;
sortTime.stop();rotateTime.stop();destructionTime.stop();
cpu_timer totalTime, constructTime;
std::srand (0);
for(std::size_t i = 0; i< Iter; ++i){
constructTime.resume();
{
T &v = generate<T>();
constructTime.stop();
sortTime.resume();
std::sort(v.begin(), v.end());
sortTime.stop();
rotateTime.resume();
std::rotate(v.begin(), v.begin() + std::ptrdiff_t(v.size()/2), v.end());
rotateTime.stop();
destructionTime.resume();
delete &v;
}
destructionTime.stop();
}
totalTime.stop();
std::cout << std::fixed << std::setw( 11 );
std::cout << " construction took " << double(constructTime.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " sort took " << double(sortTime.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " rotate took " << double(rotateTime.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " destruction took " << double(destructionTime.elapsed().wall)/double(1000000000) << "s\n";
std::cout << " Total time = " << double(totalTime.elapsed().wall)/double(1000000000) << "s\n";
return totalTime.elapsed();
}
void compare_times(cpu_times time_numerator, cpu_times time_denominator){
std::cout
<< "\n wall = " << ((double)time_numerator.wall/(double)time_denominator.wall) << "\n\n";
}
int main()
{
std::cout << "N = " << N << " Iter = " << Iter << "\n\n";
std::cout << "varray benchmark:" << std::endl;
cpu_times time_varray = time_it<boost::container::varray<boost::container::varray<basic_type_t,N>,N > >();
std::cout << "boost::container::static_vector benchmark" << std::endl;
cpu_times time_boost_static_vector = time_it<boost::container::static_vector<boost::container::static_vector<basic_type_t,N>,N > >();
std::cout << "boost::container::vector benchmark" << std::endl;
cpu_times time_boost_vector = time_it<boost::container::vector<boost::container::vector<basic_type_t> > >();
std::cout << "std::vector benchmark" << std::endl;
cpu_times time_standard_vector = time_it<std::vector<std::vector<basic_type_t> > >();
std::cout << "varray/boost::container::vector total time comparison:";
compare_times(time_varray, time_boost_vector);
std::cout << "varray/boost::container::static_vector total time comparison:";
compare_times(time_varray, time_boost_static_vector);
std::cout << "varray/std::vector total time comparison:";
compare_times(time_varray,time_standard_vector);
return 0;
}

View File

@@ -0,0 +1,298 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include <vector>
#include <deque>
#include <boost/container/vector.hpp>
#include <boost/container/devector.hpp>
#include <boost/container/deque.hpp>
#include <boost/container/small_vector.hpp>
#include <boost/container/stable_vector.hpp>
#include <memory> //std::allocator
#include <iostream> //std::cout, std::endl
#include <cstring> //std::strcmp
#include <boost/move/detail/nsec_clock.hpp>
#include <typeinfo>
#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
#endif
//capacity
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME capacity
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace test {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 0
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
//#pragma GCC diagnostic ignored "-Wunused-result"
#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
#pragma GCC diagnostic pop
#endif
using boost::move_detail::cpu_timer;
using boost::move_detail::cpu_times;
using boost::move_detail::nanosecond_type;
namespace bc = boost::container;
class MyInt
{
int int_;
public:
BOOST_CONTAINER_FORCEINLINE explicit MyInt(int i = 0)
: int_(i)
{}
BOOST_CONTAINER_FORCEINLINE MyInt(const MyInt &other)
: int_(other.int_)
{}
BOOST_CONTAINER_FORCEINLINE MyInt & operator=(const MyInt &other)
{
int_ = other.int_;
return *this;
}
BOOST_CONTAINER_FORCEINLINE ~MyInt()
{
int_ = 0;
}
};
template<class C, bool = boost::container::test::
has_member_function_callable_with_capacity<C>::value>
struct capacity_wrapper
{
BOOST_CONTAINER_FORCEINLINE static typename C::size_type get_capacity(const C &c)
{ return c.capacity(); }
BOOST_CONTAINER_FORCEINLINE static void set_reserve(C &c, typename C::size_type cp)
{ c.reserve(cp); }
};
template<class C>
struct capacity_wrapper<C, false>
{
BOOST_CONTAINER_FORCEINLINE static typename C::size_type get_capacity(const C &)
{ return 0u; }
BOOST_CONTAINER_FORCEINLINE static void set_reserve(C &, typename C::size_type )
{ }
};
const std::size_t RangeSize = 5;
struct insert_end_range
{
BOOST_CONTAINER_FORCEINLINE std::size_t capacity_multiplier() const
{ return RangeSize; }
template<class C>
BOOST_CONTAINER_FORCEINLINE void operator()(C &c, int)
{ c.insert(c.end(), &a[0], &a[0]+RangeSize); }
const char *name() const
{ return "insert_end_range"; }
MyInt a[RangeSize];
};
struct insert_end_repeated
{
BOOST_CONTAINER_FORCEINLINE std::size_t capacity_multiplier() const
{ return RangeSize; }
template<class C>
BOOST_CONTAINER_FORCEINLINE void operator()(C &c, int i)
{ c.insert(c.end(), RangeSize, MyInt(i)); }
BOOST_CONTAINER_FORCEINLINE const char *name() const
{ return "insert_end_repeated"; }
MyInt a[RangeSize];
};
struct push_back
{
BOOST_CONTAINER_FORCEINLINE std::size_t capacity_multiplier() const
{ return 1; }
template<class C>
BOOST_CONTAINER_FORCEINLINE void operator()(C &c, int i)
{ c.push_back(MyInt(i)); }
BOOST_CONTAINER_FORCEINLINE const char *name() const
{ return "push_back"; }
};
struct insert_near_end_repeated
{
BOOST_CONTAINER_FORCEINLINE std::size_t capacity_multiplier() const
{ return RangeSize; }
template<class C>
BOOST_CONTAINER_FORCEINLINE void operator()(C &c, int i)
{ c.insert(c.size() >= 2*RangeSize ? c.end()-2*RangeSize : c.begin(), RangeSize, MyInt(i)); }
BOOST_CONTAINER_FORCEINLINE const char *name() const
{ return "insert_near_end_repeated"; }
};
struct insert_near_end_range
{
BOOST_CONTAINER_FORCEINLINE std::size_t capacity_multiplier() const
{ return RangeSize; }
template<class C>
BOOST_CONTAINER_FORCEINLINE void operator()(C &c, int)
{
c.insert(c.size() >= 2*RangeSize ? c.end()-2*RangeSize : c.begin(), &a[0], &a[0]+RangeSize);
}
BOOST_CONTAINER_FORCEINLINE const char *name() const
{ return "insert_near_end_range"; }
MyInt a[RangeSize];
};
struct insert_near_end
{
BOOST_CONTAINER_FORCEINLINE std::size_t capacity_multiplier() const
{ return 1; }
template<class C>
BOOST_CONTAINER_FORCEINLINE void operator()(C &c, int i)
{
typedef typename C::iterator it_t;
it_t it (c.end());
it -= static_cast<typename C::difference_type>(c.size() >= 2)*2;
c.insert(it, MyInt(i));
}
BOOST_CONTAINER_FORCEINLINE const char *name() const
{ return "insert_near_end"; }
};
template<class Container, class Operation>
void vector_test_template(std::size_t num_iterations, std::size_t num_elements, const char *cont_name)
{
typedef capacity_wrapper<Container> cpw_t;
Container c;
cpw_t::set_reserve(c, num_elements);
Operation op;
const typename Container::size_type multiplier = op.capacity_multiplier();
//Warm-up operation
for(std::size_t e = 0, max = num_elements/multiplier; e != max; ++e){
op(c, static_cast<int>(e));
}
c.clear();
cpu_timer timer;
const std::size_t max = num_elements/multiplier;
for(std::size_t r = 0; r != num_iterations; ++r){
//Unrolll the loop to avoid noise from loop code
int i = 0;
timer.resume();
for(std::size_t e = 0; e < max/16; ++e){
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
op(c, static_cast<int>(i++));
}
timer.stop();
c.clear();
}
timer.stop();
std::size_t capacity = cpw_t::get_capacity(c);
nanosecond_type nseconds = timer.elapsed().wall;
std::cout << cont_name << "->" << op.name() <<" ns: "
<< float(nseconds)/float(num_iterations*num_elements)
<< '\t'
<< "Capacity: " << capacity
<< "\n";
}
template<class Operation>
void test_vectors()
{
//#define SINGLE_TEST
#define SIMPLE_IT
#ifdef SINGLE_TEST
#ifdef NDEBUG
std::size_t numit [] = { 100 };
#else
std::size_t numit [] = { 20 };
#endif
std::size_t numele [] = { 10000 };
#elif defined SIMPLE_IT
std::size_t numit [] = { 100 };
std::size_t numele [] = { 10000 };
#else
#ifdef NDEBUG
unsigned int numit [] = { 1000, 10000, 100000, 1000000 };
#else
unsigned int numit [] = { 100, 1000, 10000, 100000 };
#endif
unsigned int numele [] = { 10000, 1000, 100, 10 };
#endif
for(unsigned int i = 0; i < sizeof(numele)/sizeof(numele[0]); ++i){
vector_test_template< std::vector<MyInt, std::allocator<MyInt> >, Operation >(numit[i], numele[i] , "std::vector ");
vector_test_template< bc::vector<MyInt, std::allocator<MyInt> >, Operation >(numit[i], numele[i] , "vector ");
vector_test_template< bc::devector<MyInt, std::allocator<MyInt> >, Operation >(numit[i], numele[i] , "devector ");
vector_test_template< bc::small_vector<MyInt, 0, std::allocator<MyInt> >, Operation >(numit[i], numele[i] , "small_vector ");
vector_test_template< std::deque<MyInt, std::allocator<MyInt> >, Operation >(numit[i], numele[i] , "std::deque ");
vector_test_template< bc::deque<MyInt, std::allocator<MyInt> >, Operation >(numit[i], numele[i] , "deque ");
}
std::cout << "---------------------------------\n---------------------------------\n";
}
int main()
{
//end
test_vectors<push_back>();
test_vectors<insert_end_range>();
test_vectors<insert_end_repeated>();
//near end
test_vectors<insert_near_end>();
test_vectors<insert_near_end_range>();
test_vectors<insert_near_end_repeated>();
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,60 @@
// Boost.Container varray
//
// Copyright (c) 2012-2013 Andrew Hundt.
// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_CONTAINER_VARRAY_CONCEPT_HPP
#define BOOST_CONTAINER_VARRAY_CONCEPT_HPP
#include <boost/concept_check.hpp>
namespace boost { namespace container { namespace dtl { namespace concept {
/**
* VArrayStrategyConcept
*
* \brief Checks strategy for varray<Value,Capacity,Strategy>, which has similarities to std::allocator
* \ingroup varray
*/
template<typename Strategy>
struct VArrayStrategy {
#ifndef DOXYGEN_NO_CONCEPT_MEMBERS
// typedefs are the same as in std::allocator
typedef typename Strategy::value_type value_type;
typedef typename Strategy::size_type size_type;
typedef typename Strategy::difference_type difference_type;
typedef typename Strategy::pointer pointer;
typedef typename Strategy::const_pointer const_pointer;
typedef typename Strategy::reference reference;
typedef typename Strategy::const_reference const_reference;
struct check_methods
{
static void apply()
{
Strategy const* str = 0;
// must implement allocate_failed
str->allocate_failed();
boost::ignore_unused_variable_warning(str);
}
};
public :
BOOST_CONCEPT_USAGE(VArrayStrategy)
{
check_methods::apply();
}
#endif
};
}}}} // namespace boost::container::dtl::concept
#endif //BOOST_CONTAINER_VARRAY_CONCEPT_HPP

View File

@@ -0,0 +1,646 @@
// Boost.Container
//
// varray details
//
// Copyright (c) 2012-2013 Adam Wulkiewicz, Lodz, Poland.
// Copyright (c) 2011-2013 Andrew Hundt.
//
// Use, modification and distribution is subject to the Boost Software License,
// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
#ifndef BOOST_CONTAINER_DETAIL_VARRAY_UTIL_HPP
#define BOOST_CONTAINER_DETAIL_VARRAY_UTIL_HPP
#include <cstddef>
#include <cstring>
#include <memory>
#include <limits>
#include <boost/config.hpp>
#include <boost/core/no_exceptions_support.hpp>
#include <boost/container/detail/addressof.hpp>
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/move/detail/fwd_macros.hpp>
#endif
#include <boost/container/detail/iterator.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/type_traits.hpp>
#include <boost/move/algorithm.hpp>
#include <boost/move/traits.hpp>
#include <boost/move/utility_core.hpp>
// TODO - move vectors iterators optimization to the other, optional file instead of checking defines?
#if defined(BOOST_CONTAINER_VARRAY_ENABLE_VECTORS_OPTIMIZATION) && !defined(BOOST_NO_EXCEPTIONS)
#include <vector>
#include <boost/container/vector.hpp>
#endif // BOOST_CONTAINER_VARRAY_ENABLE_ITERATORS_OPTIMIZATION && !BOOST_NO_EXCEPTIONS
namespace boost { namespace container { namespace varray_detail {
namespace bcd = ::boost::container::dtl;
template <typename I>
struct are_elements_contiguous : boost::container::dtl::is_pointer<I>
{};
#if defined(BOOST_CONTAINER_VARRAY_ENABLE_VECTORS_OPTIMIZATION) && !defined(BOOST_NO_EXCEPTIONS)
template <typename Pointer>
struct are_elements_contiguous<
bcd::vector_const_iterator<Pointer>
> : bcd::true_type
{};
template <typename Pointer>
struct are_elements_contiguous<
bcd::vector_iterator<Pointer>
> : bcd::true_type
{};
#if defined(BOOST_DINKUMWARE_STDLIB)
template <typename T>
struct are_elements_contiguous<
std::_Vector_const_iterator<T>
> : bcd::true_type
{};
template <typename T>
struct are_elements_contiguous<
std::_Vector_iterator<T>
> : bcd::true_type
{};
#elif defined(BOOST_GNU_STDLIB)
template <typename P, typename T, typename Allocator>
struct are_elements_contiguous<
__gnu_cxx::__normal_iterator<P, std::vector<T, Allocator> >
> : bcd::true_type
{};
#elif defined(_LIBCPP_VERSION)
// TODO - test it first
//template <typename P>
//struct are_elements_contiguous<
// __wrap_iter<P>
//> : bcd::true_type
//{};
#else // OTHER_STDLIB
// TODO - add other iterators implementations
#endif // STDLIB
#endif // BOOST_CONTAINER_VARRAY_ENABLE_VECTORS_OPTIMIZATION && !BOOST_NO_EXCEPTIONS
template <typename I, typename O>
struct are_corresponding :
bcd::bool_<
bcd::is_same<
bcd::remove_const<
typename ::boost::container::iterator_traits<I>::value_type
>,
bcd::remove_const<
typename ::boost::container::iterator_traits<O>::value_type
>
>::value &&
are_elements_contiguous<I>::value &&
are_elements_contiguous<O>::value
>
{};
template <typename I, typename V>
struct is_corresponding_value :
bcd::bool_<
bcd::is_same<
bcd::remove_const<typename ::boost::container::iterator_traits<I>::value_type>,
bcd::remove_const<V>
>::value
>
{};
// destroy(I, I)
template <typename I>
void destroy_dispatch(I /*first*/, I /*last*/, bcd::true_type const& /*is_trivially_destructible*/)
{}
template <typename I>
void destroy_dispatch(I first, I last, bcd::false_type const& /*is_trivially_destructible*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
for ( ; first != last ; ++first )
first->~value_type();
}
template <typename I>
void destroy(I first, I last)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
destroy_dispatch(first, last, bcd::bool_<bcd::is_trivially_destructible<value_type>::value>());
}
// destroy(I)
template <typename I>
void destroy_dispatch(I /*pos*/,
bcd::true_type const& /*is_trivially_destructible*/)
{}
template <typename I>
void destroy_dispatch(I pos,
bcd::false_type const& /*is_trivially_destructible*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
pos->~value_type();
}
template <typename I>
void destroy(I pos)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
destroy_dispatch(pos, bcd::bool_<bcd::is_trivially_destructible<value_type>::value>());
}
// copy(I, I, O)
template <typename I, typename O>
inline O copy_dispatch(I first, I last, O dst, bcd::true_type const& /*use_memmove*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
const std::size_t d = boost::container::iterator_udistance(first, last);
::memmove(boost::container::dtl::addressof(*dst), boost::container::dtl::addressof(*first), sizeof(value_type) * d);
return dst + d;
}
template <typename I, typename O>
inline O copy_dispatch(I first, I last, O dst, bcd::false_type const& /*use_memmove*/)
{
return std::copy(first, last, dst); // may throw
}
template <typename I, typename O>
inline O copy(I first, I last, O dst)
{
typedef bcd::bool_
< are_corresponding<I, O>::value &&
bcd::is_trivially_copy_assignable<typename ::boost::container::iterator_traits<O>::value_type>::value
> use_memmove;
return copy_dispatch(first, last, dst, use_memmove()); // may throw
}
// uninitialized_copy(I, I, O)
template <typename I, typename O>
inline
O uninitialized_copy_dispatch(I first, I last, O dst,
bcd::true_type const& /*use_memcpy*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
const std::size_t d = boost::container::iterator_udistance(first, last);
::memcpy(boost::container::dtl::addressof(*dst), boost::container::dtl::addressof(*first), sizeof(value_type) * d);
return dst + d;
}
template <typename I, typename F>
inline
F uninitialized_copy_dispatch(I first, I last, F dst,
bcd::false_type const& /*use_memcpy*/)
{
return std::uninitialized_copy(first, last, dst); // may throw
}
template <typename I, typename F>
inline
F uninitialized_copy(I first, I last, F dst)
{
typedef bcd::bool_
< are_corresponding<I, F>::value &&
bcd::is_trivially_copy_constructible<typename ::boost::container::iterator_traits<F>::value_type>::value
> use_memcpy;
return uninitialized_copy_dispatch(first, last, dst, use_memcpy()); // may throw
}
// uninitialized_move(I, I, O)
template <typename I, typename O>
inline
O uninitialized_move_dispatch(I first, I last, O dst,
bcd::true_type const& /*use_memcpy*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
const std::size_t d = boost::container::iterator_udistance(first, last);
::memcpy(boost::container::dtl::addressof(*dst), boost::container::dtl::addressof(*first), sizeof(value_type) * d);
return dst + d;
}
template <typename I, typename O>
inline
O uninitialized_move_dispatch(I first, I last, O dst,
bcd::false_type const& /*use_memcpy*/)
{
//return boost::uninitialized_move(first, last, dst); // may throw
O o = dst;
BOOST_TRY
{
typedef typename boost::container::iterator_traits<O>::value_type value_type;
for (; first != last; ++first, ++o )
new (boost::container::dtl::addressof(*o)) value_type(boost::move(*first));
}
BOOST_CATCH(...)
{
destroy(dst, o);
BOOST_RETHROW;
}
BOOST_CATCH_END
return dst;
}
template <typename I, typename O>
inline
O uninitialized_move(I first, I last, O dst)
{
typedef bcd::bool_
< are_corresponding<I, O>::value &&
bcd::is_trivially_copy_constructible<typename ::boost::container::iterator_traits<O>::value_type>::value
> use_memcpy;
return uninitialized_move_dispatch(first, last, dst, use_memcpy()); // may throw
}
// TODO - move uses memmove - implement 2nd version using memcpy?
// move(I, I, O)
template <typename I, typename O>
inline
O move_dispatch(I first, I last, O dst,
bcd::true_type const& /*use_memmove*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
const std::size_t d = boost::container::iterator_udistance(first, last);
::memmove(boost::container::dtl::addressof(*dst), boost::container::dtl::addressof(*first), sizeof(value_type)*d );
return dst + d;
}
template <typename I, typename O>
inline
O move_dispatch(I first, I last, O dst,
bcd::false_type const& /*use_memmove*/)
{
return boost::move(first, last, dst); // may throw
}
template <typename I, typename O>
inline
O move(I first, I last, O dst)
{
typedef bcd::bool_
< are_corresponding<I, O>::value &&
bcd::is_trivially_copy_constructible<typename ::boost::container::iterator_traits<O>::value_type>::value
> use_memmove;
return move_dispatch(first, last, dst, use_memmove()); // may throw
}
// move_backward(BDI, BDI, BDO)
template <typename BDI, typename BDO>
inline
BDO move_backward_dispatch(BDI first, BDI last, BDO dst,
bcd::true_type const& /*use_memmove*/)
{
typedef typename ::boost::container::iterator_traits<BDI>::value_type value_type;
const std::size_t d = boost::container::iterator_udistance(first, last);
BDO foo(dst - d);
::memmove(boost::container::dtl::addressof(*foo), boost::container::dtl::addressof(*first), sizeof(value_type) * d);
return foo;
}
template <typename BDI, typename BDO>
inline
BDO move_backward_dispatch(BDI first, BDI last, BDO dst,
bcd::false_type const& /*use_memmove*/)
{
return boost::move_backward(first, last, dst); // may throw
}
template <typename BDI, typename BDO>
inline
BDO move_backward(BDI first, BDI last, BDO dst)
{
typedef bcd::bool_
< are_corresponding<BDI, BDO>::value &&
bcd::is_trivially_copy_constructible<typename ::boost::container::iterator_traits<BDO>::value_type>::value
> use_memmove;
return move_backward_dispatch(first, last, dst, use_memmove()); // may throw
}
template <typename T>
struct has_nothrow_move : public
bcd::bool_<
::boost::has_nothrow_move<
typename bcd::remove_const<T>::type
>::value
||
::boost::has_nothrow_move<T>::value
>
{};
// uninitialized_move_if_noexcept(I, I, O)
template <typename I, typename O>
inline
O uninitialized_move_if_noexcept_dispatch(I first, I last, O dst, bcd::true_type const& /*use_move*/)
{ return uninitialized_move(first, last, dst); }
template <typename I, typename O>
inline
O uninitialized_move_if_noexcept_dispatch(I first, I last, O dst, bcd::false_type const& /*use_move*/)
{ return uninitialized_copy(first, last, dst); }
template <typename I, typename O>
inline
O uninitialized_move_if_noexcept(I first, I last, O dst)
{
typedef has_nothrow_move<
typename ::boost::container::iterator_traits<O>::value_type
> use_move;
return uninitialized_move_if_noexcept_dispatch(first, last, dst, use_move()); // may throw
}
// move_if_noexcept(I, I, O)
template <typename I, typename O>
inline
O move_if_noexcept_dispatch(I first, I last, O dst, bcd::true_type const& /*use_move*/)
{ return move(first, last, dst); }
template <typename I, typename O>
inline
O move_if_noexcept_dispatch(I first, I last, O dst, bcd::false_type const& /*use_move*/)
{ return copy(first, last, dst); }
template <typename I, typename O>
inline
O move_if_noexcept(I first, I last, O dst)
{
typedef has_nothrow_move<
typename ::boost::container::iterator_traits<O>::value_type
> use_move;
return move_if_noexcept_dispatch(first, last, dst, use_move()); // may throw
}
// uninitialized_fill(I, I)
template <typename I>
inline
void uninitialized_fill_dispatch(I , I ,
bcd::true_type const& /*is_trivially_default_constructible*/,
bcd::true_type const& /*disable_trivial_init*/)
{}
template <typename I>
inline
void uninitialized_fill_dispatch(I first, I last,
bcd::true_type const& /*is_trivially_default_constructible*/,
bcd::false_type const& /*disable_trivial_init*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
for ( ; first != last ; ++first )
new (boost::container::dtl::addressof(*first)) value_type();
}
template <typename I, typename DisableTrivialInit>
inline
void uninitialized_fill_dispatch(I first, I last,
bcd::false_type const& /*is_trivially_default_constructible*/,
DisableTrivialInit const& /*not_used*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
I it = first;
BOOST_TRY
{
for ( ; it != last ; ++it )
new (boost::container::dtl::addressof(*it)) value_type(); // may throw
}
BOOST_CATCH(...)
{
destroy(first, it);
BOOST_RETHROW;
}
BOOST_CATCH_END
}
template <typename I, typename DisableTrivialInit>
inline
void uninitialized_fill(I first, I last, DisableTrivialInit const& disable_trivial_init)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
uninitialized_fill_dispatch(first, last
, bcd::bool_<bcd::is_trivially_default_constructible<value_type>::value>()
, disable_trivial_init); // may throw
}
// construct(I)
template <typename I>
inline
void construct_dispatch(bcd::true_type const& /*dont_init*/, I /*pos*/)
{}
template <typename I>
inline
void construct_dispatch(bcd::false_type const& /*dont_init*/, I pos)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
new (static_cast<void*>(::boost::container::dtl::addressof(*pos))) value_type(); // may throw
}
template <typename DisableTrivialInit, typename I>
inline
void construct(DisableTrivialInit const&, I pos)
{
typedef typename ::boost::container::iterator_traits<I>::value_type value_type;
bcd::bool_<
bcd::is_trivially_default_constructible<value_type>::value &&
DisableTrivialInit::value
> dont_init;
construct_dispatch(dont_init(), pos); // may throw
}
// construct(I, V)
template <typename I, typename V>
inline
void construct_dispatch(I pos, V const& v, bcd::true_type const& /*use_memcpy*/)
{
::memcpy(boost::container::dtl::addressof(*pos), boost::container::dtl::addressof(v), sizeof(V));
}
template <typename I, typename P>
inline
void construct_dispatch(I pos, P const& p,
bcd::false_type const& /*use_memcpy*/)
{
typedef typename ::boost::container::iterator_traits<I>::value_type V;
new (static_cast<void*>(boost::container::dtl::addressof(*pos))) V(p); // may throw
}
template <typename DisableTrivialInit, typename I, typename P>
inline
void construct(DisableTrivialInit const&, I pos, P const& p)
{
typedef bcd::bool_
< is_corresponding_value<I, P>::value &&
bcd::is_trivially_copy_constructible<P>::value
> use_memcpy;
construct_dispatch(pos, p, use_memcpy()); // may throw
}
// Needed by push_back(V &&)
template <typename DisableTrivialInit, typename I, typename P>
inline
void construct(DisableTrivialInit const&, I pos, BOOST_RV_REF(P) p)
{
typedef typename ::boost::container::iterator_traits<I>::value_type V;
new (static_cast<void*>(boost::container::dtl::addressof(*pos))) V(::boost::move(p)); // may throw
}
// Needed by emplace_back() and emplace()
#if !defined(BOOST_CONTAINER_VARRAY_DISABLE_EMPLACE)
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <typename DisableTrivialInit, typename I, class ...Args>
inline
void construct(DisableTrivialInit const&,
I pos,
BOOST_FWD_REF(Args) ...args)
{
typedef typename ::boost::container::iterator_traits<I>::value_type V;
new (static_cast<void*>(boost::container::dtl::addressof(*pos))) V(::boost::forward<Args>(args)...); // may throw
}
#else // !BOOST_NO_CXX11_VARIADIC_TEMPLATES
// BOOST_NO_CXX11_RVALUE_REFERENCES -> P0 const& p0
// !BOOST_NO_CXX11_RVALUE_REFERENCES -> P0 && p0
// which means that version with one parameter may take V const& v
#define BOOST_CONTAINER_VARRAY_UTIL_CONSTRUCT_CODE(N) \
template <typename DisableTrivialInit, typename I, typename P BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
inline void construct(DisableTrivialInit const&, I pos, BOOST_FWD_REF(P) p BOOST_MOVE_I##N BOOST_MOVE_UREF##N )\
{\
typedef typename ::boost::container::iterator_traits<I>::value_type V;\
new (static_cast<void*>(boost::container::dtl::addressof(*pos)))\
V(::boost::forward<P>(p) BOOST_MOVE_I##N BOOST_MOVE_FWD##N); /*may throw*/\
}
BOOST_MOVE_ITERATE_1TO9(BOOST_CONTAINER_VARRAY_UTIL_CONSTRUCT_CODE)
#undef BOOST_CONTAINER_VARRAY_UTIL_CONSTRUCT_CODE
#endif // !BOOST_NO_CXX11_VARIADIC_TEMPLATES
#endif // !BOOST_CONTAINER_VARRAY_DISABLE_EMPLACE
// assign(I, V)
template <typename I, typename V>
inline
void assign_dispatch(I pos, V const& v,
bcd::true_type const& /*use_memcpy*/)
{
::memcpy(boost::container::dtl::addressof(*pos), boost::container::dtl::addressof(v), sizeof(V));
}
template <typename I, typename V>
inline
void assign_dispatch(I pos, V const& v,
bcd::false_type const& /*use_memcpy*/)
{
*pos = v; // may throw
}
template <typename I, typename V>
inline
void assign(I pos, V const& v)
{
typedef bcd::bool_
< is_corresponding_value<I, V>::value &&
bcd::is_trivially_copy_assignable<V>::value
> use_memcpy;
assign_dispatch(pos, v, use_memcpy()); // may throw
}
template <typename I, typename V>
inline
void assign(I pos, BOOST_RV_REF(V) v)
{
*pos = boost::move(v); // may throw
}
// uninitialized_copy_s
template <typename I, typename F>
inline std::size_t uninitialized_copy_s(I first, I last, F dest, std::size_t max_count)
{
std::size_t count = 0;
F it = dest;
BOOST_TRY
{
for ( ; first != last ; ++it, ++first, ++count )
{
if ( max_count <= count )
return (std::numeric_limits<std::size_t>::max)();
// dummy 0 as DisableTrivialInit
construct(0, it, *first); // may throw
}
}
BOOST_CATCH(...)
{
destroy(dest, it);
BOOST_RETHROW;
}
BOOST_CATCH_END
return count;
}
// scoped_destructor
template<class T>
class scoped_destructor
{
public:
scoped_destructor(T * ptr) : m_ptr(ptr) {}
~scoped_destructor()
{
if(m_ptr)
destroy(m_ptr);
}
void release() { m_ptr = 0; }
private:
T * m_ptr;
};
}}} // namespace boost::container::varray_detail
#endif // BOOST_CONTAINER_DETAIL_VARRAY_UTIL_HPP

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,22 @@
# (C) Copyright Vladimir Prus, David Abrahams, Michael Stevens, Hartmut Kaiser,
# Ion Gaztanaga 2007-2008
# Use, modification and distribution are subject to the
# Boost Software License, Version 1.0. (See accompanying file
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
import sequence ;
project boost/container
: source-location ../src
: usage-requirements # pass these requirement to dependents (i.e. users)
<link>shared:<define>BOOST_CONTAINER_DYN_LINK=1
<link>static:<define>BOOST_CONTAINER_STATIC_LINK=1
;
lib boost_container
: alloc_lib.c [ sequence.insertion-sort [ glob *.cpp ] ]
: <link>shared:<define>BOOST_CONTAINER_DYN_LINK=1
<link>static:<define>BOOST_CONTAINER_STATIC_LINK=1
;
boost-install boost_container ;

View File

@@ -0,0 +1,121 @@
# Boost.Container library documentation Jamfile ---------------------------------
#
# Copyright Ion Gaztanaga 2009-2013. Use, modification and
# distribution is subject to the Boost Software License, Version
# 1.0. (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
#
# See http://www.boost.org for updates, documentation, and revision history.
import doxygen ;
import quickbook ;
using auto-index ;
path-constant images_location : ../ ;
path-constant here : . ;
doxygen autodoc
:
[ glob ../../../boost/container/*.hpp ]
[ glob ../../../boost/container/pmr/*.hpp ]
:
<doxygen:param>EXTRACT_ALL=NO
<doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>EXTRACT_PRIVATE=NO
<doxygen:param>ENABLE_PREPROCESSING=YES
<doxygen:param>EXPAND_ONLY_PREDEF=YES
<doxygen:param>MACRO_EXPANSION=YES
<doxygen:param>"PREDEFINED=\"insert_const_ref_type= const T&\" \\
\"BOOST_CONSTEXPR_OR_CONST=constexpr\" \\
\"BOOST_CONTAINER_DOXYGEN_INVOKED\" \\
\"BOOST_CONTAINER_IMPDEF(T)=implementation_defined\" \\
\"BOOST_CONTAINER_SEEDOC(T)=see_documentation\" \\
\"BOOST_NOEXCEPT_OR_NOTHROW=noexcept\" \\
\"BOOST_NOEXCEPT_IF(T)=noexcept(T)\" \\
\"BOOST_NOEXCEPT=noexcept\" \\
\"BOOST_RV_REF(T)=T&&\" \\
\"BOOST_RV_REF_BEG=\" \\
\"BOOST_RV_REF_END=&&\" \\
\"BOOST_RV_REF_BEG_IF_CXX11=\" \\
\"BOOST_RV_REF_END_IF_CXX11=&&\" \\
\"BOOST_COPY_ASSIGN_REF(T)=const T &\" \\
\"BOOST_FWD_REF(a)=a &&\" \\
\"BOOST_CONTAINER_ATTRIBUTE_NODISCARD=[[nodiscard]] \" \\
\"BOOST_NORETURN=[[noreturn]] \" \\
\"BOOST_INTRUSIVE_OPTION_CONSTANT(OPTION_NAME, TYPE, VALUE, CONSTANT_NAME) = template<TYPE VALUE> struct OPTION_NAME{};\" \\
\"BOOST_INTRUSIVE_OPTION_TYPE(OPTION_NAME, TYPE, TYPEDEF_EXPR, TYPEDEF_NAME) = template<class TYPE> struct OPTION_NAME{};\" \\
\"BOOST_CONTAINER_DOC1ST(T1, T2)=T1\" \\
\"BOOST_CONTAINER_DOCIGN(T) \"\\
\"BOOST_CONTAINER_DOCONLY(T)=T\"\\
\"BOOST_CONTAINER_SCOPEDALLOC_DUMMYTRUE=\"\\
\"BOOST_CONTAINER_SCOPEDALLOC_ALLINNER=InnerAllocs...\"\\
\"BOOST_CONTAINER_DECL=\"\\
\"BOOST_CONTAINER_FORCEINLINE=inline\" \\
"
<xsl:param>"boost.doxygen.reftitle=Boost.Container Header Reference"
;
xml container : container.qbk
:
<include>../../../tools/auto_index/include
;
boostbook standalone
:
container
:
<format>html:<xsl:param>boost.root=../../../..
<format>html:<xsl:param>boost.libraries=../../../../libs/libraries.htm
<format>html:<xsl:param>img.src.path=../../../../doc/html/
<format>xhtml:<xsl:param>img.src.path=../../../../doc/html/
<xsl:param>generate.section.toc.level=3
<xsl:param>chunk.first.sections=1
<format>pdf:<xsl:param>img.src.path=$(images_location)/
<dependency>autodoc
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/doc/html
# Build requirements go here:
# <auto-index>on (or off) one turns on (or off) indexing:
<auto-index>on
# Turns on (or off) auto-index-verbose for diagnostic info.
# This is highly recommended until you have got all the many details correct!
<auto-index-verbose>on
# Choose the indexing method (separately for html and PDF) - see manual.
# Choose indexing method for PDFs:
<format>pdf:<auto-index-internal>off
# Choose indexing method for html:
<format>html:<auto-index-internal>on
<format>docbook:<auto-index-internal>on
# Set the name of the script file to use (index.idx is popular):
<auto-index-script>$(here)/index.idx
# Commands in the script file should all use RELATIVE PATHS
# otherwise the script will not be portable to other machines.
# Relative paths are normally taken as relative to the location
# of the script file, but we can add a prefix to all
# those relative paths using the <auto-index-prefix> feature.
# The path specified by <auto-index-prefix> may be either relative or
# absolute, for example the following will get us up to the boost root
# directory for most Boost libraries:
<auto-index-prefix>"$(here)/../../.."
<format>pdf:<xsl:param>admon.graphics.extension=".svg"
;
install pdfinstall : standalone/<format>pdf : <install-type>PDF <location>. <name>container.pdf ;
explicit pdfinstall ;
###############################################################################
alias boostdoc
: standalone/<format>docbook
:
:
: ;
explicit boostdoc ;
alias boostrelease ;
explicit boostrelease ;

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@@ -0,0 +1 @@
!scan-path "boost/container" ".*.hpp" false

View File

@@ -0,0 +1,34 @@
# Boost Container Library Example Jamfile
# (C) Copyright Ion Gaztanaga 2009
# Use, modification and distribution are subject to the
# Boost Software License, Version 1.0. (See accompanying file
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
# Adapted from John Maddock's TR1 Jamfile.v2
# Copyright John Maddock 2005.
# Use, modification and distribution are subject to the
# Boost Software License, Version 1.0. (See accompanying file
# LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
# this rule enumerates through all the sources and invokes
# the run rule for each source, the result is a list of all
# the run rules, which we can pass on to the test_suite rule:
rule test_all
{
local all_rules = ;
for local fileb in [ glob doc_*.cpp ]
{
all_rules += [ run $(fileb) /boost/container//boost_container
: # additional args
: # test-files
: # requirements
] ;
}
return $(all_rules) ;
}
test-suite container_example : [ test_all r ] : <threading>multi ;

View File

@@ -0,0 +1,41 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_custom_deque
#include <boost/container/deque.hpp>
#include <boost/static_assert.hpp>
//Make sure assertions are active
#ifdef NDEBUG
#undef NDEBUG
#endif
#include <cassert>
int main ()
{
using namespace boost::container;
//This option specifies the desired block size for deque
typedef deque_options< block_size<128u> >::type block_128_option_t;
//This deque will allocate blocks of 128 elements
typedef deque<int, void, block_128_option_t > block_128_deque_t;
assert(block_128_deque_t::get_block_size() == 128u);
//This option specifies the maximum block size for deque
//in bytes
typedef deque_options< block_bytes<1024u> >::type block_1024_bytes_option_t;
//This deque will allocate blocks of 1024 bytes
typedef deque<int, void, block_1024_bytes_option_t > block_1024_bytes_deque_t;
assert(block_1024_bytes_deque_t::get_block_size() == 1024u/sizeof(int));
return 0;
}
//]

View File

@@ -0,0 +1,47 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_custom_small_vector
#include <boost/container/small_vector.hpp>
#include <boost/static_assert.hpp>
//Make sure assertions are active
#ifdef NDEBUG
#undef NDEBUG
#endif
#include <cassert>
int main ()
{
using namespace boost::container;
//This option specifies the desired alignment for the internal value_type
typedef small_vector_options< inplace_alignment<16u> >::type alignment_16_option_t;
//Check 16 byte alignment option
small_vector<int, 10, void, alignment_16_option_t > sv;
assert(((std::size_t)sv.data() % 16u) == 0);
//This option specifies that a vector will increase its capacity 50%
//each time the previous capacity was exhausted.
typedef small_vector_options< growth_factor<growth_factor_50> >::type growth_50_option_t;
//Fill the vector until full capacity is reached
small_vector<int, 10, void, growth_50_option_t > growth_50_vector(10, 0);
const std::size_t old_cap = growth_50_vector.capacity();
growth_50_vector.resize(old_cap);
//Now insert an additional item and check the new buffer is 50% bigger
growth_50_vector.push_back(1);
assert(growth_50_vector.capacity() == old_cap*3/2);
return 0;
}
//]

View File

@@ -0,0 +1,39 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_custom_static_vector
#include <boost/container/static_vector.hpp>
#include <boost/static_assert.hpp>
//Make sure assertions are active
#ifdef NDEBUG
#undef NDEBUG
#endif
#include <cassert>
int main ()
{
using namespace boost::container;
//This option specifies the desired alignment for value_type
typedef static_vector_options< inplace_alignment<16u> >::type alignment_16_option_t;
//Check 16 byte alignment option
static_vector<int, 10, alignment_16_option_t > sv;
assert(((std::size_t)sv.data() % 16u) == 0);
//This static_vector won't throw on overflow, for maximum performance
typedef static_vector_options< throw_on_overflow<false> >::type no_throw_options_t;
//Create static_vector with no throw on overflow
static_vector<int, 10, no_throw_options_t > sv2;
return 0;
}
//]

View File

@@ -0,0 +1,66 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_custom_tree
#include <boost/container/set.hpp>
//Make sure assertions are active
#ifdef NDEBUG
#undef NDEBUG
#endif
#include <cassert>
int main ()
{
using namespace boost::container;
//First define several options
//
//This option specifies an AVL tree based associative container
typedef tree_assoc_options< tree_type<avl_tree> >::type AVLTree;
//This option specifies an AVL tree based associative container
//disabling node size optimization.
typedef tree_assoc_options< tree_type<avl_tree>
, optimize_size<false> >::type AVLTreeNoSizeOpt;
//This option specifies an Splay tree based associative container
typedef tree_assoc_options< tree_type<splay_tree> >::type SplayTree;
//Now define new tree-based associative containers
//
//AVLTree based set container
typedef set<int, std::less<int>, new_allocator<int>, AVLTree> AvlSet;
//AVLTree based set container without size optimization
typedef set<int, std::less<int>, new_allocator<int>, AVLTreeNoSizeOpt> AvlSetNoSizeOpt;
//Splay tree based multiset container
typedef multiset<int, std::less<int>, new_allocator<int>, SplayTree> SplayMultiset;
//Use them
//
AvlSet avl_set;
avl_set.insert(0);
assert(avl_set.find(0) != avl_set.end());
AvlSetNoSizeOpt avl_set_no_szopt;
avl_set_no_szopt.insert(1);
avl_set_no_szopt.insert(1);
assert(avl_set_no_szopt.count(1) == 1);
SplayMultiset splay_mset;
splay_mset.insert(2);
splay_mset.insert(2);
assert(splay_mset.count(2) == 2);
return 0;
}
//]

View File

@@ -0,0 +1,64 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#include <boost/core/no_exceptions_support.hpp>
//[doc_custom_vector
#include <boost/container/vector.hpp>
#include <boost/static_assert.hpp>
#include <boost/core/no_exceptions_support.hpp>
//Make sure assertions are active
#ifdef NDEBUG
#undef NDEBUG
#endif
#include <cassert>
int main ()
{
using namespace boost::container;
//This option specifies that a vector that will use "unsigned char" as
//the type to store capacity or size internally.
typedef vector_options< stored_size<unsigned char> >::type size_option_t;
//Size-optimized vector is smaller than the default one.
typedef vector<int, new_allocator<int>, size_option_t > size_optimized_vector_t;
BOOST_STATIC_ASSERT(( sizeof(size_optimized_vector_t) < sizeof(vector<int>) ));
//Requesting capacity for more elements than representable by "unsigned char"
//is an error in the size optimized vector.
bool exception_thrown = false;
/*<-*/
#ifndef BOOST_NO_EXCEPTIONS
BOOST_TRY{ size_optimized_vector_t v(256); } BOOST_CATCH(...){ exception_thrown = true; } BOOST_CATCH_END
#else
exception_thrown = true;
#endif //BOOST_NO_EXCEPTIONS
/*->*/
//=try { size_optimized_vector_t v(256); }
//=catch(...){ exception_thrown = true; }
assert(exception_thrown == true);
//This option specifies that a vector will increase its capacity 50%
//each time the previous capacity was exhausted.
typedef vector_options< growth_factor<growth_factor_50> >::type growth_50_option_t;
//Fill the vector until full capacity is reached
vector<int, new_allocator<int>, growth_50_option_t > growth_50_vector(5, 0);
const std::size_t old_cap = growth_50_vector.capacity();
growth_50_vector.resize(old_cap);
//Now insert an additional item and check the new buffer is 50% bigger
growth_50_vector.push_back(1);
assert(growth_50_vector.capacity() == old_cap*3/2);
return 0;
}
//]

View File

@@ -0,0 +1,42 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2009-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_emplace
#include <boost/container/list.hpp>
#include <cassert>
//Non-copyable and non-movable class
class non_copy_movable
{
non_copy_movable(const non_copy_movable &);
non_copy_movable& operator=(const non_copy_movable &);
public:
non_copy_movable(int = 0) {}
};
int main ()
{
using namespace boost::container;
//Store non-copyable and non-movable objects in a list
list<non_copy_movable> l;
non_copy_movable ncm;
//A new element will be built calling non_copy_movable(int) constructor
l.emplace(l.begin(), 0);
assert(l.size() == 1);
//A new element will be value initialized
l.emplace(l.begin());
assert(l.size() == 2);
return 0;
}
//]

View File

@@ -0,0 +1,52 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2013-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_extended_allocators
#include <boost/container/vector.hpp>
#include <boost/container/flat_set.hpp>
#include <boost/container/list.hpp>
#include <boost/container/set.hpp>
//"allocator" is a general purpose allocator that can reallocate
//memory, something useful for vector and flat associative containers
#include <boost/container/allocator.hpp>
//"adaptive_pool" is a node allocator, specially suited for
//node-based containers
#include <boost/container/adaptive_pool.hpp>
int main ()
{
using namespace boost::container;
//A vector that can reallocate memory to implement faster insertions
vector<int, allocator<int> > extended_alloc_vector;
//A flat set that can reallocate memory to implement faster insertions
flat_set<int, std::less<int>, allocator<int> > extended_alloc_flat_set;
//A list that can manages nodes to implement faster
//range insertions and deletions
list<int, adaptive_pool<int> > extended_alloc_list;
//A set that can recycle nodes to implement faster
//range insertions and deletions
set<int, std::less<int>, adaptive_pool<int> > extended_alloc_set;
//Now user them as always
extended_alloc_vector.push_back(0);
extended_alloc_flat_set.insert(0);
extended_alloc_list.push_back(0);
extended_alloc_set.insert(0);
//...
return 0;
}
//]

View File

@@ -0,0 +1,52 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2009-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_move_containers
#include <boost/container/vector.hpp>
#include <boost/move/utility_core.hpp>
#include <cassert>
//Non-copyable class
class non_copyable
{
BOOST_MOVABLE_BUT_NOT_COPYABLE(non_copyable)
public:
non_copyable(){}
non_copyable(BOOST_RV_REF(non_copyable)) {}
non_copyable& operator=(BOOST_RV_REF(non_copyable)) { return *this; }
};
int main ()
{
using namespace boost::container;
//Store non-copyable objects in a vector
vector<non_copyable> v;
non_copyable nc;
v.push_back(boost::move(nc));
assert(v.size() == 1);
//Reserve no longer needs copy-constructible
v.reserve(100);
assert(v.capacity() >= 100);
//This resize overload only needs movable and default constructible
v.resize(200);
assert(v.size() == 200);
//Containers are also movable
vector<non_copyable> v_other(boost::move(v));
assert(v_other.size() == 200);
assert(v.empty());
return 0;
}
//]

View File

@@ -0,0 +1,98 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_pmr_ShoppingList_hpp
//ShoppingList.hpp
#include <boost/container/pmr/vector.hpp>
#include <boost/container/pmr/string.hpp>
class ShoppingList
{
// A vector of strings using polymorphic allocators. Every element
// of the vector will use the same allocator as the vector itself.
boost::container::pmr::vector_of
<boost::container::pmr::string>::type m_strvec;
//Alternatively in compilers that support template aliases:
// boost::container::pmr::vector<boost::container::pmr::string> m_strvec;
public:
// This makes uses_allocator<ShoppingList, memory_resource*>::value true
typedef boost::container::pmr::memory_resource* allocator_type;
// If the allocator is not specified, "m_strvec" uses pmr::get_default_resource().
explicit ShoppingList(allocator_type alloc = 0)
: m_strvec(alloc) {}
// Copy constructor. As allocator is not specified,
// "m_strvec" uses pmr::get_default_resource().
ShoppingList(const ShoppingList& other)
: m_strvec(other.m_strvec) {}
// Copy construct using the given memory_resource.
ShoppingList(const ShoppingList& other, allocator_type a)
: m_strvec(other.m_strvec, a) {}
allocator_type get_allocator() const
{ return m_strvec.get_allocator().resource(); }
void add_item(const char *item)
{ m_strvec.emplace_back(item); }
//...
};
//]]
//[doc_pmr_main_cpp
//=#include "ShoppingList.hpp"
#include <cassert>
#include <boost/container/pmr/list.hpp>
#include <boost/container/pmr/monotonic_buffer_resource.hpp>
void processShoppingList(const ShoppingList&)
{ /**/ }
int main()
{
using namespace boost::container;
//All memory needed by folder and its contained objects will
//be allocated from the default memory resource (usually new/delete)
pmr::list_of<ShoppingList>::type folder; // Default allocator resource
//Alternatively in compilers that support template aliases:
// boost::container::pmr::list<ShoppingList> folder;
{
char buffer[1024];
pmr::monotonic_buffer_resource buf_rsrc(&buffer, 1024);
//All memory needed by temporaryShoppingList will be allocated
//from the local buffer (speeds up "processShoppingList")
ShoppingList temporaryShoppingList(&buf_rsrc);
assert(&buf_rsrc == temporaryShoppingList.get_allocator());
//list nodes, and strings "salt" and "pepper" will be allocated
//in the stack thanks to "monotonic_buffer_resource".
temporaryShoppingList.add_item("salt");
temporaryShoppingList.add_item("pepper");
//...
//All modifications and additions to "temporaryShoppingList"
//will use memory from "buffer" until it's exhausted.
processShoppingList(temporaryShoppingList);
//Processing done, now insert it in "folder",
//which uses the default memory resource
folder.push_back(temporaryShoppingList);
assert(pmr::get_default_resource() == folder.back().get_allocator());
//temporaryShoppingList, buf_rsrc, and buffer go out of scope
}
return 0;
}
//]

View File

@@ -0,0 +1,71 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2009-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_recursive_containers
#include <boost/container/vector.hpp>
#include <boost/container/stable_vector.hpp>
#include <boost/container/deque.hpp>
#include <boost/container/list.hpp>
#include <boost/container/map.hpp>
#include <boost/container/string.hpp>
using namespace boost::container;
struct data
{
int i_;
//A vector holding still undefined class 'data'
vector<data> v_;
vector<data>::iterator vi_;
//A stable_vector holding still undefined class 'data'
stable_vector<data> sv_;
stable_vector<data>::iterator svi_;
//A stable_vector holding still undefined class 'data'
deque<data> d_;
deque<data>::iterator di_;
//A list holding still undefined 'data'
list<data> l_;
list<data>::iterator li_;
//A map holding still undefined 'data'
map<data, data> m_;
map<data, data>::iterator mi_;
friend bool operator <(const data &l, const data &r)
{ return l.i_ < r.i_; }
};
struct tree_node
{
string name;
string value;
//children nodes of this node
list<tree_node> children_;
list<tree_node>::iterator selected_child_;
};
int main()
{
//a container holding a recursive data type
stable_vector<data> sv;
sv.resize(100);
//Let's build a tree based in
//a recursive data type
tree_node root;
root.name = "root";
root.value = "root_value";
root.children_.resize(7);
root.selected_child_ = root.children_.begin();
return 0;
}
//]

View File

@@ -0,0 +1,88 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2009-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
//[doc_type_erasure_MyClassHolder_h
#include <boost/container/vector.hpp>
//MyClassHolder.h
//We don't need to include "MyClass.h"
//to store vector<MyClass>
class MyClass;
class MyClassHolder
{
public:
void AddNewObject(const MyClass &o);
const MyClass & GetLastObject() const;
private:
::boost::container::vector<MyClass> vector_;
};
//]
//[doc_type_erasure_MyClass_h
//MyClass.h
class MyClass
{
private:
int value_;
public:
MyClass(int val = 0) : value_(val){}
friend bool operator==(const MyClass &l, const MyClass &r)
{ return l.value_ == r.value_; }
//...
};
//]
//[doc_type_erasure_main_cpp
//Main.cpp
//=#include "MyClassHolder.h"
//=#include "MyClass.h"
#include <cassert>
int main()
{
MyClass mc(7);
MyClassHolder myclassholder;
myclassholder.AddNewObject(mc);
return myclassholder.GetLastObject() == mc ? 0 : 1;
}
//]
//[doc_type_erasure_MyClassHolder_cpp
//MyClassHolder.cpp
//=#include "MyClassHolder.h"
//In the implementation MyClass must be a complete
//type so we include the appropriate header
//=#include "MyClass.h"
void MyClassHolder::AddNewObject(const MyClass &o)
{ vector_.push_back(o); }
const MyClass & MyClassHolder::GetLastObject() const
{ return vector_.back(); }
//]

View File

@@ -0,0 +1,623 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_ADAPTIVE_POOL_HPP
#define BOOST_CONTAINER_ADAPTIVE_POOL_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/container_fwd.hpp>
#include <boost/container/detail/version_type.hpp>
#include <boost/container/throw_exception.hpp>
#include <boost/container/detail/adaptive_node_pool.hpp>
#include <boost/container/detail/multiallocation_chain.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/dlmalloc.hpp>
#include <boost/container/detail/singleton.hpp>
#include <boost/container/detail/placement_new.hpp>
#include <boost/move/detail/force_ptr.hpp>
#include <boost/assert.hpp>
#include <boost/static_assert.hpp>
#include <boost/move/utility_core.hpp>
#include <cstddef>
namespace boost {
namespace container {
//!An STL node allocator that uses a modified DLMalloc as memory
//!source.
//!
//!This node allocator shares a segregated storage between all instances
//!of adaptive_pool with equal sizeof(T).
//!
//!NodesPerBlock is the number of nodes allocated at once when the allocator
//!needs runs out of nodes. MaxFreeBlocks is the maximum number of totally free blocks
//!that the adaptive node pool will hold. The rest of the totally free blocks will be
//!deallocated to the memory manager.
//!
//!OverheadPercent is the (approximated) maximum size overhead (1-20%) of the allocator:
//!(memory usable for nodes / total memory allocated from the memory allocator)
template < class T
, std::size_t NodesPerBlock BOOST_CONTAINER_DOCONLY(= ADP_nodes_per_block)
, std::size_t MaxFreeBlocks BOOST_CONTAINER_DOCONLY(= ADP_max_free_blocks)
, std::size_t OverheadPercent BOOST_CONTAINER_DOCONLY(= ADP_overhead_percent)
BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I unsigned Version)
>
class adaptive_pool
{
//!If Version is 1, the allocator is a STL conforming allocator. If Version is 2,
//!the allocator offers advanced expand in place and burst allocation capabilities.
public:
typedef unsigned int allocation_type;
typedef adaptive_pool
<T, NodesPerBlock, MaxFreeBlocks, OverheadPercent
BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)
> self_t;
static const std::size_t nodes_per_block = NodesPerBlock;
static const std::size_t max_free_blocks = MaxFreeBlocks;
static const std::size_t overhead_percent = OverheadPercent;
static const std::size_t real_nodes_per_block = NodesPerBlock;
BOOST_CONTAINER_DOCIGN(BOOST_STATIC_ASSERT((Version <=2)));
public:
//-------
typedef T value_type;
typedef T * pointer;
typedef const T * const_pointer;
typedef typename ::boost::container::
dtl::unvoid_ref<T>::type reference;
typedef typename ::boost::container::
dtl::unvoid_ref<const T>::type const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef boost::container::dtl::
version_type<self_t, Version> version;
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef boost::container::dtl::
basic_multiallocation_chain<void*> multiallocation_chain_void;
typedef boost::container::dtl::
transform_multiallocation_chain
<multiallocation_chain_void, T> multiallocation_chain;
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//!Obtains adaptive_pool from
//!adaptive_pool
template<class T2>
struct rebind
{
typedef adaptive_pool
< T2
, NodesPerBlock
, MaxFreeBlocks
, OverheadPercent
BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)
> other;
};
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
//!Not assignable from related adaptive_pool
template<class T2, std::size_t N2, std::size_t F2, std::size_t O2, unsigned Version2>
adaptive_pool& operator=
(const adaptive_pool<T2, N2, F2, O2, Version2>&);
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//!Default constructor
adaptive_pool() BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Copy constructor from other adaptive_pool.
adaptive_pool(const adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Copy assignment from other adaptive_pool.
adaptive_pool & operator=(const adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{ return *this; }
//!Copy constructor from related adaptive_pool.
template<class T2>
adaptive_pool
(const adaptive_pool<T2, NodesPerBlock, MaxFreeBlocks, OverheadPercent
BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)> &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Destructor
~adaptive_pool() BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Returns the number of elements that could be allocated.
//!Never throws
size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
{ return size_type(-1)/(2u*sizeof(T)); }
//!Allocate memory for an array of count elements.
//!Throws bad_alloc if there is no enough memory
pointer allocate(size_type count, const void * = 0)
{
if(BOOST_UNLIKELY(count > size_type(-1)/(2u*sizeof(T))))
boost::container::throw_bad_alloc();
if(Version == 1 && count == 1){
typedef typename dtl::shared_adaptive_node_pool
<sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
typedef dtl::singleton_default<shared_pool_t> singleton_t;
return pointer(static_cast<T*>(singleton_t::instance().allocate_node()));
}
else{
return static_cast<pointer>(dlmalloc_malloc(count*sizeof(T)));
}
}
//!Deallocate allocated memory.
//!Never throws
void deallocate(const pointer &ptr, size_type count) BOOST_NOEXCEPT_OR_NOTHROW
{
(void)count;
if(Version == 1 && count == 1){
typedef dtl::shared_adaptive_node_pool
<sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
typedef dtl::singleton_default<shared_pool_t> singleton_t;
singleton_t::instance().deallocate_node(ptr);
}
else{
dlmalloc_free(ptr);
}
}
pointer allocation_command(allocation_type command,
size_type limit_size,
size_type &prefer_in_recvd_out_size,
pointer &reuse)
{
pointer ret = this->priv_allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse);
if(BOOST_UNLIKELY(!ret && !(command & BOOST_CONTAINER_NOTHROW_ALLOCATION)))
boost::container::throw_bad_alloc();
return ret;
}
//!Returns maximum the number of objects the previously allocated memory
//!pointed by p can hold.
size_type size(pointer p) const BOOST_NOEXCEPT_OR_NOTHROW
{ return dlmalloc_size(p); }
//!Allocates just one object. Memory allocated with this function
//!must be deallocated only with deallocate_one().
//!Throws bad_alloc if there is no enough memory
pointer allocate_one()
{
typedef dtl::shared_adaptive_node_pool
<sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
typedef dtl::singleton_default<shared_pool_t> singleton_t;
return (pointer)singleton_t::instance().allocate_node();
}
//!Allocates many elements of size == 1.
//!Elements must be individually deallocated with deallocate_one()
void allocate_individual(std::size_t num_elements, multiallocation_chain &chain)
{
typedef dtl::shared_adaptive_node_pool
<sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
typedef dtl::singleton_default<shared_pool_t> singleton_t;
singleton_t::instance().allocate_nodes(num_elements, static_cast<typename shared_pool_t::multiallocation_chain&>(chain));
//typename shared_pool_t::multiallocation_chain ch;
//singleton_t::instance().allocate_nodes(num_elements, ch);
//chain.incorporate_after
//(chain.before_begin(), (T*)&*ch.begin(), (T*)&*ch.last(), ch.size());
}
//!Deallocates memory previously allocated with allocate_one().
//!You should never use deallocate_one to deallocate memory allocated
//!with other functions different from allocate_one(). Never throws
void deallocate_one(pointer p) BOOST_NOEXCEPT_OR_NOTHROW
{
typedef dtl::shared_adaptive_node_pool
<sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
typedef dtl::singleton_default<shared_pool_t> singleton_t;
singleton_t::instance().deallocate_node(p);
}
void deallocate_individual(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW
{
typedef dtl::shared_adaptive_node_pool
<sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
typedef dtl::singleton_default<shared_pool_t> singleton_t;
//typename shared_pool_t::multiallocation_chain ch(&*chain.begin(), &*chain.last(), chain.size());
//singleton_t::instance().deallocate_nodes(ch);
singleton_t::instance().deallocate_nodes(chain);
}
//!Allocates many elements of size elem_size.
//!Elements must be individually deallocated with deallocate()
void allocate_many(size_type elem_size, std::size_t n_elements, multiallocation_chain &chain)
{
BOOST_STATIC_ASSERT(( Version > 1 ));/*
dlmalloc_memchain ch;
BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
if(BOOST_UNLIKELY(!dlmalloc_multialloc_nodes(n_elements, elem_size*sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch))){
boost::container::throw_bad_alloc();
}
chain.incorporate_after(chain.before_begin()
,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch)
,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );*/
if(BOOST_UNLIKELY(!dlmalloc_multialloc_nodes
( n_elements, elem_size*sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS
, move_detail::force_ptr<dlmalloc_memchain *>(&chain)))){
boost::container::throw_bad_alloc();
}
}
//!Allocates n_elements elements, each one of size elem_sizes[i]
//!Elements must be individually deallocated with deallocate()
void allocate_many(const size_type *elem_sizes, size_type n_elements, multiallocation_chain &chain)
{
BOOST_STATIC_ASSERT(( Version > 1 ));/*
dlmalloc_memchain ch;
BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
if(BOOST_UNLIKELY(!dlmalloc_multialloc_arrays(n_elements, elem_sizes, sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch))){
boost::container::throw_bad_alloc();
}
chain.incorporate_after(chain.before_begin()
,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch)
,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );*/
if(BOOST_UNLIKELY(!dlmalloc_multialloc_arrays
( n_elements, elem_sizes, sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS
, move_detail::force_ptr<dlmalloc_memchain *>(&chain)))){
boost::container::throw_bad_alloc();
}
}
void deallocate_many(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW
{/*
dlmalloc_memchain ch;
void *beg(&*chain.begin()), *last(&*chain.last());
size_t size(chain.size());
BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&ch, beg, last, size);
dlmalloc_multidealloc(&ch);*/
dlmalloc_multidealloc(move_detail::force_ptr<dlmalloc_memchain *>(&chain));
}
//!Deallocates all free blocks of the pool
static void deallocate_free_blocks() BOOST_NOEXCEPT_OR_NOTHROW
{
typedef dtl::shared_adaptive_node_pool
<sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> shared_pool_t;
typedef dtl::singleton_default<shared_pool_t> singleton_t;
singleton_t::instance().deallocate_free_blocks();
}
//!Swaps allocators. Does not throw. If each allocator is placed in a
//!different memory segment, the result is undefined.
friend void swap(adaptive_pool &, adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!An allocator always compares to true, as memory allocated with one
//!instance can be deallocated by another instance
friend bool operator==(const adaptive_pool &, const adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{ return true; }
//!An allocator always compares to false, as memory allocated with one
//!instance can be deallocated by another instance
friend bool operator!=(const adaptive_pool &, const adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{ return false; }
private:
pointer priv_allocation_command
(allocation_type command, std::size_t limit_size
,size_type &prefer_in_recvd_out_size, pointer &reuse_ptr)
{
std::size_t const preferred_size = prefer_in_recvd_out_size;
dlmalloc_command_ret_t ret = {0 , 0};
if(BOOST_UNLIKELY(limit_size > this->max_size() || preferred_size > this->max_size())){
return pointer();
}
std::size_t l_size = limit_size*sizeof(T);
std::size_t p_size = preferred_size*sizeof(T);
std::size_t r_size;
{
void* reuse_ptr_void = reuse_ptr;
ret = dlmalloc_allocation_command(command, sizeof(T), l_size, p_size, &r_size, reuse_ptr_void);
reuse_ptr = ret.second ? static_cast<T*>(reuse_ptr_void) : 0;
}
prefer_in_recvd_out_size = r_size/sizeof(T);
return (pointer)ret.first;
}
};
template < class T
, std::size_t NodesPerBlock = ADP_nodes_per_block
, std::size_t MaxFreeBlocks = ADP_max_free_blocks
, std::size_t OverheadPercent = ADP_overhead_percent
, unsigned Version = 2
>
class private_adaptive_pool
{
//!If Version is 1, the allocator is a STL conforming allocator. If Version is 2,
//!the allocator offers advanced expand in place and burst allocation capabilities.
public:
typedef unsigned int allocation_type;
typedef private_adaptive_pool
<T, NodesPerBlock, MaxFreeBlocks, OverheadPercent
BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)
> self_t;
static const std::size_t nodes_per_block = NodesPerBlock;
static const std::size_t max_free_blocks = MaxFreeBlocks;
static const std::size_t overhead_percent = OverheadPercent;
static const std::size_t real_nodes_per_block = NodesPerBlock;
BOOST_CONTAINER_DOCIGN(BOOST_STATIC_ASSERT((Version <=2)));
typedef dtl::private_adaptive_node_pool
<sizeof(T), NodesPerBlock, MaxFreeBlocks, OverheadPercent> pool_t;
pool_t m_pool;
public:
//-------
typedef T value_type;
typedef T * pointer;
typedef const T * const_pointer;
typedef typename ::boost::container::
dtl::unvoid_ref<T>::type reference;
typedef typename ::boost::container::
dtl::unvoid_ref<const T>::type const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef boost::container::dtl::
version_type<self_t, Version> version;
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef boost::container::dtl::
basic_multiallocation_chain<void*> multiallocation_chain_void;
typedef boost::container::dtl::
transform_multiallocation_chain
<multiallocation_chain_void, T> multiallocation_chain;
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//!Obtains private_adaptive_pool from
//!private_adaptive_pool
template<class T2>
struct rebind
{
typedef private_adaptive_pool
< T2
, NodesPerBlock
, MaxFreeBlocks
, OverheadPercent
BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)
> other;
};
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
//!Not assignable from related private_adaptive_pool
template<class T2, std::size_t N2, std::size_t F2, std::size_t O2, unsigned Version2>
private_adaptive_pool& operator=
(const private_adaptive_pool<T2, N2, F2, O2, Version2>&);
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
//!Default constructor
private_adaptive_pool() BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Copy constructor from other private_adaptive_pool.
private_adaptive_pool(const private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Copy assignment from other adaptive_pool.
private_adaptive_pool & operator=(const private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{ return *this; }
//!Copy constructor from related private_adaptive_pool.
template<class T2>
private_adaptive_pool
(const private_adaptive_pool<T2, NodesPerBlock, MaxFreeBlocks, OverheadPercent
BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version)> &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Destructor
~private_adaptive_pool() BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Returns the number of elements that could be allocated.
//!Never throws
size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
{ return size_type(-1)/(2u*sizeof(T)); }
//!Allocate memory for an array of count elements.
//!Throws bad_alloc if there is no enough memory
pointer allocate(size_type count, const void * = 0)
{
if(BOOST_UNLIKELY(count > size_type(-1)/(2u*sizeof(T))))
boost::container::throw_bad_alloc();
if(Version == 1 && count == 1){
return pointer(static_cast<T*>(m_pool.allocate_node()));
}
else{
return static_cast<pointer>(dlmalloc_malloc(count*sizeof(T)));
}
}
//!Deallocate allocated memory.
//!Never throws
void deallocate(const pointer &ptr, size_type count) BOOST_NOEXCEPT_OR_NOTHROW
{
(void)count;
if(Version == 1 && count == 1){
m_pool.deallocate_node(ptr);
}
else{
dlmalloc_free(ptr);
}
}
pointer allocation_command(allocation_type command,
size_type limit_size,
size_type &prefer_in_recvd_out_size,
pointer &reuse)
{
pointer ret = this->priv_allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse);
if(BOOST_UNLIKELY(!ret && !(command & BOOST_CONTAINER_NOTHROW_ALLOCATION)))
boost::container::throw_bad_alloc();
return ret;
}
//!Returns maximum the number of objects the previously allocated memory
//!pointed by p can hold.
size_type size(pointer p) const BOOST_NOEXCEPT_OR_NOTHROW
{ return dlmalloc_size(p); }
//!Allocates just one object. Memory allocated with this function
//!must be deallocated only with deallocate_one().
//!Throws bad_alloc if there is no enough memory
pointer allocate_one()
{
return (pointer)m_pool.allocate_node();
}
//!Allocates many elements of size == 1.
//!Elements must be individually deallocated with deallocate_one()
void allocate_individual(std::size_t num_elements, multiallocation_chain &chain)
{
m_pool.allocate_nodes(num_elements, static_cast<typename pool_t::multiallocation_chain&>(chain));
}
//!Deallocates memory previously allocated with allocate_one().
//!You should never use deallocate_one to deallocate memory allocated
//!with other functions different from allocate_one(). Never throws
void deallocate_one(pointer p) BOOST_NOEXCEPT_OR_NOTHROW
{
m_pool.deallocate_node(p);
}
void deallocate_individual(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW
{
m_pool.deallocate_nodes(chain);
}
//!Allocates many elements of size elem_size.
//!Elements must be individually deallocated with deallocate()
void allocate_many(size_type elem_size, std::size_t n_elements, multiallocation_chain &chain)
{
BOOST_STATIC_ASSERT(( Version > 1 ));
if(BOOST_UNLIKELY(!dlmalloc_multialloc_nodes
( n_elements, elem_size*sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS
, move_detail::force_ptr<dlmalloc_memchain *>(&chain)))){
boost::container::throw_bad_alloc();
}
}
//!Allocates n_elements elements, each one of size elem_sizes[i]
//!Elements must be individually deallocated with deallocate()
void allocate_many(const size_type *elem_sizes, size_type n_elements, multiallocation_chain &chain)
{
BOOST_STATIC_ASSERT(( Version > 1 ));
if(BOOST_UNLIKELY(!dlmalloc_multialloc_arrays
(n_elements, elem_sizes, sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS
, move_detail::force_ptr<dlmalloc_memchain *>(&chain)))){
boost::container::throw_bad_alloc();
}
}
void deallocate_many(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW
{
dlmalloc_multidealloc(move_detail::force_ptr<dlmalloc_memchain *>(&chain));
}
//!Deallocates all free blocks of the pool
void deallocate_free_blocks() BOOST_NOEXCEPT_OR_NOTHROW
{
m_pool.deallocate_free_blocks();
}
//!Swaps allocators. Does not throw. If each allocator is placed in a
//!different memory segment, the result is undefined.
friend void swap(private_adaptive_pool &, private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!An allocator always compares to true, as memory allocated with one
//!instance can be deallocated by another instance
friend bool operator==(const private_adaptive_pool &, const private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{ return true; }
//!An allocator always compares to false, as memory allocated with one
//!instance can be deallocated by another instance
friend bool operator!=(const private_adaptive_pool &, const private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW
{ return false; }
private:
pointer priv_allocation_command
(allocation_type command, std::size_t limit_size
,size_type &prefer_in_recvd_out_size, pointer &reuse_ptr)
{
std::size_t const preferred_size = prefer_in_recvd_out_size;
dlmalloc_command_ret_t ret = {0 , 0};
if(BOOST_UNLIKELY(limit_size > this->max_size() || preferred_size > this->max_size())){
return pointer();
}
std::size_t l_size = limit_size*sizeof(T);
std::size_t p_size = preferred_size*sizeof(T);
std::size_t r_size;
{
void* reuse_ptr_void = reuse_ptr;
ret = dlmalloc_allocation_command(command, sizeof(T), l_size, p_size, &r_size, reuse_ptr_void);
reuse_ptr = ret.second ? static_cast<T*>(reuse_ptr_void) : 0;
}
prefer_in_recvd_out_size = r_size/sizeof(T);
return (pointer)ret.first;
}
};
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //#ifndef BOOST_CONTAINER_ADAPTIVE_POOL_HPP

View File

@@ -0,0 +1,377 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_ALLOCATOR_HPP
#define BOOST_CONTAINER_ALLOCATOR_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/container_fwd.hpp>
#include <boost/container/detail/version_type.hpp>
#include <boost/container/throw_exception.hpp>
#include <boost/container/detail/dlmalloc.hpp>
#include <boost/container/detail/multiallocation_chain.hpp>
#include <boost/static_assert.hpp>
#include <boost/move/detail/force_ptr.hpp>
#include <cstddef>
#include <cassert>
//!\file
namespace boost {
namespace container {
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
template<unsigned Version, unsigned int AllocationDisableMask>
class allocator<void, Version, AllocationDisableMask>
{
typedef allocator<void, Version, AllocationDisableMask> self_t;
public:
typedef void value_type;
typedef void * pointer;
typedef const void* const_pointer;
typedef int & reference;
typedef const int & const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef boost::container::dtl::
version_type<self_t, Version> version;
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef boost::container::dtl::
basic_multiallocation_chain<void*> multiallocation_chain;
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//!Obtains an allocator that allocates
//!objects of type T2
template<class T2>
struct rebind
{
typedef allocator< T2
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
, Version, AllocationDisableMask
#endif
> other;
};
//!Default constructor
//!Never throws
allocator()
{}
//!Constructor from other allocator.
//!Never throws
allocator(const allocator &)
{}
//!Constructor from related allocator.
//!Never throws
template<class T2>
allocator(const allocator<T2, Version, AllocationDisableMask> &)
{}
};
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! This class is an extended STL-compatible that offers advanced allocation mechanism
//!(in-place expansion, shrinking, burst-allocation...)
//!
//! This allocator is a wrapper around a modified DLmalloc.
//! If Version is 1, the allocator is a STL conforming allocator. If Version is 2,
//! the allocator offers advanced expand in place and burst allocation capabilities.
//!
//! AllocationDisableMask works only if Version is 2 and it can be an inclusive OR
//! of allocation types the user wants to disable.
template< class T
, unsigned Version BOOST_CONTAINER_DOCONLY(=2)
, unsigned int AllocationDisableMask BOOST_CONTAINER_DOCONLY(=0)>
class allocator
{
typedef unsigned int allocation_type;
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private:
//Self type
typedef allocator<T, Version, AllocationDisableMask> self_t;
//Not assignable from related allocator
template<class T2, unsigned int Version2, unsigned int AllocationDisableMask2>
allocator& operator=(const allocator<T2, Version2, AllocationDisableMask2>&);
static const unsigned int ForbiddenMask =
BOOST_CONTAINER_ALLOCATE_NEW | BOOST_CONTAINER_EXPAND_BWD | BOOST_CONTAINER_EXPAND_FWD ;
//The mask can't disable all the allocation types
BOOST_STATIC_ASSERT(( (AllocationDisableMask & ForbiddenMask) != ForbiddenMask ));
//The mask is only valid for version 2 allocators
BOOST_STATIC_ASSERT(( Version != 1 || (AllocationDisableMask == 0) ));
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
public:
typedef T value_type;
typedef T * pointer;
typedef const T * const_pointer;
typedef T & reference;
typedef const T & const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
typedef boost::container::dtl::
version_type<self_t, Version> version;
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
typedef boost::container::dtl::
basic_multiallocation_chain<void*> void_multiallocation_chain;
typedef boost::container::dtl::
transform_multiallocation_chain
<void_multiallocation_chain, T> multiallocation_chain;
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//!Obtains an allocator that allocates
//!objects of type T2
template<class T2>
struct rebind
{
typedef allocator<T2, Version, AllocationDisableMask> other;
};
//!Default constructor
//!Never throws
allocator() BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Constructor from other allocator.
//!Never throws
allocator(const allocator &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Constructor from related allocator.
//!Never throws
template<class T2>
allocator(const allocator<T2
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
, Version, AllocationDisableMask
#endif
> &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!Allocates memory for an array of count elements.
//!Throws bad_alloc if there is no enough memory
//!If Version is 2, this allocated memory can only be deallocated
//!with deallocate() or (for Version == 2) deallocate_many()
BOOST_CONTAINER_ATTRIBUTE_NODISCARD pointer allocate(size_type count, const void * hint= 0)
{
(void)hint;
if(count > size_type(-1)/(2u*sizeof(T)))
boost::container::throw_bad_alloc();
void *ret = dlmalloc_malloc(count*sizeof(T));
if(!ret)
boost::container::throw_bad_alloc();
return static_cast<pointer>(ret);
}
//!Deallocates previously allocated memory.
//!Never throws
BOOST_CONTAINER_FORCEINLINE void deallocate(pointer ptr, size_type) BOOST_NOEXCEPT_OR_NOTHROW
{ dlmalloc_free(ptr); }
//!Returns the maximum number of elements that could be allocated.
//!Never throws
BOOST_CONTAINER_FORCEINLINE size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
{ return size_type(-1)/(2u*sizeof(T)); }
//!Swaps two allocators, does nothing
//!because this allocator is stateless
BOOST_CONTAINER_FORCEINLINE friend void swap(self_t &, self_t &) BOOST_NOEXCEPT_OR_NOTHROW
{}
//!An allocator always compares to true, as memory allocated with one
//!instance can be deallocated by another instance
BOOST_CONTAINER_ATTRIBUTE_NODISCARD
friend bool operator==(const allocator &, const allocator &) BOOST_NOEXCEPT_OR_NOTHROW
{ return true; }
//!An allocator always compares to false, as memory allocated with one
//!instance can be deallocated by another instance
BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
friend bool operator!=(const allocator &, const allocator &) BOOST_NOEXCEPT_OR_NOTHROW
{ return false; }
//!An advanced function that offers in-place expansion shrink to fit and new allocation
//!capabilities. Memory allocated with this function can only be deallocated with deallocate()
//!or deallocate_many().
//!This function is available only with Version == 2
BOOST_CONTAINER_ATTRIBUTE_NODISCARD pointer allocation_command(allocation_type command,
size_type limit_size,
size_type &prefer_in_recvd_out_size,
pointer &reuse)
{
BOOST_STATIC_ASSERT(( Version > 1 ));
const allocation_type mask(AllocationDisableMask);
command &= ~mask;
pointer ret = this->priv_allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse);
if(!ret && !(command & BOOST_CONTAINER_NOTHROW_ALLOCATION))
boost::container::throw_bad_alloc();
return ret;
}
//!Returns maximum the number of objects the previously allocated memory
//!pointed by p can hold.
//!Memory must not have been allocated with
//!allocate_one or allocate_individual.
//!This function is available only with Version == 2
BOOST_CONTAINER_ATTRIBUTE_NODISCARD size_type size(pointer p) const BOOST_NOEXCEPT_OR_NOTHROW
{
BOOST_STATIC_ASSERT(( Version > 1 ));
return dlmalloc_size(p);
}
//!Allocates just one object. Memory allocated with this function
//!must be deallocated only with deallocate_one().
//!Throws bad_alloc if there is no enough memory
//!This function is available only with Version == 2
BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE pointer allocate_one()
{
BOOST_STATIC_ASSERT(( Version > 1 ));
return this->allocate(1);
}
//!Allocates many elements of size == 1.
//!Elements must be individually deallocated with deallocate_one()
//!This function is available only with Version == 2
BOOST_CONTAINER_FORCEINLINE void allocate_individual(std::size_t num_elements, multiallocation_chain &chain)
{
BOOST_STATIC_ASSERT(( Version > 1 ));
this->allocate_many(1, num_elements, chain);
}
//!Deallocates memory previously allocated with allocate_one().
//!You should never use deallocate_one to deallocate memory allocated
//!with other functions different from allocate_one() or allocate_individual.
//Never throws
void deallocate_one(pointer p) BOOST_NOEXCEPT_OR_NOTHROW
{
BOOST_STATIC_ASSERT(( Version > 1 ));
return this->deallocate(p, 1);
}
//!Deallocates memory allocated with allocate_one() or allocate_individual().
//!This function is available only with Version == 2
BOOST_CONTAINER_FORCEINLINE
void deallocate_individual(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW
{
BOOST_STATIC_ASSERT(( Version > 1 ));
return this->deallocate_many(chain);
}
//!Allocates many elements of size elem_size.
//!Elements must be individually deallocated with deallocate()
//!This function is available only with Version == 2
void allocate_many(size_type elem_size, std::size_t n_elements, multiallocation_chain &chain)
{
BOOST_STATIC_ASSERT(( Version > 1 ));
dlmalloc_memchain ch;
BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
if(!dlmalloc_multialloc_nodes(n_elements, elem_size*sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch)){
boost::container::throw_bad_alloc();
}
chain.incorporate_after(chain.before_begin()
,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch)
,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );
/*
if(!dlmalloc_multialloc_nodes( n_elements, elem_size*sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS
, move_detail::force_ptr<dlmalloc_memchain *>(&chain))){
boost::container::throw_bad_alloc();
}*/
}
//!Allocates n_elements elements, each one of size elem_sizes[i]
//!Elements must be individually deallocated with deallocate()
//!This function is available only with Version == 2
void allocate_many(const size_type *elem_sizes, size_type n_elements, multiallocation_chain &chain)
{
BOOST_STATIC_ASSERT(( Version > 1 ));
dlmalloc_memchain ch;
BOOST_CONTAINER_MEMCHAIN_INIT(&ch);
if(!dlmalloc_multialloc_arrays(n_elements, elem_sizes, sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch)){
boost::container::throw_bad_alloc();
}
chain.incorporate_after(chain.before_begin()
,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch)
,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch)
,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );
/*
if(!dlmalloc_multialloc_arrays( n_elements, elem_sizes, sizeof(T), BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS
, move_detail::force_ptr<dlmalloc_memchain *>(&chain))){
boost::container::throw_bad_alloc();
}*/
}
//!Deallocates several elements allocated by
//!allocate_many(), allocate(), or allocation_command().
//!This function is available only with Version == 2
void deallocate_many(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW
{
BOOST_STATIC_ASSERT(( Version > 1 ));
dlmalloc_memchain ch;
void *beg(&*chain.begin()), *last(&*chain.last());
size_t size(chain.size());
BOOST_CONTAINER_MEMCHAIN_INIT_FROM(&ch, beg, last, size);
dlmalloc_multidealloc(&ch);
//dlmalloc_multidealloc(move_detail::force_ptr<dlmalloc_memchain *>(&chain));
}
private:
pointer priv_allocation_command
(allocation_type command, std::size_t limit_size
,size_type &prefer_in_recvd_out_size
,pointer &reuse_ptr)
{
std::size_t const preferred_size = prefer_in_recvd_out_size;
dlmalloc_command_ret_t ret = {0 , 0};
if((limit_size > this->max_size()) | (preferred_size > this->max_size())){
return pointer();
}
std::size_t l_size = limit_size*sizeof(T);
std::size_t p_size = preferred_size*sizeof(T);
std::size_t r_size;
{
void* reuse_ptr_void = reuse_ptr;
ret = dlmalloc_allocation_command(command, sizeof(T), l_size, p_size, &r_size, reuse_ptr_void);
reuse_ptr = ret.second ? static_cast<T*>(reuse_ptr_void) : 0;
}
prefer_in_recvd_out_size = r_size/sizeof(T);
return (pointer)ret.first;
}
};
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //BOOST_CONTAINER_ALLOCATOR_HPP

View File

@@ -0,0 +1,502 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Pablo Halpern 2009. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2011-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP
#define BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
// container
#include <boost/container/container_fwd.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/type_traits.hpp> //is_empty
#include <boost/container/detail/placement_new.hpp>
#ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
#include <boost/container/detail/std_fwd.hpp>
#endif
// intrusive
#include <boost/intrusive/pointer_traits.hpp>
#include <boost/intrusive/detail/mpl.hpp>
// move
#include <boost/move/utility_core.hpp>
// move/detail
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/move/detail/fwd_macros.hpp>
#endif
// other boost
#include <boost/static_assert.hpp>
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
#endif
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME allocate
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 2
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 2
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME destroy
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 1
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME construct
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 9
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
#pragma GCC diagnostic pop
#endif
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
namespace boost {
namespace container {
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
template<class T, class VoidAllocator, class Options>
class small_vector_allocator;
namespace allocator_traits_detail {
BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_max_size, max_size)
BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_select_on_container_copy_construction, select_on_container_copy_construction)
} //namespace allocator_traits_detail {
namespace dtl {
//workaround needed for C++03 compilers with no construct()
//supporting rvalue references
template<class Allocator>
struct is_std_allocator
{ static const bool value = false; };
template<class T>
struct is_std_allocator< std::allocator<T> >
{ static const bool value = true; };
template<class T, class Options>
struct is_std_allocator< small_vector_allocator<T, std::allocator<T>, Options > >
{ static const bool value = true; };
template<class Allocator>
struct is_not_std_allocator
{ static const bool value = !is_std_allocator<Allocator>::value; };
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(pointer)
BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(const_pointer)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(reference)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(const_reference)
BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(void_pointer)
BOOST_INTRUSIVE_INSTANTIATE_EVAL_DEFAULT_TYPE_TMPLT(const_void_pointer)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(size_type)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_copy_assignment)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_move_assignment)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(propagate_on_container_swap)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(is_always_equal)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type)
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(is_partially_propagable)
} //namespace dtl {
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! The class template allocator_traits supplies a uniform interface to all allocator types.
//! This class is a C++03-compatible implementation of std::allocator_traits
template <typename Allocator>
struct allocator_traits
{
//allocator_type
typedef Allocator allocator_type;
//value_type
typedef typename allocator_type::value_type value_type;
#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! Allocator::pointer if such a type exists; otherwise, value_type*
//!
typedef unspecified pointer;
//! Allocator::const_pointer if such a type exists ; otherwise, pointer_traits<pointer>::rebind<const
//!
typedef see_documentation const_pointer;
//! Non-standard extension
//! Allocator::reference if such a type exists; otherwise, value_type&
typedef see_documentation reference;
//! Non-standard extension
//! Allocator::const_reference if such a type exists ; otherwise, const value_type&
typedef see_documentation const_reference;
//! Allocator::void_pointer if such a type exists ; otherwise, pointer_traits<pointer>::rebind<void>.
//!
typedef see_documentation void_pointer;
//! Allocator::const_void_pointer if such a type exists ; otherwise, pointer_traits<pointer>::rebind<const
//!
typedef see_documentation const_void_pointer;
//! Allocator::difference_type if such a type exists ; otherwise, pointer_traits<pointer>::difference_type.
//!
typedef see_documentation difference_type;
//! Allocator::size_type if such a type exists ; otherwise, make_unsigned<difference_type>::type
//!
typedef see_documentation size_type;
//! Allocator::propagate_on_container_copy_assignment if such a type exists, otherwise a type
//! with an internal constant static boolean member <code>value</code> == false.
typedef see_documentation propagate_on_container_copy_assignment;
//! Allocator::propagate_on_container_move_assignment if such a type exists, otherwise a type
//! with an internal constant static boolean member <code>value</code> == false.
typedef see_documentation propagate_on_container_move_assignment;
//! Allocator::propagate_on_container_swap if such a type exists, otherwise a type
//! with an internal constant static boolean member <code>value</code> == false.
typedef see_documentation propagate_on_container_swap;
//! Allocator::is_always_equal if such a type exists, otherwise a type
//! with an internal constant static boolean member <code>value</code> == is_empty<Allocator>::value
typedef see_documentation is_always_equal;
//! Allocator::is_partially_propagable if such a type exists, otherwise a type
//! with an internal constant static boolean member <code>value</code> == false
//! <b>Note</b>: Non-standard extension used to implement `small_vector_allocator`.
typedef see_documentation is_partially_propagable;
//! Defines an allocator: Allocator::rebind<T>::other if such a type exists; otherwise, Allocator<T, Args>
//! if Allocator is a class template instantiation of the form Allocator<U, Args>, where Args is zero or
//! more type arguments ; otherwise, the instantiation of rebind_alloc is ill-formed.
//!
//! In C++03 compilers <code>rebind_alloc</code> is a struct derived from an allocator
//! deduced by previously detailed rules.
template <class T> using rebind_alloc = see_documentation;
//! In C++03 compilers <code>rebind_traits</code> is a struct derived from
//! <code>allocator_traits<OtherAlloc></code>, where <code>OtherAlloc</code> is
//! the allocator deduced by rules explained in <code>rebind_alloc</code>.
template <class T> using rebind_traits = allocator_traits<rebind_alloc<T> >;
//! Non-standard extension: Portable allocator rebind for C++03 and C++11 compilers.
//! <code>type</code> is an allocator related to Allocator deduced deduced by rules explained in <code>rebind_alloc</code>.
template <class T>
struct portable_rebind_alloc
{ typedef see_documentation type; };
#else
//pointer
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
pointer, value_type*)
pointer;
//const_pointer
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::dtl::, Allocator,
const_pointer, typename boost::intrusive::pointer_traits<pointer>::template
rebind_pointer<const value_type>)
const_pointer;
//reference
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
reference, typename dtl::unvoid_ref<value_type>::type)
reference;
//const_reference
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
const_reference, typename dtl::unvoid_ref<const value_type>::type)
const_reference;
//void_pointer
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::dtl::, Allocator,
void_pointer, typename boost::intrusive::pointer_traits<pointer>::template
rebind_pointer<void>)
void_pointer;
//const_void_pointer
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::dtl::, Allocator,
const_void_pointer, typename boost::intrusive::pointer_traits<pointer>::template
rebind_pointer<const void>)
const_void_pointer;
//difference_type
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
difference_type, std::ptrdiff_t)
difference_type;
//size_type
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
size_type, std::size_t)
size_type;
//propagate_on_container_copy_assignment
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
propagate_on_container_copy_assignment, dtl::false_type)
propagate_on_container_copy_assignment;
//propagate_on_container_move_assignment
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
propagate_on_container_move_assignment, dtl::false_type)
propagate_on_container_move_assignment;
//propagate_on_container_swap
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
propagate_on_container_swap, dtl::false_type)
propagate_on_container_swap;
//is_always_equal
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
is_always_equal, dtl::is_empty<Allocator>)
is_always_equal;
//is_partially_propagable
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator,
is_partially_propagable, dtl::false_type)
is_partially_propagable;
//rebind_alloc & rebind_traits
#if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
//C++11
template <typename T> using rebind_alloc = typename boost::intrusive::pointer_rebind<Allocator, T>::type;
template <typename T> using rebind_traits = allocator_traits< rebind_alloc<T> >;
#else // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
//Some workaround for C++03 or C++11 compilers with no template aliases
template <typename T>
struct rebind_alloc : boost::intrusive::pointer_rebind<Allocator,T>::type
{
typedef typename boost::intrusive::pointer_rebind<Allocator,T>::type Base;
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <typename... Args>
rebind_alloc(BOOST_FWD_REF(Args)... args) : Base(boost::forward<Args>(args)...) {}
#else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#define BOOST_CONTAINER_ALLOCATOR_TRAITS_REBIND_ALLOC(N) \
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N\
explicit rebind_alloc(BOOST_MOVE_UREF##N) : Base(BOOST_MOVE_FWD##N){}\
//
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_ALLOCATOR_TRAITS_REBIND_ALLOC)
#undef BOOST_CONTAINER_ALLOCATOR_TRAITS_REBIND_ALLOC
#endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
};
template <typename T>
struct rebind_traits
: allocator_traits<typename boost::intrusive::pointer_rebind<Allocator, T>::type>
{};
#endif // #if !defined(BOOST_NO_CXX11_TEMPLATE_ALIASES)
//portable_rebind_alloc
template <class T>
struct portable_rebind_alloc
{ typedef typename boost::intrusive::pointer_rebind<Allocator, T>::type type; };
#endif //BOOST_CONTAINER_DOXYGEN_INVOKED
//! <b>Returns</b>: <code>a.allocate(n)</code>
//!
BOOST_CONTAINER_FORCEINLINE static pointer allocate(Allocator &a, size_type n)
{ return a.allocate(n); }
//! <b>Returns</b>: <code>a.deallocate(p, n)</code>
//!
//! <b>Throws</b>: Nothing
BOOST_CONTAINER_FORCEINLINE static void deallocate(Allocator &a, pointer p, size_type n)
{ a.deallocate(p, n); }
//! <b>Effects</b>: calls <code>a.allocate(n, p)</code> if that call is well-formed;
//! otherwise, invokes <code>a.allocate(n)</code>
BOOST_CONTAINER_FORCEINLINE static pointer allocate(Allocator &a, size_type n, const_void_pointer p)
{
const bool value = boost::container::dtl::
has_member_function_callable_with_allocate
<Allocator, const size_type, const const_void_pointer>::value;
dtl::bool_<value> flag;
return allocator_traits::priv_allocate(flag, a, n, p);
}
//! <b>Effects</b>: calls <code>a.destroy(p)</code> if that call is well-formed;
//! otherwise, invokes <code>p->~T()</code>.
template<class T>
BOOST_CONTAINER_FORCEINLINE static void destroy(Allocator &a, T*p) BOOST_NOEXCEPT_OR_NOTHROW
{
typedef T* destroy_pointer;
const bool value = boost::container::dtl::
has_member_function_callable_with_destroy
<Allocator, const destroy_pointer>::value;
dtl::bool_<value> flag;
allocator_traits::priv_destroy(flag, a, p);
}
//! <b>Returns</b>: <code>a.max_size()</code> if that expression is well-formed; otherwise,
//! <code>numeric_limits<size_type>::max()</code>.
BOOST_CONTAINER_FORCEINLINE static size_type max_size(const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
{
const bool value = allocator_traits_detail::has_max_size<Allocator, size_type (Allocator::*)() const>::value;
dtl::bool_<value> flag;
return allocator_traits::priv_max_size(flag, a);
}
//! <b>Returns</b>: <code>a.select_on_container_copy_construction()</code> if that expression is well-formed;
//! otherwise, a.
BOOST_CONTAINER_FORCEINLINE static BOOST_CONTAINER_DOC1ST(Allocator,
typename dtl::if_c
< allocator_traits_detail::has_select_on_container_copy_construction<Allocator BOOST_MOVE_I Allocator (Allocator::*)() const>::value
BOOST_MOVE_I Allocator BOOST_MOVE_I const Allocator & >::type)
select_on_container_copy_construction(const Allocator &a)
{
const bool value = allocator_traits_detail::has_select_on_container_copy_construction
<Allocator, Allocator (Allocator::*)() const>::value;
dtl::bool_<value> flag;
return allocator_traits::priv_select_on_container_copy_construction(flag, a);
}
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
//! <b>Effects</b>: calls <code>a.construct(p, std::forward<Args>(args)...)</code> if that call is well-formed;
//! otherwise, invokes <code>`placement new` (static_cast<void*>(p)) T(std::forward<Args>(args)...)</code>
template <class T, class ...Args>
BOOST_CONTAINER_FORCEINLINE static void construct(Allocator & a, T* p, BOOST_FWD_REF(Args)... args)
{
static const bool value = ::boost::move_detail::and_
< dtl::is_not_std_allocator<Allocator>
, boost::container::dtl::has_member_function_callable_with_construct
< Allocator, T*, Args... >
>::value;
dtl::bool_<value> flag;
allocator_traits::priv_construct(flag, a, p, ::boost::forward<Args>(args)...);
}
#endif
//! <b>Returns</b>: <code>a.storage_is_unpropagable(p)</code> if is_partially_propagable::value is true; otherwise,
//! <code>false</code>.
BOOST_CONTAINER_FORCEINLINE static bool storage_is_unpropagable(const Allocator &a, pointer p) BOOST_NOEXCEPT_OR_NOTHROW
{
dtl::bool_<is_partially_propagable::value> flag;
return allocator_traits::priv_storage_is_unpropagable(flag, a, p);
}
//! <b>Returns</b>: <code>true</code> if <code>is_always_equal::value == true</code>, otherwise,
//! <code>a == b</code>.
BOOST_CONTAINER_FORCEINLINE static bool equal(const Allocator &a, const Allocator &b) BOOST_NOEXCEPT_OR_NOTHROW
{
dtl::bool_<is_always_equal::value> flag;
return allocator_traits::priv_equal(flag, a, b);
}
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
private:
BOOST_CONTAINER_FORCEINLINE static pointer priv_allocate(dtl::true_type, Allocator &a, size_type n, const_void_pointer p)
{ return a.allocate(n, p); }
BOOST_CONTAINER_FORCEINLINE static pointer priv_allocate(dtl::false_type, Allocator &a, size_type n, const_void_pointer)
{ return a.allocate(n); }
template<class T>
BOOST_CONTAINER_FORCEINLINE static void priv_destroy(dtl::true_type, Allocator &a, T* p) BOOST_NOEXCEPT_OR_NOTHROW
{ a.destroy(p); }
template<class T>
BOOST_CONTAINER_FORCEINLINE static void priv_destroy(dtl::false_type, Allocator &, T* p) BOOST_NOEXCEPT_OR_NOTHROW
{ p->~T(); (void)p; }
BOOST_CONTAINER_FORCEINLINE static size_type priv_max_size(dtl::true_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
{ return a.max_size(); }
BOOST_CONTAINER_FORCEINLINE static size_type priv_max_size(dtl::false_type, const Allocator &) BOOST_NOEXCEPT_OR_NOTHROW
{ return size_type(-1)/sizeof(value_type); }
BOOST_CONTAINER_FORCEINLINE static Allocator priv_select_on_container_copy_construction(dtl::true_type, const Allocator &a)
{ return a.select_on_container_copy_construction(); }
BOOST_CONTAINER_FORCEINLINE static const Allocator &priv_select_on_container_copy_construction(dtl::false_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW
{ return a; }
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template<class T, class ...Args>
BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::true_type, Allocator &a, T *p, BOOST_FWD_REF(Args) ...args)
{ a.construct( p, ::boost::forward<Args>(args)...); }
template<class T, class ...Args>
BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p, BOOST_FWD_REF(Args) ...args)
{ ::new((void*)p, boost_container_new_t()) T(::boost::forward<Args>(args)...); }
#else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
public:
#define BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL(N) \
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
BOOST_CONTAINER_FORCEINLINE static void construct(Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
{\
static const bool value = ::boost::move_detail::and_ \
< dtl::is_not_std_allocator<Allocator> \
, boost::container::dtl::has_member_function_callable_with_construct \
< Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_FWD_T##N > \
>::value; \
dtl::bool_<value> flag;\
(priv_construct)(flag, a, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
}\
//
BOOST_MOVE_ITERATE_0TO8(BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL)
#undef BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL
private:
/////////////////////////////////
// priv_construct
/////////////////////////////////
#define BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL(N) \
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::true_type, Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
{ a.construct( p BOOST_MOVE_I##N BOOST_MOVE_FWD##N ); }\
\
template<class T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
{ ::new((void*)p, boost_container_new_t()) T(BOOST_MOVE_FWD##N); }\
//
BOOST_MOVE_ITERATE_0TO8(BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL)
#undef BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL
#endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template<class T>
BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p, const ::boost::container::default_init_t&)
{ ::new((void*)p, boost_container_new_t()) T; }
BOOST_CONTAINER_FORCEINLINE static bool priv_storage_is_unpropagable(dtl::true_type, const Allocator &a, pointer p)
{ return a.storage_is_unpropagable(p); }
BOOST_CONTAINER_FORCEINLINE static bool priv_storage_is_unpropagable(dtl::false_type, const Allocator &, pointer)
{ return false; }
BOOST_CONTAINER_FORCEINLINE static bool priv_equal(dtl::true_type, const Allocator &, const Allocator &)
{ return true; }
BOOST_CONTAINER_FORCEINLINE static bool priv_equal(dtl::false_type, const Allocator &a, const Allocator &b)
{ return a == b; }
#endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
};
#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
template<class T, class AllocatorOrVoid>
struct real_allocator
{
typedef AllocatorOrVoid type;
};
template<class T>
struct real_allocator<T, void>
{
typedef new_allocator<T> type;
};
#endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif // ! defined(BOOST_CONTAINER_ALLOCATOR_ALLOCATOR_TRAITS_HPP)

View File

@@ -0,0 +1,388 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2014. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP
#define BOOST_CONTAINER_CONTAINER_FWD_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
//! \file
//! This header file forward declares the following containers:
//! - boost::container::vector
//! - boost::container::stable_vector
//! - boost::container::static_vector
//! - boost::container::small_vector_base
//! - boost::container::small_vector
//! - boost::container::devector
//! - boost::container::slist
//! - boost::container::list
//! - boost::container::set
//! - boost::container::multiset
//! - boost::container::map
//! - boost::container::multimap
//! - boost::container::flat_set
//! - boost::container::flat_multiset
//! - boost::container::flat_map
//! - boost::container::flat_multimap
//! - boost::container::basic_string
//! - boost::container::string
//! - boost::container::wstring
//!
//! Forward declares the following allocators:
//! - boost::container::allocator
//! - boost::container::node_allocator
//! - boost::container::adaptive_pool
//!
//! Forward declares the following polymorphic resource classes:
//! - boost::container::pmr::memory_resource
//! - boost::container::pmr::polymorphic_allocator
//! - boost::container::pmr::monotonic_buffer_resource
//! - boost::container::pmr::pool_options
//! - boost::container::pmr::unsynchronized_pool_resource
//! - boost::container::pmr::synchronized_pool_resource
//!
//! And finally it defines the following types
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//Std forward declarations
#ifndef BOOST_CONTAINER_DETAIL_STD_FWD_HPP
#include <boost/container/detail/std_fwd.hpp>
#endif
namespace boost{
namespace intrusive{
namespace detail{
//Create namespace to avoid compilation errors
}}}
namespace boost{ namespace container{ namespace dtl{
namespace bi = boost::intrusive;
namespace bid = boost::intrusive::detail;
}}}
namespace boost{ namespace container{ namespace pmr{
namespace bi = boost::intrusive;
namespace bid = boost::intrusive::detail;
}}}
#include <cstddef>
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//////////////////////////////////////////////////////////////////////////////
// Containers
//////////////////////////////////////////////////////////////////////////////
namespace boost {
namespace container {
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
template<class T>
class new_allocator;
template <class T
,class Allocator = void
,class Options = void>
class vector;
template <class T
,class Allocator = void >
class stable_vector;
template < class T
, std::size_t Capacity
, class Options = void>
class static_vector;
template < class T
, class Allocator = void
, class Options = void >
class small_vector_base;
template < class T
, std::size_t N
, class Allocator = void
, class Options = void >
class small_vector;
template <class T
,class Allocator = void
,class Options = void>
class devector;
template <class T
,class Allocator = void
,class Options = void>
class deque;
template <class T
,class Allocator = void >
class list;
template <class T
,class Allocator = void >
class slist;
template <class Key
,class Compare = std::less<Key>
,class Allocator = void
,class Options = void>
class set;
template <class Key
,class Compare = std::less<Key>
,class Allocator = void
,class Options = void >
class multiset;
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = void
,class Options = void >
class map;
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = void
,class Options = void >
class multimap;
template <class Key
,class Compare = std::less<Key>
,class Allocator = void >
class flat_set;
template <class Key
,class Compare = std::less<Key>
,class Allocator = void >
class flat_multiset;
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = void >
class flat_map;
template <class Key
,class T
,class Compare = std::less<Key>
,class Allocator = void >
class flat_multimap;
#ifndef BOOST_NO_CXX11_TEMPLATE_ALIASES
//! Alias templates for small_flat_[multi]{set|map} using small_vector as container
template < class Key
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
using small_flat_set = flat_set<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions>>;
template < class Key
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
using small_flat_multiset = flat_multiset<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions>>;
template < class Key
, class T
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
using small_flat_map = flat_map<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions>>;
template < class Key
, class T
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
using small_flat_multimap = flat_multimap<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions>>;
#endif // #ifndef BOOST_NO_CXX11_TEMPLATE_ALIASES
//! A portable metafunction to obtain a small_flat_set
template < class Key
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
struct small_flat_set_of
{
typedef flat_set<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions> > type;
};
//! A portable metafunction to obtain a small_flat_multiset
template < class Key
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
struct small_flat_multiset_of
{
typedef flat_multiset<Key, Compare, small_vector<Key, N, SmallVectorAllocator, SmallVectorOptions> > type;
};
//! A portable metafunction to obtain a small_flat_map
template < class Key
, class T
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
struct small_flat_map_of
{
typedef flat_map<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions> > type;
};
//! A portable metafunction to obtain a small_flat_multimap
template < class Key
, class T
, std::size_t N
, class Compare = std::less<Key>
, class SmallVectorAllocator = void
, class SmallVectorOptions = void >
struct small_flat_multimap_of
{
typedef flat_multimap<Key, T, Compare, small_vector<std::pair<Key, T>, N, SmallVectorAllocator, SmallVectorOptions> > type;
};
template <class CharT
,class Traits = std::char_traits<CharT>
,class Allocator = void >
class basic_string;
typedef basic_string <char> string;
typedef basic_string<wchar_t> wstring;
static const std::size_t ADP_nodes_per_block = 256u;
static const std::size_t ADP_max_free_blocks = 2u;
static const std::size_t ADP_overhead_percent = 1u;
static const std::size_t ADP_only_alignment = 0u;
template < class T
, std::size_t NodesPerBlock = ADP_nodes_per_block
, std::size_t MaxFreeBlocks = ADP_max_free_blocks
, std::size_t OverheadPercent = ADP_overhead_percent
, unsigned Version = 2
>
class adaptive_pool;
template < class T
, unsigned Version = 2
, unsigned int AllocationDisableMask = 0>
class allocator;
static const std::size_t NodeAlloc_nodes_per_block = 256u;
template
< class T
, std::size_t NodesPerBlock = NodeAlloc_nodes_per_block
, std::size_t Version = 2>
class node_allocator;
namespace pmr {
class memory_resource;
template<class T>
class polymorphic_allocator;
class monotonic_buffer_resource;
struct pool_options;
template <class Allocator>
class resource_adaptor_imp;
class unsynchronized_pool_resource;
class synchronized_pool_resource;
} //namespace pmr {
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! Type used to tag that the input range is
//! guaranteed to be ordered
struct ordered_range_t
{};
//! Value used to tag that the input range is
//! guaranteed to be ordered
static const ordered_range_t ordered_range = ordered_range_t();
//! Type used to tag that the input range is
//! guaranteed to be ordered and unique
struct ordered_unique_range_t
: public ordered_range_t
{};
//! Value used to tag that the input range is
//! guaranteed to be ordered and unique
static const ordered_unique_range_t ordered_unique_range = ordered_unique_range_t();
//! Type used to tag that the inserted values
//! should be default initialized
struct default_init_t
{};
//! Value used to tag that the inserted values
//! should be default initialized
static const default_init_t default_init = default_init_t();
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
//! Type used to tag that the inserted values
//! should be value initialized
struct value_init_t
{};
//! Value used to tag that the inserted values
//! should be value initialized
static const value_init_t value_init = value_init_t();
namespace container_detail_really_deep_namespace {
//Otherwise, gcc issues a warning of previously defined
//anonymous_instance and unique_instance
struct dummy
{
dummy()
{
(void)ordered_range;
(void)ordered_unique_range;
(void)default_init;
}
};
} //detail_really_deep_namespace {
typedef const std::piecewise_construct_t & piecewise_construct_t;
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
}} //namespace boost { namespace container {
#endif //#ifndef BOOST_CONTAINER_CONTAINER_FWD_HPP

View File

@@ -0,0 +1,169 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_HPP
#define BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/intrusive/set.hpp>
#include <boost/container/detail/multiallocation_chain.hpp>
#include <boost/container/detail/pool_common_alloc.hpp>
#include <boost/container/detail/mutex.hpp>
#include <boost/container/detail/adaptive_node_pool_impl.hpp>
#include <boost/container/detail/multiallocation_chain.hpp>
#include <boost/container/detail/type_traits.hpp>
#include <cstddef>
#include <cmath>
#include <cassert>
namespace boost {
namespace container {
namespace dtl {
//!Pooled memory allocator using an smart adaptive pool. Includes
//!a reference count but the class does not delete itself, this is
//!responsibility of user classes. Node size (NodeSize) and the number of
//!nodes allocated per block (NodesPerBlock) are known at compile time.
template< std::size_t NodeSize
, std::size_t NodesPerBlock
, std::size_t MaxFreeBlocks
, std::size_t OverheadPercent
>
class private_adaptive_node_pool
: public private_adaptive_node_pool_impl_ct
< fake_segment_manager
, MaxFreeBlocks
, NodeSize
, NodesPerBlock
, OverheadPercent
, unsigned(OverheadPercent == 0)*::boost::container::adaptive_pool_flag::align_only
| ::boost::container::adaptive_pool_flag::size_ordered
| ::boost::container::adaptive_pool_flag::address_ordered
>
{
typedef private_adaptive_node_pool_impl_ct
< fake_segment_manager
, MaxFreeBlocks
, NodeSize
, NodesPerBlock
, OverheadPercent
, unsigned(OverheadPercent == 0)*::boost::container::adaptive_pool_flag::align_only
| ::boost::container::adaptive_pool_flag::size_ordered
| ::boost::container::adaptive_pool_flag::address_ordered
> base_t;
//Non-copyable
private_adaptive_node_pool(const private_adaptive_node_pool &);
private_adaptive_node_pool &operator=(const private_adaptive_node_pool &);
public:
static const std::size_t nodes_per_block = NodesPerBlock;
//!Constructor. Never throws
private_adaptive_node_pool()
: base_t(0)
{}
};
//!Pooled memory allocator using adaptive pool. Includes
//!a reference count but the class does not delete itself, this is
//!responsibility of user classes. Node size (NodeSize) and the number of
//!nodes allocated per block (NodesPerBlock) are known at compile time
template< std::size_t NodeSize
, std::size_t NodesPerBlock
, std::size_t MaxFreeBlocks
, std::size_t OverheadPercent
>
class shared_adaptive_node_pool
: public private_adaptive_node_pool
<NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent>
{
private:
typedef private_adaptive_node_pool
<NodeSize, NodesPerBlock, MaxFreeBlocks, OverheadPercent> private_node_allocator_t;
public:
typedef typename private_node_allocator_t::multiallocation_chain multiallocation_chain;
//!Constructor. Never throws
shared_adaptive_node_pool()
: private_node_allocator_t(){}
//!Destructor. Deallocates all allocated blocks. Never throws
~shared_adaptive_node_pool()
{}
//!Allocates array of count elements. Can throw bad_alloc
void *allocate_node()
{
//-----------------------
scoped_lock<default_mutex> guard(mutex_);
//-----------------------
return private_node_allocator_t::allocate_node();
}
//!Deallocates an array pointed by ptr. Never throws
void deallocate_node(void *ptr)
{
//-----------------------
scoped_lock<default_mutex> guard(mutex_);
//-----------------------
private_node_allocator_t::deallocate_node(ptr);
}
//!Allocates a singly linked list of n nodes ending in null pointer.
//!can throw bad_alloc
void allocate_nodes(const std::size_t n, multiallocation_chain &chain)
{
//-----------------------
scoped_lock<default_mutex> guard(mutex_);
//-----------------------
return private_node_allocator_t::allocate_nodes(n, chain);
}
void deallocate_nodes(multiallocation_chain &chain)
{
//-----------------------
scoped_lock<default_mutex> guard(mutex_);
//-----------------------
private_node_allocator_t::deallocate_nodes(chain);
}
//!Deallocates all the free blocks of memory. Never throws
void deallocate_free_blocks()
{
//-----------------------
scoped_lock<default_mutex> guard(mutex_);
//-----------------------
private_node_allocator_t::deallocate_free_blocks();
}
private:
default_mutex mutex_;
};
} //namespace dtl {
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //#ifndef BOOST_CONTAINER_DETAIL_ADAPTIVE_NODE_POOL_HPP

View File

@@ -0,0 +1,33 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ADDRESSOF_HPP
#define BOOST_CONTAINER_DETAIL_ADDRESSOF_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/move/detail/addressof.hpp>
namespace boost {
namespace container {
namespace dtl {
using boost::move_detail::addressof;
} //namespace dtl {
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_ADDRESSOF_HPP

View File

@@ -0,0 +1,558 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2008-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP
#define BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
// container
#include <boost/container/allocator_traits.hpp>
// container/detail
#include <boost/container/detail/copy_move_algo.hpp>
#include <boost/container/detail/destroyers.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/type_traits.hpp>
#include <boost/container/detail/iterator.hpp>
#include <boost/container/detail/iterators.hpp>
#include <boost/move/detail/iterator_to_raw_pointer.hpp>
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/move/detail/fwd_macros.hpp>
#endif
// move
#include <boost/move/utility_core.hpp>
#include <boost/move/detail/force_ptr.hpp>
// other
#include <boost/assert.hpp>
#include <boost/core/no_exceptions_support.hpp>
namespace boost { namespace container { namespace dtl {
template<class Allocator, class FwdIt, class Iterator>
struct move_insert_range_proxy
{
typedef typename allocator_traits<Allocator>::value_type value_type;
BOOST_CONTAINER_FORCEINLINE explicit move_insert_range_proxy(FwdIt first)
: first_(first)
{}
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n)
{
this->first_ = ::boost::container::uninitialized_move_alloc_n_source
(a, this->first_, n, p);
}
BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n)
{
this->first_ = ::boost::container::move_n_source(this->first_, n, p);
}
FwdIt first_;
};
template<class Allocator, class FwdIt, class Iterator>
struct insert_range_proxy
{
typedef typename allocator_traits<Allocator>::value_type value_type;
BOOST_CONTAINER_FORCEINLINE explicit insert_range_proxy(FwdIt first)
: first_(first)
{}
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n)
{
this->first_ = ::boost::container::uninitialized_copy_alloc_n_source(a, this->first_, n, p);
}
BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n)
{
this->first_ = ::boost::container::copy_n_source(this->first_, n, p);
}
FwdIt first_;
};
template<class Allocator, class Iterator>
struct insert_n_copies_proxy
{
typedef typename allocator_traits<Allocator>::value_type value_type;
BOOST_CONTAINER_FORCEINLINE explicit insert_n_copies_proxy(const value_type &v)
: v_(v)
{}
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const
{ boost::container::uninitialized_fill_alloc_n(a, v_, n, p); }
BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const
{
while (n){
--n;
*p = v_;
++p;
}
}
const value_type &v_;
};
template<class Allocator, class Iterator>
struct insert_value_initialized_n_proxy
{
typedef ::boost::container::allocator_traits<Allocator> alloc_traits;
typedef typename allocator_traits<Allocator>::value_type value_type;
typedef typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type storage_t;
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const
{ boost::container::uninitialized_value_init_alloc_n(a, n, p); }
void copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const
{
while (n){
--n;
storage_t v;
alloc_traits::construct(a, move_detail::force_ptr<value_type *>(&v));
value_type *vp = move_detail::force_ptr<value_type *>(&v);
value_destructor<Allocator> on_exit(a, *vp); (void)on_exit;
*p = ::boost::move(*vp);
++p;
}
}
};
template<class Allocator, class Iterator>
struct insert_default_initialized_n_proxy
{
typedef ::boost::container::allocator_traits<Allocator> alloc_traits;
typedef typename allocator_traits<Allocator>::value_type value_type;
typedef typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type storage_t;
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const
{ boost::container::uninitialized_default_init_alloc_n(a, n, p); }
void copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const
{
if(!is_pod<value_type>::value){
while (n){
--n;
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;
alloc_traits::construct(a, move_detail::force_ptr<value_type *>(&v), default_init);
value_type *vp = move_detail::force_ptr<value_type *>(&v);
value_destructor<Allocator> on_exit(a, *vp); (void)on_exit;
*p = ::boost::move(*vp);
++p;
}
}
}
};
template<class Allocator, class Iterator>
struct insert_copy_proxy
{
typedef boost::container::allocator_traits<Allocator> alloc_traits;
typedef typename alloc_traits::value_type value_type;
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_copy_proxy(const value_type &v)
: v_(v)
{}
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const
{
BOOST_ASSERT(n == 1); (void)n;
alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), v_);
}
BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const
{
BOOST_ASSERT(n == 1); (void)n;
*p = v_;
}
const value_type &v_;
};
template<class Allocator, class Iterator>
struct insert_move_proxy
{
typedef boost::container::allocator_traits<Allocator> alloc_traits;
typedef typename alloc_traits::value_type value_type;
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_move_proxy(value_type &v)
: v_(v)
{}
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n) const
{
BOOST_ASSERT(n == 1); (void)n;
alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), ::boost::move(v_) );
}
BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator p, std::size_t n) const
{
BOOST_ASSERT(n == 1); (void)n;
*p = ::boost::move(v_);
}
value_type &v_;
};
template<class It, class Allocator>
BOOST_CONTAINER_FORCEINLINE insert_move_proxy<Allocator, It> get_insert_value_proxy(BOOST_RV_REF(typename boost::container::iterator_traits<It>::value_type) v)
{
return insert_move_proxy<Allocator, It>(v);
}
template<class It, class Allocator>
BOOST_CONTAINER_FORCEINLINE insert_copy_proxy<Allocator, It> get_insert_value_proxy(const typename boost::container::iterator_traits<It>::value_type &v)
{
return insert_copy_proxy<Allocator, It>(v);
}
}}} //namespace boost { namespace container { namespace dtl {
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/container/detail/variadic_templates_tools.hpp>
#include <boost/move/utility_core.hpp>
namespace boost {
namespace container {
namespace dtl {
template<class Allocator, class Iterator, class ...Args>
struct insert_nonmovable_emplace_proxy
{
typedef boost::container::allocator_traits<Allocator> alloc_traits;
typedef typename alloc_traits::value_type value_type;
typedef typename build_number_seq<sizeof...(Args)>::type index_tuple_t;
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_nonmovable_emplace_proxy(BOOST_FWD_REF(Args)... args)
: args_(args...)
{}
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n)
{ this->priv_uninitialized_copy_some_and_update(a, index_tuple_t(), p, n); }
private:
template<std::size_t ...IdxPack>
BOOST_CONTAINER_FORCEINLINE void priv_uninitialized_copy_some_and_update(Allocator &a, const index_tuple<IdxPack...>&, Iterator p, std::size_t n)
{
BOOST_ASSERT(n == 1); (void)n;
alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), ::boost::forward<Args>(get<IdxPack>(this->args_))... );
}
protected:
tuple<Args&...> args_;
};
template<class Allocator, class Iterator, class ...Args>
struct insert_emplace_proxy
: public insert_nonmovable_emplace_proxy<Allocator, Iterator, Args...>
{
typedef insert_nonmovable_emplace_proxy<Allocator, Iterator, Args...> base_t;
typedef boost::container::allocator_traits<Allocator> alloc_traits;
typedef typename base_t::value_type value_type;
typedef typename base_t::index_tuple_t index_tuple_t;
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(BOOST_FWD_REF(Args)... args)
: base_t(::boost::forward<Args>(args)...)
{}
BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &a, Iterator p, std::size_t n)
{ this->priv_copy_some_and_update(a, index_tuple_t(), p, n); }
private:
template<std::size_t ...IdxPack>
BOOST_CONTAINER_FORCEINLINE void priv_copy_some_and_update(Allocator &a, const index_tuple<IdxPack...>&, Iterator p, std::size_t n)
{
BOOST_ASSERT(n ==1); (void)n;
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;
alloc_traits::construct(a, move_detail::force_ptr<value_type *>(&v), ::boost::forward<Args>(get<IdxPack>(this->args_))...);
value_type *vp = move_detail::force_ptr<value_type *>(&v);
BOOST_TRY{
*p = ::boost::move(*vp);
}
BOOST_CATCH(...){
alloc_traits::destroy(a, vp);
BOOST_RETHROW
}
BOOST_CATCH_END
alloc_traits::destroy(a, vp);
}
};
//Specializations to avoid an unneeded temporary when emplacing from a single argument o type value_type
template<class Allocator, class Iterator>
struct insert_emplace_proxy<Allocator, Iterator, typename boost::container::allocator_traits<Allocator>::value_type>
: public insert_move_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(typename boost::container::allocator_traits<Allocator>::value_type &&v)
: insert_move_proxy<Allocator, Iterator>(v)
{}
};
//We use "add_const" here as adding "const" only confuses MSVC12(and maybe later) provoking
//compiler error C2752 ("more than one partial specialization matches").
//Any problem is solvable with an extra layer of indirection? ;-)
template<class Allocator, class Iterator>
struct insert_emplace_proxy<Allocator, Iterator
, typename boost::container::dtl::add_const<typename boost::container::allocator_traits<Allocator>::value_type>::type
>
: public insert_copy_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v)
: insert_copy_proxy<Allocator, Iterator>(v)
{}
};
template<class Allocator, class Iterator>
struct insert_emplace_proxy<Allocator, Iterator, typename boost::container::allocator_traits<Allocator>::value_type &>
: public insert_copy_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v)
: insert_copy_proxy<Allocator, Iterator>(v)
{}
};
template<class Allocator, class Iterator>
struct insert_emplace_proxy<Allocator, Iterator
, typename boost::container::dtl::add_const<typename boost::container::allocator_traits<Allocator>::value_type>::type &
>
: public insert_copy_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy(const typename boost::container::allocator_traits<Allocator>::value_type &v)
: insert_copy_proxy<Allocator, Iterator>(v)
{}
};
}}} //namespace boost { namespace container { namespace dtl {
#else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/container/detail/value_init.hpp>
namespace boost {
namespace container {
namespace dtl {
#define BOOST_CONTAINER_ADVANCED_INSERT_INT_CODE(N) \
template< class Allocator, class Iterator BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
struct insert_nonmovable_emplace_proxy##N\
{\
typedef boost::container::allocator_traits<Allocator> alloc_traits;\
typedef typename alloc_traits::value_type value_type;\
\
static const bool single_value = true;\
\
BOOST_CONTAINER_FORCEINLINE explicit insert_nonmovable_emplace_proxy##N(BOOST_MOVE_UREF##N)\
BOOST_MOVE_COLON##N BOOST_MOVE_FWD_INIT##N {}\
\
BOOST_CONTAINER_FORCEINLINE void uninitialized_copy_n_and_update(Allocator &a, Iterator p, std::size_t n)\
{\
BOOST_ASSERT(n == 1); (void)n;\
alloc_traits::construct(a, boost::movelib::iterator_to_raw_pointer(p) BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\
}\
\
BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &, Iterator, std::size_t)\
{ BOOST_ASSERT(false); }\
\
protected:\
BOOST_MOVE_MREF##N\
};\
\
template< class Allocator, class Iterator BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
struct insert_emplace_proxy_arg##N\
: insert_nonmovable_emplace_proxy##N< Allocator, Iterator BOOST_MOVE_I##N BOOST_MOVE_TARG##N >\
{\
typedef insert_nonmovable_emplace_proxy##N\
< Allocator, Iterator BOOST_MOVE_I##N BOOST_MOVE_TARG##N > base_t;\
typedef typename base_t::value_type value_type;\
typedef boost::container::allocator_traits<Allocator> alloc_traits;\
\
static const bool single_value = true;\
\
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg##N(BOOST_MOVE_UREF##N)\
: base_t(BOOST_MOVE_FWD##N){}\
\
BOOST_CONTAINER_FORCEINLINE void copy_n_and_update(Allocator &a, Iterator p, std::size_t n)\
{\
BOOST_ASSERT(n == 1); (void)n;\
typename dtl::aligned_storage<sizeof(value_type), dtl::alignment_of<value_type>::value>::type v;\
alloc_traits::construct(a, move_detail::force_ptr<value_type *>(&v) BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\
value_type *vp = move_detail::force_ptr<value_type *>(&v);\
BOOST_TRY{\
*p = ::boost::move(*vp);\
}\
BOOST_CATCH(...){\
alloc_traits::destroy(a, vp);\
BOOST_RETHROW\
}\
BOOST_CATCH_END\
alloc_traits::destroy(a, vp);\
}\
};\
//
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_ADVANCED_INSERT_INT_CODE)
#undef BOOST_CONTAINER_ADVANCED_INSERT_INT_CODE
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
//Specializations to avoid an unneeded temporary when emplacing from a single argument o type value_type
template<class Allocator, class Iterator>
struct insert_emplace_proxy_arg1<Allocator, Iterator, ::boost::rv<typename boost::container::allocator_traits<Allocator>::value_type> >
: public insert_move_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(typename boost::container::allocator_traits<Allocator>::value_type &v)
: insert_move_proxy<Allocator, Iterator>(v)
{}
};
template<class Allocator, class Iterator>
struct insert_emplace_proxy_arg1<Allocator, Iterator, typename boost::container::allocator_traits<Allocator>::value_type>
: public insert_copy_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v)
: insert_copy_proxy<Allocator, Iterator>(v)
{}
};
#else //e.g. MSVC10 & MSVC11
//Specializations to avoid an unneeded temporary when emplacing from a single argument o type value_type
template<class Allocator, class Iterator>
struct insert_emplace_proxy_arg1<Allocator, Iterator, typename boost::container::allocator_traits<Allocator>::value_type>
: public insert_move_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(typename boost::container::allocator_traits<Allocator>::value_type &&v)
: insert_move_proxy<Allocator, Iterator>(v)
{}
};
//We use "add_const" here as adding "const" only confuses MSVC10&11 provoking
//compiler error C2752 ("more than one partial specialization matches").
//Any problem is solvable with an extra layer of indirection? ;-)
template<class Allocator, class Iterator>
struct insert_emplace_proxy_arg1<Allocator, Iterator
, typename boost::container::dtl::add_const<typename boost::container::allocator_traits<Allocator>::value_type>::type
>
: public insert_copy_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v)
: insert_copy_proxy<Allocator, Iterator>(v)
{}
};
template<class Allocator, class Iterator>
struct insert_emplace_proxy_arg1<Allocator, Iterator, typename boost::container::allocator_traits<Allocator>::value_type &>
: public insert_copy_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v)
: insert_copy_proxy<Allocator, Iterator>(v)
{}
};
template<class Allocator, class Iterator>
struct insert_emplace_proxy_arg1<Allocator, Iterator
, typename boost::container::dtl::add_const<typename boost::container::allocator_traits<Allocator>::value_type>::type &
>
: public insert_copy_proxy<Allocator, Iterator>
{
static const bool single_value = true;
BOOST_CONTAINER_FORCEINLINE explicit insert_emplace_proxy_arg1(const typename boost::container::allocator_traits<Allocator>::value_type &v)
: insert_copy_proxy<Allocator, Iterator>(v)
{}
};
#endif
}}} //namespace boost { namespace container { namespace dtl {
#endif // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
namespace boost { namespace container { namespace dtl {
template <class T>
struct has_single_value
{
private:
struct two {char array_[2];};
template<bool Arg> struct wrapper;
template <class U> static two test(int, ...);
template <class U> static char test(int, const wrapper<U::single_value>*);
public:
static const bool value = sizeof(test<T>(0, 0)) == 1;
void dummy(){}
};
template<class InsertionProxy, bool = has_single_value<InsertionProxy>::value>
struct is_single_value_proxy_impl
{
static const bool value = InsertionProxy::single_value;
};
template<class InsertionProxy>
struct is_single_value_proxy_impl<InsertionProxy, false>
{
static const bool value = false;
};
template<class InsertionProxy>
struct is_single_value_proxy
: is_single_value_proxy_impl<InsertionProxy>
{};
}}} //namespace boost { namespace container { namespace dtl {
#include <boost/container/detail/config_end.hpp>
#endif //#ifndef BOOST_CONTAINER_ADVANCED_INSERT_INT_HPP

View File

@@ -0,0 +1,185 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2014-2014.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ALGORITHM_HPP
#define BOOST_CONTAINER_DETAIL_ALGORITHM_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/intrusive/detail/algorithm.hpp>
namespace boost {
namespace container {
using boost::intrusive::algo_equal;
using boost::intrusive::algo_lexicographical_compare;
template<class Func>
class binder1st
{
public:
typedef typename Func::second_argument_type argument_type;
typedef typename Func::result_type result_type;
binder1st(const Func& func, const typename Func::first_argument_type& arg)
: op(func), value(arg)
{}
result_type operator()(const argument_type& arg) const
{ return op(value, arg); }
result_type operator()(argument_type& arg) const
{ return op(value, arg); }
private:
Func op;
typename Func::first_argument_type value;
};
template<class Func, class T>
inline binder1st<Func> bind1st(const Func& func, const T& arg)
{ return boost::container::binder1st<Func>(func, arg); }
template<class Func>
class binder2nd
{
public:
typedef typename Func::first_argument_type argument_type;
typedef typename Func::result_type result_type;
binder2nd(const Func& func, const typename Func::second_argument_type& arg)
: op(func), value(arg)
{}
result_type operator()(const argument_type& arg) const
{ return op(arg, value); }
result_type operator()(argument_type& arg) const
{ return op(arg, value); }
private:
Func op;
typename Func::second_argument_type value;
};
template<class Func, class T>
inline binder2nd<Func> bind2nd(const Func& func, const T& arg)
{
return (boost::container::binder2nd<Func>(func, arg));
}
template<class Func>
class unary_negate
{
public:
typedef typename Func::argument_type argument_type;
typedef typename Func::result_type result_type;
explicit unary_negate(const Func& func)
: m_func(func)
{}
bool operator()(const typename Func::argument_type& arg) const
{ return !m_func(arg); }
private:
Func m_func;
};
template<class Func> inline
unary_negate<Func> not1(const Func& func)
{
return boost::container::unary_negate<Func>(func);
}
template<class InputIt, class UnaryPredicate>
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p)
{
for (; first != last; ++first) {
if (p(*first)) {
return first;
}
}
return last;
}
template<class ForwardIt1, class ForwardIt2, class BinaryPredicate>
ForwardIt1 find_end (ForwardIt1 first1, ForwardIt1 last1
,ForwardIt2 first2, ForwardIt2 last2
,BinaryPredicate p)
{
if (first2==last2)
return last1; // specified in C++11
ForwardIt1 ret = last1;
while (first1!=last1)
{
ForwardIt1 it1 = first1;
ForwardIt2 it2 = first2;
while ( p(*it1, *it2) ) {
++it1; ++it2;
if (it2==last2) {
ret=first1;
break;
}
if (it1==last1)
return ret;
}
++first1;
}
return ret;
}
template<class InputIt, class ForwardIt, class BinaryPredicate>
InputIt find_first_of(InputIt first1, InputIt last1, ForwardIt first2, ForwardIt last2, BinaryPredicate p)
{
for (; first1 != last1; ++first1) {
for (ForwardIt it = first2; it != last2; ++it) {
if (p(*first1, *it)) {
return first1;
}
}
}
return last1;
}
template<class ForwardIt1, class ForwardIt2, class BinaryPredicate>
ForwardIt1 search(ForwardIt1 first1, ForwardIt1 last1,
ForwardIt2 first2, ForwardIt2 last2, BinaryPredicate p)
{
for (; ; ++first1) {
ForwardIt1 it = first1;
for (ForwardIt2 it2 = first2; ; ++it, ++it2) {
if (it2 == last2) {
return first1;
}
if (it == last1) {
return last1;
}
if (!p(*it, *it2)) {
break;
}
}
}
}
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_ALGORITHM_HPP

View File

@@ -0,0 +1,60 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ALLOC_TRAITS_HPP
#define BOOST_CONTAINER_DETAIL_ALLOC_TRAITS_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
// move
#include <boost/move/adl_move_swap.hpp>
#include <boost/move/utility_core.hpp>
namespace boost {
namespace container {
namespace dtl {
template<class AllocatorType>
BOOST_CONTAINER_FORCEINLINE void swap_alloc(AllocatorType &, AllocatorType &, dtl::false_type)
BOOST_NOEXCEPT_OR_NOTHROW
{}
template<class AllocatorType>
BOOST_CONTAINER_FORCEINLINE void swap_alloc(AllocatorType &l, AllocatorType &r, dtl::true_type)
{ boost::adl_move_swap(l, r); }
template<class AllocatorType>
BOOST_CONTAINER_FORCEINLINE void assign_alloc(AllocatorType &, const AllocatorType &, dtl::false_type)
BOOST_NOEXCEPT_OR_NOTHROW
{}
template<class AllocatorType>
BOOST_CONTAINER_FORCEINLINE void assign_alloc(AllocatorType &l, const AllocatorType &r, dtl::true_type)
{ l = r; }
template<class AllocatorType>
BOOST_CONTAINER_FORCEINLINE void move_alloc(AllocatorType &, AllocatorType &, dtl::false_type)
BOOST_NOEXCEPT_OR_NOTHROW
{}
template<class AllocatorType>
BOOST_CONTAINER_FORCEINLINE void move_alloc(AllocatorType &l, AllocatorType &r, dtl::true_type)
{ l = ::boost::move(r); }
} //namespace dtl {
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_ALLOC_TRAITS_HPP

View File

@@ -0,0 +1,314 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_ALLOC_LIB_EXT_H
#define BOOST_CONTAINER_ALLOC_LIB_EXT_H
#include <stddef.h>
#ifdef _MSC_VER
#pragma warning (push)
#pragma warning (disable : 4127)
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*!An forward iterator to traverse the elements of a memory chain container.*/
typedef struct multialloc_node_impl
{
struct multialloc_node_impl *next_node_ptr;
} boost_cont_memchain_node;
/*!An forward iterator to traverse the elements of a memory chain container.*/
typedef struct multialloc_it_impl
{
boost_cont_memchain_node *node_ptr;
} boost_cont_memchain_it;
/*!Memory chain: A container holding memory portions allocated by boost_cont_multialloc_nodes
and boost_cont_multialloc_arrays functions.*/
typedef struct boost_cont_memchain_impl
{
size_t num_mem;
boost_cont_memchain_node root_node;
boost_cont_memchain_node *last_node_ptr;
} boost_cont_memchain;
/*!Advances the iterator one position so that it points to the next element in the memory chain*/
#define BOOST_CONTAINER_MEMIT_NEXT(IT) (IT.node_ptr = IT.node_ptr->next_node_ptr)
/*!Returns the address of the memory chain currently pointed by the iterator*/
#define BOOST_CONTAINER_MEMIT_ADDR(IT) ((void*)IT.node_ptr)
/*!Initializer for an iterator pointing to the position before the first element*/
#define BOOST_CONTAINER_MEMCHAIN_BEFORE_BEGIN_IT(PMEMCHAIN) { &((PMEMCHAIN)->root_node) }
/*!Initializer for an iterator pointing to the first element*/
#define BOOST_CONTAINER_MEMCHAIN_BEGIN_IT(PMEMCHAIN) {(PMEMCHAIN)->root_node.next_node_ptr }
/*!Initializer for an iterator pointing to the last element*/
#define BOOST_CONTAINER_MEMCHAIN_LAST_IT(PMEMCHAIN) {(PMEMCHAIN)->last_node_ptr }
/*!Initializer for an iterator pointing to one past the last element (end iterator)*/
#define BOOST_CONTAINER_MEMCHAIN_END_IT(PMEMCHAIN) {(boost_cont_memchain_node *)0 }
/*!True if IT is the end iterator, false otherwise*/
#define BOOST_CONTAINER_MEMCHAIN_IS_END_IT(PMEMCHAIN, IT) (!(IT).node_ptr)
/*!The address of the first memory portion hold by the memory chain*/
#define BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(PMEMCHAIN)((void*)((PMEMCHAIN)->root_node.next_node_ptr))
/*!The address of the last memory portion hold by the memory chain*/
#define BOOST_CONTAINER_MEMCHAIN_LASTMEM(PMEMCHAIN) ((void*)((PMEMCHAIN)->last_node_ptr))
/*!The number of memory portions hold by the memory chain*/
#define BOOST_CONTAINER_MEMCHAIN_SIZE(PMEMCHAIN) ((PMEMCHAIN)->num_mem)
/*!Initializes the memory chain from the first memory portion, the last memory
portion and number of portions obtained from another memory chain*/
#define BOOST_CONTAINER_MEMCHAIN_INIT_FROM(PMEMCHAIN, FIRST, LAST, NUM)\
(PMEMCHAIN)->last_node_ptr = (boost_cont_memchain_node *)(LAST), \
(PMEMCHAIN)->root_node.next_node_ptr = (boost_cont_memchain_node *)(FIRST), \
(PMEMCHAIN)->num_mem = (NUM);\
/**/
/*!Default initializes a memory chain. Postconditions: begin iterator is end iterator,
the number of portions is zero.*/
#define BOOST_CONTAINER_MEMCHAIN_INIT(PMEMCHAIN)\
((PMEMCHAIN)->root_node.next_node_ptr = 0, (PMEMCHAIN)->last_node_ptr = &((PMEMCHAIN)->root_node), (PMEMCHAIN)->num_mem = 0)\
/**/
/*!True if the memory chain is empty (holds no memory portions*/
#define BOOST_CONTAINER_MEMCHAIN_EMPTY(PMEMCHAIN)\
((PMEMCHAIN)->num_mem == 0)\
/**/
/*!Inserts a new memory portions in the front of the chain*/
#define BOOST_CONTAINER_MEMCHAIN_PUSH_BACK(PMEMCHAIN, MEM)\
do{\
boost_cont_memchain *____chain____ = (PMEMCHAIN);\
boost_cont_memchain_node *____tmp_mem____ = (boost_cont_memchain_node *)(MEM);\
____chain____->last_node_ptr->next_node_ptr = ____tmp_mem____;\
____tmp_mem____->next_node_ptr = 0;\
____chain____->last_node_ptr = ____tmp_mem____;\
++____chain____->num_mem;\
}while(0)\
/**/
/*!Inserts a new memory portions in the back of the chain*/
#define BOOST_CONTAINER_MEMCHAIN_PUSH_FRONT(PMEMCHAIN, MEM)\
do{\
boost_cont_memchain *____chain____ = (PMEMCHAIN);\
boost_cont_memchain_node *____tmp_mem____ = (boost_cont_memchain_node *)(MEM);\
boost_cont_memchain *____root____ = &((PMEMCHAIN)->root_node);\
if(!____chain____->root_node.next_node_ptr){\
____chain____->last_node_ptr = ____tmp_mem____;\
}\
boost_cont_memchain_node *____old_first____ = ____root____->next_node_ptr;\
____tmp_mem____->next_node_ptr = ____old_first____;\
____root____->next_node_ptr = ____tmp_mem____;\
++____chain____->num_mem;\
}while(0)\
/**/
/*!Erases the memory portion after the portion pointed by BEFORE_IT from the memory chain*/
/*!Precondition: BEFORE_IT must be a valid iterator of the memory chain and it can't be the end iterator*/
#define BOOST_CONTAINER_MEMCHAIN_ERASE_AFTER(PMEMCHAIN, BEFORE_IT)\
do{\
boost_cont_memchain *____chain____ = (PMEMCHAIN);\
boost_cont_memchain_node *____prev_node____ = (BEFORE_IT).node_ptr;\
boost_cont_memchain_node *____erase_node____ = ____prev_node____->next_node_ptr;\
if(____chain____->last_node_ptr == ____erase_node____){\
____chain____->last_node_ptr = &____chain____->root_node;\
}\
____prev_node____->next_node_ptr = ____erase_node____->next_node_ptr;\
--____chain____->num_mem;\
}while(0)\
/**/
/*!Erases the first portion from the memory chain.
Precondition: the memory chain must not be empty*/
#define BOOST_CONTAINER_MEMCHAIN_POP_FRONT(PMEMCHAIN)\
do{\
boost_cont_memchain *____chain____ = (PMEMCHAIN);\
boost_cont_memchain_node *____prev_node____ = &____chain____->root_node;\
boost_cont_memchain_node *____erase_node____ = ____prev_node____->next_node_ptr;\
if(____chain____->last_node_ptr == ____erase_node____){\
____chain____->last_node_ptr = &____chain____->root_node;\
}\
____prev_node____->next_node_ptr = ____erase_node____->next_node_ptr;\
--____chain____->num_mem;\
}while(0)\
/**/
/*!Joins two memory chains inserting the portions of the second chain at the back of the first chain*/
/*
#define BOOST_CONTAINER_MEMCHAIN_SPLICE_BACK(PMEMCHAIN, PMEMCHAIN2)\
do{\
boost_cont_memchain *____chain____ = (PMEMCHAIN);\
boost_cont_memchain *____chain2____ = (PMEMCHAIN2);\
if(!____chain2____->root_node.next_node_ptr){\
break;\
}\
else if(!____chain____->first_mem){\
____chain____->first_mem = ____chain2____->first_mem;\
____chain____->last_node_ptr = ____chain2____->last_node_ptr;\
____chain____->num_mem = ____chain2____->num_mem;\
BOOST_CONTAINER_MEMCHAIN_INIT(*____chain2____);\
}\
else{\
____chain____->last_node_ptr->next_node_ptr = ____chain2____->first_mem;\
____chain____->last_node_ptr = ____chain2____->last_node_ptr;\
____chain____->num_mem += ____chain2____->num_mem;\
}\
}while(0)\*/
/**/
/*!Joins two memory chains inserting the portions of the second chain at the back of the first chain*/
#define BOOST_CONTAINER_MEMCHAIN_INCORPORATE_AFTER(PMEMCHAIN, BEFORE_IT, FIRST, BEFORELAST, NUM)\
do{\
boost_cont_memchain *____chain____ = (PMEMCHAIN);\
boost_cont_memchain_node *____pnode____ = (BEFORE_IT).node_ptr;\
boost_cont_memchain_node *____next____ = ____pnode____->next_node_ptr;\
boost_cont_memchain_node *____first____ = (boost_cont_memchain_node *)(FIRST);\
boost_cont_memchain_node *____blast____ = (boost_cont_memchain_node *)(BEFORELAST);\
size_t ____num____ = (NUM);\
if(!____num____){\
break;\
}\
if(____pnode____ == ____chain____->last_node_ptr){\
____chain____->last_node_ptr = ____blast____;\
}\
____pnode____->next_node_ptr = ____first____;\
____blast____->next_node_ptr = ____next____;\
____chain____->num_mem += ____num____;\
}while(0)\
/**/
/*!Indicates the all elements allocated by boost_cont_multialloc_nodes or boost_cont_multialloc_arrays
must be contiguous.*/
#define BOOST_CONTAINER_DL_MULTIALLOC_ALL_CONTIGUOUS ((size_t)(-1))
/*!Indicates the number of contiguous elements allocated by boost_cont_multialloc_nodes or boost_cont_multialloc_arrays
should be selected by those functions.*/
#define BOOST_CONTAINER_DL_MULTIALLOC_DEFAULT_CONTIGUOUS ((size_t)(0))
typedef struct boost_cont_malloc_stats_impl
{
size_t max_system_bytes;
size_t system_bytes;
size_t in_use_bytes;
} boost_cont_malloc_stats_t;
typedef unsigned int allocation_type;
enum
{
// constants for allocation commands
BOOST_CONTAINER_ALLOCATE_NEW = 0X01,
BOOST_CONTAINER_EXPAND_FWD = 0X02,
BOOST_CONTAINER_EXPAND_BWD = 0X04,
BOOST_CONTAINER_SHRINK_IN_PLACE = 0X08,
BOOST_CONTAINER_NOTHROW_ALLOCATION = 0X10,
// BOOST_CONTAINER_ZERO_MEMORY = 0X20,
BOOST_CONTAINER_TRY_SHRINK_IN_PLACE = 0X40,
BOOST_CONTAINER_EXPAND_BOTH = BOOST_CONTAINER_EXPAND_FWD | BOOST_CONTAINER_EXPAND_BWD,
BOOST_CONTAINER_EXPAND_OR_NEW = BOOST_CONTAINER_ALLOCATE_NEW | BOOST_CONTAINER_EXPAND_BOTH
};
//#define BOOST_CONTAINER_DLMALLOC_FOOTERS
#ifndef BOOST_CONTAINER_DLMALLOC_FOOTERS
enum { BOOST_CONTAINER_ALLOCATION_PAYLOAD = sizeof(size_t) };
#else
enum { BOOST_CONTAINER_ALLOCATION_PAYLOAD = sizeof(size_t)*2 };
#endif
typedef struct boost_cont_command_ret_impl
{
void *first;
int second;
}boost_cont_command_ret_t;
size_t boost_cont_size(const void *p);
void* boost_cont_malloc(size_t bytes);
void boost_cont_free(void* mem);
void* boost_cont_memalign(size_t bytes, size_t alignment);
int boost_cont_multialloc_nodes
(size_t n_elements, size_t elem_size, size_t contiguous_elements, boost_cont_memchain *pchain);
int boost_cont_multialloc_arrays
(size_t n_elements, const size_t *sizes, size_t sizeof_element, size_t contiguous_elements, boost_cont_memchain *pchain);
void boost_cont_multidealloc(boost_cont_memchain *pchain);
size_t boost_cont_footprint();
size_t boost_cont_allocated_memory();
size_t boost_cont_chunksize(const void *p);
int boost_cont_all_deallocated();
boost_cont_malloc_stats_t boost_cont_malloc_stats();
size_t boost_cont_in_use_memory();
int boost_cont_trim(size_t pad);
int boost_cont_mallopt(int parameter_number, int parameter_value);
int boost_cont_grow
(void* oldmem, size_t minbytes, size_t maxbytes, size_t *received);
int boost_cont_shrink
(void* oldmem, size_t minbytes, size_t maxbytes, size_t *received, int do_commit);
void* boost_cont_alloc
(size_t minbytes, size_t preferred_bytes, size_t *received_bytes);
int boost_cont_malloc_check();
boost_cont_command_ret_t boost_cont_allocation_command
( allocation_type command
, size_t sizeof_object
, size_t limit_objects
, size_t preferred_objects
, size_t *received_objects
, void *reuse_ptr
);
void *boost_cont_sync_create();
void boost_cont_sync_destroy(void *sync);
int boost_cont_sync_lock(void *sync);
void boost_cont_sync_unlock(void *sync);
int boost_cont_global_sync_lock();
void boost_cont_global_sync_unlock();
#ifdef __cplusplus
} //extern "C" {
#endif
#ifdef _MSC_VER
#pragma warning (pop)
#endif
#endif //#define BOOST_CONTAINERDLMALLOC__EXT_H

View File

@@ -0,0 +1,58 @@
///////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_ALLOCATION_TYPE_HPP
#define BOOST_CONTAINER_ALLOCATION_TYPE_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
namespace boost {
namespace container {
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
enum allocation_type_v
{
// constants for allocation commands
allocate_new_v = 0x01,
expand_fwd_v = 0x02,
expand_bwd_v = 0x04,
// expand_both = expand_fwd | expand_bwd,
// expand_or_new = allocate_new | expand_both,
shrink_in_place_v = 0x08,
nothrow_allocation_v = 0x10,
zero_memory_v = 0x20,
try_shrink_in_place_v = 0x40
};
typedef unsigned int allocation_type;
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
static const allocation_type allocate_new = (allocation_type)allocate_new_v;
static const allocation_type expand_fwd = (allocation_type)expand_fwd_v;
static const allocation_type expand_bwd = (allocation_type)expand_bwd_v;
static const allocation_type shrink_in_place = (allocation_type)shrink_in_place_v;
static const allocation_type try_shrink_in_place= (allocation_type)try_shrink_in_place_v;
static const allocation_type nothrow_allocation = (allocation_type)nothrow_allocation_v;
static const allocation_type zero_memory = (allocation_type)zero_memory_v;
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //BOOST_CONTAINER_ALLOCATION_TYPE_HPP

View File

@@ -0,0 +1,163 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2012-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ALLOCATOR_VERSION_TRAITS_HPP
#define BOOST_CONTAINER_DETAIL_ALLOCATOR_VERSION_TRAITS_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/allocator_traits.hpp> //allocator_traits
#include <boost/container/throw_exception.hpp>
#include <boost/container/detail/multiallocation_chain.hpp> //multiallocation_chain
#include <boost/container/detail/version_type.hpp> //version_type
#include <boost/container/detail/allocation_type.hpp> //allocation_type
#include <boost/container/detail/mpl.hpp> //integral_constant
#include <boost/intrusive/pointer_traits.hpp> //pointer_traits
#include <boost/core/no_exceptions_support.hpp> //BOOST_TRY
namespace boost {
namespace container {
namespace dtl {
template<class Allocator, unsigned Version = boost::container::dtl::version<Allocator>::value>
struct allocator_version_traits
{
typedef ::boost::container::dtl::integral_constant
<unsigned, Version> alloc_version;
typedef typename Allocator::multiallocation_chain multiallocation_chain;
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
//Node allocation interface
static pointer allocate_one(Allocator &a)
{ return a.allocate_one(); }
static void deallocate_one(Allocator &a, const pointer &p)
{ a.deallocate_one(p); }
static void allocate_individual(Allocator &a, size_type n, multiallocation_chain &m)
{ return a.allocate_individual(n, m); }
static void deallocate_individual(Allocator &a, multiallocation_chain &holder)
{ a.deallocate_individual(holder); }
static pointer allocation_command(Allocator &a, allocation_type command,
size_type limit_size, size_type &prefer_in_recvd_out_size, pointer &reuse)
{ return a.allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse); }
};
template<class Allocator>
struct allocator_version_traits<Allocator, 1>
{
typedef ::boost::container::dtl::integral_constant
<unsigned, 1> alloc_version;
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
typedef typename boost::container::allocator_traits<Allocator>::value_type value_type;
typedef typename boost::intrusive::pointer_traits<pointer>::
template rebind_pointer<void>::type void_ptr;
typedef dtl::basic_multiallocation_chain
<void_ptr> multialloc_cached_counted;
typedef boost::container::dtl::
transform_multiallocation_chain
< multialloc_cached_counted, value_type> multiallocation_chain;
//Node allocation interface
static pointer allocate_one(Allocator &a)
{ return a.allocate(1); }
static void deallocate_one(Allocator &a, const pointer &p)
{ a.deallocate(p, 1); }
static void deallocate_individual(Allocator &a, multiallocation_chain &holder)
{
size_type n = holder.size();
typename multiallocation_chain::iterator it = holder.begin();
while(n){
--n;
pointer p = boost::intrusive::pointer_traits<pointer>::pointer_to(*it);
++it;
a.deallocate(p, 1);
}
}
struct allocate_individual_rollback
{
allocate_individual_rollback(Allocator &a, multiallocation_chain &chain)
: mr_a(a), mp_chain(&chain)
{}
~allocate_individual_rollback()
{
if(mp_chain)
allocator_version_traits::deallocate_individual(mr_a, *mp_chain);
}
void release()
{
mp_chain = 0;
}
Allocator &mr_a;
multiallocation_chain * mp_chain;
};
static void allocate_individual(Allocator &a, size_type n, multiallocation_chain &m)
{
allocate_individual_rollback rollback(a, m);
while(n--){
m.push_front(a.allocate(1));
}
rollback.release();
}
static pointer allocation_command(Allocator &a, allocation_type command,
size_type, size_type &prefer_in_recvd_out_size, pointer &reuse)
{
pointer ret = pointer();
if(BOOST_UNLIKELY(!(command & allocate_new) && !(command & nothrow_allocation))){
throw_logic_error("version 1 allocator without allocate_new flag");
}
else{
BOOST_TRY{
ret = a.allocate(prefer_in_recvd_out_size);
}
BOOST_CATCH(...){
if(!(command & nothrow_allocation)){
BOOST_RETHROW
}
}
BOOST_CATCH_END
reuse = pointer();
}
return ret;
}
};
} //namespace dtl {
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif // ! defined(BOOST_CONTAINER_DETAIL_ALLOCATOR_VERSION_TRAITS_HPP)

View File

@@ -0,0 +1,51 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2007-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_AUTO_LINK_HPP_INCLUDED
#define BOOST_CONTAINER_DETAIL_AUTO_LINK_HPP_INCLUDED
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
//Define BOOST_CONTAINER_DYNAMIC_LINKING which is independent from BOOST_*_NO_LIB
//and is needed is some tests that need to disable some checks (like operator new replacements)
//that don't work across DLL boundaries
#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_CONTAINER_DYN_LINK)
# define BOOST_CONTAINER_DYNAMIC_LINKING
#endif
//
// Automatically link to the correct build variant where possible.
//
#if !defined(BOOST_ALL_NO_LIB) && !defined(BOOST_CONTAINER_NO_LIB) && !defined(BOOST_CONTAINER_SOURCE)
//
// Set the name of our library, this will get undef'ed by auto_link.hpp
// once it's done with it:
//
#define BOOST_LIB_NAME boost_container
//
// If we're importing code from a dll, then tell auto_link.hpp about it:
//
#if defined(BOOST_CONTAINER_DYNAMIC_LINKING)
# define BOOST_DYN_LINK
#endif
//
// And include the header that does the work:
//
#include <boost/config/auto_link.hpp>
#endif // auto-linking disabled
#endif //#ifndef BOOST_CONTAINER_DETAIL_AUTO_LINK_HPP_INCLUDED

View File

@@ -0,0 +1,140 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_BLOCK_LIST_HEADER
#define BOOST_CONTAINER_DETAIL_BLOCK_LIST_HEADER
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/container_fwd.hpp>
#include <boost/container/pmr/memory_resource.hpp>
#include <boost/container/throw_exception.hpp>
#include <boost/intrusive/circular_list_algorithms.hpp>
#include <boost/move/detail/type_traits.hpp>
#include <boost/assert.hpp>
#include <boost/container/detail/placement_new.hpp>
#include <cstddef>
namespace boost {
namespace container {
namespace pmr {
struct list_node
{
list_node *next;
list_node *previous;
};
struct list_node_traits
{
typedef list_node node;
typedef list_node* node_ptr;
typedef const list_node* const_node_ptr;
static node_ptr get_next(const_node_ptr n)
{ return n->next; }
static node_ptr get_previous(const_node_ptr n)
{ return n->previous; }
static void set_next(const node_ptr & n, const node_ptr & next)
{ n->next = next; }
static void set_previous(const node_ptr & n, const node_ptr & previous)
{ n->previous = previous; }
};
struct block_list_header
: public list_node
{
std::size_t size;
};
typedef bi::circular_list_algorithms<list_node_traits> list_algo;
template<class DerivedFromBlockListHeader = block_list_header>
class block_list_base
{
list_node m_list;
static const std::size_t MaxAlignMinus1 = memory_resource::max_align-1u;
public:
static const std::size_t header_size = std::size_t(sizeof(DerivedFromBlockListHeader) + MaxAlignMinus1) & std::size_t(~MaxAlignMinus1);
explicit block_list_base()
{ list_algo::init_header(&m_list); }
#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
block_list_base(const block_list_base&) = delete;
block_list_base operator=(const block_list_base&) = delete;
#else
private:
block_list_base (const block_list_base&);
block_list_base operator=(const block_list_base&);
public:
#endif
~block_list_base()
{}
void *allocate(std::size_t size, memory_resource &mr)
{
if((size_t(-1) - header_size) < size)
throw_bad_alloc();
void *p = mr.allocate(size+header_size);
block_list_header &mb = *::new((void*)p, boost_container_new_t()) DerivedFromBlockListHeader;
mb.size = size+header_size;
list_algo::link_after(&m_list, &mb);
return (char *)p + header_size;
}
void deallocate(void *p, memory_resource &mr) BOOST_NOEXCEPT
{
DerivedFromBlockListHeader *pheader = static_cast<DerivedFromBlockListHeader*>
(static_cast<void*>((char*)p - header_size));
list_algo::unlink(pheader);
const std::size_t size = pheader->size;
static_cast<DerivedFromBlockListHeader*>(pheader)->~DerivedFromBlockListHeader();
mr.deallocate(pheader, size, memory_resource::max_align);
}
void release(memory_resource &mr) BOOST_NOEXCEPT
{
list_node *n = list_algo::node_traits::get_next(&m_list);
while(n != &m_list){
DerivedFromBlockListHeader &d = static_cast<DerivedFromBlockListHeader&>(*n);
n = list_algo::node_traits::get_next(n);
std::size_t size = d.size;
d.~DerivedFromBlockListHeader();
mr.deallocate(reinterpret_cast<char*>(&d), size, memory_resource::max_align);
}
list_algo::init_header(&m_list);
}
};
} //namespace pmr {
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //BOOST_CONTAINER_DETAIL_BLOCK_LIST_HEADER

View File

@@ -0,0 +1,158 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_BLOCK_SLIST_HEADER
#define BOOST_CONTAINER_DETAIL_BLOCK_SLIST_HEADER
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/container_fwd.hpp>
#include <boost/container/pmr/memory_resource.hpp>
#include <boost/container/throw_exception.hpp>
#include <boost/container/detail/placement_new.hpp>
#include <boost/move/detail/type_traits.hpp>
#include <boost/intrusive/linear_slist_algorithms.hpp>
#include <boost/assert.hpp>
#include <cstddef>
namespace boost {
namespace container {
namespace pmr {
struct slist_node
{
slist_node *next;
};
struct slist_node_traits
{
typedef slist_node node;
typedef slist_node* node_ptr;
typedef const slist_node* const_node_ptr;
static node_ptr get_next(const_node_ptr n)
{ return n->next; }
static void set_next(const node_ptr & n, const node_ptr & next)
{ n->next = next; }
};
struct block_slist_header
: public slist_node
{
std::size_t size;
};
typedef bi::linear_slist_algorithms<slist_node_traits> slist_algo;
template<class DerivedFromBlockSlistHeader = block_slist_header>
class block_slist_base
{
slist_node m_slist;
static const std::size_t MaxAlignMinus1 = memory_resource::max_align-1u;
public:
static const std::size_t header_size = std::size_t(sizeof(DerivedFromBlockSlistHeader) + MaxAlignMinus1) & std::size_t(~MaxAlignMinus1);
explicit block_slist_base()
{ slist_algo::init_header(&m_slist); }
#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
block_slist_base(const block_slist_base&) = delete;
block_slist_base operator=(const block_slist_base&) = delete;
#else
private:
block_slist_base (const block_slist_base&);
block_slist_base operator=(const block_slist_base&);
public:
#endif
~block_slist_base()
{}
void *allocate(std::size_t size, memory_resource &mr)
{
if((size_t(-1) - header_size) < size)
throw_bad_alloc();
void *p = mr.allocate(size+header_size);
block_slist_header &mb = *::new((void*)p, boost_container_new_t()) DerivedFromBlockSlistHeader;
mb.size = size+header_size;
slist_algo::link_after(&m_slist, &mb);
return (char *)p + header_size;
}
void release(memory_resource &mr) BOOST_NOEXCEPT
{
slist_node *n = slist_algo::node_traits::get_next(&m_slist);
while(n){
DerivedFromBlockSlistHeader &d = static_cast<DerivedFromBlockSlistHeader&>(*n);
n = slist_algo::node_traits::get_next(n);
std::size_t size = d.block_slist_header::size;
d.~DerivedFromBlockSlistHeader();
mr.deallocate(reinterpret_cast<char*>(&d), size, memory_resource::max_align);
}
slist_algo::init_header(&m_slist);
}
};
class block_slist
: public block_slist_base<>
{
memory_resource &m_upstream_rsrc;
public:
explicit block_slist(memory_resource &upstream_rsrc)
: block_slist_base<>(), m_upstream_rsrc(upstream_rsrc)
{}
#if !defined(BOOST_NO_CXX11_DELETED_FUNCTIONS) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
block_slist(const block_slist&) = delete;
block_slist operator=(const block_slist&) = delete;
#else
private:
block_slist (const block_slist&);
block_slist operator=(const block_slist&);
public:
#endif
~block_slist()
{ this->release(); }
void *allocate(std::size_t size)
{ return this->block_slist_base<>::allocate(size, m_upstream_rsrc); }
void release() BOOST_NOEXCEPT
{ return this->block_slist_base<>::release(m_upstream_rsrc); }
memory_resource& upstream_resource() const BOOST_NOEXCEPT
{ return m_upstream_rsrc; }
};
} //namespace pmr {
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //BOOST_CONTAINER_DETAIL_BLOCK_SLIST_HEADER

View File

@@ -0,0 +1,131 @@
///////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2014-2014. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
///////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_COMPARE_FUNCTORS_HPP
#define BOOST_CONTAINER_DETAIL_COMPARE_FUNCTORS_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
#include <boost/container/detail/workaround.hpp>
namespace boost {
namespace container {
template<class ValueType>
class equal_to_value
{
typedef ValueType value_type;
const value_type &t_;
public:
explicit equal_to_value(const value_type &t)
: t_(t)
{}
bool operator()(const value_type &t)const
{ return t_ == t; }
};
template<class Node, class Pred, class Ret = bool>
struct value_to_node_compare
: Pred
{
typedef Pred predicate_type;
typedef Node node_type;
value_to_node_compare()
: Pred()
{}
explicit value_to_node_compare(Pred pred)
: Pred(pred)
{}
Ret operator()(const Node &a, const Node &b) const
{ return static_cast<const Pred&>(*this)(a.get_data(), b.get_data()); }
Ret operator()(const Node &a) const
{ return static_cast<const Pred&>(*this)(a.get_data()); }
Ret operator()(const Node &a, const Node &b)
{ return static_cast<Pred&>(*this)(a.get_data(), b.get_data()); }
Ret operator()(const Node &a)
{ return static_cast<Pred&>(*this)(a.get_data()); }
predicate_type & predicate() { return static_cast<predicate_type&>(*this); }
const predicate_type & predicate() const { return static_cast<predicate_type&>(*this); }
};
template<class KeyPred, class KeyOfValue, class Node, class Ret = bool>
struct key_node_pred
: public boost::intrusive::detail::ebo_functor_holder<KeyPred>
{
BOOST_CONTAINER_FORCEINLINE explicit key_node_pred(const KeyPred &comp)
: base_t(comp)
{}
typedef boost::intrusive::detail::ebo_functor_holder<KeyPred> base_t;
typedef KeyPred key_predicate;
typedef KeyOfValue key_of_value;
typedef typename KeyOfValue::type key_type;
BOOST_CONTAINER_FORCEINLINE static const key_type &key_from(const Node &n)
{
return key_of_value()(n.get_data());
}
template <class T>
BOOST_CONTAINER_FORCEINLINE static const T &
key_from(const T &t)
{ return t; }
BOOST_CONTAINER_FORCEINLINE const key_predicate &key_pred() const
{ return static_cast<const key_predicate &>(*this); }
BOOST_CONTAINER_FORCEINLINE key_predicate &key_pred()
{ return static_cast<key_predicate &>(*this); }
BOOST_CONTAINER_FORCEINLINE Ret operator()(const key_type &key) const
{ return this->key_pred()(key); }
template<class U>
BOOST_CONTAINER_FORCEINLINE Ret operator()(const U &nonkey) const
{ return this->key_pred()(this->key_from(nonkey)); }
BOOST_CONTAINER_FORCEINLINE bool operator()(const key_type &key1, const key_type &key2) const
{ return this->key_pred()(key1, key2); }
template<class U>
BOOST_CONTAINER_FORCEINLINE bool operator()(const key_type &key1, const U &nonkey2) const
{ return this->key_pred()(key1, this->key_from(nonkey2)); }
template<class U>
BOOST_CONTAINER_FORCEINLINE bool operator()(const U &nonkey1, const key_type &key2) const
{ return this->key_pred()(this->key_from(nonkey1), key2); }
template<class U, class V>
BOOST_CONTAINER_FORCEINLINE bool operator()(const U &nonkey1, const V &nonkey2) const
{ return this->key_pred()(this->key_from(nonkey1), this->key_from(nonkey2)); }
};
} //namespace container {
} //namespace boost {
#endif //BOOST_CONTAINER_DETAIL_COMPARE_FUNCTORS_HPP

View File

@@ -0,0 +1,50 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED
#define BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED
#ifndef BOOST_CONFIG_HPP
#include <boost/config.hpp>
#endif
#endif //BOOST_CONTAINER_CONTAINER_DETAIL_CONFIG_INCLUDED
#ifdef BOOST_MSVC
#pragma warning (push)
#pragma warning (disable : 4127) // conditional expression is constant
#pragma warning (disable : 4146) // unary minus operator applied to unsigned type, result still unsigned
#pragma warning (disable : 4197) // top-level volatile in cast is ignored
#pragma warning (disable : 4251) // "identifier" : class "type" needs to have dll-interface to be used by clients of class "type2"
#pragma warning (disable : 4275) // non DLL-interface classkey "identifier" used as base for DLL-interface classkey "identifier"
#pragma warning (disable : 4284) // odd return type for operator->
#pragma warning (disable : 4290) // C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
#pragma warning (disable : 4324) // structure was padded due to __declspec(align(
#pragma warning (disable : 4345) // behavior change: an object of POD type constructed with an initializer of the form () will be default-initialized
#pragma warning (disable : 4355) // "this" : used in base member initializer list
#pragma warning (disable : 4503) // "identifier" : decorated name length exceeded, name was truncated
#pragma warning (disable : 4510) // default constructor could not be generated
#pragma warning (disable : 4511) // copy constructor could not be generated
#pragma warning (disable : 4512) // assignment operator could not be generated
#pragma warning (disable : 4514) // unreferenced inline removed
#pragma warning (disable : 4521) // Disable "multiple copy constructors specified"
#pragma warning (disable : 4522) // "class" : multiple assignment operators specified
#pragma warning (disable : 4541) // 'typeid' used on polymorphic type '' with /GR-; unpredictable behavior may result
#pragma warning (disable : 4584) // X is already a base-class of Y
#pragma warning (disable : 4610) // struct can never be instantiated - user defined constructor required
#pragma warning (disable : 4671) // the copy constructor is inaccessible
#pragma warning (disable : 4673) // throwing '' the following types will not be considered at the catch site
#pragma warning (disable : 4675) // "method" should be declared "static" and have exactly one parameter
#pragma warning (disable : 4706) // assignment within conditional expression
#pragma warning (disable : 4710) // function not inlined
#pragma warning (disable : 4714) // "function": marked as __forceinline not inlined
#pragma warning (disable : 4711) // function selected for automatic inline expansion
#pragma warning (disable : 4786) // identifier truncated in debug info
#pragma warning (disable : 4996) // "function": was declared deprecated
#endif //BOOST_MSVC

View File

@@ -0,0 +1,13 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#if defined BOOST_MSVC
#pragma warning (pop)
#endif

View File

@@ -0,0 +1,98 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2014-2014.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_CONSTRUCT_IN_PLACE_HPP
#define BOOST_CONTAINER_DETAIL_CONSTRUCT_IN_PLACE_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/allocator_traits.hpp>
#include <boost/container/detail/iterators.hpp>
#include <boost/container/detail/value_init.hpp>
namespace boost {
namespace container {
//In place construction
struct iterator_arg_t{};
template<class Allocator, class T, class InpIt>
BOOST_CONTAINER_FORCEINLINE void construct_in_place(Allocator &a, T* dest, InpIt source)
{ boost::container::allocator_traits<Allocator>::construct(a, dest, *source); }
template<class Allocator, class T, class U>
BOOST_CONTAINER_FORCEINLINE void construct_in_place(Allocator &a, T *dest, value_init_construct_iterator<U>)
{
boost::container::allocator_traits<Allocator>::construct(a, dest);
}
template <class T>
class default_init_construct_iterator;
template<class Allocator, class T, class U>
BOOST_CONTAINER_FORCEINLINE void construct_in_place(Allocator &a, T *dest, default_init_construct_iterator<U>)
{
boost::container::allocator_traits<Allocator>::construct(a, dest, default_init);
}
template <class T, class EmplaceFunctor>
class emplace_iterator;
template<class Allocator, class T, class U, class EF>
BOOST_CONTAINER_FORCEINLINE void construct_in_place(Allocator &a, T *dest, emplace_iterator<U, EF> ei)
{
ei.construct_in_place(a, dest);
}
//Assignment
template<class DstIt, class InpIt>
BOOST_CONTAINER_FORCEINLINE void assign_in_place(DstIt dest, InpIt source)
{ *dest = *source; }
template<class DstIt, class U>
BOOST_CONTAINER_FORCEINLINE void assign_in_place(DstIt dest, value_init_construct_iterator<U>)
{
dtl::value_init<U> val;
*dest = boost::move(val.get());
}
template <class DstIt>
class default_init_construct_iterator;
template<class DstIt, class U, class D>
BOOST_CONTAINER_FORCEINLINE void assign_in_place(DstIt dest, default_init_construct_iterator<U>)
{
U u;
*dest = boost::move(u);
}
template <class T, class EmplaceFunctor>
class emplace_iterator;
template<class DstIt, class U, class EF>
BOOST_CONTAINER_FORCEINLINE void assign_in_place(DstIt dest, emplace_iterator<U, EF> ei)
{
ei.assign_in_place(dest);
}
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_CONSTRUCT_IN_PLACE_HPP

View File

@@ -0,0 +1,53 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_CONTAINER_OR_ALLOCATOR_REBIND_HPP
#define BOOST_CONTAINER_DETAIL_CONTAINER_OR_ALLOCATOR_REBIND_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/allocator_traits.hpp>
#include <boost/container/detail/container_rebind.hpp>
#include <boost/container/detail/is_container.hpp>
namespace boost {
namespace container {
namespace dtl {
template<class AllocatorOrContainer, class ToType, bool = is_container<AllocatorOrContainer>::value>
struct container_or_allocator_rebind_impl
: container_rebind<AllocatorOrContainer, ToType>
{};
template<class AllocatorOrContainer, class ToType>
struct container_or_allocator_rebind_impl<AllocatorOrContainer, ToType, false>
: allocator_traits<AllocatorOrContainer>::template portable_rebind_alloc<ToType>
{};
template<class ToType>
struct container_or_allocator_rebind_impl<void, ToType, false>
: real_allocator<ToType, void>
{};
template<class AllocatorOrContainer, class ToType>
struct container_or_allocator_rebind
: container_or_allocator_rebind_impl<AllocatorOrContainer, ToType>
{};
} //namespace dtl {
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_CONTAINER_OR_ALLOCATOR_REBIND_HPP

View File

@@ -0,0 +1,163 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_CONTAINER_REBIND_HPP
#define BOOST_CONTAINER_DETAIL_CONTAINER_REBIND_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/allocator_traits.hpp>
#include <boost/container/container_fwd.hpp>
namespace boost {
namespace container {
namespace dtl {
template <class Cont, class U>
struct container_rebind;
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <template <class, class, class...> class Cont, typename V, typename A, class... An, class U>
struct container_rebind<Cont<V, A, An...>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, An...> type;
};
//Needed for non-conforming compilers like GCC 4.3
template <template <class, class> class Cont, typename V, typename A, class U>
struct container_rebind<Cont<V, A>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type> type;
};
template <template <class> class Cont, typename V, class U>
struct container_rebind<Cont<V>, U>
{
typedef Cont<U> type;
};
#else //C++03 compilers
template <template <class> class Cont //0arg
, typename V
, class U>
struct container_rebind<Cont<V>, U>
{
typedef Cont<U> type;
};
template <template <class, class> class Cont //0arg
, typename V, typename A
, class U>
struct container_rebind<Cont<V, A>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type> type;
};
template <template <class, class, class> class Cont //1arg
, typename V, typename A, class P0
, class U>
struct container_rebind<Cont<V, A, P0>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0> type;
};
template <template <class, class, class, class> class Cont //2arg
, typename V, typename A, class P0, class P1
, class U>
struct container_rebind<Cont<V, A, P0, P1>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0, P1> type;
};
template <template <class, class, class, class, class> class Cont //3arg
, typename V, typename A, class P0, class P1, class P2
, class U>
struct container_rebind<Cont<V, A, P0, P1, P2>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0, P1, P2> type;
};
template <template <class, class, class, class, class, class> class Cont //4arg
, typename V, typename A, class P0, class P1, class P2, class P3
, class U>
struct container_rebind<Cont<V, A, P0, P1, P2, P3>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0, P1, P2, P3> type;
};
template <template <class, class, class, class, class, class, class> class Cont //5arg
, typename V, typename A, class P0, class P1, class P2, class P3, class P4
, class U>
struct container_rebind<Cont<V, A, P0, P1, P2, P3, P4>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0, P1, P2, P3, P4> type;
};
template <template <class, class, class, class, class, class, class, class> class Cont //6arg
, typename V, typename A, class P0, class P1, class P2, class P3, class P4, class P5
, class U>
struct container_rebind<Cont<V, A, P0, P1, P2, P3, P4, P5>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0, P1, P2, P3, P4, P5> type;
};
template <template <class, class, class, class, class, class, class, class, class> class Cont //7arg
, typename V, typename A, class P0, class P1, class P2, class P3, class P4, class P5, class P6
, class U>
struct container_rebind<Cont<V, A, P0, P1, P2, P3, P4, P5, P6>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0, P1, P2, P3, P4, P5, P6> type;
};
template <template <class, class, class, class, class, class, class, class, class, class> class Cont //8arg
, typename V, typename A, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7
, class U>
struct container_rebind<Cont<V, A, P0, P1, P2, P3, P4, P5, P6, P7>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0, P1, P2, P3, P4, P5, P6, P7> type;
};
template <template <class, class, class, class, class, class, class, class, class, class, class> class Cont //9arg
, typename V, typename A, class P0, class P1, class P2, class P3, class P4, class P5, class P6, class P7, class P8
, class U>
struct container_rebind<Cont<V, A, P0, P1, P2, P3, P4, P5, P6, P7, P8>, U>
{
typedef Cont<U, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, P0, P1, P2, P3, P4, P5, P6, P7, P8> type;
};
#endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
//for small_vector,static_vector
template <typename V, std::size_t N, typename A, typename O, class U>
struct container_rebind<small_vector<V, N, A, O>, U>
{
typedef small_vector<U, N, typename allocator_traits<typename real_allocator<V, A>::type>::template portable_rebind_alloc<U>::type, O> type;
};
template <typename V, std::size_t N, typename O, class U>
struct container_rebind<static_vector<V, N, O>, U>
{
typedef static_vector<U, N, O> type;
};
} //namespace dtl {
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_CONTAINER_REBIND_HPP

View File

@@ -0,0 +1,474 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DESTROYERS_HPP
#define BOOST_CONTAINER_DESTROYERS_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/allocator_traits.hpp>
#include <boost/move/detail/to_raw_pointer.hpp>
#include <boost/container/detail/version_type.hpp>
namespace boost {
namespace container {
namespace dtl {
//!A deleter for scoped_ptr that deallocates the memory
//!allocated for an object using a STL allocator.
template <class Allocator>
struct scoped_deallocator
{
typedef allocator_traits<Allocator> allocator_traits_type;
typedef typename allocator_traits_type::pointer pointer;
typedef dtl::integral_constant<unsigned,
boost::container::dtl::
version<Allocator>::value> alloc_version;
private:
void priv_deallocate(version_1)
{ m_alloc.deallocate(m_ptr, 1); }
void priv_deallocate(version_2)
{ m_alloc.deallocate_one(m_ptr); }
BOOST_MOVABLE_BUT_NOT_COPYABLE(scoped_deallocator)
public:
pointer m_ptr;
Allocator& m_alloc;
scoped_deallocator(pointer p, Allocator& a)
: m_ptr(p), m_alloc(a)
{}
~scoped_deallocator()
{ if (m_ptr)priv_deallocate(alloc_version()); }
scoped_deallocator(BOOST_RV_REF(scoped_deallocator) o)
: m_ptr(o.m_ptr), m_alloc(o.m_alloc)
{ o.release(); }
pointer get() const
{ return m_ptr; }
void set(const pointer &p)
{ m_ptr = p; }
void release()
{ m_ptr = 0; }
};
template <class Allocator>
struct null_scoped_deallocator
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::pointer pointer;
null_scoped_deallocator(pointer, Allocator&, std::size_t)
{}
void release()
{}
pointer get() const
{ return pointer(); }
void set(const pointer &)
{}
};
//!A deleter for scoped_ptr that deallocates the memory
//!allocated for an array of objects using a STL allocator.
template <class Allocator>
struct scoped_array_deallocator
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::pointer pointer;
typedef typename AllocTraits::size_type size_type;
scoped_array_deallocator(pointer p, Allocator& a, std::size_t length)
: m_ptr(p), m_alloc(a), m_length(length) {}
~scoped_array_deallocator()
{ if (m_ptr) m_alloc.deallocate(m_ptr, size_type(m_length)); }
void release()
{ m_ptr = 0; }
private:
pointer m_ptr;
Allocator& m_alloc;
std::size_t m_length;
};
template <class Allocator>
struct null_scoped_array_deallocator
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::pointer pointer;
null_scoped_array_deallocator(pointer, Allocator&, std::size_t)
{}
void release()
{}
};
template <class Allocator>
struct scoped_node_destroy_deallocator
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::pointer pointer;
typedef dtl::integral_constant<unsigned,
boost::container::dtl::
version<Allocator>::value> alloc_version;
scoped_node_destroy_deallocator(pointer p, Allocator& a)
: m_ptr(p), m_alloc(a) {}
~scoped_node_destroy_deallocator()
{
if(m_ptr){
boost::movelib::to_raw_pointer(m_ptr)->destructor(m_alloc);
priv_deallocate(m_ptr, alloc_version());
}
}
void release()
{ m_ptr = 0; }
private:
void priv_deallocate(const pointer &p, version_1)
{ AllocTraits::deallocate(m_alloc, p, 1); }
void priv_deallocate(const pointer &p, version_2)
{ m_alloc.deallocate_one(p); }
pointer m_ptr;
Allocator& m_alloc;
};
//!A deleter for scoped_ptr that destroys
//!an object using a STL allocator.
template <class Allocator>
struct scoped_destructor_n
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::pointer pointer;
typedef typename AllocTraits::value_type value_type;
BOOST_CONTAINER_FORCEINLINE scoped_destructor_n(pointer p, Allocator& a, std::size_t n)
: m_p(p), m_a(a), m_n(n)
{}
BOOST_CONTAINER_FORCEINLINE void release()
{ m_p = 0; m_n = 0; }
BOOST_CONTAINER_FORCEINLINE void increment_size(std::size_t inc)
{ m_n += inc; }
BOOST_CONTAINER_FORCEINLINE void increment_size_backwards(std::size_t inc)
{ m_n += inc; m_p -= std::ptrdiff_t(inc); }
BOOST_CONTAINER_FORCEINLINE void shrink_forward(std::size_t inc)
{ m_n -= inc; m_p += std::ptrdiff_t(inc); }
~scoped_destructor_n()
{
if(m_n){
value_type *raw_ptr = boost::movelib::to_raw_pointer(m_p);
do {
--m_n;
AllocTraits::destroy(m_a, raw_ptr);
++raw_ptr;
} while(m_n);
}
}
private:
pointer m_p;
Allocator & m_a;
std::size_t m_n;
};
//!A deleter for scoped_ptr that destroys
//!an object using a STL allocator.
template <class Allocator>
struct null_scoped_destructor_n
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::pointer pointer;
BOOST_CONTAINER_FORCEINLINE null_scoped_destructor_n(pointer, Allocator&, std::size_t)
{}
BOOST_CONTAINER_FORCEINLINE void increment_size(std::size_t)
{}
BOOST_CONTAINER_FORCEINLINE void increment_size_backwards(std::size_t)
{}
BOOST_CONTAINER_FORCEINLINE void shrink_forward(std::size_t)
{}
BOOST_CONTAINER_FORCEINLINE void release()
{}
};
//!A deleter for scoped_ptr that destroys
//!an object using a STL allocator.
template <class Allocator>
struct scoped_destructor_range
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::pointer pointer;
typedef typename AllocTraits::value_type value_type;
BOOST_CONTAINER_FORCEINLINE scoped_destructor_range(pointer p, pointer e, Allocator& a)
: m_p(p), m_e(e), m_a(a)
{}
BOOST_CONTAINER_FORCEINLINE void release()
{ m_p = pointer(); m_e = pointer(); }
BOOST_CONTAINER_FORCEINLINE void set_end(pointer e)
{ m_e = e; }
BOOST_CONTAINER_FORCEINLINE void set_begin(pointer b)
{ m_p = b; }
BOOST_CONTAINER_FORCEINLINE void set_range(pointer b, pointer e)
{ m_p = b; m_e = e; }
~scoped_destructor_range()
{
while(m_p != m_e){
value_type *raw_ptr = boost::movelib::to_raw_pointer(m_p);
AllocTraits::destroy(m_a, raw_ptr);
++m_p;
}
}
private:
pointer m_p;
pointer m_e;
Allocator & m_a;
};
//!A deleter for scoped_ptr that destroys
//!an object using a STL allocator.
template <class Allocator>
struct null_scoped_destructor_range
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::pointer pointer;
BOOST_CONTAINER_FORCEINLINE null_scoped_destructor_range(pointer, pointer, Allocator&)
{}
BOOST_CONTAINER_FORCEINLINE void release()
{}
BOOST_CONTAINER_FORCEINLINE void set_end(pointer)
{}
BOOST_CONTAINER_FORCEINLINE void set_begin(pointer)
{}
BOOST_CONTAINER_FORCEINLINE void set_range(pointer, pointer)
{}
};
template<class Allocator>
class scoped_destructor
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
public:
typedef typename Allocator::value_type value_type;
BOOST_CONTAINER_FORCEINLINE scoped_destructor(Allocator &a, value_type *pv)
: pv_(pv), a_(a)
{}
BOOST_CONTAINER_FORCEINLINE ~scoped_destructor()
{
if(pv_){
AllocTraits::destroy(a_, pv_);
}
}
BOOST_CONTAINER_FORCEINLINE void release()
{ pv_ = 0; }
BOOST_CONTAINER_FORCEINLINE void set(value_type *ptr) { pv_ = ptr; }
BOOST_CONTAINER_FORCEINLINE value_type *get() const { return pv_; }
private:
value_type *pv_;
Allocator &a_;
};
template<class Allocator, class Value = typename Allocator::value_type>
class value_destructor
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
public:
typedef Value value_type;
BOOST_CONTAINER_FORCEINLINE value_destructor(Allocator &a, value_type &rv)
: rv_(rv), a_(a)
{}
BOOST_CONTAINER_FORCEINLINE ~value_destructor()
{
AllocTraits::destroy(a_, &rv_);
}
private:
value_type &rv_;
Allocator &a_;
};
template <class Allocator>
class allocator_node_destroyer
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
typedef typename AllocTraits::value_type value_type;
typedef typename AllocTraits::pointer pointer;
typedef dtl::integral_constant<unsigned,
boost::container::dtl::
version<Allocator>::value> alloc_version;
private:
Allocator & a_;
private:
BOOST_CONTAINER_FORCEINLINE void priv_deallocate(const pointer &p, version_1)
{ AllocTraits::deallocate(a_,p, 1); }
BOOST_CONTAINER_FORCEINLINE void priv_deallocate(const pointer &p, version_2)
{ a_.deallocate_one(p); }
public:
BOOST_CONTAINER_FORCEINLINE explicit allocator_node_destroyer(Allocator &a)
: a_(a)
{}
BOOST_CONTAINER_FORCEINLINE void operator()(const pointer &p)
{
boost::movelib::to_raw_pointer(p)->destructor(a_);
this->priv_deallocate(p, alloc_version());
}
};
template<class Allocator>
class scoped_node_destructor
{
typedef boost::container::allocator_traits<Allocator> AllocTraits;
public:
typedef typename Allocator::value_type value_type;
BOOST_CONTAINER_FORCEINLINE scoped_node_destructor(Allocator &a, value_type *pv)
: pv_(pv), a_(a)
{}
BOOST_CONTAINER_FORCEINLINE ~scoped_node_destructor()
{
if(pv_){
pv_->destructor(a_);
}
}
BOOST_CONTAINER_FORCEINLINE void release()
{ pv_ = 0; }
BOOST_CONTAINER_FORCEINLINE void set(value_type *ptr) { pv_ = ptr; }
BOOST_CONTAINER_FORCEINLINE value_type *get() const { return pv_; }
private:
value_type *pv_;
Allocator &a_;
};
template <class Allocator>
class allocator_node_destroyer_and_chain_builder
{
typedef allocator_traits<Allocator> allocator_traits_type;
typedef typename allocator_traits_type::value_type value_type;
typedef typename Allocator::multiallocation_chain multiallocation_chain;
Allocator & a_;
multiallocation_chain &c_;
public:
BOOST_CONTAINER_FORCEINLINE allocator_node_destroyer_and_chain_builder(Allocator &a, multiallocation_chain &c)
: a_(a), c_(c)
{}
BOOST_CONTAINER_FORCEINLINE void operator()(const typename Allocator::pointer &p)
{
boost::movelib::to_raw_pointer(p)->destructor(a_);
c_.push_back(p);
}
};
template <class Allocator>
class allocator_multialloc_chain_node_deallocator
{
typedef allocator_traits<Allocator> allocator_traits_type;
typedef typename allocator_traits_type::value_type value_type;
typedef typename Allocator::multiallocation_chain multiallocation_chain;
typedef allocator_node_destroyer_and_chain_builder<Allocator> chain_builder;
Allocator & a_;
multiallocation_chain c_;
public:
BOOST_CONTAINER_FORCEINLINE allocator_multialloc_chain_node_deallocator(Allocator &a)
: a_(a), c_()
{}
BOOST_CONTAINER_FORCEINLINE chain_builder get_chain_builder()
{ return chain_builder(a_, c_); }
BOOST_CONTAINER_FORCEINLINE ~allocator_multialloc_chain_node_deallocator()
{
a_.deallocate_individual(c_);
}
};
} //namespace dtl {
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //#ifndef BOOST_CONTAINER_DESTROYERS_HPP

View File

@@ -0,0 +1,463 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_HPP
#define BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_HPP
#if defined (_MSC_VER)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/allocator_traits.hpp>
#include <boost/container/uses_allocator.hpp>
#include <boost/container/detail/addressof.hpp>
#include <boost/container/detail/mpl.hpp>
#include <boost/container/detail/is_pair.hpp>
#include <boost/container/detail/type_traits.hpp>
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/move/detail/fwd_macros.hpp>
#else
#include <boost/container/detail/variadic_templates_tools.hpp>
#endif
#include <boost/move/utility_core.hpp>
#include <boost/core/no_exceptions_support.hpp>
namespace boost { namespace container {
namespace dtl {
// Check if we can detect is_convertible using advanced SFINAE expressions
#if !defined(BOOST_NO_CXX11_DECLTYPE) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
//! Code inspired by Mathias Gaunard's is_convertible.cpp found in the Boost mailing list
//! http://boost.2283326.n4.nabble.com/type-traits-is-constructible-when-decltype-is-supported-td3575452.html
//! Thanks Mathias!
//With variadic templates, we need a single class to implement the trait
template<class T, class ...Args>
struct is_constructible
{
typedef char yes_type;
struct no_type
{ char padding[2]; };
template<std::size_t N>
struct dummy;
template<class X>
static decltype(X(boost::move_detail::declval<Args>()...), true_type()) test(int);
template<class X>
static no_type test(...);
static const bool value = sizeof(test<T>(0)) == sizeof(yes_type);
};
template <class T, class InnerAlloc, class ...Args>
struct is_constructible_with_allocator_prefix
: is_constructible<T, allocator_arg_t, InnerAlloc, Args...>
{};
#else // #if !defined(BOOST_NO_SFINAE_EXPR) && !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
//Without advanced SFINAE expressions, we can't use is_constructible
//so backup to constructible_with_allocator_xxx
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class T, class InnerAlloc, class ...Args>
struct is_constructible_with_allocator_prefix
: constructible_with_allocator_prefix<T>
{};
template <class T, class InnerAlloc, class ...Args>
struct is_constructible_with_allocator_suffix
: constructible_with_allocator_suffix<T>
{};
#else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template <class T, class InnerAlloc, BOOST_MOVE_CLASSDFLT9>
struct is_constructible_with_allocator_prefix
: constructible_with_allocator_prefix<T>
{};
template <class T, class InnerAlloc, BOOST_MOVE_CLASSDFLT9>
struct is_constructible_with_allocator_suffix
: constructible_with_allocator_suffix<T>
{};
#endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#endif // #if !defined(BOOST_NO_SFINAE_EXPR)
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template < typename ConstructAlloc
, typename ArgAlloc
, typename T
, class ...Args
>
BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and
< void
, dtl::is_not_pair<T>
, dtl::not_< uses_allocator<T, typename remove_cvref<ArgAlloc>::type > >
>::type dispatch_uses_allocator
( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p, BOOST_FWD_REF(Args)...args)
{
(void)arg_alloc;
allocator_traits<ConstructAlloc>::construct(construct_alloc, p, ::boost::forward<Args>(args)...);
}
// allocator_arg_t
template < typename ConstructAlloc
, typename ArgAlloc
, typename T
, class ...Args
>
BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and
< void
, dtl::is_not_pair<T>
, uses_allocator<T, typename remove_cvref<ArgAlloc>::type>
, is_constructible_with_allocator_prefix<T, ArgAlloc, Args...>
>::type dispatch_uses_allocator
( ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p, BOOST_FWD_REF(Args) ...args)
{
allocator_traits<ConstructAlloc>::construct
( construct_alloc, p, allocator_arg
, ::boost::forward<ArgAlloc>(arg_alloc), ::boost::forward<Args>(args)...);
}
// allocator suffix
template < typename ConstructAlloc
, typename ArgAlloc
, typename T
, class ...Args
>
BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and
< void
, dtl::is_not_pair<T>
, uses_allocator<T, typename remove_cvref<ArgAlloc>::type>
, dtl::not_<is_constructible_with_allocator_prefix<T, ArgAlloc, Args...> >
>::type dispatch_uses_allocator
( ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p, BOOST_FWD_REF(Args)...args)
{
allocator_traits<ConstructAlloc>::construct
(construct_alloc, p, ::boost::forward<Args>(args)..., ::boost::forward<ArgAlloc>(arg_alloc));
}
#else //#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
template <typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and\
< void\
, dtl::is_not_pair<T>\
, dtl::not_<uses_allocator<T, typename remove_cvref<ArgAlloc>::type> >\
>::type\
dispatch_uses_allocator\
(ConstructAlloc &construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
{\
(void)arg_alloc;\
allocator_traits<ConstructAlloc>::construct(construct_alloc, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
}\
//
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE)
#undef BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE
#define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
template < typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and\
< void\
, dtl::is_not_pair<T>\
, uses_allocator<T, typename remove_cvref<ArgAlloc>::type>\
, is_constructible_with_allocator_prefix<T, ArgAlloc BOOST_MOVE_I##N BOOST_MOVE_TARG##N>\
>::type\
dispatch_uses_allocator\
(ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
{\
allocator_traits<ConstructAlloc>::construct\
(construct_alloc, p, allocator_arg, ::boost::forward<ArgAlloc>(arg_alloc) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
}\
//
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE)
#undef BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE
#define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
template < typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and\
< void\
, dtl::is_not_pair<T>\
, uses_allocator<T, typename remove_cvref<ArgAlloc>::type>\
, dtl::not_<is_constructible_with_allocator_prefix<T, ArgAlloc BOOST_MOVE_I##N BOOST_MOVE_TARG##N> >\
>::type\
dispatch_uses_allocator\
(ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
{\
allocator_traits<ConstructAlloc>::construct\
(construct_alloc, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N, ::boost::forward<ArgAlloc>(arg_alloc));\
}\
//
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE)
#undef BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE
#endif //#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template < typename ConstructAlloc
, typename ArgAlloc
, typename Pair
> inline
BOOST_CONTAINER_DOC1ST(void, typename dtl::enable_if<dtl::is_pair<Pair> BOOST_MOVE_I void >::type)
dispatch_uses_allocator
( ConstructAlloc & construct_alloc
, BOOST_FWD_REF(ArgAlloc) arg_alloc
, Pair* p)
{
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(p->first));
BOOST_TRY{
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(p->second));
}
BOOST_CATCH(...) {
allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(p->first));
BOOST_RETHROW
}
BOOST_CATCH_END
}
template < typename ConstructAlloc
, typename ArgAlloc
, class Pair, class U, class V>
BOOST_CONTAINER_DOC1ST(void, typename dtl::enable_if<dtl::is_pair<Pair> BOOST_MOVE_I void>::type)
dispatch_uses_allocator
( ConstructAlloc & construct_alloc
, BOOST_FWD_REF(ArgAlloc) arg_alloc
, Pair* p, BOOST_FWD_REF(U) x, BOOST_FWD_REF(V) y)
{
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(p->first), ::boost::forward<U>(x));
BOOST_TRY{
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(p->second), ::boost::forward<V>(y));
}
BOOST_CATCH(...){
allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(p->first));
BOOST_RETHROW
}
BOOST_CATCH_END
}
template < typename ConstructAlloc
, typename ArgAlloc
, class Pair, class Pair2>
BOOST_CONTAINER_DOC1ST(void, typename dtl::enable_if< dtl::is_pair<Pair> BOOST_MOVE_I void >::type)
dispatch_uses_allocator
(ConstructAlloc & construct_alloc
, BOOST_FWD_REF(ArgAlloc) arg_alloc
, Pair* p, Pair2& x)
{ dispatch_uses_allocator(construct_alloc, arg_alloc, p, x.first, x.second); }
template < typename ConstructAlloc
, typename ArgAlloc
, class Pair, class Pair2>
typename dtl::enable_if_and
< void
, dtl::is_pair<Pair>
, dtl::not_<boost::move_detail::is_reference<Pair2> > >::type //This is needed for MSVC10 and ambiguous overloads
dispatch_uses_allocator
(ConstructAlloc & construct_alloc
, BOOST_FWD_REF(ArgAlloc) arg_alloc
, Pair* p, BOOST_RV_REF_BEG Pair2 BOOST_RV_REF_END x)
{ dispatch_uses_allocator(construct_alloc, arg_alloc, p, ::boost::move(x.first), ::boost::move(x.second)); }
//piecewise construction from boost::tuple
#define BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BOOST_TUPLE_CODE(N,M)\
template< typename ConstructAlloc, typename ArgAlloc, class Pair \
, template<class, class, class, class, class, class, class, class, class, class> class BoostTuple \
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
typename dtl::enable_if< dtl::is_pair<Pair> BOOST_MOVE_I void>::type\
dispatch_uses_allocator( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
, BoostTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,N),::boost::tuples::null_type)> p\
, BoostTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::boost::tuples::null_type)> q)\
{\
(void)p; (void)q;\
dispatch_uses_allocator\
(construct_alloc, arg_alloc, dtl::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_TMPL_GET##N);\
BOOST_TRY{\
dispatch_uses_allocator\
(construct_alloc, arg_alloc, dtl::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_TMPL_GETQ##M);\
}\
BOOST_CATCH(...) {\
allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(pair->first));\
BOOST_RETHROW\
}\
BOOST_CATCH_END\
}\
//
BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BOOST_TUPLE_CODE)
#undef BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BOOST_TUPLE_CODE
//piecewise construction from Std Tuple
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template< typename ConstructAlloc, typename ArgAlloc, class Pair
, template<class ...> class Tuple, class... Args1, class... Args2, size_t... Indexes1, size_t... Indexes2>
void dispatch_uses_allocator_index( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair
, Tuple<Args1...>& t1, Tuple<Args2...>& t2, index_tuple<Indexes1...>, index_tuple<Indexes2...>)
{
(void)t1; (void)t2;
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(pair->first), ::boost::forward<Args1>(get<Indexes1>(t1))...);
BOOST_TRY{
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(pair->second), ::boost::forward<Args2>(get<Indexes2>(t2))...);
}
BOOST_CATCH(...){
allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(pair->first));
BOOST_RETHROW
}
BOOST_CATCH_END
}
template< typename ConstructAlloc, typename ArgAlloc, class Pair
, template<class ...> class Tuple, class... Args1, class... Args2>
typename dtl::enable_if< dtl::is_pair<Pair>, void >::type
dispatch_uses_allocator( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t
, Tuple<Args1...> t1, Tuple<Args2...> t2)
{
(dispatch_uses_allocator_index)( construct_alloc, arg_alloc, pair, t1, t2
, typename build_number_seq<sizeof...(Args1)>::type()
, typename build_number_seq<sizeof...(Args2)>::type());
}
#elif defined(BOOST_MSVC) && (_CPPLIB_VER == 520)
//MSVC 2010 tuple implementation
#define BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2010_TUPLE_CODE(N,M)\
template< typename ConstructAlloc, typename ArgAlloc, class Pair\
, template<class, class, class, class, class, class, class, class, class, class> class StdTuple\
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
typename dtl::enable_if< dtl::is_pair<Pair> BOOST_MOVE_I void>::type\
dispatch_uses_allocator(ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
, StdTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,N),::std::tr1::_Nil)> p\
, StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::std::tr1::_Nil)> q)\
{\
(void)p; (void)q;\
dispatch_uses_allocator\
(construct_alloc, arg_alloc, dtl::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_GET_IDX##N);\
BOOST_TRY{\
dispatch_uses_allocator\
(construct_alloc, arg_alloc, dtl::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_GET_IDXQ##M);\
}\
BOOST_CATCH(...) {\
allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(pair->first));\
BOOST_RETHROW\
}\
BOOST_CATCH_END\
}\
//
BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2010_TUPLE_CODE)
#undef BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2010_TUPLE_CODE
#elif defined(BOOST_MSVC) && (_CPPLIB_VER == 540)
#if _VARIADIC_MAX >= 9
#define BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2012_TUPLE_MAX_IT 9
#else
#define BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2012_TUPLE_MAX_IT BOOST_MOVE_ADD(_VARIADIC_MAX, 1)
#endif
//MSVC 2012 tuple implementation
#define BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2012_TUPLE_CODE(N,M)\
template< typename ConstructAlloc, typename ArgAlloc, class Pair\
, template<BOOST_MOVE_REPEAT(_VARIADIC_MAX, class), class, class, class> class StdTuple \
BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
typename dtl::enable_if< dtl::is_pair<Pair> BOOST_MOVE_I void>::type\
dispatch_uses_allocator\
( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
, StdTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(BOOST_MOVE_ADD(_VARIADIC_MAX, 3),N),::std::_Nil) > p\
, StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(BOOST_MOVE_ADD(_VARIADIC_MAX, 3),M),::std::_Nil) > q)\
{\
(void)p; (void)q;\
dispatch_uses_allocator\
(construct_alloc, arg_alloc, dtl::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_GET_IDX##N);\
BOOST_TRY{\
dispatch_uses_allocator\
(construct_alloc, arg_alloc, dtl::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_GET_IDXQ##M);\
}\
BOOST_CATCH(...) {\
allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(pair->first));\
BOOST_RETHROW\
}\
BOOST_CATCH_END\
}\
//
BOOST_MOVE_ITER2D_0TOMAX(BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2012_TUPLE_MAX_IT, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2012_TUPLE_CODE)
#undef BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2010_TUPLE_CODE
#undef BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_MSVC2012_TUPLE_MAX_IT
#endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template < typename ConstructAlloc
, typename ArgAlloc
, class Pair, class KeyType, class ... Args>
typename dtl::enable_if< dtl::is_pair<Pair>, void >::type
dispatch_uses_allocator
(ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* p, try_emplace_t, BOOST_FWD_REF(KeyType) k, BOOST_FWD_REF(Args) ...args)
{
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(p->first), ::boost::forward<KeyType>(k));
BOOST_TRY{
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(p->second), ::boost::forward<Args>(args)...);
}
BOOST_CATCH(...) {
allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(p->first));
BOOST_RETHROW
}
BOOST_CATCH_END
}
#else
#define BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_PAIR_TRY_EMPLACE_CODE(N) \
template <typename ConstructAlloc, typename ArgAlloc, class Pair, class KeyType BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
inline typename dtl::enable_if\
< dtl::is_pair<Pair> BOOST_MOVE_I void >::type\
dispatch_uses_allocator\
(ConstructAlloc &construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* p, try_emplace_t, \
BOOST_FWD_REF(KeyType) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
{\
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(p->first), ::boost::forward<KeyType>(k));\
BOOST_TRY{\
dispatch_uses_allocator(construct_alloc, arg_alloc, dtl::addressof(p->second) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
}\
BOOST_CATCH(...) {\
allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(p->first));\
BOOST_RETHROW\
}\
BOOST_CATCH_END\
}\
//
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_PAIR_TRY_EMPLACE_CODE)
#undef BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_PAIR_TRY_EMPLACE_CODE
#endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
} //namespace dtl
}} // namespace boost { namespace container {
#include <boost/container/detail/config_end.hpp>
#endif // BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_HPP

View File

@@ -0,0 +1,103 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2015-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ALLOC_LIB_HPP
#define BOOST_CONTAINER_DETAIL_ALLOC_LIB_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/detail/auto_link.hpp>
#include <boost/container/detail/alloc_lib.h>
namespace boost{
namespace container{
typedef boost_cont_command_ret_t dlmalloc_command_ret_t;
typedef boost_cont_memchain dlmalloc_memchain;
typedef boost_cont_memchain_it dlmalloc_memchain_it;
typedef boost_cont_malloc_stats_t dlmalloc_malloc_stats_t;
BOOST_CONTAINER_DECL size_t dlmalloc_size(const void *p);
BOOST_CONTAINER_DECL void* dlmalloc_malloc(size_t bytes);
BOOST_CONTAINER_DECL void dlmalloc_free(void* mem);
BOOST_CONTAINER_DECL void* dlmalloc_memalign(size_t bytes, size_t alignment);
BOOST_CONTAINER_DECL int dlmalloc_multialloc_nodes
(size_t n_elements, size_t elem_size, size_t contiguous_elements, boost_cont_memchain *pchain);
BOOST_CONTAINER_DECL int dlmalloc_multialloc_arrays
(size_t n_elements, const size_t *sizes, size_t sizeof_element, size_t contiguous_elements, boost_cont_memchain *pchain);
BOOST_CONTAINER_DECL void dlmalloc_multidealloc(boost_cont_memchain *pchain);
BOOST_CONTAINER_DECL size_t dlmalloc_footprint();
BOOST_CONTAINER_DECL size_t dlmalloc_allocated_memory();
BOOST_CONTAINER_DECL size_t dlmalloc_chunksize(const void *p);
BOOST_CONTAINER_DECL int dlmalloc_all_deallocated();
BOOST_CONTAINER_DECL boost_cont_malloc_stats_t dlmalloc_malloc_stats();
BOOST_CONTAINER_DECL size_t dlmalloc_in_use_memory();
BOOST_CONTAINER_DECL int dlmalloc_trim(size_t pad);
BOOST_CONTAINER_DECL int dlmalloc_mallopt(int parameter_number, int parameter_value);
BOOST_CONTAINER_DECL int dlmalloc_grow(void* oldmem, size_t minbytes, size_t maxbytes, size_t *received);
BOOST_CONTAINER_DECL int dlmalloc_shrink(void* oldmem, size_t minbytes, size_t maxbytes, size_t *received, int do_commit);
BOOST_CONTAINER_DECL void* dlmalloc_alloc(size_t minbytes, size_t preferred_bytes, size_t *received_bytes);
BOOST_CONTAINER_DECL int dlmalloc_malloc_check();
BOOST_CONTAINER_DECL boost_cont_command_ret_t dlmalloc_allocation_command
( allocation_type command
, size_t sizeof_object
, size_t limit_objects
, size_t preferred_objects
, size_t *received_objects
, void *reuse_ptr
);
BOOST_CONTAINER_DECL int dlmalloc_mallopt(int param_number, int value);
BOOST_CONTAINER_DECL void *dlmalloc_sync_create();
BOOST_CONTAINER_DECL void dlmalloc_sync_destroy(void *sync);
BOOST_CONTAINER_DECL bool dlmalloc_sync_lock(void *sync);
BOOST_CONTAINER_DECL void dlmalloc_sync_unlock(void *sync);
BOOST_CONTAINER_DECL bool dlmalloc_global_sync_lock();
BOOST_CONTAINER_DECL void dlmalloc_global_sync_unlock();
} //namespace container{
} //namespace boost{
#include <boost/container/detail/config_end.hpp>
#endif //BOOST_CONTAINER_DETAIL_ALLOC_LIB_HPP

View File

@@ -0,0 +1,96 @@
/////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2009-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
/////////////////////////////////////////////////////////////////////////////
// This code was modified from the code posted by Alexandre Courpron in his
// article "Interface Detection" in The Code Project:
// http://www.codeproject.com/KB/architecture/Detector.aspx
///////////////////////////////////////////////////////////////////////////////
// Copyright 2007 Alexandre Courpron
//
// Permission to use, copy, modify, redistribute and sell this software,
// provided that this copyright notice appears on all copies of the software.
///////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_FUNCTION_DETECTOR_HPP
#define BOOST_CONTAINER_DETAIL_FUNCTION_DETECTOR_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
namespace boost {
namespace container {
namespace function_detector {
typedef char NotFoundType;
struct StaticFunctionType { NotFoundType x [2]; };
struct NonStaticFunctionType { NotFoundType x [3]; };
enum
{ NotFound = 0,
StaticFunction = sizeof( StaticFunctionType ) - sizeof( NotFoundType ),
NonStaticFunction = sizeof( NonStaticFunctionType ) - sizeof( NotFoundType )
};
} //namespace boost {
} //namespace container {
} //namespace function_detector {
#define BOOST_CONTAINER_CREATE_FUNCTION_DETECTOR(Identifier, InstantiationKey) \
namespace boost { \
namespace container { \
namespace function_detector { \
template < class T, \
class NonStaticType, \
class NonStaticConstType, \
class StaticType > \
class DetectMember_##InstantiationKey_##Identifier { \
template < NonStaticType > \
struct TestNonStaticNonConst ; \
\
template < NonStaticConstType > \
struct TestNonStaticConst ; \
\
template < StaticType > \
struct TestStatic ; \
\
template <class U > \
static NonStaticFunctionType Test( TestNonStaticNonConst<&U::Identifier>*, int ); \
\
template <class U > \
static NonStaticFunctionType Test( TestNonStaticConst<&U::Identifier>*, int ); \
\
template <class U> \
static StaticFunctionType Test( TestStatic<&U::Identifier>*, int ); \
\
template <class U> \
static NotFoundType Test( ... ); \
public : \
static const int check = NotFound + (sizeof(Test<T>(0, 0)) - sizeof(NotFoundType));\
};\
}}} //namespace boost::container::function_detector {
#define BOOST_CONTAINER_DETECT_FUNCTION(Class, InstantiationKey, ReturnType, Identifier, Params) \
::boost::container::function_detector::DetectMember_##InstantiationKey_##Identifier< Class,\
ReturnType (Class::*)Params,\
ReturnType (Class::*)Params const,\
ReturnType (*)Params \
>::check
#include <boost/container/detail/config_end.hpp>
#endif //@ifndef BOOST_CONTAINER_DETAIL_FUNCTION_DETECTOR_HPP

View File

@@ -0,0 +1,198 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Benedek Thaler 2015-2016
// (C) Copyright Ion Gaztanaga 2019-2020. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://erenon.hu/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_GUARDS_HPP
#define BOOST_CONTAINER_DETAIL_GUARDS_HPP
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/move/core.hpp> // BOOST_MOVABLE_BUT_NOT_COPYABLE
// move/detail
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/move/detail/fwd_macros.hpp>
#endif
#include <boost/container/allocator_traits.hpp>
namespace boost {
namespace container {
namespace detail {
class null_construction_guard
{
public:
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
template <typename... Args>
null_construction_guard(Args&&...) {}
#else
#define NULL_CONSTRUCTION_GUARD_CODE(N) \
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
BOOST_CONTAINER_FORCEINLINE null_construction_guard(BOOST_MOVE_UREFANON##N)\
{}\
//
BOOST_MOVE_ITERATE_0TO9(NULL_CONSTRUCTION_GUARD_CODE)
#undef NULL_CONSTRUCTION_GUARD_CODE
#endif
void release() {}
void extend() {}
};
template <typename Allocator>
class construction_guard
{
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(construction_guard)
public:
construction_guard()
: _alloc_ptr()
, _elem_count()
, _allocator()
{}
construction_guard(pointer alloc_ptr, Allocator& allocator)
:_alloc_ptr(alloc_ptr)
, _elem_count(0)
, _allocator(&allocator)
{}
construction_guard(BOOST_RV_REF(construction_guard) rhs)
:_alloc_ptr(rhs._alloc_ptr)
, _elem_count(rhs._elem_count)
, _allocator(rhs._allocator)
{
rhs._elem_count = 0;
}
~construction_guard()
{
while (_elem_count) {
--_elem_count;
boost::container::allocator_traits<Allocator>::destroy(*_allocator, _alloc_ptr++);
}
}
void release()
{
_elem_count = 0;
}
void extend()
{
++_elem_count;
}
private:
pointer _alloc_ptr;
size_type _elem_count;
Allocator* _allocator;
};
/**
* Has two ranges
*
* On success, destroys the first range (src),
* on failure, destroys the second range (dst).
*
* Can be used when copying/moving a range
*/
template <class Allocator>
class nand_construction_guard
{
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
construction_guard<Allocator> _src;
construction_guard<Allocator> _dst;
bool _dst_released;
public:
nand_construction_guard()
: _src()
, _dst()
, _dst_released(false)
{}
nand_construction_guard( pointer src, Allocator& src_alloc
, pointer dst, Allocator& dst_alloc)
:_src(src, src_alloc),
_dst(dst, dst_alloc),
_dst_released(false)
{}
void extend()
{
_src.extend();
_dst.extend();
}
void release() // on success
{
_dst.release();
_dst_released = true;
}
~nand_construction_guard()
{
if (! _dst_released) { _src.release(); }
}
};
template <typename Allocator>
class allocation_guard
{
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
BOOST_MOVABLE_BUT_NOT_COPYABLE(allocation_guard)
public:
allocation_guard(pointer alloc_ptr, size_type alloc_size, Allocator& allocator)
:_alloc_ptr(alloc_ptr),
_alloc_size(alloc_size),
_allocator(allocator)
{}
~allocation_guard()
{
if (_alloc_ptr)
{
boost::container::allocator_traits<Allocator>::deallocate(_allocator, _alloc_ptr, _alloc_size);
}
}
void release()
{
_alloc_ptr = 0;
}
private:
pointer _alloc_ptr;
size_type _alloc_size;
Allocator& _allocator;
};
}}} // namespace boost::container::detail
#include <boost/container/detail/config_end.hpp>
#endif // BOOST_CONTAINER_DETAIL_GUARDS_HPP

View File

@@ -0,0 +1,72 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_IS_CONTAINER_HPP
#define BOOST_CONTAINER_DETAIL_IS_CONTAINER_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
#endif
//empty
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME empty
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace is_container_detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 0
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
//size
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME size
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace is_container_detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 0
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
//#pragma GCC diagnostic ignored "-Wunused-result"
#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
#pragma GCC diagnostic pop
#endif
namespace boost {
namespace container {
namespace dtl {
template <class Container>
struct is_container
{
static const bool value =
boost::container::is_container_detail::
has_member_function_callable_with_size <const Container>::value &&
boost::container::is_container_detail::
has_member_function_callable_with_empty<const Container>::value;
};
template <>
struct is_container<void>
{
static const bool value = false;
};
} //namespace dtl {
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_IS_CONTAINER_HPP

View File

@@ -0,0 +1,82 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_IS_CONTIGUOUS_CONTAINER_HPP
#define BOOST_CONTAINER_DETAIL_IS_CONTIGUOUS_CONTAINER_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-result"
#endif
//data
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME data
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace is_contiguous_container_detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 0
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
//back_free_capacity
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME back_free_capacity
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace back_free_capacity_detail {
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 0
#include <boost/intrusive/detail/has_member_function_callable_with.hpp>
//#pragma GCC diagnostic ignored "-Wunused-result"
#if defined(BOOST_GCC) && (BOOST_GCC >= 40600)
#pragma GCC diagnostic pop
#endif
namespace boost {
namespace container {
namespace dtl {
template <class Container>
struct is_contiguous_container
{
static const bool value =
boost::container::is_contiguous_container_detail::
has_member_function_callable_with_data<Container>::value &&
boost::container::is_contiguous_container_detail::
has_member_function_callable_with_data<const Container>::value;
};
template < class Container
, bool = boost::container::back_free_capacity_detail::
has_member_function_callable_with_back_free_capacity<const Container>::value>
struct back_free_capacity
{
static typename Container::size_type get(const Container &c)
{ return c.back_free_capacity(); }
};
template < class Container>
struct back_free_capacity<Container, false>
{
static typename Container::size_type get(const Container &c)
{ return c.capacity() - c.size(); }
};
} //namespace dtl {
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_IS_CONTIGUOUS_CONTAINER_HPP

View File

@@ -0,0 +1,91 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_IS_PAIR_HPP
#define BOOST_CONTAINER_CONTAINER_DETAIL_IS_PAIR_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/detail/std_fwd.hpp>
#if defined(BOOST_MSVC) && (_CPPLIB_VER == 520)
//MSVC 2010 tuple marker
namespace std { namespace tr1 { struct _Nil; }}
#elif defined(BOOST_MSVC) && (_CPPLIB_VER == 540)
//MSVC 2012 tuple marker
namespace std { struct _Nil; }
#endif
namespace boost {
namespace tuples {
struct null_type;
template <
class T0, class T1, class T2,
class T3, class T4, class T5,
class T6, class T7, class T8,
class T9>
class tuple;
} //namespace tuples {
} //namespace boost {
namespace boost {
namespace container {
struct try_emplace_t{};
namespace dtl {
template <class T1, class T2>
struct pair;
template <class T>
struct is_pair
{
static const bool value = false;
};
template <class T1, class T2>
struct is_pair< pair<T1, T2> >
{
static const bool value = true;
};
template <class T1, class T2>
struct is_pair< std::pair<T1, T2> >
{
static const bool value = true;
};
template <class T>
struct is_not_pair
{
static const bool value = !is_pair<T>::value;
};
} //namespace dtl {
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //#ifndef BOOST_CONTAINER_CONTAINER_DETAIL_IS_PAIR_HPP

View File

@@ -0,0 +1,57 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2016-2016. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_IS_SORTED_HPP
#define BOOST_CONTAINER_DETAIL_IS_SORTED_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
namespace boost {
namespace container {
namespace dtl {
template <class ForwardIterator, class Pred>
bool is_sorted (ForwardIterator first, ForwardIterator last, Pred pred)
{
if(first != last){
ForwardIterator next = first;
while (++next != last){
if(pred(*next, *first))
return false;
++first;
}
}
return true;
}
template <class ForwardIterator, class Pred>
bool is_sorted_and_unique (ForwardIterator first, ForwardIterator last, Pred pred)
{
if(first != last){
ForwardIterator next = first;
while (++next != last){
if(!pred(*first, *next))
return false;
++first;
}
}
return true;
}
} //namespace dtl {
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_IS_SORTED_HPP

View File

@@ -0,0 +1,92 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2014-2014.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ITERATOR_HPP
#define BOOST_CONTAINER_DETAIL_ITERATOR_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/intrusive/detail/iterator.hpp>
#include <boost/move/utility_core.hpp>
#include <boost/container/detail/mpl.hpp>
namespace boost {
namespace container {
using ::boost::intrusive::iterator_traits;
using ::boost::intrusive::iter_difference;
using ::boost::intrusive::iter_category;
using ::boost::intrusive::iter_value;
using ::boost::intrusive::iter_size;
using ::boost::intrusive::iterator_distance;
using ::boost::intrusive::iterator_udistance;
using ::boost::intrusive::iterator_advance;
using ::boost::intrusive::iterator_uadvance;
using ::boost::intrusive::iterator;
using ::boost::intrusive::iterator_enable_if_tag;
using ::boost::intrusive::iterator_disable_if_tag;
using ::boost::intrusive::iterator_arrow_result;
template <class Container>
class back_emplacer
{
private:
Container& container;
public:
typedef std::output_iterator_tag iterator_category;
typedef void value_type;
typedef void difference_type;
typedef void pointer;
typedef void reference;
back_emplacer(Container& x)
: container(x)
{}
template<class U>
back_emplacer& operator=(BOOST_FWD_REF(U) value)
{
container.emplace_back(boost::forward<U>(value));
return *this;
}
back_emplacer& operator*() { return *this; }
back_emplacer& operator++() { return *this; }
back_emplacer& operator++(int){ return *this; }
};
#ifndef BOOST_CONTAINER_NO_CXX17_CTAD
template<class InputIterator>
using it_based_non_const_first_type_t = typename dtl::remove_const<typename iterator_traits<InputIterator>::value_type::first_type>::type;
template<class InputIterator>
using it_based_const_first_type_t = const typename dtl::remove_const<typename iterator_traits<InputIterator>::value_type::first_type>::type;
template<class InputIterator>
using it_based_second_type_t = typename iterator_traits<InputIterator>::value_type::second_type;
template<class InputIterator>
using it_based_value_type_t = typename iterator_traits<InputIterator>::value_type;
#endif
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP

View File

@@ -0,0 +1,33 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2014-2015. Distributed under the Boost
// Software License, Version 1.0. (See accompanying file
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP
#define BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/move/detail/iterator_to_raw_pointer.hpp>
namespace boost {
namespace container {
namespace dtl {
using ::boost::movelib::iterator_to_raw_pointer;
} //namespace dtl {
} //namespace container {
} //namespace boost {
#endif //#ifndef BOOST_CONTAINER_DETAIL_ITERATOR_TO_RAW_POINTER_HPP

View File

@@ -0,0 +1,910 @@
//////////////////////////////////////////////////////////////////////////////
//
// (C) Copyright Ion Gaztanaga 2005-2013.
// (C) Copyright Gennaro Prota 2003 - 2004.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
//
// See http://www.boost.org/libs/container for documentation.
//
//////////////////////////////////////////////////////////////////////////////
#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP
#define BOOST_CONTAINER_DETAIL_ITERATORS_HPP
#ifndef BOOST_CONFIG_HPP
# include <boost/config.hpp>
#endif
#if defined(BOOST_HAS_PRAGMA_ONCE)
# pragma once
#endif
#include <boost/container/detail/config_begin.hpp>
#include <boost/container/detail/workaround.hpp>
#include <boost/container/allocator_traits.hpp>
#include <boost/container/detail/type_traits.hpp>
#include <boost/container/detail/value_init.hpp>
#include <boost/static_assert.hpp>
#include <boost/move/utility_core.hpp>
#include <boost/intrusive/detail/reverse_iterator.hpp>
#if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
#include <boost/move/detail/fwd_macros.hpp>
#else
#include <boost/container/detail/variadic_templates_tools.hpp>
#endif
#include <boost/container/detail/iterator.hpp>
namespace boost {
namespace container {
template <class T>
class constant_iterator
: public ::boost::container::iterator
<std::random_access_iterator_tag, T, std::ptrdiff_t, const T*, const T &>
{
typedef constant_iterator<T> this_type;
public:
BOOST_CONTAINER_FORCEINLINE explicit constant_iterator(const T &ref, std::size_t range_size)
: m_ptr(&ref), m_num(range_size){}
//Constructors
BOOST_CONTAINER_FORCEINLINE constant_iterator()
: m_ptr(0), m_num(0){}
BOOST_CONTAINER_FORCEINLINE constant_iterator& operator++()
{ increment(); return *this; }
BOOST_CONTAINER_FORCEINLINE constant_iterator operator++(int)
{
constant_iterator result (*this);
increment();
return result;
}
BOOST_CONTAINER_FORCEINLINE constant_iterator& operator--()
{ decrement(); return *this; }
BOOST_CONTAINER_FORCEINLINE constant_iterator operator--(int)
{
constant_iterator result (*this);
decrement();
return result;
}
BOOST_CONTAINER_FORCEINLINE friend bool operator== (const constant_iterator& i, const constant_iterator& i2)
{ return i.equal(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const constant_iterator& i, const constant_iterator& i2)
{ return !(i == i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator< (const constant_iterator& i, const constant_iterator& i2)
{ return i.less(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator> (const constant_iterator& i, const constant_iterator& i2)
{ return i2 < i; }
BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const constant_iterator& i, const constant_iterator& i2)
{ return !(i > i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const constant_iterator& i, const constant_iterator& i2)
{ return !(i < i2); }
BOOST_CONTAINER_FORCEINLINE friend std::ptrdiff_t operator- (const constant_iterator& i, const constant_iterator& i2)
{ return i2.distance_to(i); }
//Arithmetic signed
BOOST_CONTAINER_FORCEINLINE constant_iterator& operator+=(std::ptrdiff_t off)
{ this->advance(off); return *this; }
BOOST_CONTAINER_FORCEINLINE constant_iterator operator+(std::ptrdiff_t off) const
{
constant_iterator other(*this);
other.advance(off);
return other;
}
BOOST_CONTAINER_FORCEINLINE friend constant_iterator operator+(std::ptrdiff_t off, const constant_iterator& right)
{ return right + off; }
BOOST_CONTAINER_FORCEINLINE constant_iterator& operator-=(std::ptrdiff_t off)
{ this->advance(-off); return *this; }
BOOST_CONTAINER_FORCEINLINE constant_iterator operator-(std::ptrdiff_t off) const
{ return *this + (-off); }
BOOST_CONTAINER_FORCEINLINE const T& operator[] (std::ptrdiff_t ) const
{ return dereference(); }
BOOST_CONTAINER_FORCEINLINE const T& operator*() const
{ return dereference(); }
BOOST_CONTAINER_FORCEINLINE const T* operator->() const
{ return &(dereference()); }
//Arithmetic unsigned
BOOST_CONTAINER_FORCEINLINE constant_iterator& operator+=(std::size_t off)
{ return *this += std::ptrdiff_t(off); }
BOOST_CONTAINER_FORCEINLINE constant_iterator operator+(std::size_t off) const
{ return *this + std::ptrdiff_t(off); }
BOOST_CONTAINER_FORCEINLINE friend constant_iterator operator+(std::size_t off, const constant_iterator& right)
{ return std::ptrdiff_t(off) + right; }
BOOST_CONTAINER_FORCEINLINE constant_iterator& operator-=(std::size_t off)
{ return *this -= std::ptrdiff_t(off); }
BOOST_CONTAINER_FORCEINLINE constant_iterator operator-(std::size_t off) const
{ return *this - std::ptrdiff_t(off); }
BOOST_CONTAINER_FORCEINLINE const T& operator[] (std::size_t off) const
{ return (*this)[std::ptrdiff_t(off)]; }
private:
const T * m_ptr;
std::size_t m_num;
BOOST_CONTAINER_FORCEINLINE void increment()
{ --m_num; }
BOOST_CONTAINER_FORCEINLINE void decrement()
{ ++m_num; }
BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const
{ return m_num == other.m_num; }
BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const
{ return other.m_num < m_num; }
BOOST_CONTAINER_FORCEINLINE const T & dereference() const
{ return *m_ptr; }
BOOST_CONTAINER_FORCEINLINE void advance(std::ptrdiff_t n)
{ m_num = std::size_t(std::ptrdiff_t(m_num) - n); }
BOOST_CONTAINER_FORCEINLINE std::ptrdiff_t distance_to(const this_type &other)const
{ return std::ptrdiff_t(m_num - other.m_num); }
};
template <class T>
class value_init_construct_iterator
: public ::boost::container::iterator
<std::random_access_iterator_tag, T, std::ptrdiff_t, const T*, const T &>
{
typedef value_init_construct_iterator<T> this_type;
public:
BOOST_CONTAINER_FORCEINLINE explicit value_init_construct_iterator(std::size_t range_size)
: m_num(range_size){}
//Constructors
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator()
: m_num(0){}
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator& operator++()
{ increment(); return *this; }
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator operator++(int)
{
value_init_construct_iterator result (*this);
increment();
return result;
}
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator& operator--()
{ decrement(); return *this; }
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator operator--(int)
{
value_init_construct_iterator result (*this);
decrement();
return result;
}
BOOST_CONTAINER_FORCEINLINE friend bool operator== (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return i.equal(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return !(i == i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator< (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return i.less(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator> (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return i2 < i; }
BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return !(i > i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return !(i < i2); }
BOOST_CONTAINER_FORCEINLINE friend std::ptrdiff_t operator- (const value_init_construct_iterator& i, const value_init_construct_iterator& i2)
{ return i2.distance_to(i); }
//Arithmetic
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator& operator+=(std::ptrdiff_t off)
{ this->advance(off); return *this; }
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator operator+(std::ptrdiff_t off) const
{
value_init_construct_iterator other(*this);
other.advance(off);
return other;
}
BOOST_CONTAINER_FORCEINLINE friend value_init_construct_iterator operator+(std::ptrdiff_t off, const value_init_construct_iterator& right)
{ return right + off; }
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator& operator-=(std::ptrdiff_t off)
{ this->advance(-off); return *this; }
BOOST_CONTAINER_FORCEINLINE value_init_construct_iterator operator-(std::ptrdiff_t off) const
{ return *this + (-off); }
//This pseudo-iterator's dereference operations have no sense since value is not
//constructed until ::boost::container::construct_in_place is called.
//So comment them to catch bad uses
//const T& operator*() const;
//const T& operator[](difference_type) const;
//const T* operator->() const;
private:
std::size_t m_num;
BOOST_CONTAINER_FORCEINLINE void increment()
{ --m_num; }
BOOST_CONTAINER_FORCEINLINE void decrement()
{ ++m_num; }
BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const
{ return m_num == other.m_num; }
BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const
{ return other.m_num < m_num; }
BOOST_CONTAINER_FORCEINLINE const T & dereference() const
{
static T dummy;
return dummy;
}
BOOST_CONTAINER_FORCEINLINE void advance(std::ptrdiff_t n)
{ m_num = std::size_t(std::ptrdiff_t(m_num) - n); }
BOOST_CONTAINER_FORCEINLINE std::ptrdiff_t distance_to(const this_type &other)const
{ return std::ptrdiff_t(m_num - other.m_num); }
};
template <class T>
class default_init_construct_iterator
: public ::boost::container::iterator
<std::random_access_iterator_tag, T, std::ptrdiff_t, const T*, const T &>
{
typedef default_init_construct_iterator<T> this_type;
public:
BOOST_CONTAINER_FORCEINLINE explicit default_init_construct_iterator(std::size_t range_size)
: m_num(range_size){}
//Constructors
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator()
: m_num(0){}
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator& operator++()
{ increment(); return *this; }
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator operator++(int)
{
default_init_construct_iterator result (*this);
increment();
return result;
}
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator& operator--()
{ decrement(); return *this; }
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator operator--(int)
{
default_init_construct_iterator result (*this);
decrement();
return result;
}
BOOST_CONTAINER_FORCEINLINE friend bool operator== (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
{ return i.equal(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
{ return !(i == i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator< (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
{ return i.less(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator> (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
{ return i2 < i; }
BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
{ return !(i > i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
{ return !(i < i2); }
BOOST_CONTAINER_FORCEINLINE friend std::ptrdiff_t operator- (const default_init_construct_iterator& i, const default_init_construct_iterator& i2)
{ return i2.distance_to(i); }
//Arithmetic
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator& operator+=(std::ptrdiff_t off)
{ this->advance(off); return *this; }
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator operator+(std::ptrdiff_t off) const
{
default_init_construct_iterator other(*this);
other.advance(off);
return other;
}
BOOST_CONTAINER_FORCEINLINE friend default_init_construct_iterator operator+(std::ptrdiff_t off, const default_init_construct_iterator& right)
{ return right + off; }
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator& operator-=(std::ptrdiff_t off)
{ this->advance(-off); return *this; }
BOOST_CONTAINER_FORCEINLINE default_init_construct_iterator operator-(std::ptrdiff_t off) const
{ return *this + (-off); }
//This pseudo-iterator's dereference operations have no sense since value is not
//constructed until ::boost::container::construct_in_place is called.
//So comment them to catch bad uses
//const T& operator*() const;
//const T& operator[](difference_type) const;
//const T* operator->() const;
private:
std::size_t m_num;
BOOST_CONTAINER_FORCEINLINE void increment()
{ --m_num; }
BOOST_CONTAINER_FORCEINLINE void decrement()
{ ++m_num; }
BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const
{ return m_num == other.m_num; }
BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const
{ return other.m_num < m_num; }
BOOST_CONTAINER_FORCEINLINE const T & dereference() const
{
static T dummy;
return dummy;
}
BOOST_CONTAINER_FORCEINLINE void advance(std::ptrdiff_t n)
{ m_num = std::size_t(std::ptrdiff_t(m_num) - n); }
BOOST_CONTAINER_FORCEINLINE std::ptrdiff_t distance_to(const this_type &other) const
{ return std::ptrdiff_t(m_num - other.m_num); }
};
template <class T>
class repeat_iterator
: public ::boost::container::iterator
<std::random_access_iterator_tag, T, std::ptrdiff_t, T*, T&>
{
typedef repeat_iterator<T> this_type;
public:
BOOST_CONTAINER_FORCEINLINE explicit repeat_iterator(T &ref, std::size_t range_size)
: m_ptr(&ref), m_num(range_size){}
//Constructors
BOOST_CONTAINER_FORCEINLINE repeat_iterator()
: m_ptr(0), m_num(0){}
BOOST_CONTAINER_FORCEINLINE this_type& operator++()
{ increment(); return *this; }
BOOST_CONTAINER_FORCEINLINE this_type operator++(int)
{
this_type result (*this);
increment();
return result;
}
BOOST_CONTAINER_FORCEINLINE this_type& operator--()
{ increment(); return *this; }
BOOST_CONTAINER_FORCEINLINE this_type operator--(int)
{
this_type result (*this);
increment();
return result;
}
BOOST_CONTAINER_FORCEINLINE friend bool operator== (const this_type& i, const this_type& i2)
{ return i.equal(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const this_type& i, const this_type& i2)
{ return !(i == i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator< (const this_type& i, const this_type& i2)
{ return i.less(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator> (const this_type& i, const this_type& i2)
{ return i2 < i; }
BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const this_type& i, const this_type& i2)
{ return !(i > i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const this_type& i, const this_type& i2)
{ return !(i < i2); }
BOOST_CONTAINER_FORCEINLINE friend std::ptrdiff_t operator- (const this_type& i, const this_type& i2)
{ return i2.distance_to(i); }
//Arithmetic
BOOST_CONTAINER_FORCEINLINE this_type& operator+=(std::ptrdiff_t off)
{ this->advance(off); return *this; }
BOOST_CONTAINER_FORCEINLINE this_type operator+(std::ptrdiff_t off) const
{
this_type other(*this);
other.advance(off);
return other;
}
BOOST_CONTAINER_FORCEINLINE friend this_type operator+(std::ptrdiff_t off, const this_type& right)
{ return right + off; }
BOOST_CONTAINER_FORCEINLINE this_type& operator-=(std::ptrdiff_t off)
{ this->advance(-off); return *this; }
BOOST_CONTAINER_FORCEINLINE this_type operator-(std::ptrdiff_t off) const
{ return *this + (-off); }
BOOST_CONTAINER_FORCEINLINE T& operator*() const
{ return dereference(); }
BOOST_CONTAINER_FORCEINLINE T& operator[] (std::ptrdiff_t ) const
{ return dereference(); }
BOOST_CONTAINER_FORCEINLINE T *operator->() const
{ return &(dereference()); }
private:
T * m_ptr;
std::size_t m_num;
BOOST_CONTAINER_FORCEINLINE void increment()
{ --m_num; }
BOOST_CONTAINER_FORCEINLINE void decrement()
{ ++m_num; }
BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const
{ return m_num == other.m_num; }
BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const
{ return other.m_num < m_num; }
BOOST_CONTAINER_FORCEINLINE T & dereference() const
{ return *m_ptr; }
BOOST_CONTAINER_FORCEINLINE void advance(std::ptrdiff_t n)
{ m_num = std::size_t(std::ptrdiff_t(m_num - n)); }
BOOST_CONTAINER_FORCEINLINE std::ptrdiff_t distance_to(const this_type &other)const
{ return std::ptrdiff_t(m_num - other.m_num); }
};
template <class T, class EmplaceFunctor>
class emplace_iterator
: public ::boost::container::iterator
<std::random_access_iterator_tag, T, std::ptrdiff_t, const T*, const T &>
{
typedef emplace_iterator this_type;
public:
typedef std::ptrdiff_t difference_type;
BOOST_CONTAINER_FORCEINLINE explicit emplace_iterator(EmplaceFunctor&e)
: m_num(1), m_pe(&e){}
BOOST_CONTAINER_FORCEINLINE emplace_iterator()
: m_num(0), m_pe(0){}
BOOST_CONTAINER_FORCEINLINE this_type& operator++()
{ increment(); return *this; }
BOOST_CONTAINER_FORCEINLINE this_type operator++(int)
{
this_type result (*this);
increment();
return result;
}
BOOST_CONTAINER_FORCEINLINE this_type& operator--()
{ decrement(); return *this; }
BOOST_CONTAINER_FORCEINLINE this_type operator--(int)
{
this_type result (*this);
decrement();
return result;
}
BOOST_CONTAINER_FORCEINLINE friend bool operator== (const this_type& i, const this_type& i2)
{ return i.equal(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const this_type& i, const this_type& i2)
{ return !(i == i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator< (const this_type& i, const this_type& i2)
{ return i.less(i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator> (const this_type& i, const this_type& i2)
{ return i2 < i; }
BOOST_CONTAINER_FORCEINLINE friend bool operator<= (const this_type& i, const this_type& i2)
{ return !(i > i2); }
BOOST_CONTAINER_FORCEINLINE friend bool operator>= (const this_type& i, const this_type& i2)
{ return !(i < i2); }
BOOST_CONTAINER_FORCEINLINE friend difference_type operator- (const this_type& i, const this_type& i2)
{ return i2.distance_to(i); }
//Arithmetic
BOOST_CONTAINER_FORCEINLINE this_type& operator+=(difference_type off)
{ this->advance(off); return *this; }
BOOST_CONTAINER_FORCEINLINE this_type operator+(difference_type off) const
{
this_type other(*this);
other.advance(off);
return other;
}
BOOST_CONTAINER_FORCEINLINE friend this_type operator+(difference_type off, const this_type& right)
{ return right + off; }
BOOST_CONTAINER_FORCEINLINE this_type& operator-=(difference_type off)
{ this->advance(-off); return *this; }
BOOST_CONTAINER_FORCEINLINE this_type operator-(difference_type off) const
{ return *this + (-off); }
private:
//This pseudo-iterator's dereference operations have no sense since value is not
//constructed until ::boost::container::construct_in_place is called.
//So comment them to catch bad uses
const T& operator*() const;
const T& operator[](difference_type) const;
const T* operator->() const;
public:
template<class Allocator>
BOOST_CONTAINER_FORCEINLINE void construct_in_place(Allocator &a, T* ptr)
{ (*m_pe)(a, ptr); }
template<class DestIt>
BOOST_CONTAINER_FORCEINLINE void assign_in_place(DestIt dest)
{ (*m_pe)(dest); }
private:
std::size_t m_num;
EmplaceFunctor * m_pe;
BOOST_CONTAINER_FORCEINLINE void increment()
{ --m_num; }
BOOST_CONTAINER_FORCEINLINE void decrement()
{ ++m_num; }
BOOST_CONTAINER_FORCEINLINE bool equal(const this_type &other) const
{ return m_num == other.m_num; }
BOOST_CONTAINER_FORCEINLINE bool less(const this_type &other) const
{ return other.m_num < m_num; }
BOOST_CONTAINER_FORCEINLINE const T & dereference() const
{
static T dummy;
return dummy;
}
BOOST_CONTAINER_FORCEINLINE void advance(difference_type n)
{ m_num -= n; }
BOOST_CONTAINER_FORCEINLINE difference_type distance_to(const this_type &other)const
{ return difference_type(m_num - other.m_num); }
};
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
template<class ...Args>
struct emplace_functor
{
typedef typename dtl::build_number_seq<sizeof...(Args)>::type index_tuple_t;
BOOST_CONTAINER_FORCEINLINE emplace_functor(BOOST_FWD_REF(Args)... args)
: args_(args...)
{}
template<class Allocator, class T>
BOOST_CONTAINER_FORCEINLINE void operator()(Allocator &a, T *ptr)
{ emplace_functor::inplace_impl(a, ptr, index_tuple_t()); }
template<class DestIt>
BOOST_CONTAINER_FORCEINLINE void operator()(DestIt dest)
{ emplace_functor::inplace_impl(dest, index_tuple_t()); }
private:
template<class Allocator, class T, std::size_t ...IdxPack>
BOOST_CONTAINER_FORCEINLINE void inplace_impl(Allocator &a, T* ptr, const dtl::index_tuple<IdxPack...>&)
{
allocator_traits<Allocator>::construct
(a, ptr, ::boost::forward<Args>(dtl::get<IdxPack>(args_))...);
}
template<class DestIt, std::size_t ...IdxPack>
BOOST_CONTAINER_FORCEINLINE void inplace_impl(DestIt dest, const dtl::index_tuple<IdxPack...>&)
{
typedef typename boost::container::iterator_traits<DestIt>::value_type value_type;
value_type && tmp= value_type(::boost::forward<Args>(dtl::get<IdxPack>(args_))...);
*dest = ::boost::move(tmp);
}
dtl::tuple<Args&...> args_;
};
template<class ...Args>
struct emplace_functor_type
{
typedef emplace_functor<Args...> type;
};
#else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
//Partial specializations cannot match argument list for primary template, so add an extra argument
template <BOOST_MOVE_CLASSDFLT9, class Dummy = void>
struct emplace_functor_type;
#define BOOST_MOVE_ITERATOR_EMPLACE_FUNCTOR_CODE(N) \
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
struct emplace_functor##N\
{\
BOOST_CONTAINER_FORCEINLINE explicit emplace_functor##N( BOOST_MOVE_UREF##N )\
BOOST_MOVE_COLON##N BOOST_MOVE_FWD_INIT##N{}\
\
template<class Allocator, class T>\
BOOST_CONTAINER_FORCEINLINE void operator()(Allocator &a, T *ptr)\
{ allocator_traits<Allocator>::construct(a, ptr BOOST_MOVE_I##N BOOST_MOVE_MFWD##N); }\
\
template<class DestIt>\
BOOST_CONTAINER_FORCEINLINE void operator()(DestIt dest)\
{\
typedef typename boost::container::iterator_traits<DestIt>::value_type value_type;\
BOOST_MOVE_IF(N, value_type tmp(BOOST_MOVE_MFWD##N), dtl::value_init<value_type> tmp) ;\
*dest = ::boost::move(const_cast<value_type &>(BOOST_MOVE_IF(N, tmp, tmp.get())));\
}\
\
BOOST_MOVE_MREF##N\
};\
\
template <BOOST_MOVE_CLASS##N>\
struct emplace_functor_type<BOOST_MOVE_TARG##N>\
{\
typedef emplace_functor##N BOOST_MOVE_LT##N BOOST_MOVE_TARG##N BOOST_MOVE_GT##N type;\
};\
//
BOOST_MOVE_ITERATE_0TO9(BOOST_MOVE_ITERATOR_EMPLACE_FUNCTOR_CODE)
#undef BOOST_MOVE_ITERATOR_EMPLACE_FUNCTOR_CODE
#endif
namespace dtl {
template<class T>
struct has_iterator_category
{
struct two { char _[2]; };
template <typename X>
static char test(int, typename X::iterator_category*);
template <typename X>
static two test(int, ...);
static const bool value = (1 == sizeof(test<T>(0, 0)));
};
template<class T, bool = has_iterator_category<T>::value >
struct is_input_iterator
{
static const bool value = is_same<typename T::iterator_category, std::input_iterator_tag>::value;
};
template<class T>
struct is_input_iterator<T, false>
{
static const bool value = false;
};
template<class T>
struct is_not_input_iterator
{
static const bool value = !is_input_iterator<T>::value;
};
template<class T, bool = has_iterator_category<T>::value >
struct is_forward_iterator
{
static const bool value = is_same<typename T::iterator_category, std::forward_iterator_tag>::value;
};
template<class T>
struct is_forward_iterator<T, false>
{
static const bool value = false;
};
template<class T, bool = has_iterator_category<T>::value >
struct is_bidirectional_iterator
{
static const bool value = is_same<typename T::iterator_category, std::bidirectional_iterator_tag>::value;
};
template<class T>
struct is_bidirectional_iterator<T, false>
{
static const bool value = false;
};
template<class IINodeType>
struct iiterator_node_value_type {
typedef typename IINodeType::value_type type;
};
template<class IIterator>
struct iiterator_types
{
typedef typename IIterator::value_type it_value_type;
typedef typename iiterator_node_value_type<it_value_type>::type value_type;
typedef typename boost::container::iterator_traits<IIterator>::pointer it_pointer;
typedef typename boost::container::iterator_traits<IIterator>::difference_type difference_type;
typedef typename ::boost::intrusive::pointer_traits<it_pointer>::
template rebind_pointer<value_type>::type pointer;
typedef typename ::boost::intrusive::pointer_traits<it_pointer>::
template rebind_pointer<const value_type>::type const_pointer;
typedef typename ::boost::intrusive::
pointer_traits<pointer>::reference reference;
typedef typename ::boost::intrusive::
pointer_traits<const_pointer>::reference const_reference;
typedef typename IIterator::iterator_category iterator_category;
};
template<class IIterator, bool IsConst>
struct iterator_types
{
typedef typename ::boost::container::iterator
< typename iiterator_types<IIterator>::iterator_category
, typename iiterator_types<IIterator>::value_type
, typename iiterator_types<IIterator>::difference_type
, typename iiterator_types<IIterator>::const_pointer
, typename iiterator_types<IIterator>::const_reference> type;
};
template<class IIterator>
struct iterator_types<IIterator, false>
{
typedef typename ::boost::container::iterator
< typename iiterator_types<IIterator>::iterator_category
, typename iiterator_types<IIterator>::value_type
, typename iiterator_types<IIterator>::difference_type
, typename iiterator_types<IIterator>::pointer
, typename iiterator_types<IIterator>::reference> type;
};
template<class IIterator, bool IsConst>
class iterator_from_iiterator
{
typedef typename iterator_types<IIterator, IsConst>::type types_t;
class nat
{
public:
IIterator get() const
{ return IIterator(); }
};
typedef typename dtl::if_c< IsConst
, iterator_from_iiterator<IIterator, false>
, nat>::type nonconst_iterator;
public:
typedef typename types_t::pointer pointer;
typedef typename types_t::reference reference;
typedef typename types_t::difference_type difference_type;
typedef typename types_t::iterator_category iterator_category;
typedef typename types_t::value_type value_type;
BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator()
: m_iit()
{}
BOOST_CONTAINER_FORCEINLINE explicit iterator_from_iiterator(IIterator iit) BOOST_NOEXCEPT_OR_NOTHROW
: m_iit(iit)
{}
BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator(const iterator_from_iiterator& other) BOOST_NOEXCEPT_OR_NOTHROW
: m_iit(other.get())
{}
BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator(const nonconst_iterator& other) BOOST_NOEXCEPT_OR_NOTHROW
: m_iit(other.get())
{}
BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator& operator=(const iterator_from_iiterator& other) BOOST_NOEXCEPT_OR_NOTHROW
{ m_iit = other.get(); return *this; }
BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator& operator++() BOOST_NOEXCEPT_OR_NOTHROW
{ ++this->m_iit; return *this; }
BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW
{
iterator_from_iiterator result (*this);
++this->m_iit;
return result;
}
BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator& operator--() BOOST_NOEXCEPT_OR_NOTHROW
{
//If the iterator_from_iiterator is not a bidirectional iterator, operator-- should not exist
BOOST_STATIC_ASSERT((is_bidirectional_iterator<iterator_from_iiterator>::value));
--this->m_iit; return *this;
}
BOOST_CONTAINER_FORCEINLINE iterator_from_iiterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW
{
iterator_from_iiterator result (*this);
--this->m_iit;
return result;
}
BOOST_CONTAINER_FORCEINLINE friend bool operator== (const iterator_from_iiterator& l, const iterator_from_iiterator& r) BOOST_NOEXCEPT_OR_NOTHROW
{ return l.m_iit == r.m_iit; }
BOOST_CONTAINER_FORCEINLINE friend bool operator!= (const iterator_from_iiterator& l, const iterator_from_iiterator& r) BOOST_NOEXCEPT_OR_NOTHROW
{ return !(l == r); }
BOOST_CONTAINER_FORCEINLINE reference operator*() const BOOST_NOEXCEPT_OR_NOTHROW
{ return this->m_iit->get_data(); }
BOOST_CONTAINER_FORCEINLINE pointer operator->() const BOOST_NOEXCEPT_OR_NOTHROW
{ return ::boost::intrusive::pointer_traits<pointer>::pointer_to(this->operator*()); }
BOOST_CONTAINER_FORCEINLINE const IIterator &get() const BOOST_NOEXCEPT_OR_NOTHROW
{ return this->m_iit; }
private:
IIterator m_iit;
};
} //namespace dtl {
using ::boost::intrusive::reverse_iterator;
} //namespace container {
} //namespace boost {
#include <boost/container/detail/config_end.hpp>
#endif //#ifndef BOOST_CONTAINER_DETAIL_ITERATORS_HPP

Some files were not shown because too many files have changed in this diff Show More