passenger 5.1.4 → 5.1.5
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of passenger might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.editorconfig +9 -0
- data/CHANGELOG +9 -0
- data/build/cxx_tests.rb +11 -1
- data/build/documentation.rb +0 -32
- data/build/support/cxx_dependency_map.rb +602 -2
- data/build/test_basics.rb +3 -3
- data/dev/boost-patches/0001-Patch-boost-thread-so-that-oxt-thread-can-use-it.patch +48 -0
- data/dev/boost-patches/0002-Make-boost-thread_interrupted-derive-from-oxt-tracab.patch +33 -0
- data/dev/boost-patches/0003-Disable-a-Clang-pragma-to-prevent-warnings-on-OS-X.patch +25 -0
- data/dev/ci/README.md +121 -0
- data/dev/ci/lib/functions.sh +129 -0
- data/dev/ci/lib/set-container-envvars.sh +46 -0
- data/dev/ci/lib/setup-container.sh +43 -0
- data/dev/ci/run-tests-natively +24 -0
- data/dev/ci/run-tests-with-docker +42 -0
- data/dev/ci/scripts/debug-console-wrapper.sh +27 -0
- data/dev/ci/scripts/docker-entrypoint-stage2.sh +17 -0
- data/dev/ci/scripts/docker-entrypoint.sh +17 -0
- data/dev/ci/scripts/inituidgid +17 -0
- data/dev/ci/scripts/run-tests-natively-stage2.sh +17 -0
- data/dev/ci/scripts/setup-host-natively.sh +11 -0
- data/dev/ci/setup-host +50 -0
- data/dev/ci/tests/apache2/run +6 -0
- data/dev/ci/tests/apache2/setup +4 -0
- data/dev/ci/tests/cxx/run +9 -0
- data/dev/ci/tests/cxx/setup +4 -0
- data/dev/ci/tests/nginx-dynamic/run +20 -0
- data/dev/ci/tests/nginx-dynamic/setup +4 -0
- data/dev/ci/tests/nginx/run +5 -0
- data/dev/ci/tests/nginx/setup +4 -0
- data/dev/ci/tests/nodejs/run +4 -0
- data/dev/ci/tests/nodejs/setup +4 -0
- data/dev/ci/tests/ruby/run +4 -0
- data/dev/ci/tests/ruby/setup +4 -0
- data/dev/ci/tests/source-packaging/run +4 -0
- data/dev/ci/tests/source-packaging/setup +4 -0
- data/dev/ci/tests/standalone/run +4 -0
- data/dev/ci/tests/standalone/setup +4 -0
- data/dev/copy_boost_headers +8 -2
- data/src/agent/Core/ApiServer.h +11 -5
- data/src/agent/Core/Controller.h +12 -46
- data/src/agent/Core/Controller/CheckoutSession.cpp +1 -1
- data/src/agent/Core/Controller/Config.h +369 -0
- data/src/agent/Core/Controller/ForwardResponse.cpp +4 -4
- data/src/agent/Core/Controller/Hooks.cpp +15 -3
- data/src/agent/Core/Controller/Implementation.cpp +1 -1
- data/src/agent/Core/Controller/InitRequest.cpp +28 -39
- data/src/agent/Core/Controller/InitializationAndShutdown.cpp +25 -60
- data/src/agent/Core/Controller/InternalUtils.cpp +0 -16
- data/src/agent/Core/Controller/Miscellaneous.cpp +0 -17
- data/src/agent/Core/Controller/Request.h +2 -0
- data/src/agent/Core/Controller/SendRequest.cpp +4 -4
- data/src/agent/Core/Controller/{StateInspectionAndConfiguration.cpp → StateInspection.cpp} +0 -22
- data/src/agent/Core/Controller/TurboCaching.h +11 -10
- data/src/agent/Core/CoreMain.cpp +16 -6
- data/src/agent/Core/ResponseCache.h +3 -3
- data/src/agent/Core/SpawningKit/SmartSpawner.h +9 -3
- data/src/agent/Core/SpawningKit/Spawner.h +7 -3
- data/src/agent/UstRouter/ApiServer.h +3 -2
- data/src/agent/UstRouter/Controller.h +66 -32
- data/src/agent/UstRouter/UstRouterMain.cpp +10 -2
- data/src/agent/Watchdog/ApiServer.h +3 -2
- data/src/agent/Watchdog/WatchdogMain.cpp +3 -1
- data/src/apache2_module/ConfigurationCommands.cpp +1 -1
- data/src/cxx_supportlib/ConfigKit/Common.h +125 -0
- data/src/cxx_supportlib/ConfigKit/ConfigKit.h +34 -0
- data/src/cxx_supportlib/ConfigKit/README.md +895 -0
- data/src/cxx_supportlib/ConfigKit/Schema.h +331 -0
- data/src/cxx_supportlib/ConfigKit/Store.h +385 -0
- data/src/cxx_supportlib/ConfigKit/TableTranslator.h +185 -0
- data/src/cxx_supportlib/ConfigKit/Utils.h +141 -0
- data/src/cxx_supportlib/ConfigKit/VariantMapUtils.h +81 -0
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/Crypto.cpp +2 -2
- data/src/cxx_supportlib/Logging.h +0 -35
- data/src/cxx_supportlib/ServerKit/HttpServer.h +35 -16
- data/src/cxx_supportlib/ServerKit/Server.h +65 -25
- data/src/cxx_supportlib/oxt/macros.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/replace.hpp +0 -2
- data/src/cxx_supportlib/vendor-modified/boost/array.hpp +53 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +11 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +13 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_x86.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +28 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +9 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/bind/arg.hpp +10 -3
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +90 -18
- data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +8 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +35 -6
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +2 -0
- 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 +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/compaq_cxx.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +3 -1
- 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 +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +29 -7
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/kai.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sgi_mipspro.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +44 -16
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/select_compiler_config.hpp +21 -21
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +42 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +40 -7
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +39 -6
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/suffix.hpp +33 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +0 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +0 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +34 -27
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +62 -26
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +39 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +49 -32
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +175 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +223 -98
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_sorted.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +88 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +7 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +4 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +45 -18
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +205 -26
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +290 -181
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +24 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +38 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +320 -46
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +91 -18
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +491 -120
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +0 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +399 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/deque.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/list.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/slist.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/small_vector.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/stable_vector.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/string.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/vector.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +101 -20
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +19 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +117 -59
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +33 -28
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +414 -70
- data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +134 -117
- data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +202 -99
- data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +8 -10
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +217 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +29 -27
- data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_names_put.hpp +8 -7
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_calendar.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day_of_year.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +27 -7
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/posix_time_zone.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/date_duration_operators.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/detail/lcast_precision.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/shared_ptr.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +25 -3
- data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +114 -1
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +116 -142
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +57 -69
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/detail/hash_float.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/extensions.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/hash.hpp +27 -13
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +99 -12
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set_hook.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +35 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +37 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +95 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set_hook.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +209 -72
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +86 -20
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algo_type.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +58 -45
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +27 -26
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +8 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +27 -26
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +9 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/has_member_function_callable_with.hpp +83 -57
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +9 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +8 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -15
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +70 -44
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +22 -21
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +29 -28
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +33 -12
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +19 -12
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +21 -20
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +23 -22
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +23 -22
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +10 -9
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +103 -29
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +295 -211
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +20 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +22 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +36 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +43 -13
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +95 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +96 -12
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +102 -5
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +48 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +20 -11
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +9 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +95 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +36 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +27 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +167 -23
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +100 -46
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +37 -27
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +30 -14
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +35 -36
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +6 -28
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +20 -5
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +11 -7
- data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +40 -7
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +67 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +63 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +2437 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +121 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +127 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +637 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +139 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +155 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +1 -116
- data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +14 -13
- data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +17 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/destruct_n.hpp +67 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +227 -32
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +30 -9
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +84 -80
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/placement_new.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/reverse_iterator.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +14 -20
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +32 -33
- data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +49 -49
- data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +8 -7
- data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +17 -16
- data/src/cxx_supportlib/vendor-modified/boost/mpl/print.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/none.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +197 -255
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +1059 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +75 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +116 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_factory_support.hpp +36 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +253 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +196 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_swap.hpp +117 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +372 -554
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +12 -1
- data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +15 -7
- data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +9 -2
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +15 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +16 -4
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +20 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/cat.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +5 -6
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/to_list_msvc.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/to_list.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/const_iterator.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +0 -5
- data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +102 -87
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +45 -21
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +14 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +5 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +5 -14
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +116 -13
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +1004 -159
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +4 -58
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +5 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -8
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +28 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +187 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +52 -144
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +120 -450
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +70 -8
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +9 -8
- data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/barrier.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/completion_latch.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_views.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +11 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +22 -18
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +163 -55
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/launch.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_all.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/lock_types.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/thread/locks.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +6 -7
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +17 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/timespec.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/thread/thread_functors.hpp +19 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/thread_guard.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +265 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +272 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +300 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +9 -3
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/mp_defer.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_assign.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_constructor.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_assign.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_copy.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_destructor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_abstract.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +21 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pod.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_void.hpp +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +40 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +4986 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +107 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +105 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +1814 -1255
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +41 -45
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +1498 -1161
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +40 -44
- data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/utility/compare_pointees.hpp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +39 -22
- data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +690 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/string_view_fwd.hpp +39 -0
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/helper-scripts/crash-watch.rb +3 -0
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/packaging.rb +2 -12
- metadata +77 -38
- data/dev/ci/inituidgid +0 -24
- data/dev/ci/run_jenkins.sh +0 -70
- data/dev/ci/run_travis.sh +0 -314
- data/doc/Design and Architecture.html +0 -2421
- data/doc/Design and Architecture.txt +0 -511
- data/doc/Security of user switching support.html +0 -1833
- data/doc/Users guide Apache.html +0 -3101
- data/doc/Users guide Apache.idmap.txt +0 -451
- data/doc/Users guide Apache.txt +0 -534
- data/doc/Users guide Nginx.html +0 -3026
- data/doc/Users guide Nginx.idmap.txt +0 -431
- data/doc/Users guide Nginx.txt +0 -451
- data/doc/Users guide Standalone.html +0 -2092
- data/doc/Users guide Standalone.idmap.txt +0 -137
- data/doc/Users guide Standalone.txt +0 -81
- data/doc/Users guide.html +0 -1606
- data/doc/Users guide.txt +0 -8
- data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -20
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/address.hpp +0 -29
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/align.hpp +0 -40
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -22
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -29
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +0 -383
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_allocator.hpp +0 -318
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_count_impl.hpp +0 -67
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_traits.hpp +0 -60
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_utility.hpp +0 -214
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_if_array.hpp +0 -34
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocate.hpp +0 -1128
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/buckets.hpp +0 -928
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/equivalent.hpp +0 -686
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/extract_key.hpp +0 -188
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/table.hpp +0 -873
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unique.hpp +0 -628
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/util.hpp +0 -266
@@ -0,0 +1,121 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2015-2016.
|
4
|
+
// Distributed under the Boost Software License, Version 1.0.
|
5
|
+
// (See accompanying file LICENSE_1_0.txt or copy at
|
6
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
7
|
+
//
|
8
|
+
// See http://www.boost.org/libs/move for documentation.
|
9
|
+
//
|
10
|
+
//////////////////////////////////////////////////////////////////////////////
|
11
|
+
#ifndef BOOST_MOVE_ALGO_BASIC_OP
|
12
|
+
#define BOOST_MOVE_ALGO_BASIC_OP
|
13
|
+
|
14
|
+
#ifndef BOOST_CONFIG_HPP
|
15
|
+
# include <boost/config.hpp>
|
16
|
+
#endif
|
17
|
+
#
|
18
|
+
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
19
|
+
# pragma once
|
20
|
+
#endif
|
21
|
+
|
22
|
+
#include <boost/move/utility_core.hpp>
|
23
|
+
#include <boost/move/adl_move_swap.hpp>
|
24
|
+
#include <boost/move/detail/iterator_traits.hpp>
|
25
|
+
|
26
|
+
namespace boost {
|
27
|
+
namespace movelib {
|
28
|
+
|
29
|
+
struct forward_t{};
|
30
|
+
struct backward_t{};
|
31
|
+
struct three_way_t{};
|
32
|
+
struct three_way_forward_t{};
|
33
|
+
struct four_way_t{};
|
34
|
+
|
35
|
+
struct move_op
|
36
|
+
{
|
37
|
+
template <class SourceIt, class DestinationIt>
|
38
|
+
void operator()(SourceIt source, DestinationIt dest)
|
39
|
+
{ *dest = ::boost::move(*source); }
|
40
|
+
|
41
|
+
template <class SourceIt, class DestinationIt>
|
42
|
+
DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin)
|
43
|
+
{ return ::boost::move(first, last, dest_begin); }
|
44
|
+
|
45
|
+
template <class SourceIt, class DestinationIt>
|
46
|
+
DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_last)
|
47
|
+
{ return ::boost::move_backward(first, last, dest_last); }
|
48
|
+
|
49
|
+
template <class SourceIt, class DestinationIt1, class DestinationIt2>
|
50
|
+
void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it)
|
51
|
+
{
|
52
|
+
*dest2it = boost::move(*dest1it);
|
53
|
+
*dest1it = boost::move(*srcit);
|
54
|
+
}
|
55
|
+
|
56
|
+
template <class SourceIt, class DestinationIt1, class DestinationIt2>
|
57
|
+
DestinationIt2 operator()(three_way_forward_t, SourceIt srcit, SourceIt srcitend, DestinationIt1 dest1it, DestinationIt2 dest2it)
|
58
|
+
{
|
59
|
+
//Destination2 range can overlap SourceIt range so avoid boost::move
|
60
|
+
while(srcit != srcitend){
|
61
|
+
this->operator()(three_way_t(), srcit++, dest1it++, dest2it++);
|
62
|
+
}
|
63
|
+
return dest2it;
|
64
|
+
}
|
65
|
+
|
66
|
+
template <class SourceIt, class DestinationIt1, class DestinationIt2, class DestinationIt3>
|
67
|
+
void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it)
|
68
|
+
{
|
69
|
+
*dest3it = boost::move(*dest2it);
|
70
|
+
*dest2it = boost::move(*dest1it);
|
71
|
+
*dest1it = boost::move(*srcit);
|
72
|
+
}
|
73
|
+
};
|
74
|
+
|
75
|
+
struct swap_op
|
76
|
+
{
|
77
|
+
template <class SourceIt, class DestinationIt>
|
78
|
+
void operator()(SourceIt source, DestinationIt dest)
|
79
|
+
{ boost::adl_move_swap(*dest, *source); }
|
80
|
+
|
81
|
+
template <class SourceIt, class DestinationIt>
|
82
|
+
DestinationIt operator()(forward_t, SourceIt first, SourceIt last, DestinationIt dest_begin)
|
83
|
+
{ return boost::adl_move_swap_ranges(first, last, dest_begin); }
|
84
|
+
|
85
|
+
template <class SourceIt, class DestinationIt>
|
86
|
+
DestinationIt operator()(backward_t, SourceIt first, SourceIt last, DestinationIt dest_begin)
|
87
|
+
{ return boost::adl_move_swap_ranges_backward(first, last, dest_begin); }
|
88
|
+
|
89
|
+
template <class SourceIt, class DestinationIt1, class DestinationIt2>
|
90
|
+
void operator()(three_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it)
|
91
|
+
{
|
92
|
+
typename ::boost::movelib::iterator_traits<SourceIt>::value_type tmp(boost::move(*dest2it));
|
93
|
+
*dest2it = boost::move(*dest1it);
|
94
|
+
*dest1it = boost::move(*srcit);
|
95
|
+
*srcit = boost::move(tmp);
|
96
|
+
}
|
97
|
+
|
98
|
+
template <class SourceIt, class DestinationIt1, class DestinationIt2>
|
99
|
+
DestinationIt2 operator()(three_way_forward_t, SourceIt srcit, SourceIt srcitend, DestinationIt1 dest1it, DestinationIt2 dest2it)
|
100
|
+
{
|
101
|
+
while(srcit != srcitend){
|
102
|
+
this->operator()(three_way_t(), srcit++, dest1it++, dest2it++);
|
103
|
+
}
|
104
|
+
return dest2it;
|
105
|
+
}
|
106
|
+
|
107
|
+
template <class SourceIt, class DestinationIt1, class DestinationIt2, class DestinationIt3>
|
108
|
+
void operator()(four_way_t, SourceIt srcit, DestinationIt1 dest1it, DestinationIt2 dest2it, DestinationIt3 dest3it)
|
109
|
+
{
|
110
|
+
typename ::boost::movelib::iterator_traits<SourceIt>::value_type tmp(boost::move(*dest3it));
|
111
|
+
*dest3it = boost::move(*dest2it);
|
112
|
+
*dest2it = boost::move(*dest1it);
|
113
|
+
*dest1it = boost::move(*srcit);
|
114
|
+
*srcit = boost::move(tmp);
|
115
|
+
}
|
116
|
+
};
|
117
|
+
|
118
|
+
|
119
|
+
}} //namespace boost::movelib
|
120
|
+
|
121
|
+
#endif //BOOST_MOVE_ALGO_BASIC_OP
|
@@ -0,0 +1,127 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2014-2014.
|
4
|
+
// Distributed under the Boost Software License, Version 1.0.
|
5
|
+
// (See accompanying file LICENSE_1_0.txt or copy at
|
6
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
7
|
+
//
|
8
|
+
// See http://www.boost.org/libs/move for documentation.
|
9
|
+
//
|
10
|
+
//////////////////////////////////////////////////////////////////////////////
|
11
|
+
|
12
|
+
//! \file
|
13
|
+
|
14
|
+
#ifndef BOOST_MOVE_DETAIL_INSERT_SORT_HPP
|
15
|
+
#define BOOST_MOVE_DETAIL_INSERT_SORT_HPP
|
16
|
+
|
17
|
+
#ifndef BOOST_CONFIG_HPP
|
18
|
+
# include <boost/config.hpp>
|
19
|
+
#endif
|
20
|
+
#
|
21
|
+
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
22
|
+
# pragma once
|
23
|
+
#endif
|
24
|
+
|
25
|
+
#include <boost/move/utility_core.hpp>
|
26
|
+
#include <boost/move/algo/move.hpp>
|
27
|
+
#include <boost/move/detail/iterator_traits.hpp>
|
28
|
+
#include <boost/move/adl_move_swap.hpp>
|
29
|
+
#include <boost/move/utility_core.hpp>
|
30
|
+
#include <boost/move/detail/placement_new.hpp>
|
31
|
+
#include <boost/move/detail/destruct_n.hpp>
|
32
|
+
#include <boost/move/algo/detail/basic_op.hpp>
|
33
|
+
#include <boost/move/detail/placement_new.hpp>
|
34
|
+
|
35
|
+
namespace boost { namespace movelib{
|
36
|
+
|
37
|
+
// @cond
|
38
|
+
|
39
|
+
template <class Compare, class ForwardIterator, class BirdirectionalIterator, class Op>
|
40
|
+
void insertion_sort_op(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp, Op op)
|
41
|
+
{
|
42
|
+
if (first1 != last1){
|
43
|
+
BirdirectionalIterator last2 = first2;
|
44
|
+
op(first1, last2);
|
45
|
+
for (++last2; ++first1 != last1; ++last2){
|
46
|
+
BirdirectionalIterator j2 = last2;
|
47
|
+
BirdirectionalIterator i2 = j2;
|
48
|
+
if (comp(*first1, *--i2)){
|
49
|
+
op(i2, j2);
|
50
|
+
for (--j2; i2 != first2 && comp(*first1, *--i2); --j2) {
|
51
|
+
op(i2, j2);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
op(first1, j2);
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
template <class Compare, class ForwardIterator, class BirdirectionalIterator>
|
60
|
+
void insertion_sort_swap(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp)
|
61
|
+
{
|
62
|
+
insertion_sort_op(first1, last1, first2, comp, swap_op());
|
63
|
+
}
|
64
|
+
|
65
|
+
|
66
|
+
template <class Compare, class ForwardIterator, class BirdirectionalIterator>
|
67
|
+
void insertion_sort_copy(ForwardIterator first1, ForwardIterator last1, BirdirectionalIterator first2, Compare comp)
|
68
|
+
{
|
69
|
+
insertion_sort_op(first1, last1, first2, comp, move_op());
|
70
|
+
}
|
71
|
+
|
72
|
+
// @endcond
|
73
|
+
|
74
|
+
template <class Compare, class BirdirectionalIterator>
|
75
|
+
void insertion_sort(BirdirectionalIterator first, BirdirectionalIterator last, Compare comp)
|
76
|
+
{
|
77
|
+
typedef typename boost::movelib::iterator_traits<BirdirectionalIterator>::value_type value_type;
|
78
|
+
if (first != last){
|
79
|
+
BirdirectionalIterator i = first;
|
80
|
+
for (++i; i != last; ++i){
|
81
|
+
BirdirectionalIterator j = i;
|
82
|
+
if (comp(*i, *--j)) {
|
83
|
+
value_type tmp(::boost::move(*i));
|
84
|
+
*i = ::boost::move(*j);
|
85
|
+
for (BirdirectionalIterator k = j; k != first && comp(tmp, *--k); --j) {
|
86
|
+
*j = ::boost::move(*k);
|
87
|
+
}
|
88
|
+
*j = ::boost::move(tmp);
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
template <class Compare, class BirdirectionalIterator>
|
95
|
+
void insertion_sort_uninitialized_copy
|
96
|
+
(BirdirectionalIterator first1, BirdirectionalIterator const last1
|
97
|
+
, typename iterator_traits<BirdirectionalIterator>::value_type* const first2
|
98
|
+
, Compare comp)
|
99
|
+
{
|
100
|
+
typedef typename iterator_traits<BirdirectionalIterator>::value_type value_type;
|
101
|
+
if (first1 != last1){
|
102
|
+
value_type* last2 = first2;
|
103
|
+
::new(last2, boost_move_new_t()) value_type(move(*first1));
|
104
|
+
destruct_n<value_type> d(first2);
|
105
|
+
d.incr();
|
106
|
+
for (++last2; ++first1 != last1; ++last2){
|
107
|
+
value_type* j2 = last2;
|
108
|
+
value_type* k2 = j2;
|
109
|
+
if (comp(*first1, *--k2)){
|
110
|
+
::new(j2, boost_move_new_t()) value_type(move(*k2));
|
111
|
+
d.incr();
|
112
|
+
for (--j2; k2 != first2 && comp(*first1, *--k2); --j2)
|
113
|
+
*j2 = move(*k2);
|
114
|
+
*j2 = move(*first1);
|
115
|
+
}
|
116
|
+
else{
|
117
|
+
::new(j2, boost_move_new_t()) value_type(move(*first1));
|
118
|
+
d.incr();
|
119
|
+
}
|
120
|
+
}
|
121
|
+
d.release();
|
122
|
+
}
|
123
|
+
}
|
124
|
+
|
125
|
+
}} //namespace boost { namespace movelib{
|
126
|
+
|
127
|
+
#endif //#ifndef BOOST_MOVE_DETAIL_INSERT_SORT_HPP
|
@@ -0,0 +1,637 @@
|
|
1
|
+
//////////////////////////////////////////////////////////////////////////////
|
2
|
+
//
|
3
|
+
// (C) Copyright Ion Gaztanaga 2015-2016.
|
4
|
+
// Distributed under the Boost Software License, Version 1.0.
|
5
|
+
// (See accompanying file LICENSE_1_0.txt or copy at
|
6
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
7
|
+
//
|
8
|
+
// See http://www.boost.org/libs/move for documentation.
|
9
|
+
//
|
10
|
+
//////////////////////////////////////////////////////////////////////////////
|
11
|
+
#ifndef BOOST_MOVE_MERGE_HPP
|
12
|
+
#define BOOST_MOVE_MERGE_HPP
|
13
|
+
|
14
|
+
#include <boost/move/algo/move.hpp>
|
15
|
+
#include <boost/move/adl_move_swap.hpp>
|
16
|
+
#include <boost/move/algo/detail/basic_op.hpp>
|
17
|
+
#include <boost/move/detail/iterator_traits.hpp>
|
18
|
+
#include <boost/move/detail/destruct_n.hpp>
|
19
|
+
#include <boost/assert.hpp>
|
20
|
+
|
21
|
+
namespace boost {
|
22
|
+
namespace movelib {
|
23
|
+
|
24
|
+
// @cond
|
25
|
+
|
26
|
+
/*
|
27
|
+
template<typename Unsigned>
|
28
|
+
inline Unsigned gcd(Unsigned x, Unsigned y)
|
29
|
+
{
|
30
|
+
if(0 == ((x &(x-1)) | (y & (y-1)))){
|
31
|
+
return x < y ? x : y;
|
32
|
+
}
|
33
|
+
else{
|
34
|
+
do
|
35
|
+
{
|
36
|
+
Unsigned t = x % y;
|
37
|
+
x = y;
|
38
|
+
y = t;
|
39
|
+
} while (y);
|
40
|
+
return x;
|
41
|
+
}
|
42
|
+
}
|
43
|
+
*/
|
44
|
+
|
45
|
+
//Modified version from "An Optimal In-Place Array Rotation Algorithm", Ching-Kuang Shene
|
46
|
+
template<typename Unsigned>
|
47
|
+
Unsigned gcd(Unsigned x, Unsigned y)
|
48
|
+
{
|
49
|
+
if(0 == ((x &(x-1)) | (y & (y-1)))){
|
50
|
+
return x < y ? x : y;
|
51
|
+
}
|
52
|
+
else{
|
53
|
+
Unsigned z = 1;
|
54
|
+
while((!(x&1)) & (!(y&1))){
|
55
|
+
z <<=1, x>>=1, y>>=1;
|
56
|
+
}
|
57
|
+
while(x && y){
|
58
|
+
if(!(x&1))
|
59
|
+
x >>=1;
|
60
|
+
else if(!(y&1))
|
61
|
+
y >>=1;
|
62
|
+
else if(x >=y)
|
63
|
+
x = (x-y) >> 1;
|
64
|
+
else
|
65
|
+
y = (y-x) >> 1;
|
66
|
+
}
|
67
|
+
return z*(x+y);
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
template<typename RandIt>
|
72
|
+
RandIt rotate_gcd(RandIt first, RandIt middle, RandIt last)
|
73
|
+
{
|
74
|
+
typedef typename iterator_traits<RandIt>::size_type size_type;
|
75
|
+
typedef typename iterator_traits<RandIt>::value_type value_type;
|
76
|
+
|
77
|
+
if(first == middle)
|
78
|
+
return last;
|
79
|
+
if(middle == last)
|
80
|
+
return first;
|
81
|
+
const size_type middle_pos = size_type(middle - first);
|
82
|
+
RandIt ret = last - middle_pos;
|
83
|
+
if (middle == ret){
|
84
|
+
boost::adl_move_swap_ranges(first, middle, middle);
|
85
|
+
}
|
86
|
+
else{
|
87
|
+
const size_type length = size_type(last - first);
|
88
|
+
for( RandIt it_i(first), it_gcd(it_i + gcd(length, middle_pos))
|
89
|
+
; it_i != it_gcd
|
90
|
+
; ++it_i){
|
91
|
+
value_type temp(boost::move(*it_i));
|
92
|
+
RandIt it_j = it_i;
|
93
|
+
RandIt it_k = it_j+middle_pos;
|
94
|
+
do{
|
95
|
+
*it_j = boost::move(*it_k);
|
96
|
+
it_j = it_k;
|
97
|
+
size_type const left = size_type(last - it_j);
|
98
|
+
it_k = left > middle_pos ? it_j + middle_pos : first + (middle_pos - left);
|
99
|
+
} while(it_k != it_i);
|
100
|
+
*it_j = boost::move(temp);
|
101
|
+
}
|
102
|
+
}
|
103
|
+
return ret;
|
104
|
+
}
|
105
|
+
|
106
|
+
template <class RandIt, class T, class Compare>
|
107
|
+
RandIt lower_bound
|
108
|
+
(RandIt first, const RandIt last, const T& key, Compare comp)
|
109
|
+
{
|
110
|
+
typedef typename iterator_traits
|
111
|
+
<RandIt>::size_type size_type;
|
112
|
+
size_type len = size_type(last - first);
|
113
|
+
RandIt middle;
|
114
|
+
|
115
|
+
while (len) {
|
116
|
+
size_type step = len >> 1;
|
117
|
+
middle = first;
|
118
|
+
middle += step;
|
119
|
+
|
120
|
+
if (comp(*middle, key)) {
|
121
|
+
first = ++middle;
|
122
|
+
len -= step + 1;
|
123
|
+
}
|
124
|
+
else{
|
125
|
+
len = step;
|
126
|
+
}
|
127
|
+
}
|
128
|
+
return first;
|
129
|
+
}
|
130
|
+
|
131
|
+
template <class RandIt, class T, class Compare>
|
132
|
+
RandIt upper_bound
|
133
|
+
(RandIt first, const RandIt last, const T& key, Compare comp)
|
134
|
+
{
|
135
|
+
typedef typename iterator_traits
|
136
|
+
<RandIt>::size_type size_type;
|
137
|
+
size_type len = size_type(last - first);
|
138
|
+
RandIt middle;
|
139
|
+
|
140
|
+
while (len) {
|
141
|
+
size_type step = len >> 1;
|
142
|
+
middle = first;
|
143
|
+
middle += step;
|
144
|
+
|
145
|
+
if (!comp(key, *middle)) {
|
146
|
+
first = ++middle;
|
147
|
+
len -= step + 1;
|
148
|
+
}
|
149
|
+
else{
|
150
|
+
len = step;
|
151
|
+
}
|
152
|
+
}
|
153
|
+
return first;
|
154
|
+
}
|
155
|
+
|
156
|
+
|
157
|
+
template<class RandIt, class Compare, class Op>
|
158
|
+
void op_merge_left( RandIt buf_first
|
159
|
+
, RandIt first1
|
160
|
+
, RandIt const last1
|
161
|
+
, RandIt const last2
|
162
|
+
, Compare comp
|
163
|
+
, Op op)
|
164
|
+
{
|
165
|
+
for(RandIt first2=last1; first2 != last2; ++buf_first){
|
166
|
+
if(first1 == last1){
|
167
|
+
op(forward_t(), first2, last2, buf_first);
|
168
|
+
return;
|
169
|
+
}
|
170
|
+
else if(comp(*first2, *first1)){
|
171
|
+
op(first2, buf_first);
|
172
|
+
++first2;
|
173
|
+
}
|
174
|
+
else{
|
175
|
+
op(first1, buf_first);
|
176
|
+
++first1;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
if(buf_first != first1){//In case all remaining elements are in the same place
|
180
|
+
//(e.g. buffer is exactly the size of the second half
|
181
|
+
//and all elements from the second half are less)
|
182
|
+
op(forward_t(), first1, last1, buf_first);
|
183
|
+
}
|
184
|
+
else{
|
185
|
+
buf_first = buf_first;
|
186
|
+
}
|
187
|
+
}
|
188
|
+
|
189
|
+
// [buf_first, first1) -> buffer
|
190
|
+
// [first1, last1) merge [last1,last2) -> [buf_first,buf_first+(last2-first1))
|
191
|
+
// Elements from buffer are moved to [last2 - (first1-buf_first), last2)
|
192
|
+
// Note: distance(buf_first, first1) >= distance(last1, last2), so no overlapping occurs
|
193
|
+
template<class RandIt, class Compare>
|
194
|
+
void merge_left
|
195
|
+
(RandIt buf_first, RandIt first1, RandIt const last1, RandIt const last2, Compare comp)
|
196
|
+
{
|
197
|
+
op_merge_left(buf_first, first1, last1, last2, comp, move_op());
|
198
|
+
}
|
199
|
+
|
200
|
+
// [buf_first, first1) -> buffer
|
201
|
+
// [first1, last1) merge [last1,last2) -> [buf_first,buf_first+(last2-first1))
|
202
|
+
// Elements from buffer are swapped to [last2 - (first1-buf_first), last2)
|
203
|
+
// Note: distance(buf_first, first1) >= distance(last1, last2), so no overlapping occurs
|
204
|
+
template<class RandIt, class Compare>
|
205
|
+
void swap_merge_left
|
206
|
+
(RandIt buf_first, RandIt first1, RandIt const last1, RandIt const last2, Compare comp)
|
207
|
+
{
|
208
|
+
op_merge_left(buf_first, first1, last1, last2, comp, swap_op());
|
209
|
+
}
|
210
|
+
|
211
|
+
template<class RandIt, class Compare, class Op>
|
212
|
+
void op_merge_right
|
213
|
+
(RandIt const first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp, Op op)
|
214
|
+
{
|
215
|
+
RandIt const first2 = last1;
|
216
|
+
while(first1 != last1){
|
217
|
+
if(last2 == first2){
|
218
|
+
op(backward_t(), first1, last1, buf_last);
|
219
|
+
return;
|
220
|
+
}
|
221
|
+
--last2;
|
222
|
+
--last1;
|
223
|
+
--buf_last;
|
224
|
+
if(comp(*last2, *last1)){
|
225
|
+
op(last1, buf_last);
|
226
|
+
++last2;
|
227
|
+
}
|
228
|
+
else{
|
229
|
+
op(last2, buf_last);
|
230
|
+
++last1;
|
231
|
+
}
|
232
|
+
}
|
233
|
+
if(last2 != buf_last){ //In case all remaining elements are in the same place
|
234
|
+
//(e.g. buffer is exactly the size of the first half
|
235
|
+
//and all elements from the second half are less)
|
236
|
+
op(backward_t(), first2, last2, buf_last);
|
237
|
+
}
|
238
|
+
}
|
239
|
+
|
240
|
+
// [last2, buf_last) - buffer
|
241
|
+
// [first1, last1) merge [last1,last2) -> [first1+(buf_last-last2), buf_last)
|
242
|
+
// Note: distance[last2, buf_last) >= distance[first1, last1), so no overlapping occurs
|
243
|
+
template<class RandIt, class Compare>
|
244
|
+
void merge_right
|
245
|
+
(RandIt first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp)
|
246
|
+
{
|
247
|
+
op_merge_right(first1, last1, last2, buf_last, comp, move_op());
|
248
|
+
}
|
249
|
+
|
250
|
+
// [last2, buf_last) - buffer
|
251
|
+
// [first1, last1) merge [last1,last2) -> [first1+(buf_last-last2), buf_last)
|
252
|
+
// Note: distance[last2, buf_last) >= distance[first1, last1), so no overlapping occurs
|
253
|
+
template<class RandIt, class Compare>
|
254
|
+
void swap_merge_right
|
255
|
+
(RandIt first1, RandIt last1, RandIt last2, RandIt buf_last, Compare comp)
|
256
|
+
{
|
257
|
+
op_merge_right(first1, last1, last2, buf_last, comp, swap_op());
|
258
|
+
}
|
259
|
+
|
260
|
+
template <class BidirIt, class Distance, class Compare>
|
261
|
+
void merge_bufferless_ONlogN_recursive
|
262
|
+
(BidirIt first, BidirIt middle, BidirIt last, Distance len1, Distance len2, Compare comp)
|
263
|
+
{
|
264
|
+
typedef typename iterator_traits<BidirIt>::size_type size_type;
|
265
|
+
while(1) {
|
266
|
+
//#define MERGE_BUFFERLESS_RECURSIVE_OPT
|
267
|
+
#ifndef MERGE_BUFFERLESS_RECURSIVE_OPT
|
268
|
+
if (len2 == 0) {
|
269
|
+
return;
|
270
|
+
}
|
271
|
+
|
272
|
+
if (!len1) {
|
273
|
+
return;
|
274
|
+
}
|
275
|
+
|
276
|
+
if ((len1 | len2) == 1) {
|
277
|
+
if (comp(*middle, *first))
|
278
|
+
adl_move_swap(*first, *middle);
|
279
|
+
return;
|
280
|
+
}
|
281
|
+
#else
|
282
|
+
if (len2 == 0) {
|
283
|
+
return;
|
284
|
+
}
|
285
|
+
|
286
|
+
if (!len1) {
|
287
|
+
return;
|
288
|
+
}
|
289
|
+
BidirIt middle_prev = middle; --middle_prev;
|
290
|
+
if(!comp(*middle, *middle_prev))
|
291
|
+
return;
|
292
|
+
|
293
|
+
while(true) {
|
294
|
+
if (comp(*middle, *first))
|
295
|
+
break;
|
296
|
+
++first;
|
297
|
+
if(--len1 == 1)
|
298
|
+
break;
|
299
|
+
}
|
300
|
+
|
301
|
+
if (len1 == 1 && len2 == 1) {
|
302
|
+
//comp(*middle, *first) == true already tested in the loop
|
303
|
+
adl_move_swap(*first, *middle);
|
304
|
+
return;
|
305
|
+
}
|
306
|
+
#endif
|
307
|
+
|
308
|
+
BidirIt first_cut = first;
|
309
|
+
BidirIt second_cut = middle;
|
310
|
+
Distance len11 = 0;
|
311
|
+
Distance len22 = 0;
|
312
|
+
if (len1 > len2) {
|
313
|
+
len11 = len1 / 2;
|
314
|
+
first_cut += len11;
|
315
|
+
second_cut = lower_bound(middle, last, *first_cut, comp);
|
316
|
+
len22 = size_type(second_cut - middle);
|
317
|
+
}
|
318
|
+
else {
|
319
|
+
len22 = len2 / 2;
|
320
|
+
second_cut += len22;
|
321
|
+
first_cut = upper_bound(first, middle, *second_cut, comp);
|
322
|
+
len11 = size_type(first_cut - first);
|
323
|
+
}
|
324
|
+
BidirIt new_middle = rotate_gcd(first_cut, middle, second_cut);
|
325
|
+
|
326
|
+
//Avoid one recursive call doing a manual tail call elimination on the biggest range
|
327
|
+
const Distance len_internal = len11+len22;
|
328
|
+
if( len_internal < (len1 + len2 - len_internal) ) {
|
329
|
+
merge_bufferless_ONlogN_recursive(first, first_cut, new_middle, len11, len22, comp);
|
330
|
+
//merge_bufferless_recursive(new_middle, second_cut, last, len1 - len11, len2 - len22, comp);
|
331
|
+
first = new_middle;
|
332
|
+
middle = second_cut;
|
333
|
+
len1 -= len11;
|
334
|
+
len2 -= len22;
|
335
|
+
}
|
336
|
+
else {
|
337
|
+
//merge_bufferless_recursive(first, first_cut, new_middle, len11, len22, comp);
|
338
|
+
merge_bufferless_ONlogN_recursive(new_middle, second_cut, last, len1 - len11, len2 - len22, comp);
|
339
|
+
middle = first_cut;
|
340
|
+
last = new_middle;
|
341
|
+
len1 = len11;
|
342
|
+
len2 = len22;
|
343
|
+
}
|
344
|
+
}
|
345
|
+
}
|
346
|
+
|
347
|
+
//Complexity: NlogN
|
348
|
+
template<class BidirIt, class Compare>
|
349
|
+
void merge_bufferless_ONlogN(BidirIt first, BidirIt middle, BidirIt last, Compare comp)
|
350
|
+
{
|
351
|
+
merge_bufferless_ONlogN_recursive
|
352
|
+
(first, middle, last, middle - first, last - middle, comp);
|
353
|
+
}
|
354
|
+
|
355
|
+
//Complexity: min(len1,len2)^2 + max(len1,len2)
|
356
|
+
template<class RandIt, class Compare>
|
357
|
+
void merge_bufferless_ON2(RandIt first, RandIt middle, RandIt last, Compare comp)
|
358
|
+
{
|
359
|
+
if((middle - first) < (last - middle)){
|
360
|
+
while(first != middle){
|
361
|
+
RandIt const old_last1 = middle;
|
362
|
+
middle = lower_bound(middle, last, *first, comp);
|
363
|
+
first = rotate_gcd(first, old_last1, middle);
|
364
|
+
if(middle == last){
|
365
|
+
break;
|
366
|
+
}
|
367
|
+
do{
|
368
|
+
++first;
|
369
|
+
} while(first != middle && !comp(*middle, *first));
|
370
|
+
}
|
371
|
+
}
|
372
|
+
else{
|
373
|
+
while(middle != last){
|
374
|
+
RandIt p = upper_bound(first, middle, last[-1], comp);
|
375
|
+
last = rotate_gcd(p, middle, last);
|
376
|
+
middle = p;
|
377
|
+
if(middle == first){
|
378
|
+
break;
|
379
|
+
}
|
380
|
+
--p;
|
381
|
+
do{
|
382
|
+
--last;
|
383
|
+
} while(middle != last && !comp(last[-1], *p));
|
384
|
+
}
|
385
|
+
}
|
386
|
+
}
|
387
|
+
|
388
|
+
template<class RandIt, class Compare>
|
389
|
+
void merge_bufferless(RandIt first, RandIt middle, RandIt last, Compare comp)
|
390
|
+
{
|
391
|
+
//#define BOOST_ADAPTIVE_MERGE_NLOGN_MERGE
|
392
|
+
#ifdef BOOST_ADAPTIVE_MERGE_NLOGN_MERGE
|
393
|
+
merge_bufferless_ONlogN(first, middle, last, comp);
|
394
|
+
#else
|
395
|
+
merge_bufferless_ON2(first, middle, last, comp);
|
396
|
+
#endif //BOOST_ADAPTIVE_MERGE_NLOGN_MERGE
|
397
|
+
}
|
398
|
+
|
399
|
+
template<class Comp>
|
400
|
+
struct antistable
|
401
|
+
{
|
402
|
+
explicit antistable(Comp &comp)
|
403
|
+
: m_comp(comp)
|
404
|
+
{}
|
405
|
+
|
406
|
+
template<class U, class V>
|
407
|
+
bool operator()(const U &u, const V & v)
|
408
|
+
{ return !m_comp(v, u); }
|
409
|
+
|
410
|
+
private:
|
411
|
+
antistable & operator=(const antistable &);
|
412
|
+
Comp &m_comp;
|
413
|
+
};
|
414
|
+
|
415
|
+
template <class Comp>
|
416
|
+
class negate
|
417
|
+
{
|
418
|
+
public:
|
419
|
+
negate()
|
420
|
+
{}
|
421
|
+
|
422
|
+
explicit negate(Comp comp)
|
423
|
+
: m_comp(comp)
|
424
|
+
{}
|
425
|
+
|
426
|
+
template <class T1, class T2>
|
427
|
+
bool operator()(const T1& l, const T2& r)
|
428
|
+
{
|
429
|
+
return !m_comp(l, r);
|
430
|
+
}
|
431
|
+
|
432
|
+
private:
|
433
|
+
Comp m_comp;
|
434
|
+
};
|
435
|
+
|
436
|
+
|
437
|
+
template <class Comp>
|
438
|
+
class inverse
|
439
|
+
{
|
440
|
+
public:
|
441
|
+
inverse()
|
442
|
+
{}
|
443
|
+
|
444
|
+
explicit inverse(Comp comp)
|
445
|
+
: m_comp(comp)
|
446
|
+
{}
|
447
|
+
|
448
|
+
template <class T1, class T2>
|
449
|
+
bool operator()(const T1& l, const T2& r)
|
450
|
+
{
|
451
|
+
return m_comp(r, l);
|
452
|
+
}
|
453
|
+
|
454
|
+
private:
|
455
|
+
Comp m_comp;
|
456
|
+
};
|
457
|
+
|
458
|
+
// [r_first, r_last) are already in the right part of the destination range.
|
459
|
+
template <class Compare, class InputIterator, class InputOutIterator, class Op>
|
460
|
+
void op_merge_with_right_placed
|
461
|
+
( InputIterator first, InputIterator last
|
462
|
+
, InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last
|
463
|
+
, Compare comp, Op op)
|
464
|
+
{
|
465
|
+
BOOST_ASSERT((last - first) == (r_first - dest_first));
|
466
|
+
while ( first != last ) {
|
467
|
+
if (r_first == r_last) {
|
468
|
+
InputOutIterator end = op(forward_t(), first, last, dest_first);
|
469
|
+
BOOST_ASSERT(end == r_last);
|
470
|
+
(void)end;
|
471
|
+
return;
|
472
|
+
}
|
473
|
+
else if (comp(*r_first, *first)) {
|
474
|
+
op(r_first, dest_first);
|
475
|
+
++r_first;
|
476
|
+
}
|
477
|
+
else {
|
478
|
+
op(first, dest_first);
|
479
|
+
++first;
|
480
|
+
}
|
481
|
+
++dest_first;
|
482
|
+
}
|
483
|
+
// Remaining [r_first, r_last) already in the correct place
|
484
|
+
}
|
485
|
+
|
486
|
+
template <class Compare, class InputIterator, class InputOutIterator>
|
487
|
+
void swap_merge_with_right_placed
|
488
|
+
( InputIterator first, InputIterator last
|
489
|
+
, InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last
|
490
|
+
, Compare comp)
|
491
|
+
{
|
492
|
+
op_merge_with_right_placed(first, last, dest_first, r_first, r_last, comp, swap_op());
|
493
|
+
}
|
494
|
+
|
495
|
+
// [first, last) are already in the right part of the destination range.
|
496
|
+
template <class Compare, class Op, class BidirIterator, class BidirOutIterator>
|
497
|
+
void op_merge_with_left_placed
|
498
|
+
( BidirOutIterator const first, BidirOutIterator last, BidirOutIterator dest_last
|
499
|
+
, BidirIterator const r_first, BidirIterator r_last
|
500
|
+
, Compare comp, Op op)
|
501
|
+
{
|
502
|
+
BOOST_ASSERT((dest_last - last) == (r_last - r_first));
|
503
|
+
while( r_first != r_last ) {
|
504
|
+
if(first == last) {
|
505
|
+
BidirOutIterator res = op(backward_t(), r_first, r_last, dest_last);
|
506
|
+
BOOST_ASSERT(last == res);
|
507
|
+
(void)res;
|
508
|
+
return;
|
509
|
+
}
|
510
|
+
--r_last;
|
511
|
+
--last;
|
512
|
+
if(comp(*r_last, *last)){
|
513
|
+
++r_last;
|
514
|
+
--dest_last;
|
515
|
+
op(last, dest_last);
|
516
|
+
}
|
517
|
+
else{
|
518
|
+
++last;
|
519
|
+
--dest_last;
|
520
|
+
op(r_last, dest_last);
|
521
|
+
}
|
522
|
+
}
|
523
|
+
// Remaining [first, last) already in the correct place
|
524
|
+
}
|
525
|
+
|
526
|
+
// @endcond
|
527
|
+
|
528
|
+
// [irst, last) are already in the right part of the destination range.
|
529
|
+
template <class Compare, class BidirIterator, class BidirOutIterator>
|
530
|
+
void merge_with_left_placed
|
531
|
+
( BidirOutIterator const first, BidirOutIterator last, BidirOutIterator dest_last
|
532
|
+
, BidirIterator const r_first, BidirIterator r_last
|
533
|
+
, Compare comp)
|
534
|
+
{
|
535
|
+
op_merge_with_left_placed(first, last, dest_last, r_first, r_last, comp, move_op());
|
536
|
+
}
|
537
|
+
|
538
|
+
// [r_first, r_last) are already in the right part of the destination range.
|
539
|
+
template <class Compare, class InputIterator, class InputOutIterator>
|
540
|
+
void merge_with_right_placed
|
541
|
+
( InputIterator first, InputIterator last
|
542
|
+
, InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last
|
543
|
+
, Compare comp)
|
544
|
+
{
|
545
|
+
op_merge_with_right_placed(first, last, dest_first, r_first, r_last, comp, move_op());
|
546
|
+
}
|
547
|
+
|
548
|
+
// [r_first, r_last) are already in the right part of the destination range.
|
549
|
+
// [dest_first, r_first) is uninitialized memory
|
550
|
+
template <class Compare, class InputIterator, class InputOutIterator>
|
551
|
+
void uninitialized_merge_with_right_placed
|
552
|
+
( InputIterator first, InputIterator last
|
553
|
+
, InputOutIterator dest_first, InputOutIterator r_first, InputOutIterator r_last
|
554
|
+
, Compare comp)
|
555
|
+
{
|
556
|
+
BOOST_ASSERT((last - first) == (r_first - dest_first));
|
557
|
+
typedef typename iterator_traits<InputOutIterator>::value_type value_type;
|
558
|
+
InputOutIterator const original_r_first = r_first;
|
559
|
+
|
560
|
+
destruct_n<value_type> d(&*dest_first);
|
561
|
+
|
562
|
+
while ( first != last && dest_first != original_r_first ) {
|
563
|
+
if (r_first == r_last) {
|
564
|
+
for(; dest_first != original_r_first; ++dest_first, ++first){
|
565
|
+
::new(&*dest_first) value_type(::boost::move(*first));
|
566
|
+
d.incr();
|
567
|
+
}
|
568
|
+
d.release();
|
569
|
+
InputOutIterator end = ::boost::move(first, last, original_r_first);
|
570
|
+
BOOST_ASSERT(end == r_last);
|
571
|
+
(void)end;
|
572
|
+
return;
|
573
|
+
}
|
574
|
+
else if (comp(*r_first, *first)) {
|
575
|
+
::new(&*dest_first) value_type(::boost::move(*r_first));
|
576
|
+
d.incr();
|
577
|
+
++r_first;
|
578
|
+
}
|
579
|
+
else {
|
580
|
+
::new(&*dest_first) value_type(::boost::move(*first));
|
581
|
+
d.incr();
|
582
|
+
++first;
|
583
|
+
}
|
584
|
+
++dest_first;
|
585
|
+
}
|
586
|
+
d.release();
|
587
|
+
merge_with_right_placed(first, last, original_r_first, r_first, r_last, comp);
|
588
|
+
}
|
589
|
+
|
590
|
+
/*
|
591
|
+
// [r_first, r_last) are already in the right part of the destination range.
|
592
|
+
// [dest_first, r_first) is uninitialized memory
|
593
|
+
template <class Compare, class BidirOutIterator, class BidirIterator>
|
594
|
+
void uninitialized_merge_with_left_placed
|
595
|
+
( BidirOutIterator dest_first, BidirOutIterator r_first, BidirOutIterator r_last
|
596
|
+
, BidirIterator first, BidirIterator last
|
597
|
+
, Compare comp)
|
598
|
+
{
|
599
|
+
BOOST_ASSERT((last - first) == (r_last - r_first));
|
600
|
+
typedef typename iterator_traits<BidirOutIterator>::value_type value_type;
|
601
|
+
BidirOutIterator const original_r_last = r_last;
|
602
|
+
|
603
|
+
destruct_n<value_type> d(&*dest_last);
|
604
|
+
|
605
|
+
while ( first != last && dest_first != original_r_first ) {
|
606
|
+
if (r_first == r_last) {
|
607
|
+
for(; dest_first != original_r_first; ++dest_first, ++first){
|
608
|
+
::new(&*dest_first) value_type(::boost::move(*first));
|
609
|
+
d.incr();
|
610
|
+
}
|
611
|
+
d.release();
|
612
|
+
BidirOutIterator end = ::boost::move(first, last, original_r_first);
|
613
|
+
BOOST_ASSERT(end == r_last);
|
614
|
+
(void)end;
|
615
|
+
return;
|
616
|
+
}
|
617
|
+
else if (comp(*r_first, *first)) {
|
618
|
+
::new(&*dest_first) value_type(::boost::move(*r_first));
|
619
|
+
d.incr();
|
620
|
+
++r_first;
|
621
|
+
}
|
622
|
+
else {
|
623
|
+
::new(&*dest_first) value_type(::boost::move(*first));
|
624
|
+
d.incr();
|
625
|
+
++first;
|
626
|
+
}
|
627
|
+
++dest_first;
|
628
|
+
}
|
629
|
+
d.release();
|
630
|
+
merge_with_right_placed(first, last, original_r_first, r_first, r_last, comp);
|
631
|
+
}
|
632
|
+
*/
|
633
|
+
|
634
|
+
} //namespace movelib {
|
635
|
+
} //namespace boost {
|
636
|
+
|
637
|
+
#endif //#define BOOST_MOVE_MERGE_HPP
|