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
@@ -1,188 +0,0 @@
|
|
1
|
-
|
2
|
-
// Copyright (C) 2005-2011 Daniel James
|
3
|
-
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
4
|
-
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
5
|
-
|
6
|
-
#ifndef BOOST_UNORDERED_DETAIL_EXTRACT_KEY_HPP_INCLUDED
|
7
|
-
#define BOOST_UNORDERED_DETAIL_EXTRACT_KEY_HPP_INCLUDED
|
8
|
-
|
9
|
-
#include <boost/config.hpp>
|
10
|
-
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
11
|
-
#pragma once
|
12
|
-
#endif
|
13
|
-
|
14
|
-
#include <boost/unordered/detail/table.hpp>
|
15
|
-
|
16
|
-
namespace boost {
|
17
|
-
namespace unordered {
|
18
|
-
namespace detail {
|
19
|
-
|
20
|
-
// key extractors
|
21
|
-
//
|
22
|
-
// no throw
|
23
|
-
//
|
24
|
-
// 'extract_key' is called with the emplace parameters to return a
|
25
|
-
// key if available or 'no_key' is one isn't and will need to be
|
26
|
-
// constructed. This could be done by overloading the emplace implementation
|
27
|
-
// for the different cases, but that's a bit tricky on compilers without
|
28
|
-
// variadic templates.
|
29
|
-
|
30
|
-
struct no_key {
|
31
|
-
no_key() {}
|
32
|
-
template <class T> no_key(T const&) {}
|
33
|
-
};
|
34
|
-
|
35
|
-
template <typename Key, typename T>
|
36
|
-
struct is_key {
|
37
|
-
template <typename T2>
|
38
|
-
static choice1::type test(T2 const&);
|
39
|
-
static choice2::type test(Key const&);
|
40
|
-
|
41
|
-
enum { value = sizeof(test(boost::unordered::detail::make<T>())) ==
|
42
|
-
sizeof(choice2::type) };
|
43
|
-
|
44
|
-
typedef typename boost::detail::if_true<value>::
|
45
|
-
BOOST_NESTED_TEMPLATE then<Key const&, no_key>::type type;
|
46
|
-
};
|
47
|
-
|
48
|
-
template <class ValueType>
|
49
|
-
struct set_extractor
|
50
|
-
{
|
51
|
-
typedef ValueType value_type;
|
52
|
-
typedef ValueType key_type;
|
53
|
-
|
54
|
-
static key_type const& extract(key_type const& v)
|
55
|
-
{
|
56
|
-
return v;
|
57
|
-
}
|
58
|
-
|
59
|
-
static no_key extract()
|
60
|
-
{
|
61
|
-
return no_key();
|
62
|
-
}
|
63
|
-
|
64
|
-
template <class Arg>
|
65
|
-
static no_key extract(Arg const&)
|
66
|
-
{
|
67
|
-
return no_key();
|
68
|
-
}
|
69
|
-
|
70
|
-
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
71
|
-
template <class Arg1, class Arg2, class... Args>
|
72
|
-
static no_key extract(Arg1 const&, Arg2 const&, Args const&...)
|
73
|
-
{
|
74
|
-
return no_key();
|
75
|
-
}
|
76
|
-
#else
|
77
|
-
template <class Arg1, class Arg2>
|
78
|
-
static no_key extract(Arg1 const&, Arg2 const&)
|
79
|
-
{
|
80
|
-
return no_key();
|
81
|
-
}
|
82
|
-
#endif
|
83
|
-
};
|
84
|
-
|
85
|
-
template <class Key, class ValueType>
|
86
|
-
struct map_extractor
|
87
|
-
{
|
88
|
-
typedef ValueType value_type;
|
89
|
-
typedef typename boost::remove_const<Key>::type key_type;
|
90
|
-
|
91
|
-
static key_type const& extract(value_type const& v)
|
92
|
-
{
|
93
|
-
return v.first;
|
94
|
-
}
|
95
|
-
|
96
|
-
template <class Second>
|
97
|
-
static key_type const& extract(std::pair<key_type, Second> const& v)
|
98
|
-
{
|
99
|
-
return v.first;
|
100
|
-
}
|
101
|
-
|
102
|
-
template <class Second>
|
103
|
-
static key_type const& extract(
|
104
|
-
std::pair<key_type const, Second> const& v)
|
105
|
-
{
|
106
|
-
return v.first;
|
107
|
-
}
|
108
|
-
|
109
|
-
template <class Arg1>
|
110
|
-
static key_type const& extract(key_type const& k, Arg1 const&)
|
111
|
-
{
|
112
|
-
return k;
|
113
|
-
}
|
114
|
-
|
115
|
-
static no_key extract()
|
116
|
-
{
|
117
|
-
return no_key();
|
118
|
-
}
|
119
|
-
|
120
|
-
template <class Arg>
|
121
|
-
static no_key extract(Arg const&)
|
122
|
-
{
|
123
|
-
return no_key();
|
124
|
-
}
|
125
|
-
|
126
|
-
template <class Arg1, class Arg2>
|
127
|
-
static no_key extract(Arg1 const&, Arg2 const&)
|
128
|
-
{
|
129
|
-
return no_key();
|
130
|
-
}
|
131
|
-
|
132
|
-
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
133
|
-
template <class Arg1, class Arg2, class Arg3, class... Args>
|
134
|
-
static no_key extract(Arg1 const&, Arg2 const&, Arg3 const&,
|
135
|
-
Args const&...)
|
136
|
-
{
|
137
|
-
return no_key();
|
138
|
-
}
|
139
|
-
#endif
|
140
|
-
|
141
|
-
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
142
|
-
|
143
|
-
#define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_) \
|
144
|
-
template <typename T2> \
|
145
|
-
static no_key extract(boost::unordered::piecewise_construct_t, \
|
146
|
-
namespace_ tuple<> const&, T2 const&) \
|
147
|
-
{ \
|
148
|
-
return no_key(); \
|
149
|
-
} \
|
150
|
-
\
|
151
|
-
template <typename T, typename T2> \
|
152
|
-
static typename is_key<key_type, T>::type \
|
153
|
-
extract(boost::unordered::piecewise_construct_t, \
|
154
|
-
namespace_ tuple<T> const& k, T2 const&) \
|
155
|
-
{ \
|
156
|
-
return typename is_key<key_type, T>::type( \
|
157
|
-
namespace_ get<0>(k)); \
|
158
|
-
}
|
159
|
-
|
160
|
-
#else
|
161
|
-
|
162
|
-
#define BOOST_UNORDERED_KEY_FROM_TUPLE(namespace_) \
|
163
|
-
static no_key extract(boost::unordered::piecewise_construct_t, \
|
164
|
-
namespace_ tuple<> const&) \
|
165
|
-
{ \
|
166
|
-
return no_key(); \
|
167
|
-
} \
|
168
|
-
\
|
169
|
-
template <typename T> \
|
170
|
-
static typename is_key<key_type, T>::type \
|
171
|
-
extract(boost::unordered::piecewise_construct_t, \
|
172
|
-
namespace_ tuple<T> const& k) \
|
173
|
-
{ \
|
174
|
-
return typename is_key<key_type, T>::type( \
|
175
|
-
namespace_ get<0>(k)); \
|
176
|
-
}
|
177
|
-
|
178
|
-
#endif
|
179
|
-
|
180
|
-
BOOST_UNORDERED_KEY_FROM_TUPLE(boost::)
|
181
|
-
|
182
|
-
#if !defined(BOOST_NO_CXX11_HDR_TUPLE)
|
183
|
-
BOOST_UNORDERED_KEY_FROM_TUPLE(std::)
|
184
|
-
#endif
|
185
|
-
};
|
186
|
-
}}}
|
187
|
-
|
188
|
-
#endif
|
@@ -1,873 +0,0 @@
|
|
1
|
-
|
2
|
-
// Copyright (C) 2003-2004 Jeremy B. Maitin-Shepard.
|
3
|
-
// Copyright (C) 2005-2011 Daniel James
|
4
|
-
// Distributed under the Boost Software License, Version 1.0. (See accompanying
|
5
|
-
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
6
|
-
|
7
|
-
#ifndef BOOST_UNORDERED_DETAIL_ALL_HPP_INCLUDED
|
8
|
-
#define BOOST_UNORDERED_DETAIL_ALL_HPP_INCLUDED
|
9
|
-
|
10
|
-
#include <boost/config.hpp>
|
11
|
-
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
12
|
-
#pragma once
|
13
|
-
#endif
|
14
|
-
|
15
|
-
#include <boost/unordered/detail/buckets.hpp>
|
16
|
-
#include <boost/unordered/detail/util.hpp>
|
17
|
-
#include <boost/type_traits/aligned_storage.hpp>
|
18
|
-
#include <boost/type_traits/alignment_of.hpp>
|
19
|
-
#include <cmath>
|
20
|
-
|
21
|
-
#if defined(BOOST_MSVC)
|
22
|
-
#pragma warning(push)
|
23
|
-
#pragma warning(disable:4127) // conditional expression is constant
|
24
|
-
#endif
|
25
|
-
|
26
|
-
#if defined(BOOST_UNORDERED_DEPRECATED_EQUALITY)
|
27
|
-
|
28
|
-
#if defined(__EDG__)
|
29
|
-
#elif defined(_MSC_VER) || defined(__BORLANDC__) || defined(__DMC__)
|
30
|
-
#pragma message("Warning: BOOST_UNORDERED_DEPRECATED_EQUALITY is no longer supported.")
|
31
|
-
#elif defined(__GNUC__) || defined(__HP_aCC) || \
|
32
|
-
defined(__SUNPRO_CC) || defined(__IBMCPP__)
|
33
|
-
#warning "BOOST_UNORDERED_DEPRECATED_EQUALITY is no longer supported."
|
34
|
-
#endif
|
35
|
-
|
36
|
-
#endif
|
37
|
-
|
38
|
-
namespace boost { namespace unordered { namespace detail {
|
39
|
-
|
40
|
-
////////////////////////////////////////////////////////////////////////////
|
41
|
-
// convert double to std::size_t
|
42
|
-
|
43
|
-
inline std::size_t double_to_size(double f)
|
44
|
-
{
|
45
|
-
return f >= static_cast<double>(
|
46
|
-
(std::numeric_limits<std::size_t>::max)()) ?
|
47
|
-
(std::numeric_limits<std::size_t>::max)() :
|
48
|
-
static_cast<std::size_t>(f);
|
49
|
-
}
|
50
|
-
|
51
|
-
// The space used to store values in a node.
|
52
|
-
|
53
|
-
template <typename ValueType>
|
54
|
-
struct value_base
|
55
|
-
{
|
56
|
-
typedef ValueType value_type;
|
57
|
-
|
58
|
-
typename boost::aligned_storage<
|
59
|
-
sizeof(value_type),
|
60
|
-
boost::alignment_of<value_type>::value>::type data_;
|
61
|
-
|
62
|
-
value_base() :
|
63
|
-
data_()
|
64
|
-
{}
|
65
|
-
|
66
|
-
void* address() {
|
67
|
-
return this;
|
68
|
-
}
|
69
|
-
|
70
|
-
value_type& value() {
|
71
|
-
return *(ValueType*) this;
|
72
|
-
}
|
73
|
-
|
74
|
-
value_type* value_ptr() {
|
75
|
-
return (ValueType*) this;
|
76
|
-
}
|
77
|
-
|
78
|
-
private:
|
79
|
-
|
80
|
-
value_base& operator=(value_base const&);
|
81
|
-
};
|
82
|
-
|
83
|
-
template <typename NodeAlloc>
|
84
|
-
struct copy_nodes
|
85
|
-
{
|
86
|
-
typedef boost::unordered::detail::allocator_traits<NodeAlloc>
|
87
|
-
node_allocator_traits;
|
88
|
-
|
89
|
-
node_constructor<NodeAlloc> constructor;
|
90
|
-
|
91
|
-
explicit copy_nodes(NodeAlloc& a) : constructor(a) {}
|
92
|
-
|
93
|
-
typename node_allocator_traits::pointer create(
|
94
|
-
typename node_allocator_traits::value_type::value_type const& v)
|
95
|
-
{
|
96
|
-
constructor.construct_with_value2(v);
|
97
|
-
return constructor.release();
|
98
|
-
}
|
99
|
-
};
|
100
|
-
|
101
|
-
template <typename NodeAlloc>
|
102
|
-
struct move_nodes
|
103
|
-
{
|
104
|
-
typedef boost::unordered::detail::allocator_traits<NodeAlloc>
|
105
|
-
node_allocator_traits;
|
106
|
-
|
107
|
-
node_constructor<NodeAlloc> constructor;
|
108
|
-
|
109
|
-
explicit move_nodes(NodeAlloc& a) : constructor(a) {}
|
110
|
-
|
111
|
-
typename node_allocator_traits::pointer create(
|
112
|
-
typename node_allocator_traits::value_type::value_type& v)
|
113
|
-
{
|
114
|
-
constructor.construct_with_value2(boost::move(v));
|
115
|
-
return constructor.release();
|
116
|
-
}
|
117
|
-
};
|
118
|
-
|
119
|
-
template <typename Buckets>
|
120
|
-
struct assign_nodes
|
121
|
-
{
|
122
|
-
node_holder<typename Buckets::node_allocator> holder;
|
123
|
-
|
124
|
-
explicit assign_nodes(Buckets& b) : holder(b) {}
|
125
|
-
|
126
|
-
typename Buckets::node_pointer create(
|
127
|
-
typename Buckets::value_type const& v)
|
128
|
-
{
|
129
|
-
return holder.copy_of(v);
|
130
|
-
}
|
131
|
-
};
|
132
|
-
|
133
|
-
template <typename Buckets>
|
134
|
-
struct move_assign_nodes
|
135
|
-
{
|
136
|
-
node_holder<typename Buckets::node_allocator> holder;
|
137
|
-
|
138
|
-
explicit move_assign_nodes(Buckets& b) : holder(b) {}
|
139
|
-
|
140
|
-
typename Buckets::node_pointer create(
|
141
|
-
typename Buckets::value_type& v)
|
142
|
-
{
|
143
|
-
return holder.move_copy_of(v);
|
144
|
-
}
|
145
|
-
};
|
146
|
-
|
147
|
-
template <typename Types>
|
148
|
-
struct table :
|
149
|
-
boost::unordered::detail::functions<
|
150
|
-
typename Types::hasher,
|
151
|
-
typename Types::key_equal>
|
152
|
-
{
|
153
|
-
private:
|
154
|
-
table(table const&);
|
155
|
-
table& operator=(table const&);
|
156
|
-
public:
|
157
|
-
typedef typename Types::node node;
|
158
|
-
typedef typename Types::bucket bucket;
|
159
|
-
typedef typename Types::hasher hasher;
|
160
|
-
typedef typename Types::key_equal key_equal;
|
161
|
-
typedef typename Types::key_type key_type;
|
162
|
-
typedef typename Types::extractor extractor;
|
163
|
-
typedef typename Types::value_type value_type;
|
164
|
-
typedef typename Types::table table_impl;
|
165
|
-
typedef typename Types::link_pointer link_pointer;
|
166
|
-
typedef typename Types::policy policy;
|
167
|
-
|
168
|
-
typedef boost::unordered::detail::functions<
|
169
|
-
typename Types::hasher,
|
170
|
-
typename Types::key_equal> functions;
|
171
|
-
typedef typename functions::set_hash_functions set_hash_functions;
|
172
|
-
|
173
|
-
typedef typename Types::allocator allocator;
|
174
|
-
typedef typename boost::unordered::detail::
|
175
|
-
rebind_wrap<allocator, node>::type node_allocator;
|
176
|
-
typedef typename boost::unordered::detail::
|
177
|
-
rebind_wrap<allocator, bucket>::type bucket_allocator;
|
178
|
-
typedef boost::unordered::detail::allocator_traits<node_allocator>
|
179
|
-
node_allocator_traits;
|
180
|
-
typedef boost::unordered::detail::allocator_traits<bucket_allocator>
|
181
|
-
bucket_allocator_traits;
|
182
|
-
typedef typename node_allocator_traits::pointer
|
183
|
-
node_pointer;
|
184
|
-
typedef typename node_allocator_traits::const_pointer
|
185
|
-
const_node_pointer;
|
186
|
-
typedef typename bucket_allocator_traits::pointer
|
187
|
-
bucket_pointer;
|
188
|
-
typedef boost::unordered::detail::node_constructor<node_allocator>
|
189
|
-
node_constructor;
|
190
|
-
|
191
|
-
typedef boost::unordered::iterator_detail::
|
192
|
-
iterator<node> iterator;
|
193
|
-
typedef boost::unordered::iterator_detail::
|
194
|
-
c_iterator<node> c_iterator;
|
195
|
-
typedef boost::unordered::iterator_detail::
|
196
|
-
l_iterator<node, policy> l_iterator;
|
197
|
-
typedef boost::unordered::iterator_detail::
|
198
|
-
cl_iterator<node, policy> cl_iterator;
|
199
|
-
|
200
|
-
////////////////////////////////////////////////////////////////////////
|
201
|
-
// Members
|
202
|
-
|
203
|
-
boost::unordered::detail::compressed<bucket_allocator, node_allocator>
|
204
|
-
allocators_;
|
205
|
-
std::size_t bucket_count_;
|
206
|
-
std::size_t size_;
|
207
|
-
float mlf_;
|
208
|
-
std::size_t max_load_;
|
209
|
-
bucket_pointer buckets_;
|
210
|
-
|
211
|
-
////////////////////////////////////////////////////////////////////////
|
212
|
-
// Data access
|
213
|
-
|
214
|
-
bucket_allocator const& bucket_alloc() const
|
215
|
-
{
|
216
|
-
return allocators_.first();
|
217
|
-
}
|
218
|
-
|
219
|
-
node_allocator const& node_alloc() const
|
220
|
-
{
|
221
|
-
return allocators_.second();
|
222
|
-
}
|
223
|
-
|
224
|
-
bucket_allocator& bucket_alloc()
|
225
|
-
{
|
226
|
-
return allocators_.first();
|
227
|
-
}
|
228
|
-
|
229
|
-
node_allocator& node_alloc()
|
230
|
-
{
|
231
|
-
return allocators_.second();
|
232
|
-
}
|
233
|
-
|
234
|
-
std::size_t max_bucket_count() const
|
235
|
-
{
|
236
|
-
// -1 to account for the start bucket.
|
237
|
-
return policy::prev_bucket_count(
|
238
|
-
bucket_allocator_traits::max_size(bucket_alloc()) - 1);
|
239
|
-
}
|
240
|
-
|
241
|
-
bucket_pointer get_bucket(std::size_t bucket_index) const
|
242
|
-
{
|
243
|
-
BOOST_ASSERT(buckets_);
|
244
|
-
return buckets_ + static_cast<std::ptrdiff_t>(bucket_index);
|
245
|
-
}
|
246
|
-
|
247
|
-
link_pointer get_previous_start() const
|
248
|
-
{
|
249
|
-
return get_bucket(bucket_count_)->first_from_start();
|
250
|
-
}
|
251
|
-
|
252
|
-
link_pointer get_previous_start(std::size_t bucket_index) const
|
253
|
-
{
|
254
|
-
return get_bucket(bucket_index)->next_;
|
255
|
-
}
|
256
|
-
|
257
|
-
iterator begin() const
|
258
|
-
{
|
259
|
-
return size_ ? iterator(get_previous_start()->next_) : iterator();
|
260
|
-
}
|
261
|
-
|
262
|
-
iterator begin(std::size_t bucket_index) const
|
263
|
-
{
|
264
|
-
if (!size_) return iterator();
|
265
|
-
link_pointer prev = get_previous_start(bucket_index);
|
266
|
-
return prev ? iterator(prev->next_) : iterator();
|
267
|
-
}
|
268
|
-
|
269
|
-
std::size_t hash_to_bucket(std::size_t hash_value) const
|
270
|
-
{
|
271
|
-
return policy::to_bucket(bucket_count_, hash_value);
|
272
|
-
}
|
273
|
-
|
274
|
-
float load_factor() const
|
275
|
-
{
|
276
|
-
BOOST_ASSERT(bucket_count_ != 0);
|
277
|
-
return static_cast<float>(size_)
|
278
|
-
/ static_cast<float>(bucket_count_);
|
279
|
-
}
|
280
|
-
|
281
|
-
std::size_t bucket_size(std::size_t index) const
|
282
|
-
{
|
283
|
-
iterator it = begin(index);
|
284
|
-
if (!it.node_) return 0;
|
285
|
-
|
286
|
-
std::size_t count = 0;
|
287
|
-
while(it.node_ && hash_to_bucket(it.node_->hash_) == index)
|
288
|
-
{
|
289
|
-
++count;
|
290
|
-
++it;
|
291
|
-
}
|
292
|
-
|
293
|
-
return count;
|
294
|
-
}
|
295
|
-
|
296
|
-
////////////////////////////////////////////////////////////////////////
|
297
|
-
// Load methods
|
298
|
-
|
299
|
-
std::size_t max_size() const
|
300
|
-
{
|
301
|
-
using namespace std;
|
302
|
-
|
303
|
-
// size < mlf_ * count
|
304
|
-
return boost::unordered::detail::double_to_size(ceil(
|
305
|
-
static_cast<double>(mlf_) *
|
306
|
-
static_cast<double>(max_bucket_count())
|
307
|
-
)) - 1;
|
308
|
-
}
|
309
|
-
|
310
|
-
void recalculate_max_load()
|
311
|
-
{
|
312
|
-
using namespace std;
|
313
|
-
|
314
|
-
// From 6.3.1/13:
|
315
|
-
// Only resize when size >= mlf_ * count
|
316
|
-
max_load_ = buckets_ ? boost::unordered::detail::double_to_size(ceil(
|
317
|
-
static_cast<double>(mlf_) *
|
318
|
-
static_cast<double>(bucket_count_)
|
319
|
-
)) : 0;
|
320
|
-
|
321
|
-
}
|
322
|
-
|
323
|
-
void max_load_factor(float z)
|
324
|
-
{
|
325
|
-
BOOST_ASSERT(z > 0);
|
326
|
-
mlf_ = (std::max)(z, minimum_max_load_factor);
|
327
|
-
recalculate_max_load();
|
328
|
-
}
|
329
|
-
|
330
|
-
std::size_t min_buckets_for_size(std::size_t size) const
|
331
|
-
{
|
332
|
-
BOOST_ASSERT(mlf_ >= minimum_max_load_factor);
|
333
|
-
|
334
|
-
using namespace std;
|
335
|
-
|
336
|
-
// From 6.3.1/13:
|
337
|
-
// size < mlf_ * count
|
338
|
-
// => count > size / mlf_
|
339
|
-
//
|
340
|
-
// Or from rehash post-condition:
|
341
|
-
// count > size / mlf_
|
342
|
-
|
343
|
-
return policy::new_bucket_count(
|
344
|
-
boost::unordered::detail::double_to_size(floor(
|
345
|
-
static_cast<double>(size) /
|
346
|
-
static_cast<double>(mlf_)) + 1));
|
347
|
-
}
|
348
|
-
|
349
|
-
////////////////////////////////////////////////////////////////////////
|
350
|
-
// Constructors
|
351
|
-
|
352
|
-
table(std::size_t num_buckets,
|
353
|
-
hasher const& hf,
|
354
|
-
key_equal const& eq,
|
355
|
-
node_allocator const& a) :
|
356
|
-
functions(hf, eq),
|
357
|
-
allocators_(a,a),
|
358
|
-
bucket_count_(policy::new_bucket_count(num_buckets)),
|
359
|
-
size_(0),
|
360
|
-
mlf_(1.0f),
|
361
|
-
max_load_(0),
|
362
|
-
buckets_()
|
363
|
-
{}
|
364
|
-
|
365
|
-
table(table const& x, node_allocator const& a) :
|
366
|
-
functions(x),
|
367
|
-
allocators_(a,a),
|
368
|
-
bucket_count_(x.min_buckets_for_size(x.size_)),
|
369
|
-
size_(0),
|
370
|
-
mlf_(x.mlf_),
|
371
|
-
max_load_(0),
|
372
|
-
buckets_()
|
373
|
-
{}
|
374
|
-
|
375
|
-
table(table& x, boost::unordered::detail::move_tag m) :
|
376
|
-
functions(x, m),
|
377
|
-
allocators_(x.allocators_, m),
|
378
|
-
bucket_count_(x.bucket_count_),
|
379
|
-
size_(x.size_),
|
380
|
-
mlf_(x.mlf_),
|
381
|
-
max_load_(x.max_load_),
|
382
|
-
buckets_(x.buckets_)
|
383
|
-
{
|
384
|
-
x.buckets_ = bucket_pointer();
|
385
|
-
x.size_ = 0;
|
386
|
-
x.max_load_ = 0;
|
387
|
-
}
|
388
|
-
|
389
|
-
table(table& x, node_allocator const& a,
|
390
|
-
boost::unordered::detail::move_tag m) :
|
391
|
-
functions(x, m),
|
392
|
-
allocators_(a, a),
|
393
|
-
bucket_count_(x.bucket_count_),
|
394
|
-
size_(0),
|
395
|
-
mlf_(x.mlf_),
|
396
|
-
max_load_(x.max_load_),
|
397
|
-
buckets_()
|
398
|
-
{}
|
399
|
-
|
400
|
-
////////////////////////////////////////////////////////////////////////
|
401
|
-
// Initialisation.
|
402
|
-
|
403
|
-
void init(table const& x)
|
404
|
-
{
|
405
|
-
if (x.size_) {
|
406
|
-
create_buckets(bucket_count_);
|
407
|
-
copy_nodes<node_allocator> node_creator(node_alloc());
|
408
|
-
table_impl::fill_buckets(x.begin(), *this, node_creator);
|
409
|
-
}
|
410
|
-
}
|
411
|
-
|
412
|
-
void move_init(table& x)
|
413
|
-
{
|
414
|
-
if(node_alloc() == x.node_alloc()) {
|
415
|
-
move_buckets_from(x);
|
416
|
-
}
|
417
|
-
else if(x.size_) {
|
418
|
-
// TODO: Could pick new bucket size?
|
419
|
-
create_buckets(bucket_count_);
|
420
|
-
|
421
|
-
move_nodes<node_allocator> node_creator(node_alloc());
|
422
|
-
node_holder<node_allocator> nodes(x);
|
423
|
-
table_impl::fill_buckets(nodes.begin(), *this, node_creator);
|
424
|
-
}
|
425
|
-
}
|
426
|
-
|
427
|
-
////////////////////////////////////////////////////////////////////////
|
428
|
-
// Create buckets
|
429
|
-
|
430
|
-
void create_buckets(std::size_t new_count)
|
431
|
-
{
|
432
|
-
boost::unordered::detail::array_constructor<bucket_allocator>
|
433
|
-
constructor(bucket_alloc());
|
434
|
-
|
435
|
-
// Creates an extra bucket to act as the start node.
|
436
|
-
constructor.construct(bucket(), new_count + 1);
|
437
|
-
|
438
|
-
if (buckets_)
|
439
|
-
{
|
440
|
-
// Copy the nodes to the new buckets, including the dummy
|
441
|
-
// node if there is one.
|
442
|
-
(constructor.get() +
|
443
|
-
static_cast<std::ptrdiff_t>(new_count))->next_ =
|
444
|
-
(buckets_ + static_cast<std::ptrdiff_t>(
|
445
|
-
bucket_count_))->next_;
|
446
|
-
destroy_buckets();
|
447
|
-
}
|
448
|
-
else if (bucket::extra_node)
|
449
|
-
{
|
450
|
-
node_constructor a(node_alloc());
|
451
|
-
a.construct();
|
452
|
-
|
453
|
-
(constructor.get() +
|
454
|
-
static_cast<std::ptrdiff_t>(new_count))->next_ =
|
455
|
-
a.release();
|
456
|
-
}
|
457
|
-
|
458
|
-
bucket_count_ = new_count;
|
459
|
-
buckets_ = constructor.release();
|
460
|
-
recalculate_max_load();
|
461
|
-
}
|
462
|
-
|
463
|
-
////////////////////////////////////////////////////////////////////////
|
464
|
-
// Swap and Move
|
465
|
-
|
466
|
-
void swap_allocators(table& other, false_type)
|
467
|
-
{
|
468
|
-
boost::unordered::detail::func::ignore_unused_variable_warning(other);
|
469
|
-
|
470
|
-
// According to 23.2.1.8, if propagate_on_container_swap is
|
471
|
-
// false the behaviour is undefined unless the allocators
|
472
|
-
// are equal.
|
473
|
-
BOOST_ASSERT(node_alloc() == other.node_alloc());
|
474
|
-
}
|
475
|
-
|
476
|
-
void swap_allocators(table& other, true_type)
|
477
|
-
{
|
478
|
-
allocators_.swap(other.allocators_);
|
479
|
-
}
|
480
|
-
|
481
|
-
// Only swaps the allocators if propagate_on_container_swap
|
482
|
-
void swap(table& x)
|
483
|
-
{
|
484
|
-
set_hash_functions op1(*this, x);
|
485
|
-
set_hash_functions op2(x, *this);
|
486
|
-
|
487
|
-
// I think swap can throw if Propagate::value,
|
488
|
-
// since the allocators' swap can throw. Not sure though.
|
489
|
-
swap_allocators(x,
|
490
|
-
boost::unordered::detail::integral_constant<bool,
|
491
|
-
allocator_traits<node_allocator>::
|
492
|
-
propagate_on_container_swap::value>());
|
493
|
-
|
494
|
-
boost::swap(buckets_, x.buckets_);
|
495
|
-
boost::swap(bucket_count_, x.bucket_count_);
|
496
|
-
boost::swap(size_, x.size_);
|
497
|
-
std::swap(mlf_, x.mlf_);
|
498
|
-
std::swap(max_load_, x.max_load_);
|
499
|
-
op1.commit();
|
500
|
-
op2.commit();
|
501
|
-
}
|
502
|
-
|
503
|
-
// Only call with nodes allocated with the currect allocator, or
|
504
|
-
// one that is equal to it. (Can't assert because other's
|
505
|
-
// allocators might have already been moved).
|
506
|
-
void move_buckets_from(table& other)
|
507
|
-
{
|
508
|
-
BOOST_ASSERT(!buckets_);
|
509
|
-
buckets_ = other.buckets_;
|
510
|
-
bucket_count_ = other.bucket_count_;
|
511
|
-
size_ = other.size_;
|
512
|
-
other.buckets_ = bucket_pointer();
|
513
|
-
other.size_ = 0;
|
514
|
-
other.max_load_ = 0;
|
515
|
-
}
|
516
|
-
|
517
|
-
////////////////////////////////////////////////////////////////////////
|
518
|
-
// Delete/destruct
|
519
|
-
|
520
|
-
~table()
|
521
|
-
{
|
522
|
-
delete_buckets();
|
523
|
-
}
|
524
|
-
|
525
|
-
void delete_node(link_pointer prev)
|
526
|
-
{
|
527
|
-
node_pointer n = static_cast<node_pointer>(prev->next_);
|
528
|
-
prev->next_ = n->next_;
|
529
|
-
|
530
|
-
boost::unordered::detail::func::destroy_value_impl(node_alloc(),
|
531
|
-
n->value_ptr());
|
532
|
-
boost::unordered::detail::func::destroy(boost::addressof(*n));
|
533
|
-
node_allocator_traits::deallocate(node_alloc(), n, 1);
|
534
|
-
--size_;
|
535
|
-
}
|
536
|
-
|
537
|
-
std::size_t delete_nodes(link_pointer prev, link_pointer end)
|
538
|
-
{
|
539
|
-
BOOST_ASSERT(prev->next_ != end);
|
540
|
-
|
541
|
-
std::size_t count = 0;
|
542
|
-
|
543
|
-
do {
|
544
|
-
delete_node(prev);
|
545
|
-
++count;
|
546
|
-
} while (prev->next_ != end);
|
547
|
-
|
548
|
-
return count;
|
549
|
-
}
|
550
|
-
|
551
|
-
void delete_buckets()
|
552
|
-
{
|
553
|
-
if(buckets_) {
|
554
|
-
if (size_) delete_nodes(get_previous_start(), link_pointer());
|
555
|
-
|
556
|
-
if (bucket::extra_node) {
|
557
|
-
node_pointer n = static_cast<node_pointer>(
|
558
|
-
get_bucket(bucket_count_)->next_);
|
559
|
-
boost::unordered::detail::func::destroy(
|
560
|
-
boost::addressof(*n));
|
561
|
-
node_allocator_traits::deallocate(node_alloc(), n, 1);
|
562
|
-
}
|
563
|
-
|
564
|
-
destroy_buckets();
|
565
|
-
buckets_ = bucket_pointer();
|
566
|
-
max_load_ = 0;
|
567
|
-
}
|
568
|
-
|
569
|
-
BOOST_ASSERT(!size_);
|
570
|
-
}
|
571
|
-
|
572
|
-
void clear()
|
573
|
-
{
|
574
|
-
if (!size_) return;
|
575
|
-
|
576
|
-
delete_nodes(get_previous_start(), link_pointer());
|
577
|
-
clear_buckets();
|
578
|
-
|
579
|
-
BOOST_ASSERT(!size_);
|
580
|
-
}
|
581
|
-
|
582
|
-
void clear_buckets()
|
583
|
-
{
|
584
|
-
bucket_pointer end = get_bucket(bucket_count_);
|
585
|
-
for(bucket_pointer it = buckets_; it != end; ++it)
|
586
|
-
{
|
587
|
-
it->next_ = node_pointer();
|
588
|
-
}
|
589
|
-
}
|
590
|
-
|
591
|
-
void destroy_buckets()
|
592
|
-
{
|
593
|
-
bucket_pointer end = get_bucket(bucket_count_ + 1);
|
594
|
-
for(bucket_pointer it = buckets_; it != end; ++it)
|
595
|
-
{
|
596
|
-
boost::unordered::detail::func::destroy(
|
597
|
-
boost::addressof(*it));
|
598
|
-
}
|
599
|
-
|
600
|
-
bucket_allocator_traits::deallocate(bucket_alloc(),
|
601
|
-
buckets_, bucket_count_ + 1);
|
602
|
-
}
|
603
|
-
|
604
|
-
////////////////////////////////////////////////////////////////////////
|
605
|
-
// Fix buckets after delete
|
606
|
-
//
|
607
|
-
|
608
|
-
std::size_t fix_bucket(std::size_t bucket_index, link_pointer prev)
|
609
|
-
{
|
610
|
-
link_pointer end = prev->next_;
|
611
|
-
std::size_t bucket_index2 = bucket_index;
|
612
|
-
|
613
|
-
if (end)
|
614
|
-
{
|
615
|
-
bucket_index2 = hash_to_bucket(
|
616
|
-
static_cast<node_pointer>(end)->hash_);
|
617
|
-
|
618
|
-
// If begin and end are in the same bucket, then
|
619
|
-
// there's nothing to do.
|
620
|
-
if (bucket_index == bucket_index2) return bucket_index2;
|
621
|
-
|
622
|
-
// Update the bucket containing end.
|
623
|
-
get_bucket(bucket_index2)->next_ = prev;
|
624
|
-
}
|
625
|
-
|
626
|
-
// Check if this bucket is now empty.
|
627
|
-
bucket_pointer this_bucket = get_bucket(bucket_index);
|
628
|
-
if (this_bucket->next_ == prev)
|
629
|
-
this_bucket->next_ = link_pointer();
|
630
|
-
|
631
|
-
return bucket_index2;
|
632
|
-
}
|
633
|
-
|
634
|
-
////////////////////////////////////////////////////////////////////////
|
635
|
-
// Assignment
|
636
|
-
|
637
|
-
void assign(table const& x)
|
638
|
-
{
|
639
|
-
if (this != boost::addressof(x))
|
640
|
-
{
|
641
|
-
assign(x,
|
642
|
-
boost::unordered::detail::integral_constant<bool,
|
643
|
-
allocator_traits<node_allocator>::
|
644
|
-
propagate_on_container_copy_assignment::value>());
|
645
|
-
}
|
646
|
-
}
|
647
|
-
|
648
|
-
void assign(table const& x, false_type)
|
649
|
-
{
|
650
|
-
// Strong exception safety.
|
651
|
-
set_hash_functions new_func_this(*this, x);
|
652
|
-
new_func_this.commit();
|
653
|
-
mlf_ = x.mlf_;
|
654
|
-
recalculate_max_load();
|
655
|
-
|
656
|
-
if (!size_ && !x.size_) return;
|
657
|
-
|
658
|
-
if (x.size_ >= max_load_) {
|
659
|
-
create_buckets(min_buckets_for_size(x.size_));
|
660
|
-
}
|
661
|
-
else {
|
662
|
-
clear_buckets();
|
663
|
-
}
|
664
|
-
|
665
|
-
// assign_nodes takes ownership of the container's elements,
|
666
|
-
// assigning to them if possible, and deleting any that are
|
667
|
-
// left over.
|
668
|
-
assign_nodes<table> node_creator(*this);
|
669
|
-
table_impl::fill_buckets(x.begin(), *this, node_creator);
|
670
|
-
}
|
671
|
-
|
672
|
-
void assign(table const& x, true_type)
|
673
|
-
{
|
674
|
-
if (node_alloc() == x.node_alloc()) {
|
675
|
-
allocators_.assign(x.allocators_);
|
676
|
-
assign(x, false_type());
|
677
|
-
}
|
678
|
-
else {
|
679
|
-
set_hash_functions new_func_this(*this, x);
|
680
|
-
|
681
|
-
// Delete everything with current allocators before assigning
|
682
|
-
// the new ones.
|
683
|
-
delete_buckets();
|
684
|
-
allocators_.assign(x.allocators_);
|
685
|
-
|
686
|
-
// Copy over other data, all no throw.
|
687
|
-
new_func_this.commit();
|
688
|
-
mlf_ = x.mlf_;
|
689
|
-
bucket_count_ = min_buckets_for_size(x.size_);
|
690
|
-
max_load_ = 0;
|
691
|
-
|
692
|
-
// Finally copy the elements.
|
693
|
-
if (x.size_) {
|
694
|
-
create_buckets(bucket_count_);
|
695
|
-
copy_nodes<node_allocator> node_creator(node_alloc());
|
696
|
-
table_impl::fill_buckets(x.begin(), *this, node_creator);
|
697
|
-
}
|
698
|
-
}
|
699
|
-
}
|
700
|
-
|
701
|
-
void move_assign(table& x)
|
702
|
-
{
|
703
|
-
if (this != boost::addressof(x))
|
704
|
-
{
|
705
|
-
move_assign(x,
|
706
|
-
boost::unordered::detail::integral_constant<bool,
|
707
|
-
allocator_traits<node_allocator>::
|
708
|
-
propagate_on_container_move_assignment::value>());
|
709
|
-
}
|
710
|
-
}
|
711
|
-
|
712
|
-
void move_assign(table& x, true_type)
|
713
|
-
{
|
714
|
-
delete_buckets();
|
715
|
-
set_hash_functions new_func_this(*this, x);
|
716
|
-
allocators_.move_assign(x.allocators_);
|
717
|
-
// No throw from here.
|
718
|
-
mlf_ = x.mlf_;
|
719
|
-
max_load_ = x.max_load_;
|
720
|
-
move_buckets_from(x);
|
721
|
-
new_func_this.commit();
|
722
|
-
}
|
723
|
-
|
724
|
-
void move_assign(table& x, false_type)
|
725
|
-
{
|
726
|
-
if (node_alloc() == x.node_alloc()) {
|
727
|
-
delete_buckets();
|
728
|
-
set_hash_functions new_func_this(*this, x);
|
729
|
-
// No throw from here.
|
730
|
-
mlf_ = x.mlf_;
|
731
|
-
max_load_ = x.max_load_;
|
732
|
-
move_buckets_from(x);
|
733
|
-
new_func_this.commit();
|
734
|
-
}
|
735
|
-
else {
|
736
|
-
set_hash_functions new_func_this(*this, x);
|
737
|
-
new_func_this.commit();
|
738
|
-
mlf_ = x.mlf_;
|
739
|
-
recalculate_max_load();
|
740
|
-
|
741
|
-
if (!size_ && !x.size_) return;
|
742
|
-
|
743
|
-
if (x.size_ >= max_load_) {
|
744
|
-
create_buckets(min_buckets_for_size(x.size_));
|
745
|
-
}
|
746
|
-
else {
|
747
|
-
clear_buckets();
|
748
|
-
}
|
749
|
-
|
750
|
-
// move_assign_nodes takes ownership of the container's
|
751
|
-
// elements, assigning to them if possible, and deleting
|
752
|
-
// any that are left over.
|
753
|
-
move_assign_nodes<table> node_creator(*this);
|
754
|
-
node_holder<node_allocator> nodes(x);
|
755
|
-
table_impl::fill_buckets(nodes.begin(), *this, node_creator);
|
756
|
-
}
|
757
|
-
}
|
758
|
-
|
759
|
-
// Accessors
|
760
|
-
|
761
|
-
key_type const& get_key(value_type const& x) const
|
762
|
-
{
|
763
|
-
return extractor::extract(x);
|
764
|
-
}
|
765
|
-
|
766
|
-
std::size_t hash(key_type const& k) const
|
767
|
-
{
|
768
|
-
return policy::apply_hash(this->hash_function(), k);
|
769
|
-
}
|
770
|
-
|
771
|
-
// Find Node
|
772
|
-
|
773
|
-
template <typename Key, typename Hash, typename Pred>
|
774
|
-
iterator generic_find_node(
|
775
|
-
Key const& k,
|
776
|
-
Hash const& hf,
|
777
|
-
Pred const& eq) const
|
778
|
-
{
|
779
|
-
return static_cast<table_impl const*>(this)->
|
780
|
-
find_node_impl(policy::apply_hash(hf, k), k, eq);
|
781
|
-
}
|
782
|
-
|
783
|
-
iterator find_node(
|
784
|
-
std::size_t key_hash,
|
785
|
-
key_type const& k) const
|
786
|
-
{
|
787
|
-
return static_cast<table_impl const*>(this)->
|
788
|
-
find_node_impl(key_hash, k, this->key_eq());
|
789
|
-
}
|
790
|
-
|
791
|
-
iterator find_node(key_type const& k) const
|
792
|
-
{
|
793
|
-
return static_cast<table_impl const*>(this)->
|
794
|
-
find_node_impl(hash(k), k, this->key_eq());
|
795
|
-
}
|
796
|
-
|
797
|
-
iterator find_matching_node(iterator n) const
|
798
|
-
{
|
799
|
-
// TODO: Does this apply to C++11?
|
800
|
-
//
|
801
|
-
// For some stupid reason, I decided to support equality comparison
|
802
|
-
// when different hash functions are used. So I can't use the hash
|
803
|
-
// value from the node here.
|
804
|
-
|
805
|
-
return find_node(get_key(*n));
|
806
|
-
}
|
807
|
-
|
808
|
-
// Reserve and rehash
|
809
|
-
|
810
|
-
void reserve_for_insert(std::size_t);
|
811
|
-
void rehash(std::size_t);
|
812
|
-
void reserve(std::size_t);
|
813
|
-
};
|
814
|
-
|
815
|
-
////////////////////////////////////////////////////////////////////////////
|
816
|
-
// Reserve & Rehash
|
817
|
-
|
818
|
-
// basic exception safety
|
819
|
-
template <typename Types>
|
820
|
-
inline void table<Types>::reserve_for_insert(std::size_t size)
|
821
|
-
{
|
822
|
-
if (!buckets_) {
|
823
|
-
create_buckets((std::max)(bucket_count_,
|
824
|
-
min_buckets_for_size(size)));
|
825
|
-
}
|
826
|
-
// According to the standard this should be 'size >= max_load_',
|
827
|
-
// but I think this is better, defect report filed.
|
828
|
-
else if(size > max_load_) {
|
829
|
-
std::size_t num_buckets
|
830
|
-
= min_buckets_for_size((std::max)(size,
|
831
|
-
size_ + (size_ >> 1)));
|
832
|
-
|
833
|
-
if (num_buckets != bucket_count_)
|
834
|
-
static_cast<table_impl*>(this)->rehash_impl(num_buckets);
|
835
|
-
}
|
836
|
-
}
|
837
|
-
|
838
|
-
// if hash function throws, basic exception safety
|
839
|
-
// strong otherwise.
|
840
|
-
|
841
|
-
template <typename Types>
|
842
|
-
inline void table<Types>::rehash(std::size_t min_buckets)
|
843
|
-
{
|
844
|
-
using namespace std;
|
845
|
-
|
846
|
-
if(!size_) {
|
847
|
-
delete_buckets();
|
848
|
-
bucket_count_ = policy::new_bucket_count(min_buckets);
|
849
|
-
}
|
850
|
-
else {
|
851
|
-
min_buckets = policy::new_bucket_count((std::max)(min_buckets,
|
852
|
-
boost::unordered::detail::double_to_size(floor(
|
853
|
-
static_cast<double>(size_) /
|
854
|
-
static_cast<double>(mlf_))) + 1));
|
855
|
-
|
856
|
-
if(min_buckets != bucket_count_)
|
857
|
-
static_cast<table_impl*>(this)->rehash_impl(min_buckets);
|
858
|
-
}
|
859
|
-
}
|
860
|
-
|
861
|
-
template <typename Types>
|
862
|
-
inline void table<Types>::reserve(std::size_t num_elements)
|
863
|
-
{
|
864
|
-
rehash(static_cast<std::size_t>(
|
865
|
-
std::ceil(static_cast<double>(num_elements) / mlf_)));
|
866
|
-
}
|
867
|
-
}}}
|
868
|
-
|
869
|
-
#if defined(BOOST_MSVC)
|
870
|
-
#pragma warning(pop)
|
871
|
-
#endif
|
872
|
-
|
873
|
-
#endif
|