passenger 6.0.0 → 6.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +148 -18
- data/CONTRIBUTORS +6 -0
- data/bin/passenger-install-nginx-module +1 -1
- data/bin/passenger-status +15 -0
- data/build/misc.rb +3 -1
- data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +56 -3
- data/dev/copy_boost_headers +1 -0
- data/package.json +1 -1
- data/passenger.gemspec +1 -1
- data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.css +0 -0
- data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.js +0 -0
- data/resources/templates/error_renderer/with_details/src/bootstrap/config.json +0 -0
- data/resources/templates/standalone/http.erb +2 -0
- data/resources/templates/standalone/server.erb +1 -0
- data/src/agent/Core/ApplicationPool/Group/ProcessListManagement.cpp +1 -1
- data/src/agent/Core/ApplicationPool/Group/StateInspection.cpp +1 -0
- data/src/agent/Core/ApplicationPool/Options.h +10 -0
- data/src/agent/Core/ApplicationPool/Pool/GarbageCollection.cpp +1 -1
- data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +1 -1
- data/src/agent/Core/Config.h +13 -1
- data/src/agent/Core/Controller.h +1 -0
- data/src/agent/Core/Controller/Config.h +4 -1
- data/src/agent/Core/Controller/ForwardResponse.cpp +13 -0
- data/src/agent/Core/Controller/InitRequest.cpp +3 -0
- data/src/agent/Core/Controller/InitializationAndShutdown.cpp +1 -0
- data/src/agent/Core/CoreMain.cpp +2 -1
- data/src/agent/Core/OptionParser.h +3 -0
- data/src/agent/Core/SpawningKit/Context.h +1 -0
- data/src/agent/Core/SpawningKit/Handshake/Perform.h +1 -0
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +1 -1
- data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +5 -2
- data/src/agent/TempDirToucher/TempDirToucherMain.cpp +2 -0
- data/src/agent/Watchdog/Config.h +14 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +7 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +10 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +10 -0
- data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +30 -0
- data/src/apache2_module/Hooks.cpp +6 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedManifestGeneration.cpp +20 -0
- data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +24 -0
- data/src/cxx_supportlib/Constants.h +2 -1
- data/src/cxx_supportlib/LoggingKit/Config.h +2 -0
- data/src/cxx_supportlib/LoggingKit/Implementation.cpp +15 -9
- data/src/cxx_supportlib/ServerKit/HttpChunkedBodyParser.h +1 -1
- data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +57 -2
- data/src/cxx_supportlib/WebSocketCommandReverseServer.h +11 -7
- data/src/cxx_supportlib/oxt/system_calls.cpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/finder.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +46 -37
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +16 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +45 -26
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +33 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +38 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +50 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +13 -12
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +34 -34
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/thread_clock.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/chrono.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +27 -27
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/posix/thread_clock.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/allocators.hpp +89 -0
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +83 -74
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +21 -33
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/concept/detail/has_constraints.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +5 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/comeau.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +368 -52
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/greenhills.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +9 -4
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/detail/select_compiler_config.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +14 -4
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +262 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +22 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +833 -459
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +24 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +61 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +33 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +132 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +54 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +28 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +167 -115
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/thread_mutex.hpp +181 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +167 -29
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +389 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +262 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +52 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +364 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +286 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +56 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +43 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +100 -31
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +126 -69
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +75 -51
- data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +136 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/exchange.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/explicit_operator_bool.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +101 -130
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +16 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/quick_exit.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +9 -2
- data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +26 -10
- data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +38 -47
- data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/detail/reference_content.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +62 -58
- data/src/cxx_supportlib/vendor-modified/boost/function.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +29 -29
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +38 -40
- data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +44 -44
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +39 -39
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +33 -14
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +39 -39
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +61 -61
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +66 -66
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +54 -54
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +65 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +23 -23
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +5 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +18 -13
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +16 -5
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/future.cpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +14 -8
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/tss_null.cpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +27 -0
- data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +29 -6
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +23 -3
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +9 -3
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +10 -11
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +20 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +211 -101
- data/src/cxx_supportlib/vendor-modified/boost/parameter/python.hpp +5 -6
- data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +119 -25
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler.h +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/nvcc.h +73 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/language.h +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/language/cuda.h +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +17 -8
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +166 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +513 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +291 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +4106 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/faure.hpp +367 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +360 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +237 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +13 -5
- data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/common.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/implementation_help.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/range/distance.hpp +11 -5
- data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +14 -6
- data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/ratio/config.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +55 -37
- data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +7 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +5 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +15 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +12 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +7 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -5
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +12 -11
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +7 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +1 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +2 -10
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +60 -115
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +14 -8
- data/src/cxx_supportlib/vendor-modified/boost/system/config.hpp +4 -24
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +101 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/std_interoperability.hpp +141 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_posix.hpp +132 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +775 -588
- data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +13 -6
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/nullary_function.hpp +8 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread_safety.hpp +160 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/tss_hooks.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +24 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/lock_guard.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/lockable_traits.hpp +31 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +8 -53
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +73 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +14 -9
- data/src/cxx_supportlib/vendor-modified/boost/thread/xtime.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +9 -8
- data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +21 -19
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +72 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_03.hpp +108 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +501 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_msvc10_fix.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_03.hpp +117 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +557 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_rvalue_reference_msvc10_fix.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/enable_if.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_dereference.hpp +344 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_decrement.hpp +21 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_increment.hpp +21 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_decrement.hpp +21 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_increment.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +5 -15
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +16 -6
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_assignable.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_constructible.hpp +4 -6
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_final.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +4 -79
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +3 -97
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_noncopyable.hpp +39 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +104 -63
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/typeof/constant.hpp +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +0 -3
- data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/typeof/native.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +201 -201
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +301 -301
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +401 -401
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +101 -101
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +26 -6
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/helper-scripts/prespawn +1 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +40 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +26 -0
- data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +48 -0
- data/src/nginx_module/Configuration.c +9 -5
- data/src/nginx_module/ContentHandler.c +5 -1
- data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +15 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +15 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +28 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +6 -0
- data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +11 -0
- data/src/nginx_module/MainConfig/AutoGeneratedCreateFunction.c +11 -0
- data/src/nginx_module/MainConfig/AutoGeneratedManifestGeneration.c +23 -0
- data/src/nginx_module/MainConfig/AutoGeneratedStruct.h +8 -0
- data/src/nginx_module/ngx_http_passenger_module.c +2 -0
- data/src/nodejs_supportlib/vendor-copy/winston/lib/winston/logger.js +0 -0
- data/src/ruby_native_extension/extconf.rb +7 -0
- data/src/ruby_supportlib/phusion_passenger.rb +7 -7
- data/src/ruby_supportlib/phusion_passenger/admin_tools/instance_registry.rb +8 -0
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +23 -0
- data/src/ruby_supportlib/phusion_passenger/constants.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +1 -3
- data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +37 -0
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +10 -0
- data/src/ruby_supportlib/phusion_passenger/request_handler.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +5 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +11 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +3 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +6 -0
- data/src/ruby_supportlib/phusion_passenger/utils/unseekable_socket.rb +15 -11
- metadata +48 -7
- data/src/cxx_supportlib/vendor-modified/boost/call_traits.hpp +0 -20
- data/src/cxx_supportlib/vendor-modified/boost/detail/call_traits.hpp +0 -172
- data/src/cxx_supportlib/vendor-modified/boost/detail/no_exceptions_support.hpp +0 -17
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +0 -496
@@ -23,6 +23,7 @@
|
|
23
23
|
|
24
24
|
#include <boost/intrusive/detail/iterator.hpp>
|
25
25
|
#include <boost/move/utility_core.hpp>
|
26
|
+
#include <boost/container/detail/mpl.hpp>
|
26
27
|
|
27
28
|
namespace boost {
|
28
29
|
namespace container {
|
@@ -63,6 +64,21 @@ class back_emplacer
|
|
63
64
|
back_emplacer& operator++(int){ return *this; }
|
64
65
|
};
|
65
66
|
|
67
|
+
#ifndef BOOST_CONTAINER_NO_CXX17_CTAD
|
68
|
+
|
69
|
+
template<class InputIterator>
|
70
|
+
using it_based_non_const_first_type_t = typename dtl::remove_const<typename iterator_traits<InputIterator>::value_type::first_type>::type;
|
71
|
+
|
72
|
+
template<class InputIterator>
|
73
|
+
using it_based_const_first_type_t = const typename dtl::remove_const<typename iterator_traits<InputIterator>::value_type::first_type>::type;
|
74
|
+
|
75
|
+
template<class InputIterator>
|
76
|
+
using it_based_second_type_t = typename iterator_traits<InputIterator>::value_type::second_type;
|
77
|
+
|
78
|
+
template<class InputIterator>
|
79
|
+
using it_based_value_type_t = typename iterator_traits<InputIterator>::value_type;
|
80
|
+
|
81
|
+
#endif
|
66
82
|
|
67
83
|
} //namespace container {
|
68
84
|
} //namespace boost {
|
@@ -94,6 +94,34 @@ inline Integer upper_power_of_2(const Integer & A)
|
|
94
94
|
return power_of_2;
|
95
95
|
}
|
96
96
|
|
97
|
+
template <typename Integer, bool Loop = true>
|
98
|
+
struct upper_power_of_2_loop_ct
|
99
|
+
{
|
100
|
+
|
101
|
+
template <Integer I, Integer P>
|
102
|
+
struct apply
|
103
|
+
{
|
104
|
+
static const Integer value =
|
105
|
+
upper_power_of_2_loop_ct<Integer, (I > P*2)>::template apply<I, P*2>::value;
|
106
|
+
};
|
107
|
+
};
|
108
|
+
|
109
|
+
template <typename Integer>
|
110
|
+
struct upper_power_of_2_loop_ct<Integer, false>
|
111
|
+
{
|
112
|
+
template <Integer I, Integer P>
|
113
|
+
struct apply
|
114
|
+
{
|
115
|
+
static const Integer value = P;
|
116
|
+
};
|
117
|
+
};
|
118
|
+
|
119
|
+
template <typename Integer, Integer I>
|
120
|
+
struct upper_power_of_2_ct
|
121
|
+
{
|
122
|
+
static const Integer value = upper_power_of_2_loop_ct<Integer, (I > 1)>::template apply<I, 2>::value;
|
123
|
+
};
|
124
|
+
|
97
125
|
//This function uses binary search to discover the
|
98
126
|
//highest set bit of the integer
|
99
127
|
inline std::size_t floor_log2 (std::size_t x)
|
@@ -114,6 +142,32 @@ inline std::size_t floor_log2 (std::size_t x)
|
|
114
142
|
return log2;
|
115
143
|
}
|
116
144
|
|
145
|
+
template<std::size_t I1, std::size_t I2>
|
146
|
+
struct gcd_ct
|
147
|
+
{
|
148
|
+
static const std::size_t Max = I1 > I2 ? I1 : I2;
|
149
|
+
static const std::size_t Min = I1 < I2 ? I1 : I2;
|
150
|
+
static const std::size_t value = gcd_ct<Min, Max % Min>::value;
|
151
|
+
};
|
152
|
+
|
153
|
+
template<std::size_t I1>
|
154
|
+
struct gcd_ct<I1, 0>
|
155
|
+
{
|
156
|
+
static const std::size_t value = I1;
|
157
|
+
};
|
158
|
+
|
159
|
+
template<std::size_t I1>
|
160
|
+
struct gcd_ct<0, I1>
|
161
|
+
{
|
162
|
+
static const std::size_t value = I1;
|
163
|
+
};
|
164
|
+
|
165
|
+
template<std::size_t I1, std::size_t I2>
|
166
|
+
struct lcm_ct
|
167
|
+
{
|
168
|
+
static const std::size_t value = I1 * I2 / gcd_ct<I1, I2>::value;
|
169
|
+
};
|
170
|
+
|
117
171
|
} // namespace dtl
|
118
172
|
} // namespace container
|
119
173
|
} // namespace boost
|
@@ -61,6 +61,7 @@ using boost::move_detail::enable_if_and;
|
|
61
61
|
using boost::move_detail::disable_if_and;
|
62
62
|
using boost::move_detail::enable_if_or;
|
63
63
|
using boost::move_detail::disable_if_or;
|
64
|
+
using boost::move_detail::remove_const;
|
64
65
|
|
65
66
|
template <class FirstType>
|
66
67
|
struct select1st
|
@@ -76,6 +77,63 @@ struct select1st
|
|
76
77
|
{ return const_cast<type&>(x.first); }
|
77
78
|
};
|
78
79
|
|
80
|
+
|
81
|
+
template<typename T>
|
82
|
+
struct void_t { typedef void type; };
|
83
|
+
|
84
|
+
template <class T, class=void>
|
85
|
+
struct is_transparent_base
|
86
|
+
{
|
87
|
+
static const bool value = false;
|
88
|
+
};
|
89
|
+
|
90
|
+
template <class T>
|
91
|
+
struct is_transparent_base<T, typename void_t<typename T::is_transparent>::type>
|
92
|
+
{
|
93
|
+
static const bool value = true;
|
94
|
+
};
|
95
|
+
|
96
|
+
template <class T>
|
97
|
+
struct is_transparent
|
98
|
+
: is_transparent_base<T>
|
99
|
+
{};
|
100
|
+
|
101
|
+
template <typename C, class /*Dummy*/, typename R>
|
102
|
+
struct enable_if_transparent
|
103
|
+
: boost::move_detail::enable_if_c<dtl::is_transparent<C>::value, R>
|
104
|
+
{};
|
105
|
+
|
106
|
+
#ifndef BOOST_CONTAINER_NO_CXX17_CTAD
|
107
|
+
|
108
|
+
// void_t (void_t for C++11)
|
109
|
+
template<typename...> using variadic_void_t = void;
|
110
|
+
|
111
|
+
// Trait to detect Allocator-like types.
|
112
|
+
template<typename Allocator, typename = void>
|
113
|
+
struct is_allocator
|
114
|
+
{
|
115
|
+
static const bool value = false;
|
116
|
+
};
|
117
|
+
|
118
|
+
template <typename T>
|
119
|
+
T&& ctad_declval();
|
120
|
+
|
121
|
+
template<typename Allocator>
|
122
|
+
struct is_allocator < Allocator,
|
123
|
+
variadic_void_t< typename Allocator::value_type
|
124
|
+
, decltype(ctad_declval<Allocator&>().allocate(size_t{})) >>
|
125
|
+
{
|
126
|
+
static const bool value = true;
|
127
|
+
};
|
128
|
+
|
129
|
+
template<class T>
|
130
|
+
using require_allocator_t = typename enable_if_c<is_allocator<T>::value, T>::type;
|
131
|
+
|
132
|
+
template<class T>
|
133
|
+
using require_nonallocator_t = typename enable_if_c<!is_allocator<T>::value, T>::type;
|
134
|
+
|
135
|
+
#endif
|
136
|
+
|
79
137
|
} //namespace dtl {
|
80
138
|
} //namespace container {
|
81
139
|
} //namespace boost {
|
@@ -171,11 +171,16 @@ class basic_multiallocation_chain
|
|
171
171
|
|
172
172
|
std::pair<void_pointer, void_pointer> extract_data()
|
173
173
|
{
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
174
|
+
if(BOOST_LIKELY(!slist_impl_.empty())){
|
175
|
+
std::pair<void_pointer, void_pointer> ret
|
176
|
+
(slist_impl_.begin().operator->()
|
177
|
+
,slist_impl_.last().operator->());
|
178
|
+
slist_impl_.clear();
|
179
|
+
return ret;
|
180
|
+
}
|
181
|
+
else {
|
182
|
+
return std::pair<void_pointer, void_pointer>();
|
183
|
+
}
|
179
184
|
}
|
180
185
|
};
|
181
186
|
|
@@ -231,46 +236,46 @@ class transform_multiallocation_chain
|
|
231
236
|
return static_cast<MultiallocationChain&>
|
232
237
|
(this->MultiallocationChain::operator=(::boost::move(static_cast<MultiallocationChain&>(other))));
|
233
238
|
}
|
234
|
-
|
239
|
+
|
235
240
|
void push_front(const pointer &mem)
|
236
|
-
{
|
241
|
+
{ this->MultiallocationChain::push_front(mem); }
|
237
242
|
|
238
243
|
void push_back(const pointer &mem)
|
239
|
-
{ return
|
244
|
+
{ return this->MultiallocationChain::push_back(mem); }
|
240
245
|
|
241
246
|
void swap(transform_multiallocation_chain &other_chain)
|
242
|
-
{
|
247
|
+
{ this->MultiallocationChain::swap(other_chain); }
|
243
248
|
|
244
249
|
void splice_after(iterator after_this, transform_multiallocation_chain &x, iterator before_b, iterator before_e, size_type n)
|
245
|
-
{
|
250
|
+
{ this->MultiallocationChain::splice_after(after_this.base(), x, before_b.base(), before_e.base(), n); }
|
246
251
|
|
247
252
|
void incorporate_after(iterator after_this, pointer b, pointer before_e, size_type n)
|
248
|
-
{
|
249
|
-
|
253
|
+
{ this->MultiallocationChain::incorporate_after(after_this.base(), b, before_e, n); }
|
254
|
+
|
250
255
|
pointer pop_front()
|
251
256
|
{ return cast(this->MultiallocationChain::pop_front()); }
|
252
|
-
|
257
|
+
|
253
258
|
bool empty() const
|
254
|
-
{ return
|
259
|
+
{ return this->MultiallocationChain::empty(); }
|
255
260
|
|
256
261
|
iterator before_begin()
|
257
|
-
{ return iterator(
|
258
|
-
|
262
|
+
{ return iterator(this->MultiallocationChain::before_begin()); }
|
263
|
+
|
259
264
|
iterator begin()
|
260
265
|
{ return iterator(this->MultiallocationChain::begin()); }
|
261
|
-
/*
|
262
|
-
iterator end()
|
263
|
-
{ return iterator(holder_.end()); }
|
264
266
|
|
265
267
|
iterator last()
|
266
|
-
{ return iterator(
|
268
|
+
{ return iterator(this->MultiallocationChain::last()); }
|
269
|
+
|
270
|
+
iterator end()
|
271
|
+
{ return iterator(this->MultiallocationChain::end()); }
|
267
272
|
|
268
273
|
size_type size() const
|
269
|
-
{ return
|
274
|
+
{ return this->MultiallocationChain::size(); }
|
270
275
|
|
271
276
|
void clear()
|
272
|
-
{
|
273
|
-
|
277
|
+
{ this->MultiallocationChain::clear(); }
|
278
|
+
|
274
279
|
iterator insert_after(iterator it, pointer m)
|
275
280
|
{ return iterator(this->MultiallocationChain::insert_after(it.base(), m)); }
|
276
281
|
|
@@ -52,26 +52,49 @@ namespace boost {
|
|
52
52
|
namespace container {
|
53
53
|
namespace dtl {
|
54
54
|
|
55
|
-
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(
|
55
|
+
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(key_compare)
|
56
|
+
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(key_equal)
|
57
|
+
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(hasher)
|
56
58
|
BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(predicate_type)
|
57
59
|
|
58
60
|
template<class Allocator, class ICont>
|
59
61
|
struct node_alloc_holder
|
62
|
+
: public allocator_traits<Allocator>::template
|
63
|
+
portable_rebind_alloc<typename ICont::value_type>::type //NodeAlloc
|
60
64
|
{
|
61
65
|
//If the intrusive container is an associative container, obtain the predicate, which will
|
62
|
-
//be of type node_compare<>. If not an associative container
|
66
|
+
//be of type node_compare<>. If not an associative container val_compare will be a "nat" type.
|
63
67
|
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
|
64
68
|
( boost::container::dtl::
|
65
|
-
, ICont,
|
69
|
+
, ICont, key_compare, dtl::nat) intrusive_val_compare;
|
66
70
|
//In that case obtain the value predicate from the node predicate via predicate_type
|
67
|
-
//if
|
71
|
+
//if intrusive_val_compare is node_compare<>, nat otherwise
|
68
72
|
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
|
69
73
|
( boost::container::dtl::
|
70
|
-
,
|
71
|
-
, predicate_type, dtl::nat)
|
74
|
+
, intrusive_val_compare
|
75
|
+
, predicate_type, dtl::nat) val_compare;
|
76
|
+
|
77
|
+
//If the intrusive container is a hash container, obtain the predicate, which will
|
78
|
+
//be of type node_compare<>. If not an associative container val_equal will be a "nat" type.
|
79
|
+
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
|
80
|
+
(boost::container::dtl::
|
81
|
+
, ICont, key_equal, dtl::nat2) intrusive_val_equal;
|
82
|
+
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
|
83
|
+
(boost::container::dtl::
|
84
|
+
, ICont, hasher, dtl::nat3) intrusive_val_hasher;
|
85
|
+
//In that case obtain the value predicate from the node predicate via predicate_type
|
86
|
+
//if intrusive_val_compare is node_compare<>, nat otherwise
|
87
|
+
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
|
88
|
+
(boost::container::dtl::
|
89
|
+
, intrusive_val_equal
|
90
|
+
, predicate_type, dtl::nat2) val_equal;
|
91
|
+
typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
|
92
|
+
(boost::container::dtl::
|
93
|
+
, intrusive_val_hasher
|
94
|
+
, predicate_type, dtl::nat3) val_hasher;
|
72
95
|
|
73
96
|
typedef allocator_traits<Allocator> allocator_traits_type;
|
74
|
-
typedef typename allocator_traits_type::value_type
|
97
|
+
typedef typename allocator_traits_type::value_type val_type;
|
75
98
|
typedef ICont intrusive_container;
|
76
99
|
typedef typename ICont::value_type Node;
|
77
100
|
typedef typename allocator_traits_type::template
|
@@ -99,51 +122,91 @@ struct node_alloc_holder
|
|
99
122
|
|
100
123
|
//Constructors for sequence containers
|
101
124
|
node_alloc_holder()
|
102
|
-
: members_()
|
103
125
|
{}
|
104
126
|
|
105
127
|
explicit node_alloc_holder(const ValAlloc &a)
|
106
|
-
:
|
128
|
+
: NodeAlloc(a)
|
107
129
|
{}
|
108
130
|
|
109
131
|
//Constructors for associative containers
|
110
|
-
node_alloc_holder(const
|
111
|
-
:
|
132
|
+
node_alloc_holder(const val_compare &c, const ValAlloc &a)
|
133
|
+
: NodeAlloc(a), m_icont(typename ICont::key_compare(c))
|
134
|
+
{}
|
135
|
+
|
136
|
+
node_alloc_holder(const val_hasher &hf, const val_equal &eql, const ValAlloc &a)
|
137
|
+
: NodeAlloc(a)
|
138
|
+
, m_icont(typename ICont::bucket_traits()
|
139
|
+
, typename ICont::hasher(hf)
|
140
|
+
, typename ICont::key_equal(eql))
|
141
|
+
{}
|
142
|
+
|
143
|
+
node_alloc_holder(const val_hasher &hf, const ValAlloc &a)
|
144
|
+
: NodeAlloc(a)
|
145
|
+
, m_icont(typename ICont::bucket_traits()
|
146
|
+
, typename ICont::hasher(hf)
|
147
|
+
, typename ICont::key_equal())
|
148
|
+
{}
|
149
|
+
|
150
|
+
node_alloc_holder(const val_hasher &hf)
|
151
|
+
: m_icont(typename ICont::bucket_traits()
|
152
|
+
, typename ICont::hasher(hf)
|
153
|
+
, typename ICont::key_equal())
|
112
154
|
{}
|
113
155
|
|
114
156
|
explicit node_alloc_holder(const node_alloc_holder &x)
|
115
|
-
:
|
157
|
+
: NodeAlloc(NodeAllocTraits::select_on_container_copy_construction(x.node_alloc()))
|
116
158
|
{}
|
117
159
|
|
118
|
-
node_alloc_holder(const node_alloc_holder &x, const
|
119
|
-
:
|
160
|
+
node_alloc_holder(const node_alloc_holder &x, const val_compare &c)
|
161
|
+
: NodeAlloc(NodeAllocTraits::select_on_container_copy_construction(x.node_alloc()))
|
162
|
+
, m_icont(typename ICont::key_compare(c))
|
163
|
+
{}
|
164
|
+
|
165
|
+
node_alloc_holder(const node_alloc_holder &x, const val_hasher &hf, const val_equal &eql)
|
166
|
+
: NodeAlloc(NodeAllocTraits::select_on_container_copy_construction(x.node_alloc()))
|
167
|
+
, m_icont( typename ICont::bucket_traits()
|
168
|
+
, typename ICont::hasher(hf)
|
169
|
+
, typename ICont::key_equal(eql))
|
170
|
+
{}
|
171
|
+
|
172
|
+
node_alloc_holder(const val_hasher &hf, const val_equal &eql)
|
173
|
+
: m_icont(typename ICont::bucket_traits()
|
174
|
+
, typename ICont::hasher(hf)
|
175
|
+
, typename ICont::key_equal(eql))
|
120
176
|
{}
|
121
177
|
|
122
178
|
explicit node_alloc_holder(BOOST_RV_REF(node_alloc_holder) x)
|
123
|
-
:
|
179
|
+
: NodeAlloc(boost::move(x.node_alloc()))
|
124
180
|
{ this->icont().swap(x.icont()); }
|
125
181
|
|
126
|
-
explicit node_alloc_holder(const
|
127
|
-
:
|
182
|
+
explicit node_alloc_holder(const val_compare &c)
|
183
|
+
: m_icont(typename ICont::key_compare(c))
|
128
184
|
{}
|
129
185
|
|
130
186
|
//helpers for move assignments
|
131
|
-
explicit node_alloc_holder(BOOST_RV_REF(node_alloc_holder) x, const
|
132
|
-
:
|
187
|
+
explicit node_alloc_holder(BOOST_RV_REF(node_alloc_holder) x, const val_compare &c)
|
188
|
+
: NodeAlloc(boost::move(x.node_alloc())), m_icont(typename ICont::key_compare(c))
|
133
189
|
{ this->icont().swap(x.icont()); }
|
134
190
|
|
191
|
+
explicit node_alloc_holder(BOOST_RV_REF(node_alloc_holder) x, const val_hasher &hf, const val_equal &eql)
|
192
|
+
: NodeAlloc(boost::move(x.node_alloc()))
|
193
|
+
, m_icont( typename ICont::bucket_traits()
|
194
|
+
, typename ICont::hasher(hf)
|
195
|
+
, typename ICont::key_equal(eql))
|
196
|
+
{ this->icont().swap(x.icont()); }
|
197
|
+
|
135
198
|
void copy_assign_alloc(const node_alloc_holder &x)
|
136
199
|
{
|
137
200
|
dtl::bool_<allocator_traits_type::propagate_on_container_copy_assignment::value> flag;
|
138
|
-
dtl::assign_alloc( static_cast<NodeAlloc &>(this
|
139
|
-
|
201
|
+
dtl::assign_alloc( static_cast<NodeAlloc &>(*this)
|
202
|
+
, static_cast<const NodeAlloc &>(x), flag);
|
140
203
|
}
|
141
204
|
|
142
205
|
void move_assign_alloc( node_alloc_holder &x)
|
143
206
|
{
|
144
207
|
dtl::bool_<allocator_traits_type::propagate_on_container_move_assignment::value> flag;
|
145
|
-
dtl::move_alloc( static_cast<NodeAlloc &>(this
|
146
|
-
|
208
|
+
dtl::move_alloc( static_cast<NodeAlloc &>(*this)
|
209
|
+
, static_cast<NodeAlloc &>(x), flag);
|
147
210
|
}
|
148
211
|
|
149
212
|
~node_alloc_holder()
|
@@ -164,14 +227,18 @@ struct node_alloc_holder
|
|
164
227
|
NodePtr create_node(Args &&...args)
|
165
228
|
{
|
166
229
|
NodePtr p = this->allocate_one();
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
230
|
+
BOOST_TRY{
|
231
|
+
::new(boost::movelib::iterator_to_raw_pointer(p), boost_container_new_t()) Node;
|
232
|
+
allocator_traits<NodeAlloc>::construct
|
233
|
+
(this->node_alloc()
|
234
|
+
, p->get_real_data_ptr(), boost::forward<Args>(args)...);
|
235
|
+
}
|
236
|
+
BOOST_CATCH(...) {
|
237
|
+
p->destroy_header();
|
238
|
+
this->node_alloc().deallocate(p, 1);
|
239
|
+
BOOST_RETHROW
|
240
|
+
}
|
241
|
+
BOOST_CATCH_END
|
175
242
|
return (p);
|
176
243
|
}
|
177
244
|
|
@@ -182,14 +249,19 @@ struct node_alloc_holder
|
|
182
249
|
NodePtr create_node(BOOST_MOVE_UREF##N)\
|
183
250
|
{\
|
184
251
|
NodePtr p = this->allocate_one();\
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
252
|
+
BOOST_TRY{\
|
253
|
+
::new(boost::movelib::iterator_to_raw_pointer(p), boost_container_new_t()) Node;\
|
254
|
+
allocator_traits<NodeAlloc>::construct\
|
255
|
+
( this->node_alloc()\
|
256
|
+
, p->get_real_data_ptr()\
|
257
|
+
BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
|
258
|
+
}\
|
259
|
+
BOOST_CATCH(...) {\
|
260
|
+
p->destroy_header();\
|
261
|
+
this->node_alloc().deallocate(p, 1);\
|
262
|
+
BOOST_RETHROW\
|
263
|
+
}\
|
264
|
+
BOOST_CATCH_END\
|
193
265
|
return (p);\
|
194
266
|
}\
|
195
267
|
//
|
@@ -202,12 +274,16 @@ struct node_alloc_holder
|
|
202
274
|
NodePtr create_node_from_it(const It &it)
|
203
275
|
{
|
204
276
|
NodePtr p = this->allocate_one();
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
277
|
+
BOOST_TRY{
|
278
|
+
::new(boost::movelib::iterator_to_raw_pointer(p), boost_container_new_t()) Node;
|
279
|
+
::boost::container::construct_in_place(this->node_alloc(), p->get_real_data_ptr(), it);
|
280
|
+
}
|
281
|
+
BOOST_CATCH(...) {
|
282
|
+
p->destroy_header();
|
283
|
+
this->node_alloc().deallocate(p, 1);
|
284
|
+
BOOST_RETHROW
|
285
|
+
}
|
286
|
+
BOOST_CATCH_END
|
211
287
|
return (p);
|
212
288
|
}
|
213
289
|
|
@@ -215,22 +291,26 @@ struct node_alloc_holder
|
|
215
291
|
NodePtr create_node_from_key(BOOST_FWD_REF(KeyConvertible) key)
|
216
292
|
{
|
217
293
|
NodePtr p = this->allocate_one();
|
218
|
-
NodeAlloc &na = this->node_alloc();
|
219
|
-
Deallocator node_deallocator(p, this->node_alloc());
|
220
|
-
node_allocator_traits_type::construct
|
221
|
-
(na, dtl::addressof(p->m_data.first), boost::forward<KeyConvertible>(key));
|
222
294
|
BOOST_TRY{
|
223
|
-
|
295
|
+
::new(boost::movelib::iterator_to_raw_pointer(p), boost_container_new_t()) Node;
|
296
|
+
NodeAlloc &na = this->node_alloc();
|
297
|
+
node_allocator_traits_type::construct
|
298
|
+
(na, dtl::addressof(p->get_real_data().first), boost::forward<KeyConvertible>(key));
|
299
|
+
BOOST_TRY{
|
300
|
+
node_allocator_traits_type::construct(na, dtl::addressof(p->get_real_data().second));
|
301
|
+
}
|
302
|
+
BOOST_CATCH(...){
|
303
|
+
node_allocator_traits_type::destroy(na, dtl::addressof(p->get_real_data().first));
|
304
|
+
BOOST_RETHROW;
|
305
|
+
}
|
306
|
+
BOOST_CATCH_END
|
224
307
|
}
|
225
|
-
BOOST_CATCH(...){
|
226
|
-
|
227
|
-
|
308
|
+
BOOST_CATCH(...) {
|
309
|
+
p->destroy_header();
|
310
|
+
this->node_alloc().deallocate(p, 1);
|
311
|
+
BOOST_RETHROW
|
228
312
|
}
|
229
313
|
BOOST_CATCH_END
|
230
|
-
node_deallocator.release();
|
231
|
-
//This does not throw
|
232
|
-
typedef typename Node::hook_type hook_type;
|
233
|
-
::new(static_cast<hook_type*>(boost::movelib::to_raw_pointer(p)), boost_container_new_t()) hook_type;
|
234
314
|
return (p);
|
235
315
|
}
|
236
316
|
|
@@ -252,30 +332,32 @@ struct node_alloc_holder
|
|
252
332
|
(FwdIterator beg, difference_type n, Inserter inserter)
|
253
333
|
{
|
254
334
|
if(n){
|
255
|
-
typedef typename node_allocator_version_traits_type::multiallocation_chain
|
335
|
+
typedef typename node_allocator_version_traits_type::multiallocation_chain multiallocation_chain_t;
|
256
336
|
|
257
337
|
//Try to allocate memory in a single block
|
258
|
-
typedef typename
|
259
|
-
|
338
|
+
typedef typename multiallocation_chain_t::iterator multialloc_iterator_t;
|
339
|
+
multiallocation_chain_t chain;
|
260
340
|
NodeAlloc &nalloc = this->node_alloc();
|
261
|
-
node_allocator_version_traits_type::allocate_individual(nalloc, n,
|
262
|
-
|
263
|
-
|
341
|
+
node_allocator_version_traits_type::allocate_individual(nalloc, n, chain);
|
342
|
+
multialloc_iterator_t itbeg = chain.begin();
|
343
|
+
multialloc_iterator_t itlast = chain.last();
|
344
|
+
chain.clear();
|
345
|
+
|
264
346
|
Node *p = 0;
|
265
|
-
|
347
|
+
BOOST_TRY{
|
266
348
|
Deallocator node_deallocator(NodePtr(), nalloc);
|
267
349
|
dtl::scoped_destructor<NodeAlloc> sdestructor(nalloc, 0);
|
268
|
-
while(n
|
350
|
+
while(n){
|
351
|
+
--n;
|
269
352
|
p = boost::movelib::iterator_to_raw_pointer(itbeg);
|
353
|
+
++itbeg; //Increment iterator before overwriting pointed memory
|
354
|
+
//This does not throw
|
355
|
+
p = ::new(p, boost_container_new_t()) Node;
|
270
356
|
node_deallocator.set(p);
|
271
|
-
++itbeg;
|
272
357
|
//This can throw
|
273
|
-
boost::container::construct_in_place(nalloc,
|
358
|
+
boost::container::construct_in_place(nalloc, p->get_real_data_ptr(), beg);
|
274
359
|
sdestructor.set(p);
|
275
360
|
++beg;
|
276
|
-
//This does not throw
|
277
|
-
typedef typename Node::hook_type hook_type;
|
278
|
-
::new(static_cast<hook_type*>(p), boost_container_new_t()) hook_type;
|
279
361
|
//This can throw in some containers (predicate might throw).
|
280
362
|
//(sdestructor will destruct the node and node_deallocator will deallocate it in case of exception)
|
281
363
|
inserter(*p);
|
@@ -285,8 +367,9 @@ struct node_alloc_holder
|
|
285
367
|
node_deallocator.release();
|
286
368
|
}
|
287
369
|
BOOST_CATCH(...){
|
288
|
-
|
289
|
-
|
370
|
+
p->destroy_header();
|
371
|
+
chain.incorporate_after(chain.last(), &*itbeg, &*itlast, n);
|
372
|
+
node_allocator_version_traits_type::deallocate_individual(this->node_alloc(), chain);
|
290
373
|
BOOST_RETHROW
|
291
374
|
}
|
292
375
|
BOOST_CATCH_END
|
@@ -339,7 +422,7 @@ struct node_alloc_holder
|
|
339
422
|
{}
|
340
423
|
|
341
424
|
NodePtr operator()(const Node &other) const
|
342
|
-
{ return m_holder.create_node(other.
|
425
|
+
{ return m_holder.create_node(other.get_real_data()); }
|
343
426
|
|
344
427
|
node_alloc_holder &m_holder;
|
345
428
|
};
|
@@ -351,63 +434,32 @@ struct node_alloc_holder
|
|
351
434
|
{}
|
352
435
|
|
353
436
|
NodePtr operator()(Node &other)
|
354
|
-
{ //Use
|
355
|
-
return m_holder.create_node(::boost::move(other.
|
437
|
+
{ //Use get_real_data() instead of get_real_data to allow moving const key in [multi]map
|
438
|
+
return m_holder.create_node(::boost::move(other.get_real_data()));
|
356
439
|
}
|
357
440
|
|
358
441
|
node_alloc_holder &m_holder;
|
359
442
|
};
|
360
443
|
|
361
|
-
struct members_holder
|
362
|
-
: public NodeAlloc
|
363
|
-
{
|
364
|
-
private:
|
365
|
-
members_holder(const members_holder&);
|
366
|
-
members_holder & operator=(const members_holder&);
|
367
|
-
|
368
|
-
public:
|
369
|
-
members_holder()
|
370
|
-
: NodeAlloc(), m_icont()
|
371
|
-
{}
|
372
|
-
|
373
|
-
template<class ConvertibleToAlloc>
|
374
|
-
explicit members_holder(BOOST_FWD_REF(ConvertibleToAlloc) c2alloc)
|
375
|
-
: NodeAlloc(boost::forward<ConvertibleToAlloc>(c2alloc))
|
376
|
-
, m_icont()
|
377
|
-
{}
|
378
|
-
|
379
|
-
template<class ConvertibleToAlloc>
|
380
|
-
members_holder(BOOST_FWD_REF(ConvertibleToAlloc) c2alloc, const value_compare &c)
|
381
|
-
: NodeAlloc(boost::forward<ConvertibleToAlloc>(c2alloc))
|
382
|
-
, m_icont(typename ICont::key_compare(c))
|
383
|
-
{}
|
384
|
-
|
385
|
-
explicit members_holder(const value_compare &c)
|
386
|
-
: NodeAlloc()
|
387
|
-
, m_icont(typename ICont::key_compare(c))
|
388
|
-
{}
|
389
|
-
|
390
|
-
//The intrusive container
|
391
|
-
ICont m_icont;
|
392
|
-
};
|
393
|
-
|
394
444
|
ICont &non_const_icont() const
|
395
|
-
{ return const_cast<ICont&>(this->
|
445
|
+
{ return const_cast<ICont&>(this->m_icont); }
|
396
446
|
|
397
447
|
NodeAlloc &node_alloc()
|
398
|
-
{ return static_cast<NodeAlloc &>(this
|
448
|
+
{ return static_cast<NodeAlloc &>(*this); }
|
399
449
|
|
400
450
|
const NodeAlloc &node_alloc() const
|
401
|
-
{ return static_cast<const NodeAlloc &>(this
|
402
|
-
|
403
|
-
members_holder members_;
|
451
|
+
{ return static_cast<const NodeAlloc &>(*this); }
|
404
452
|
|
405
453
|
public:
|
406
454
|
ICont &icont()
|
407
|
-
{ return this->
|
455
|
+
{ return this->m_icont; }
|
408
456
|
|
409
457
|
const ICont &icont() const
|
410
|
-
{ return this->
|
458
|
+
{ return this->m_icont; }
|
459
|
+
|
460
|
+
private:
|
461
|
+
//The intrusive container
|
462
|
+
ICont m_icont;
|
411
463
|
};
|
412
464
|
|
413
465
|
} //namespace dtl {
|