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
@@ -22,6 +22,7 @@
|
|
22
22
|
#endif
|
23
23
|
|
24
24
|
#include <boost/intrusive/detail/config_begin.hpp>
|
25
|
+
#include <boost/intrusive/detail/workaround.hpp>
|
25
26
|
#include <boost/intrusive/detail/std_fwd.hpp>
|
26
27
|
#include <boost/intrusive/detail/iiterator.hpp>
|
27
28
|
#include <boost/intrusive/detail/bstree_algorithms_base.hpp>
|
@@ -56,27 +57,27 @@ class tree_iterator
|
|
56
57
|
typedef void (tree_iterator::*unspecified_bool_type)() const;
|
57
58
|
|
58
59
|
public:
|
59
|
-
typedef typename types_t::
|
60
|
-
typedef typename types_t::
|
61
|
-
typedef typename types_t::
|
62
|
-
typedef typename types_t::
|
63
|
-
typedef typename types_t::
|
60
|
+
typedef typename types_t::iterator_type::difference_type difference_type;
|
61
|
+
typedef typename types_t::iterator_type::value_type value_type;
|
62
|
+
typedef typename types_t::iterator_type::pointer pointer;
|
63
|
+
typedef typename types_t::iterator_type::reference reference;
|
64
|
+
typedef typename types_t::iterator_type::iterator_category iterator_category;
|
64
65
|
|
65
|
-
tree_iterator()
|
66
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_iterator()
|
66
67
|
{}
|
67
68
|
|
68
|
-
explicit tree_iterator(const node_ptr & nodeptr, const const_value_traits_ptr &traits_ptr)
|
69
|
+
BOOST_INTRUSIVE_FORCEINLINE explicit tree_iterator(const node_ptr & nodeptr, const const_value_traits_ptr &traits_ptr)
|
69
70
|
: members_(nodeptr, traits_ptr)
|
70
71
|
{}
|
71
72
|
|
72
|
-
tree_iterator(tree_iterator<value_traits, false> const& other)
|
73
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_iterator(tree_iterator<value_traits, false> const& other)
|
73
74
|
: members_(other.pointed_node(), other.get_value_traits())
|
74
75
|
{}
|
75
76
|
|
76
|
-
const node_ptr &pointed_node() const
|
77
|
+
BOOST_INTRUSIVE_FORCEINLINE const node_ptr &pointed_node() const
|
77
78
|
{ return members_.nodeptr_; }
|
78
79
|
|
79
|
-
tree_iterator &operator=(const node_ptr &nodeptr)
|
80
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_iterator &operator=(const node_ptr &nodeptr)
|
80
81
|
{ members_.nodeptr_ = nodeptr; return static_cast<tree_iterator&>(*this); }
|
81
82
|
|
82
83
|
public:
|
@@ -106,43 +107,43 @@ class tree_iterator
|
|
106
107
|
return result;
|
107
108
|
}
|
108
109
|
|
109
|
-
tree_iterator& go_left()
|
110
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_iterator& go_left()
|
110
111
|
{
|
111
112
|
members_.nodeptr_ = node_traits::get_left(members_.nodeptr_);
|
112
113
|
return static_cast<tree_iterator&> (*this);
|
113
114
|
}
|
114
115
|
|
115
|
-
tree_iterator& go_right()
|
116
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_iterator& go_right()
|
116
117
|
{
|
117
118
|
members_.nodeptr_ = node_traits::get_right(members_.nodeptr_);
|
118
119
|
return static_cast<tree_iterator&> (*this);
|
119
120
|
}
|
120
121
|
|
121
|
-
tree_iterator& go_parent()
|
122
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_iterator& go_parent()
|
122
123
|
{
|
123
124
|
members_.nodeptr_ = node_traits::get_parent(members_.nodeptr_);
|
124
125
|
return static_cast<tree_iterator&> (*this);
|
125
126
|
}
|
126
127
|
|
127
|
-
operator unspecified_bool_type() const
|
128
|
+
BOOST_INTRUSIVE_FORCEINLINE operator unspecified_bool_type() const
|
128
129
|
{ return members_.nodeptr_ ? &tree_iterator::unspecified_bool_type_func : 0; }
|
129
130
|
|
130
|
-
bool operator! () const
|
131
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator! () const
|
131
132
|
{ return !members_.nodeptr_; }
|
132
133
|
|
133
|
-
friend bool operator== (const tree_iterator& l, const tree_iterator& r)
|
134
|
+
BOOST_INTRUSIVE_FORCEINLINE friend bool operator== (const tree_iterator& l, const tree_iterator& r)
|
134
135
|
{ return l.pointed_node() == r.pointed_node(); }
|
135
136
|
|
136
|
-
friend bool operator!= (const tree_iterator& l, const tree_iterator& r)
|
137
|
+
BOOST_INTRUSIVE_FORCEINLINE friend bool operator!= (const tree_iterator& l, const tree_iterator& r)
|
137
138
|
{ return !(l == r); }
|
138
139
|
|
139
|
-
reference operator*() const
|
140
|
+
BOOST_INTRUSIVE_FORCEINLINE reference operator*() const
|
140
141
|
{ return *operator->(); }
|
141
142
|
|
142
|
-
pointer operator->() const
|
143
|
+
BOOST_INTRUSIVE_FORCEINLINE pointer operator->() const
|
143
144
|
{ return this->operator_arrow(detail::bool_<stateful_value_traits>()); }
|
144
145
|
|
145
|
-
const_value_traits_ptr get_value_traits() const
|
146
|
+
BOOST_INTRUSIVE_FORCEINLINE const_value_traits_ptr get_value_traits() const
|
146
147
|
{ return members_.get_ptr(); }
|
147
148
|
|
148
149
|
tree_iterator end_iterator_from_it() const
|
@@ -154,10 +155,10 @@ class tree_iterator
|
|
154
155
|
{ return tree_iterator<value_traits, false>(this->pointed_node(), this->get_value_traits()); }
|
155
156
|
|
156
157
|
private:
|
157
|
-
pointer operator_arrow(detail::false_) const
|
158
|
+
BOOST_INTRUSIVE_FORCEINLINE pointer operator_arrow(detail::false_) const
|
158
159
|
{ return ValueTraits::to_value_ptr(members_.nodeptr_); }
|
159
160
|
|
160
|
-
pointer operator_arrow(detail::true_) const
|
161
|
+
BOOST_INTRUSIVE_FORCEINLINE pointer operator_arrow(detail::true_) const
|
161
162
|
{ return this->get_value_traits()->to_value_ptr(members_.nodeptr_); }
|
162
163
|
|
163
164
|
iiterator_members<node_ptr, const_value_traits_ptr, stateful_value_traits> members_;
|
@@ -22,6 +22,7 @@
|
|
22
22
|
#endif
|
23
23
|
|
24
24
|
#include <boost/intrusive/detail/config_begin.hpp>
|
25
|
+
#include <boost/intrusive/detail/workaround.hpp>
|
25
26
|
#include <boost/intrusive/pointer_rebind.hpp>
|
26
27
|
|
27
28
|
namespace boost {
|
@@ -43,31 +44,31 @@ struct tree_node_traits
|
|
43
44
|
typedef typename node::node_ptr node_ptr;
|
44
45
|
typedef typename pointer_rebind<VoidPointer, const node>::type const_node_ptr;
|
45
46
|
|
46
|
-
static node_ptr get_parent(const const_node_ptr & n)
|
47
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_parent(const const_node_ptr & n)
|
47
48
|
{ return n->parent_; }
|
48
49
|
|
49
|
-
static node_ptr get_parent(const node_ptr & n)
|
50
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_parent(const node_ptr & n)
|
50
51
|
{ return n->parent_; }
|
51
52
|
|
52
|
-
static void set_parent(const node_ptr & n, const node_ptr & p)
|
53
|
+
BOOST_INTRUSIVE_FORCEINLINE static void set_parent(const node_ptr & n, const node_ptr & p)
|
53
54
|
{ n->parent_ = p; }
|
54
55
|
|
55
|
-
static node_ptr get_left(const const_node_ptr & n)
|
56
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_left(const const_node_ptr & n)
|
56
57
|
{ return n->left_; }
|
57
58
|
|
58
|
-
static node_ptr get_left(const node_ptr & n)
|
59
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_left(const node_ptr & n)
|
59
60
|
{ return n->left_; }
|
60
61
|
|
61
|
-
static void set_left(const node_ptr & n, const node_ptr & l)
|
62
|
+
BOOST_INTRUSIVE_FORCEINLINE static void set_left(const node_ptr & n, const node_ptr & l)
|
62
63
|
{ n->left_ = l; }
|
63
64
|
|
64
|
-
static node_ptr get_right(const const_node_ptr & n)
|
65
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_right(const const_node_ptr & n)
|
65
66
|
{ return n->right_; }
|
66
67
|
|
67
|
-
static node_ptr get_right(const node_ptr & n)
|
68
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_right(const node_ptr & n)
|
68
69
|
{ return n->right_; }
|
69
70
|
|
70
|
-
static void set_right(const node_ptr & n, const node_ptr & r)
|
71
|
+
BOOST_INTRUSIVE_FORCEINLINE static void set_right(const node_ptr & n, const node_ptr & r)
|
71
72
|
{ n->right_ = r; }
|
72
73
|
};
|
73
74
|
|
@@ -18,69 +18,143 @@
|
|
18
18
|
# pragma once
|
19
19
|
#endif
|
20
20
|
|
21
|
+
#include <boost/intrusive/detail/workaround.hpp>
|
21
22
|
#include <boost/intrusive/detail/mpl.hpp>
|
22
23
|
#include <boost/intrusive/detail/ebo_functor_holder.hpp>
|
24
|
+
#include <boost/intrusive/pointer_traits.hpp>
|
23
25
|
|
24
26
|
namespace boost{
|
25
27
|
namespace intrusive{
|
26
28
|
|
27
|
-
|
29
|
+
//Needed to support smart references to value types
|
30
|
+
template <class From, class ValuePtr>
|
31
|
+
struct disable_if_smartref_to
|
32
|
+
: detail::disable_if_c
|
33
|
+
< detail::is_same
|
34
|
+
<From, typename pointer_traits
|
35
|
+
<ValuePtr>
|
36
|
+
::reference>::value
|
37
|
+
|| detail::is_same
|
38
|
+
<From, typename pointer_traits
|
39
|
+
< typename pointer_rebind
|
40
|
+
<ValuePtr, const typename pointer_element<ValuePtr>::type>::type>
|
41
|
+
::reference>::value
|
42
|
+
>
|
43
|
+
{};
|
44
|
+
|
45
|
+
//This function object takes a KeyCompare function object
|
46
|
+
//and compares values that contains keys using KeyOfValue
|
47
|
+
template< class ValuePtr, class KeyCompare, class KeyOfValue
|
48
|
+
, bool = boost::intrusive::detail::is_same<typename pointer_element<ValuePtr>::type, typename KeyOfValue::type>::value >
|
28
49
|
struct tree_value_compare
|
29
50
|
: public boost::intrusive::detail::ebo_functor_holder<KeyCompare>
|
30
51
|
{
|
31
|
-
typedef
|
32
|
-
typedef
|
33
|
-
typedef
|
34
|
-
typedef KeyOfValue
|
35
|
-
typedef Key key_type;
|
52
|
+
typedef typename pointer_element<ValuePtr>::type value_type;
|
53
|
+
typedef KeyCompare key_compare;
|
54
|
+
typedef KeyOfValue key_of_value;
|
55
|
+
typedef typename KeyOfValue::type key_type;
|
36
56
|
|
57
|
+
typedef boost::intrusive::detail::ebo_functor_holder<KeyCompare> base_t;
|
37
58
|
|
38
|
-
tree_value_compare()
|
59
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_value_compare()
|
39
60
|
: base_t()
|
40
61
|
{}
|
41
62
|
|
42
|
-
explicit tree_value_compare(const key_compare &kcomp)
|
63
|
+
BOOST_INTRUSIVE_FORCEINLINE explicit tree_value_compare(const key_compare &kcomp)
|
43
64
|
: base_t(kcomp)
|
44
65
|
{}
|
45
66
|
|
46
|
-
tree_value_compare (const tree_value_compare &x)
|
67
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_value_compare (const tree_value_compare &x)
|
47
68
|
: base_t(x.base_t::get())
|
48
69
|
{}
|
49
70
|
|
50
|
-
tree_value_compare &operator=(const tree_value_compare &x)
|
71
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_value_compare &operator=(const tree_value_compare &x)
|
51
72
|
{ this->base_t::get() = x.base_t::get(); return *this; }
|
52
73
|
|
53
|
-
tree_value_compare &operator=(const key_compare &x)
|
74
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_value_compare &operator=(const key_compare &x)
|
54
75
|
{ this->base_t::get() = x; return *this; }
|
55
76
|
|
56
|
-
const key_compare &key_comp() const
|
77
|
+
BOOST_INTRUSIVE_FORCEINLINE const key_compare &key_comp() const
|
57
78
|
{ return static_cast<const key_compare &>(*this); }
|
58
79
|
|
59
|
-
|
60
|
-
{ return
|
80
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const key_type &key1, const key_type &key2) const
|
81
|
+
{ return this->key_comp()(key1, key2); }
|
82
|
+
|
83
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const value_type &value1, const value_type &value2) const
|
84
|
+
{ return this->key_comp()(KeyOfValue()(value1), KeyOfValue()(value2)); }
|
85
|
+
|
86
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const key_type &key1, const value_type &value2) const
|
87
|
+
{ return this->key_comp()(key1, KeyOfValue()(value2)); }
|
88
|
+
|
89
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const value_type &value1, const key_type &key2) const
|
90
|
+
{ return this->key_comp()(KeyOfValue()(value1), key2); }
|
91
|
+
|
92
|
+
template<class U>
|
93
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const key_type &key1, const U &nonkey2
|
94
|
+
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
95
|
+
{ return this->key_comp()(key1, nonkey2); }
|
61
96
|
|
62
97
|
template<class U>
|
63
|
-
|
64
|
-
|
65
|
-
{}
|
98
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const U &nonkey1, const key_type &key2
|
99
|
+
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
100
|
+
{ return this->key_comp()(nonkey1, key2); }
|
66
101
|
|
67
102
|
template<class U>
|
68
|
-
const
|
69
|
-
|
70
|
-
{ return
|
103
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const value_type &value1, const U &nonvalue2
|
104
|
+
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
105
|
+
{ return this->key_comp()(KeyOfValue()(value1), nonvalue2); }
|
71
106
|
|
72
107
|
template<class U>
|
73
|
-
const
|
74
|
-
|
75
|
-
{ return KeyOfValue()(
|
108
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const U &nonvalue1, const value_type &value2
|
109
|
+
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
110
|
+
{ return this->key_comp()(nonvalue1, KeyOfValue()(value2)); }
|
111
|
+
};
|
112
|
+
|
113
|
+
template<class ValuePtr, class KeyCompare, class KeyOfValue>
|
114
|
+
struct tree_value_compare<ValuePtr, KeyCompare, KeyOfValue, true>
|
115
|
+
: public boost::intrusive::detail::ebo_functor_holder<KeyCompare>
|
116
|
+
{
|
117
|
+
typedef typename pointer_element<ValuePtr>::type value_type;
|
118
|
+
typedef KeyCompare key_compare;
|
119
|
+
typedef KeyOfValue key_of_value;
|
120
|
+
typedef typename KeyOfValue::type key_type;
|
121
|
+
|
122
|
+
typedef boost::intrusive::detail::ebo_functor_holder<KeyCompare> base_t;
|
123
|
+
|
124
|
+
|
125
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_value_compare()
|
126
|
+
: base_t()
|
127
|
+
{}
|
128
|
+
|
129
|
+
BOOST_INTRUSIVE_FORCEINLINE explicit tree_value_compare(const key_compare &kcomp)
|
130
|
+
: base_t(kcomp)
|
131
|
+
{}
|
132
|
+
|
133
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_value_compare (const tree_value_compare &x)
|
134
|
+
: base_t(x.base_t::get())
|
135
|
+
{}
|
136
|
+
|
137
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_value_compare &operator=(const tree_value_compare &x)
|
138
|
+
{ this->base_t::get() = x.base_t::get(); return *this; }
|
139
|
+
|
140
|
+
BOOST_INTRUSIVE_FORCEINLINE tree_value_compare &operator=(const key_compare &x)
|
141
|
+
{ this->base_t::get() = x; return *this; }
|
142
|
+
|
143
|
+
BOOST_INTRUSIVE_FORCEINLINE const key_compare &key_comp() const
|
144
|
+
{ return static_cast<const key_compare &>(*this); }
|
145
|
+
|
146
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const key_type &key1, const key_type &key2) const
|
147
|
+
{ return this->key_comp()(key1, key2); }
|
76
148
|
|
77
|
-
template<class
|
78
|
-
bool operator()(const
|
79
|
-
|
149
|
+
template<class U>
|
150
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()( const key_type &key1, const U &nonkey2
|
151
|
+
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
152
|
+
{ return this->key_comp()(key1, nonkey2); }
|
80
153
|
|
81
|
-
template<class
|
82
|
-
bool operator()(const
|
83
|
-
|
154
|
+
template<class U>
|
155
|
+
BOOST_INTRUSIVE_FORCEINLINE bool operator()(const U &nonkey1, const key_type &key2
|
156
|
+
, typename disable_if_smartref_to<U, ValuePtr>::type* = 0) const
|
157
|
+
{ return this->key_comp()(nonkey1, key2); }
|
84
158
|
};
|
85
159
|
|
86
160
|
} //namespace intrusive{
|
@@ -34,5 +34,20 @@
|
|
34
34
|
#define BOOST_INTRUSIVE_I ,
|
35
35
|
#define BOOST_INTRUSIVE_DOCIGN(T1) T1
|
36
36
|
|
37
|
+
#define BOOST_INTRUSIVE_DISABLE_FORCEINLINE
|
38
|
+
|
39
|
+
#if defined(BOOST_INTRUSIVE_DISABLE_FORCEINLINE)
|
40
|
+
#define BOOST_INTRUSIVE_FORCEINLINE inline
|
41
|
+
#elif defined(BOOST_INTRUSIVE_FORCEINLINE_IS_BOOST_FORCELINE)
|
42
|
+
#define BOOST_INTRUSIVE_FORCEINLINE BOOST_FORCEINLINE
|
43
|
+
#elif defined(BOOST_MSVC) && defined(_DEBUG)
|
44
|
+
//"__forceinline" and MSVC seems to have some bugs in debug mode
|
45
|
+
#define BOOST_INTRUSIVE_FORCEINLINE inline
|
46
|
+
#elif defined(__GNUC__) && ((__GNUC__ < 4) || (__GNUC__ == 4 && (__GNUC_MINOR__ < 5)))
|
47
|
+
//Older GCCs have problems with forceinline
|
48
|
+
#define BOOST_INTRUSIVE_FORCEINLINE inline
|
49
|
+
#else
|
50
|
+
#define BOOST_INTRUSIVE_FORCEINLINE BOOST_FORCEINLINE
|
51
|
+
#endif
|
37
52
|
|
38
53
|
#endif //#ifndef BOOST_INTRUSIVE_DETAIL_WORKAROUND_HPP
|
@@ -119,6 +119,8 @@ struct prime_list_holder
|
|
119
119
|
static const std::size_t prime_list_size;
|
120
120
|
};
|
121
121
|
|
122
|
+
#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
|
123
|
+
|
122
124
|
//We only support LLP64(Win64) or LP64(most Unix) data models
|
123
125
|
#ifdef _WIN64 //In 64 bit windows sizeof(size_t) == sizeof(unsigned long long)
|
124
126
|
#define BOOST_INTRUSIVE_PRIME_C(NUMBER) NUMBER##ULL
|
@@ -173,6 +175,8 @@ const std::size_t prime_list_holder<Dummy>::prime_list[] = {
|
|
173
175
|
#undef BOOST_INTRUSIVE_PRIME_C
|
174
176
|
#undef BOOST_INTRUSIVE_64_BIT_SIZE_T
|
175
177
|
|
178
|
+
#endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
|
179
|
+
|
176
180
|
template<int Dummy>
|
177
181
|
const std::size_t prime_list_holder<Dummy>::prime_list_size
|
178
182
|
= sizeof(prime_list)/sizeof(std::size_t);
|
@@ -251,7 +255,7 @@ struct insert_commit_data_impl
|
|
251
255
|
};
|
252
256
|
|
253
257
|
template<class Node, class SlistNodePtr>
|
254
|
-
|
258
|
+
BOOST_INTRUSIVE_FORCEINLINE typename pointer_traits<SlistNodePtr>::template rebind_pointer<Node>::type
|
255
259
|
dcast_bucket_ptr(const SlistNodePtr &p)
|
256
260
|
{
|
257
261
|
typedef typename pointer_traits<SlistNodePtr>::template rebind_pointer<Node>::type node_ptr;
|
@@ -341,13 +345,13 @@ struct group_functions
|
|
341
345
|
}
|
342
346
|
}
|
343
347
|
|
344
|
-
static void erase_from_group(const slist_node_ptr&, const node_ptr&, detail::false_)
|
348
|
+
BOOST_INTRUSIVE_FORCEINLINE static void erase_from_group(const slist_node_ptr&, const node_ptr&, detail::false_)
|
345
349
|
{}
|
346
350
|
|
347
|
-
static node_ptr get_last_in_group(const node_ptr &first_in_group, detail::true_)
|
351
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_last_in_group(const node_ptr &first_in_group, detail::true_)
|
348
352
|
{ return group_traits::get_next(first_in_group); }
|
349
353
|
|
350
|
-
static node_ptr get_last_in_group(node_ptr n, detail::false_)
|
354
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_last_in_group(node_ptr n, detail::false_)
|
351
355
|
{ return n; }
|
352
356
|
|
353
357
|
static node_ptr get_first_in_group(node_ptr n, detail::true_)
|
@@ -359,21 +363,21 @@ struct group_functions
|
|
359
363
|
return n;
|
360
364
|
}
|
361
365
|
|
362
|
-
static node_ptr next_group_if_first_in_group(node_ptr ptr)
|
366
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr next_group_if_first_in_group(node_ptr ptr)
|
363
367
|
{
|
364
368
|
return node_traits::get_next(group_traits::get_next(ptr));
|
365
369
|
}
|
366
370
|
|
367
|
-
static node_ptr get_first_in_group(const node_ptr &n, detail::false_)
|
371
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_first_in_group(const node_ptr &n, detail::false_)
|
368
372
|
{ return n; }
|
369
373
|
|
370
|
-
static void insert_in_group(const node_ptr &first_in_group, const node_ptr &n, true_)
|
374
|
+
BOOST_INTRUSIVE_FORCEINLINE static void insert_in_group(const node_ptr &first_in_group, const node_ptr &n, true_)
|
371
375
|
{ group_algorithms::link_after(first_in_group, n); }
|
372
376
|
|
373
377
|
static void insert_in_group(const node_ptr&, const node_ptr&, false_)
|
374
378
|
{}
|
375
379
|
|
376
|
-
static node_ptr split_group(node_ptr const new_first_in_group)
|
380
|
+
BOOST_INTRUSIVE_FORCEINLINE static node_ptr split_group(node_ptr const new_first_in_group)
|
377
381
|
{
|
378
382
|
node_ptr const first((get_first_in_group)(new_first_in_group, detail::true_()));
|
379
383
|
if(first != new_first_in_group){
|
@@ -403,7 +407,7 @@ class incremental_rehash_rollback
|
|
403
407
|
, split_traits_(split_traits), released_(false)
|
404
408
|
{}
|
405
409
|
|
406
|
-
void release()
|
410
|
+
BOOST_INTRUSIVE_FORCEINLINE void release()
|
407
411
|
{ released_ = true; }
|
408
412
|
|
409
413
|
~incremental_rehash_rollback()
|
@@ -426,21 +430,21 @@ class incremental_rehash_rollback
|
|
426
430
|
template<class NodeTraits>
|
427
431
|
struct node_functions
|
428
432
|
{
|
429
|
-
static void store_hash(typename NodeTraits::node_ptr p, std::size_t h, true_)
|
433
|
+
BOOST_INTRUSIVE_FORCEINLINE static void store_hash(typename NodeTraits::node_ptr p, std::size_t h, true_)
|
430
434
|
{ return NodeTraits::set_hash(p, h); }
|
431
435
|
|
432
|
-
static void store_hash(typename NodeTraits::node_ptr, std::size_t, false_)
|
436
|
+
BOOST_INTRUSIVE_FORCEINLINE static void store_hash(typename NodeTraits::node_ptr, std::size_t, false_)
|
433
437
|
{}
|
434
438
|
};
|
435
439
|
|
436
|
-
|
440
|
+
BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::false_)
|
437
441
|
{ return hash_value % bucket_cnt; }
|
438
442
|
|
439
|
-
|
443
|
+
BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket(std::size_t hash_value, std::size_t bucket_cnt, detail::true_)
|
440
444
|
{ return hash_value & (bucket_cnt - 1); }
|
441
445
|
|
442
446
|
template<bool Power2Buckets, bool Incremental>
|
443
|
-
|
447
|
+
BOOST_INTRUSIVE_FORCEINLINE std::size_t hash_to_bucket_split(std::size_t hash_value, std::size_t bucket_cnt, std::size_t split)
|
444
448
|
{
|
445
449
|
std::size_t bucket_number = detail::hash_to_bucket(hash_value, bucket_cnt, detail::bool_<Power2Buckets>());
|
446
450
|
if(Incremental)
|
@@ -535,11 +539,11 @@ struct downcast_node_to_value_t
|
|
535
539
|
template rebind_pointer
|
536
540
|
<const ValueTraits>::type const_value_traits_ptr;
|
537
541
|
|
538
|
-
downcast_node_to_value_t(const const_value_traits_ptr &ptr)
|
542
|
+
BOOST_INTRUSIVE_FORCEINLINE downcast_node_to_value_t(const const_value_traits_ptr &ptr)
|
539
543
|
: base_t(ptr)
|
540
544
|
{}
|
541
545
|
|
542
|
-
result_type operator()(first_argument_type arg) const
|
546
|
+
BOOST_INTRUSIVE_FORCEINLINE result_type operator()(first_argument_type arg) const
|
543
547
|
{ return this->base_t::operator()(static_cast<intermediate_argument_type>(arg)); }
|
544
548
|
};
|
545
549
|
|
@@ -554,14 +558,14 @@ struct node_cast_adaptor
|
|
554
558
|
typedef typename pointer_traits<NodePtr>::element_type node;
|
555
559
|
|
556
560
|
template<class ConvertibleToF, class RealValuTraits>
|
557
|
-
node_cast_adaptor(const ConvertibleToF &c2f, const RealValuTraits *traits)
|
561
|
+
BOOST_INTRUSIVE_FORCEINLINE node_cast_adaptor(const ConvertibleToF &c2f, const RealValuTraits *traits)
|
558
562
|
: base_t(base_t(c2f, traits))
|
559
563
|
{}
|
560
564
|
|
561
|
-
typename base_t::node_ptr operator()(const slist_node &to_clone)
|
565
|
+
BOOST_INTRUSIVE_FORCEINLINE typename base_t::node_ptr operator()(const slist_node &to_clone)
|
562
566
|
{ return base_t::operator()(static_cast<const node &>(to_clone)); }
|
563
567
|
|
564
|
-
void operator()(SlistNodePtr to_clone)
|
568
|
+
BOOST_INTRUSIVE_FORCEINLINE void operator()(SlistNodePtr to_clone)
|
565
569
|
{
|
566
570
|
base_t::operator()(pointer_traits<NodePtr>::pointer_to(static_cast<node &>(*to_clone)));
|
567
571
|
}
|
@@ -610,56 +614,57 @@ struct bucket_plus_vtraits
|
|
610
614
|
<value_traits>::type bucket_ptr;
|
611
615
|
|
612
616
|
template<class BucketTraitsType>
|
613
|
-
bucket_plus_vtraits(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits)
|
617
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits)
|
614
618
|
: data(val_traits, ::boost::forward<BucketTraitsType>(b_traits))
|
615
619
|
{}
|
616
620
|
|
617
|
-
bucket_plus_vtraits & operator =(const bucket_plus_vtraits &x)
|
621
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits & operator =(const bucket_plus_vtraits &x)
|
618
622
|
{ data.bucket_traits_ = x.data.bucket_traits_; return *this; }
|
619
623
|
|
620
|
-
const_value_traits_ptr priv_value_traits_ptr() const
|
624
|
+
BOOST_INTRUSIVE_FORCEINLINE const_value_traits_ptr priv_value_traits_ptr() const
|
621
625
|
{ return pointer_traits<const_value_traits_ptr>::pointer_to(this->priv_value_traits()); }
|
622
626
|
|
623
627
|
//bucket_value_traits
|
624
628
|
//
|
625
|
-
const bucket_plus_vtraits &get_bucket_value_traits() const
|
629
|
+
BOOST_INTRUSIVE_FORCEINLINE const bucket_plus_vtraits &get_bucket_value_traits() const
|
626
630
|
{ return *this; }
|
627
631
|
|
628
|
-
bucket_plus_vtraits &get_bucket_value_traits()
|
632
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_plus_vtraits &get_bucket_value_traits()
|
629
633
|
{ return *this; }
|
630
634
|
|
631
|
-
const_bucket_value_traits_ptr bucket_value_traits_ptr() const
|
635
|
+
BOOST_INTRUSIVE_FORCEINLINE const_bucket_value_traits_ptr bucket_value_traits_ptr() const
|
632
636
|
{ return pointer_traits<const_bucket_value_traits_ptr>::pointer_to(this->get_bucket_value_traits()); }
|
633
637
|
|
634
638
|
//value traits
|
635
639
|
//
|
636
|
-
const value_traits &priv_value_traits() const
|
640
|
+
BOOST_INTRUSIVE_FORCEINLINE const value_traits &priv_value_traits() const
|
637
641
|
{ return this->data; }
|
638
642
|
|
639
|
-
value_traits &priv_value_traits()
|
643
|
+
BOOST_INTRUSIVE_FORCEINLINE value_traits &priv_value_traits()
|
640
644
|
{ return this->data; }
|
641
645
|
|
642
646
|
//bucket_traits
|
643
647
|
//
|
644
|
-
const bucket_traits &priv_bucket_traits() const
|
648
|
+
BOOST_INTRUSIVE_FORCEINLINE const bucket_traits &priv_bucket_traits() const
|
645
649
|
{ return this->data.bucket_traits_; }
|
646
650
|
|
647
|
-
bucket_traits &priv_bucket_traits()
|
651
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_traits &priv_bucket_traits()
|
648
652
|
{ return this->data.bucket_traits_; }
|
649
653
|
|
650
654
|
//bucket operations
|
651
|
-
bucket_ptr priv_bucket_pointer() const
|
655
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_bucket_pointer() const
|
652
656
|
{ return this->priv_bucket_traits().bucket_begin(); }
|
653
657
|
|
654
658
|
typename slist_impl::size_type priv_bucket_count() const
|
655
659
|
{ return this->priv_bucket_traits().bucket_count(); }
|
656
660
|
|
657
|
-
bucket_ptr priv_invalid_bucket() const
|
661
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_invalid_bucket() const
|
658
662
|
{
|
659
663
|
const bucket_traits &rbt = this->priv_bucket_traits();
|
660
664
|
return rbt.bucket_begin() + rbt.bucket_count();
|
661
665
|
}
|
662
|
-
|
666
|
+
|
667
|
+
BOOST_INTRUSIVE_FORCEINLINE siterator priv_invalid_local_it() const
|
663
668
|
{ return this->priv_bucket_traits().bucket_begin()->before_begin(); }
|
664
669
|
|
665
670
|
template<class NodeDisposer>
|
@@ -748,7 +753,7 @@ struct bucket_plus_vtraits
|
|
748
753
|
}
|
749
754
|
|
750
755
|
template<class NodeDisposer>
|
751
|
-
static void priv_erase_node(bucket_type &b, siterator i, NodeDisposer node_disposer, detail::false_) //optimize multikey
|
756
|
+
BOOST_INTRUSIVE_FORCEINLINE static void priv_erase_node(bucket_type &b, siterator i, NodeDisposer node_disposer, detail::false_) //optimize multikey
|
752
757
|
{ b.erase_after_and_dispose(b.previous(i), node_disposer); }
|
753
758
|
|
754
759
|
template<class NodeDisposer, bool OptimizeMultikey>
|
@@ -807,7 +812,7 @@ struct bucket_plus_vtraits
|
|
807
812
|
return num_erased;
|
808
813
|
}
|
809
814
|
|
810
|
-
static siterator priv_get_last(bucket_type &b, detail::false_) //NOT optimize multikey
|
815
|
+
BOOST_INTRUSIVE_FORCEINLINE static siterator priv_get_last(bucket_type &b, detail::false_) //NOT optimize multikey
|
811
816
|
{ return b.previous(b.end()); }
|
812
817
|
|
813
818
|
static siterator priv_get_previous(bucket_type &b, siterator i, detail::true_) //optimize multikey
|
@@ -822,7 +827,7 @@ struct bucket_plus_vtraits
|
|
822
827
|
return bucket_type::s_iterator_to(n);
|
823
828
|
}
|
824
829
|
|
825
|
-
static siterator priv_get_previous(bucket_type &b, siterator i, detail::false_) //NOT optimize multikey
|
830
|
+
BOOST_INTRUSIVE_FORCEINLINE static siterator priv_get_previous(bucket_type &b, siterator i, detail::false_) //NOT optimize multikey
|
826
831
|
{ return b.previous(i); }
|
827
832
|
|
828
833
|
std::size_t priv_get_bucket_num_no_hash_store(siterator it, detail::true_) //optimize multikey
|
@@ -858,22 +863,22 @@ struct bucket_plus_vtraits
|
|
858
863
|
return static_cast<std::size_t>(&b - &*f);
|
859
864
|
}
|
860
865
|
|
861
|
-
static std::size_t priv_stored_hash(slist_node_ptr n, detail::true_) //store_hash
|
866
|
+
BOOST_INTRUSIVE_FORCEINLINE static std::size_t priv_stored_hash(slist_node_ptr n, detail::true_) //store_hash
|
862
867
|
{ return node_traits::get_hash(detail::dcast_bucket_ptr<node>(n)); }
|
863
868
|
|
864
|
-
static std::size_t priv_stored_hash(slist_node_ptr, detail::false_) //NO store_hash
|
869
|
+
BOOST_INTRUSIVE_FORCEINLINE static std::size_t priv_stored_hash(slist_node_ptr, detail::false_) //NO store_hash
|
865
870
|
{ return std::size_t(-1); }
|
866
871
|
|
867
|
-
node &priv_value_to_node(reference v)
|
872
|
+
BOOST_INTRUSIVE_FORCEINLINE node &priv_value_to_node(reference v)
|
868
873
|
{ return *this->priv_value_traits().to_node_ptr(v); }
|
869
874
|
|
870
|
-
const node &priv_value_to_node(const_reference v) const
|
875
|
+
BOOST_INTRUSIVE_FORCEINLINE const node &priv_value_to_node(const_reference v) const
|
871
876
|
{ return *this->priv_value_traits().to_node_ptr(v); }
|
872
877
|
|
873
|
-
reference priv_value_from_slist_node(slist_node_ptr n)
|
878
|
+
BOOST_INTRUSIVE_FORCEINLINE reference priv_value_from_slist_node(slist_node_ptr n)
|
874
879
|
{ return *this->priv_value_traits().to_value_ptr(detail::dcast_bucket_ptr<node>(n)); }
|
875
880
|
|
876
|
-
const_reference priv_value_from_slist_node(slist_node_ptr n) const
|
881
|
+
BOOST_INTRUSIVE_FORCEINLINE const_reference priv_value_from_slist_node(slist_node_ptr n) const
|
877
882
|
{ return *this->priv_value_traits().to_value_ptr(detail::dcast_bucket_ptr<node>(n)); }
|
878
883
|
|
879
884
|
void priv_clear_buckets(const bucket_ptr buckets_ptr, const size_type bucket_cnt)
|
@@ -889,19 +894,19 @@ struct bucket_plus_vtraits
|
|
889
894
|
}
|
890
895
|
}
|
891
896
|
|
892
|
-
std::size_t priv_stored_or_compute_hash(const value_type &v, detail::true_) const //For store_hash == true
|
897
|
+
BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_stored_or_compute_hash(const value_type &v, detail::true_) const //For store_hash == true
|
893
898
|
{ return node_traits::get_hash(this->priv_value_traits().to_node_ptr(v)); }
|
894
899
|
|
895
900
|
typedef hashtable_iterator<bucket_plus_vtraits, false> iterator;
|
896
901
|
typedef hashtable_iterator<bucket_plus_vtraits, true> const_iterator;
|
897
902
|
|
898
|
-
iterator end()
|
903
|
+
BOOST_INTRUSIVE_FORCEINLINE iterator end()
|
899
904
|
{ return iterator(this->priv_invalid_local_it(), 0); }
|
900
905
|
|
901
|
-
const_iterator end() const
|
906
|
+
BOOST_INTRUSIVE_FORCEINLINE const_iterator end() const
|
902
907
|
{ return this->cend(); }
|
903
908
|
|
904
|
-
const_iterator cend() const
|
909
|
+
BOOST_INTRUSIVE_FORCEINLINE const_iterator cend() const
|
905
910
|
{ return const_iterator(this->priv_invalid_local_it(), 0); }
|
906
911
|
|
907
912
|
static size_type suggested_upper_bucket_count(size_type n)
|
@@ -926,9 +931,10 @@ struct bucket_plus_vtraits
|
|
926
931
|
struct data_type : public ValueTraits
|
927
932
|
{
|
928
933
|
template<class BucketTraitsType>
|
929
|
-
data_type(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits)
|
934
|
+
BOOST_INTRUSIVE_FORCEINLINE data_type(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits)
|
930
935
|
: ValueTraits(val_traits), bucket_traits_(::boost::forward<BucketTraitsType>(b_traits))
|
931
936
|
{}
|
937
|
+
|
932
938
|
bucket_traits bucket_traits_;
|
933
939
|
} data;
|
934
940
|
};
|
@@ -1020,11 +1026,11 @@ struct bucket_hash_t
|
|
1020
1026
|
typedef detail::ebo_functor_holder<hasher> base_t;
|
1021
1027
|
|
1022
1028
|
template<class BucketTraitsType>
|
1023
|
-
bucket_hash_t(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h)
|
1029
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_hash_t(const ValueTraits &val_traits, BOOST_FWD_REF(BucketTraitsType) b_traits, const hasher & h)
|
1024
1030
|
: detail::ebo_functor_holder<hasher>(h), bucket_plus_vtraits_t(val_traits, ::boost::forward<BucketTraitsType>(b_traits))
|
1025
1031
|
{}
|
1026
1032
|
|
1027
|
-
const hasher &priv_hasher() const
|
1033
|
+
BOOST_INTRUSIVE_FORCEINLINE const hasher &priv_hasher() const
|
1028
1034
|
{ return this->base_t::get(); }
|
1029
1035
|
|
1030
1036
|
hasher &priv_hasher()
|
@@ -1032,7 +1038,7 @@ struct bucket_hash_t
|
|
1032
1038
|
|
1033
1039
|
using bucket_plus_vtraits_t::priv_stored_or_compute_hash; //For store_hash == true
|
1034
1040
|
|
1035
|
-
std::size_t priv_stored_or_compute_hash(const value_type &v, detail::false_) const //For store_hash == false
|
1041
|
+
BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_stored_or_compute_hash(const value_type &v, detail::false_) const //For store_hash == false
|
1036
1042
|
{ return this->priv_hasher()(key_of_value()(v)); }
|
1037
1043
|
};
|
1038
1044
|
|
@@ -1077,19 +1083,19 @@ struct bucket_hash_equal_t
|
|
1077
1083
|
, equal_holder_t(e)
|
1078
1084
|
{}
|
1079
1085
|
|
1080
|
-
bucket_ptr priv_get_cache()
|
1086
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_ptr priv_get_cache()
|
1081
1087
|
{ return this->bucket_hash_type::priv_bucket_pointer(); }
|
1082
1088
|
|
1083
|
-
void priv_set_cache(const bucket_ptr &)
|
1089
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache(const bucket_ptr &)
|
1084
1090
|
{}
|
1085
1091
|
|
1086
|
-
size_type priv_get_cache_bucket_num()
|
1092
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type priv_get_cache_bucket_num()
|
1087
1093
|
{ return 0u; }
|
1088
1094
|
|
1089
|
-
void priv_initialize_cache()
|
1095
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_initialize_cache()
|
1090
1096
|
{}
|
1091
1097
|
|
1092
|
-
void priv_swap_cache(bucket_hash_equal_t &)
|
1098
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_swap_cache(bucket_hash_equal_t &)
|
1093
1099
|
{}
|
1094
1100
|
|
1095
1101
|
siterator priv_begin() const
|
@@ -1105,19 +1111,19 @@ struct bucket_hash_equal_t
|
|
1105
1111
|
return this->bucket_hash_type::priv_invalid_local_it();
|
1106
1112
|
}
|
1107
1113
|
|
1108
|
-
void priv_insertion_update_cache(size_type)
|
1114
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_insertion_update_cache(size_type)
|
1109
1115
|
{}
|
1110
1116
|
|
1111
|
-
void priv_erasure_update_cache_range(size_type, size_type)
|
1117
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache_range(size_type, size_type)
|
1112
1118
|
{}
|
1113
1119
|
|
1114
|
-
void priv_erasure_update_cache()
|
1120
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_erasure_update_cache()
|
1115
1121
|
{}
|
1116
1122
|
|
1117
|
-
const key_equal &priv_equal() const
|
1123
|
+
BOOST_INTRUSIVE_FORCEINLINE const key_equal &priv_equal() const
|
1118
1124
|
{ return this->equal_holder_t::get(); }
|
1119
1125
|
|
1120
|
-
key_equal &priv_equal()
|
1126
|
+
BOOST_INTRUSIVE_FORCEINLINE key_equal &priv_equal()
|
1121
1127
|
{ return this->equal_holder_t::get(); }
|
1122
1128
|
};
|
1123
1129
|
|
@@ -1151,22 +1157,22 @@ struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrK
|
|
1151
1157
|
typedef typename detail::unordered_bucket_ptr_impl
|
1152
1158
|
<typename bucket_hash_type::value_traits>::type bucket_ptr;
|
1153
1159
|
|
1154
|
-
bucket_ptr &priv_get_cache()
|
1160
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_ptr &priv_get_cache()
|
1155
1161
|
{ return cached_begin_; }
|
1156
1162
|
|
1157
|
-
const bucket_ptr &priv_get_cache() const
|
1163
|
+
BOOST_INTRUSIVE_FORCEINLINE const bucket_ptr &priv_get_cache() const
|
1158
1164
|
{ return cached_begin_; }
|
1159
1165
|
|
1160
|
-
void priv_set_cache(const bucket_ptr &p)
|
1166
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_set_cache(const bucket_ptr &p)
|
1161
1167
|
{ cached_begin_ = p; }
|
1162
1168
|
|
1163
|
-
std::size_t priv_get_cache_bucket_num()
|
1169
|
+
BOOST_INTRUSIVE_FORCEINLINE std::size_t priv_get_cache_bucket_num()
|
1164
1170
|
{ return this->cached_begin_ - this->bucket_hash_type::priv_bucket_pointer(); }
|
1165
1171
|
|
1166
|
-
void priv_initialize_cache()
|
1172
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_initialize_cache()
|
1167
1173
|
{ this->cached_begin_ = this->bucket_hash_type::priv_invalid_bucket(); }
|
1168
1174
|
|
1169
|
-
void priv_swap_cache(bucket_hash_equal_t &other)
|
1175
|
+
BOOST_INTRUSIVE_FORCEINLINE void priv_swap_cache(bucket_hash_equal_t &other)
|
1170
1176
|
{
|
1171
1177
|
::boost::adl_move_swap(this->cached_begin_, other.cached_begin_);
|
1172
1178
|
}
|
@@ -1189,10 +1195,10 @@ struct bucket_hash_equal_t<ValueTraits, VoidOrKeyOfValue, VoidOrKeyHash, VoidOrK
|
|
1189
1195
|
}
|
1190
1196
|
}
|
1191
1197
|
|
1192
|
-
const key_equal &priv_equal() const
|
1198
|
+
BOOST_INTRUSIVE_FORCEINLINE const key_equal &priv_equal() const
|
1193
1199
|
{ return this->equal_holder_t::get(); }
|
1194
1200
|
|
1195
|
-
key_equal &priv_equal()
|
1201
|
+
BOOST_INTRUSIVE_FORCEINLINE key_equal &priv_equal()
|
1196
1202
|
{ return this->equal_holder_t::get(); }
|
1197
1203
|
|
1198
1204
|
void priv_erasure_update_cache_range(size_type first_bucket_num, size_type last_bucket_num)
|
@@ -1243,10 +1249,13 @@ struct hashtable_size_traits_wrapper
|
|
1243
1249
|
|
1244
1250
|
size_traits size_traits_;
|
1245
1251
|
|
1246
|
-
const size_traits &
|
1252
|
+
typedef const size_traits & size_traits_const_t;
|
1253
|
+
typedef size_traits & size_traits_t;
|
1254
|
+
|
1255
|
+
BOOST_INTRUSIVE_FORCEINLINE size_traits_const_t priv_size_traits() const
|
1247
1256
|
{ return size_traits_; }
|
1248
1257
|
|
1249
|
-
|
1258
|
+
BOOST_INTRUSIVE_FORCEINLINE size_traits_t priv_size_traits()
|
1250
1259
|
{ return size_traits_; }
|
1251
1260
|
};
|
1252
1261
|
|
@@ -1265,18 +1274,13 @@ struct hashtable_size_traits_wrapper<DeriveFrom, SizeType, false>
|
|
1265
1274
|
|
1266
1275
|
typedef detail::size_holder< false, SizeType> size_traits;
|
1267
1276
|
|
1268
|
-
|
1269
|
-
|
1277
|
+
typedef size_traits size_traits_const_t;
|
1278
|
+
typedef size_traits size_traits_t;
|
1270
1279
|
|
1271
|
-
size_traits
|
1272
|
-
{ return
|
1273
|
-
|
1274
|
-
static size_traits size_traits_;
|
1280
|
+
BOOST_INTRUSIVE_FORCEINLINE size_traits priv_size_traits() const
|
1281
|
+
{ return size_traits(); }
|
1275
1282
|
};
|
1276
1283
|
|
1277
|
-
template<class DeriveFrom, class SizeType>
|
1278
|
-
detail::size_holder< false, SizeType > hashtable_size_traits_wrapper<DeriveFrom, SizeType, false>::size_traits_;
|
1279
|
-
|
1280
1284
|
//hashdata_internal
|
1281
1285
|
//Stores bucket_hash_equal_t and split_traits
|
1282
1286
|
template<class ValueTraits, class VoidOrKeyOfValue, class VoidOrKeyHash, class VoidOrKeyEqual, class BucketTraits, class SizeType, std::size_t BoolFlags>
|
@@ -1360,10 +1364,10 @@ struct hashdata_internal
|
|
1360
1364
|
: internal_type(val_traits, ::boost::forward<BucketTraitsType>(b_traits), h, e)
|
1361
1365
|
{}
|
1362
1366
|
|
1363
|
-
|
1367
|
+
BOOST_INTRUSIVE_FORCEINLINE typename internal_type::size_traits_t priv_split_traits()
|
1364
1368
|
{ return this->priv_size_traits(); }
|
1365
1369
|
|
1366
|
-
|
1370
|
+
BOOST_INTRUSIVE_FORCEINLINE typename internal_type::size_traits_const_t priv_split_traits() const
|
1367
1371
|
{ return this->priv_size_traits(); }
|
1368
1372
|
|
1369
1373
|
~hashdata_internal()
|
@@ -1402,12 +1406,12 @@ struct hashdata_internal
|
|
1402
1406
|
{ return bucket_plus_vtraits<ValueTraits, BucketTraits>::priv_stored_hash(n, false_value); }
|
1403
1407
|
|
1404
1408
|
//public functions
|
1405
|
-
SizeType split_count() const
|
1409
|
+
BOOST_INTRUSIVE_FORCEINLINE SizeType split_count() const
|
1406
1410
|
{
|
1407
1411
|
return this->priv_split_traits().get_size();
|
1408
1412
|
}
|
1409
1413
|
|
1410
|
-
iterator iterator_to(reference value)
|
1414
|
+
BOOST_INTRUSIVE_FORCEINLINE iterator iterator_to(reference value)
|
1411
1415
|
{
|
1412
1416
|
return iterator(bucket_type::s_iterator_to
|
1413
1417
|
(this->priv_value_to_node(value)), &this->get_bucket_value_traits());
|
@@ -1454,19 +1458,19 @@ struct hashdata_internal
|
|
1454
1458
|
return const_local_iterator(sit, this->priv_value_traits_ptr());
|
1455
1459
|
}
|
1456
1460
|
|
1457
|
-
size_type bucket_count() const
|
1461
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type bucket_count() const
|
1458
1462
|
{ return this->priv_bucket_count(); }
|
1459
1463
|
|
1460
|
-
size_type bucket_size(size_type n) const
|
1464
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type bucket_size(size_type n) const
|
1461
1465
|
{ return this->priv_bucket_pointer()[n].size(); }
|
1462
1466
|
|
1463
|
-
bucket_ptr bucket_pointer() const
|
1467
|
+
BOOST_INTRUSIVE_FORCEINLINE bucket_ptr bucket_pointer() const
|
1464
1468
|
{ return this->priv_bucket_pointer(); }
|
1465
1469
|
|
1466
|
-
local_iterator begin(size_type n)
|
1470
|
+
BOOST_INTRUSIVE_FORCEINLINE local_iterator begin(size_type n)
|
1467
1471
|
{ return local_iterator(this->priv_bucket_pointer()[n].begin(), this->priv_value_traits_ptr()); }
|
1468
1472
|
|
1469
|
-
const_local_iterator begin(size_type n) const
|
1473
|
+
BOOST_INTRUSIVE_FORCEINLINE const_local_iterator begin(size_type n) const
|
1470
1474
|
{ return this->cbegin(n); }
|
1471
1475
|
|
1472
1476
|
const_local_iterator cbegin(size_type n) const
|
@@ -1481,7 +1485,7 @@ struct hashdata_internal
|
|
1481
1485
|
local_iterator end(size_type n)
|
1482
1486
|
{ return local_iterator(this->priv_bucket_pointer()[n].end(), this->priv_value_traits_ptr()); }
|
1483
1487
|
|
1484
|
-
const_local_iterator end(size_type n) const
|
1488
|
+
BOOST_INTRUSIVE_FORCEINLINE const_local_iterator end(size_type n) const
|
1485
1489
|
{ return this->cend(n); }
|
1486
1490
|
|
1487
1491
|
const_local_iterator cend(size_type n) const
|
@@ -1493,19 +1497,19 @@ struct hashdata_internal
|
|
1493
1497
|
|
1494
1498
|
//Public functions for hashtable_impl
|
1495
1499
|
|
1496
|
-
iterator begin()
|
1500
|
+
BOOST_INTRUSIVE_FORCEINLINE iterator begin()
|
1497
1501
|
{ return iterator(this->priv_begin(), &this->get_bucket_value_traits()); }
|
1498
1502
|
|
1499
|
-
const_iterator begin() const
|
1503
|
+
BOOST_INTRUSIVE_FORCEINLINE const_iterator begin() const
|
1500
1504
|
{ return this->cbegin(); }
|
1501
1505
|
|
1502
|
-
const_iterator cbegin() const
|
1506
|
+
BOOST_INTRUSIVE_FORCEINLINE const_iterator cbegin() const
|
1503
1507
|
{ return const_iterator(this->priv_begin(), &this->get_bucket_value_traits()); }
|
1504
1508
|
|
1505
|
-
hasher hash_function() const
|
1509
|
+
BOOST_INTRUSIVE_FORCEINLINE hasher hash_function() const
|
1506
1510
|
{ return this->priv_hasher(); }
|
1507
1511
|
|
1508
|
-
key_equal key_eq() const
|
1512
|
+
BOOST_INTRUSIVE_FORCEINLINE key_equal key_eq() const
|
1509
1513
|
{ return this->priv_equal(); }
|
1510
1514
|
};
|
1511
1515
|
|
@@ -1790,15 +1794,10 @@ class hashtable_impl
|
|
1790
1794
|
{
|
1791
1795
|
this->priv_swap_cache(x);
|
1792
1796
|
x.priv_initialize_cache();
|
1793
|
-
|
1794
|
-
|
1795
|
-
|
1796
|
-
|
1797
|
-
}
|
1798
|
-
if(incremental){
|
1799
|
-
this->priv_split_traits().set_size(x.priv_split_traits().get_size());
|
1800
|
-
x.priv_split_traits().set_size(size_type(0));
|
1801
|
-
}
|
1797
|
+
this->priv_size_traits().set_size(x.priv_size_traits().get_size());
|
1798
|
+
x.priv_size_traits().set_size(size_type(0));
|
1799
|
+
this->priv_split_traits().set_size(x.priv_split_traits().get_size());
|
1800
|
+
x.priv_split_traits().set_size(size_type(0));
|
1802
1801
|
}
|
1803
1802
|
|
1804
1803
|
//! <b>Effects</b>: to-do
|
@@ -1946,8 +1945,8 @@ class hashtable_impl
|
|
1946
1945
|
::boost::adl_move_swap(this->priv_bucket_traits(), other.priv_bucket_traits());
|
1947
1946
|
::boost::adl_move_swap(this->priv_value_traits(), other.priv_value_traits());
|
1948
1947
|
this->priv_swap_cache(other);
|
1949
|
-
|
1950
|
-
|
1948
|
+
this->priv_size_traits().swap(other.priv_size_traits());
|
1949
|
+
this->priv_split_traits().swap(other.priv_split_traits());
|
1951
1950
|
}
|
1952
1951
|
|
1953
1952
|
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw
|
@@ -1970,7 +1969,7 @@ class hashtable_impl
|
|
1970
1969
|
//! <b>Throws</b>: If cloner or hasher throw or hash or equality predicate copying
|
1971
1970
|
//! throws. Basic guarantee.
|
1972
1971
|
template <class Cloner, class Disposer>
|
1973
|
-
void clone_from(const hashtable_impl &src, Cloner cloner, Disposer disposer)
|
1972
|
+
BOOST_INTRUSIVE_FORCEINLINE void clone_from(const hashtable_impl &src, Cloner cloner, Disposer disposer)
|
1974
1973
|
{ this->priv_clone_from(src, cloner, disposer); }
|
1975
1974
|
|
1976
1975
|
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw
|
@@ -1993,7 +1992,7 @@ class hashtable_impl
|
|
1993
1992
|
//! <b>Throws</b>: If cloner or hasher throw or hash or equality predicate copying
|
1994
1993
|
//! throws. Basic guarantee.
|
1995
1994
|
template <class Cloner, class Disposer>
|
1996
|
-
void clone_from(BOOST_RV_REF(hashtable_impl) src, Cloner cloner, Disposer disposer)
|
1995
|
+
BOOST_INTRUSIVE_FORCEINLINE void clone_from(BOOST_RV_REF(hashtable_impl) src, Cloner cloner, Disposer disposer)
|
1997
1996
|
{ this->priv_clone_from(static_cast<hashtable_impl&>(src), cloner, disposer); }
|
1998
1997
|
|
1999
1998
|
//! <b>Requires</b>: value must be an lvalue
|
@@ -2057,8 +2056,7 @@ class hashtable_impl
|
|
2057
2056
|
std::pair<iterator, bool> insert_unique(reference value)
|
2058
2057
|
{
|
2059
2058
|
insert_commit_data commit_data;
|
2060
|
-
std::pair<iterator, bool> ret = this->insert_unique_check
|
2061
|
-
(key_of_value()(value), this->priv_hasher(), this->priv_equal(), commit_data);
|
2059
|
+
std::pair<iterator, bool> ret = this->insert_unique_check(key_of_value()(value), commit_data);
|
2062
2060
|
if(ret.second){
|
2063
2061
|
ret.first = this->insert_unique_commit(value, commit_data);
|
2064
2062
|
}
|
@@ -2134,6 +2132,37 @@ class hashtable_impl
|
|
2134
2132
|
, pos == this->priv_invalid_local_it());
|
2135
2133
|
}
|
2136
2134
|
|
2135
|
+
//! <b>Effects</b>: Checks if a value can be inserted in the unordered_set, using
|
2136
|
+
//! a user provided key instead of the value itself.
|
2137
|
+
//!
|
2138
|
+
//! <b>Returns</b>: If there is an equivalent value
|
2139
|
+
//! returns a pair containing an iterator to the already present value
|
2140
|
+
//! and false. If the value can be inserted returns true in the returned
|
2141
|
+
//! pair boolean and fills "commit_data" that is meant to be used with
|
2142
|
+
//! the "insert_commit" function.
|
2143
|
+
//!
|
2144
|
+
//! <b>Complexity</b>: Average case O(1), worst case O(this->size()).
|
2145
|
+
//!
|
2146
|
+
//! <b>Throws</b>: If hasher or key_compare throw. Strong guarantee.
|
2147
|
+
//!
|
2148
|
+
//! <b>Notes</b>: This function is used to improve performance when constructing
|
2149
|
+
//! a value_type is expensive: if there is an equivalent value
|
2150
|
+
//! the constructed object must be discarded. Many times, the part of the
|
2151
|
+
//! node that is used to impose the hash or the equality is much cheaper to
|
2152
|
+
//! construct than the value_type and this function offers the possibility to
|
2153
|
+
//! use that the part to check if the insertion will be successful.
|
2154
|
+
//!
|
2155
|
+
//! If the check is successful, the user can construct the value_type and use
|
2156
|
+
//! "insert_commit" to insert the object in constant-time.
|
2157
|
+
//!
|
2158
|
+
//! "commit_data" remains valid for a subsequent "insert_commit" only if no more
|
2159
|
+
//! objects are inserted or erased from the unordered_set.
|
2160
|
+
//!
|
2161
|
+
//! After a successful rehashing insert_commit_data remains valid.
|
2162
|
+
BOOST_INTRUSIVE_FORCEINLINE std::pair<iterator, bool> insert_unique_check
|
2163
|
+
( const key_type &key, insert_commit_data &commit_data)
|
2164
|
+
{ return this->insert_unique_check(key, this->priv_hasher(), this->priv_equal(), commit_data); }
|
2165
|
+
|
2137
2166
|
//! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
|
2138
2167
|
//! must have been obtained from a previous call to "insert_check".
|
2139
2168
|
//! No objects should have been inserted or erased from the unordered_set between
|
@@ -2174,7 +2203,7 @@ class hashtable_impl
|
|
2174
2203
|
//!
|
2175
2204
|
//! <b>Note</b>: Invalidates the iterators (but not the references)
|
2176
2205
|
//! to the erased element. No destructors are called.
|
2177
|
-
void erase(const_iterator i)
|
2206
|
+
BOOST_INTRUSIVE_FORCEINLINE void erase(const_iterator i)
|
2178
2207
|
{ this->erase_and_dispose(i, detail::null_disposer()); }
|
2179
2208
|
|
2180
2209
|
//! <b>Effects</b>: Erases the range pointed to by b end e.
|
@@ -2186,7 +2215,7 @@ class hashtable_impl
|
|
2186
2215
|
//!
|
2187
2216
|
//! <b>Note</b>: Invalidates the iterators (but not the references)
|
2188
2217
|
//! to the erased elements. No destructors are called.
|
2189
|
-
void erase(const_iterator b, const_iterator e)
|
2218
|
+
BOOST_INTRUSIVE_FORCEINLINE void erase(const_iterator b, const_iterator e)
|
2190
2219
|
{ this->erase_and_dispose(b, e, detail::null_disposer()); }
|
2191
2220
|
|
2192
2221
|
//! <b>Effects</b>: Erases all the elements with the given value.
|
@@ -2201,7 +2230,7 @@ class hashtable_impl
|
|
2201
2230
|
//!
|
2202
2231
|
//! <b>Note</b>: Invalidates the iterators (but not the references)
|
2203
2232
|
//! to the erased elements. No destructors are called.
|
2204
|
-
size_type erase(const key_type &key)
|
2233
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type erase(const key_type &key)
|
2205
2234
|
{ return this->erase(key, this->priv_hasher(), this->priv_equal()); }
|
2206
2235
|
|
2207
2236
|
//! <b>Requires</b>: "hash_func" must be a hash function that induces
|
@@ -2225,7 +2254,7 @@ class hashtable_impl
|
|
2225
2254
|
//! <b>Note</b>: Invalidates the iterators (but not the references)
|
2226
2255
|
//! to the erased elements. No destructors are called.
|
2227
2256
|
template<class KeyType, class KeyHasher, class KeyEqual>
|
2228
|
-
size_type erase(const KeyType& key, KeyHasher hash_func, KeyEqual equal_func)
|
2257
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type erase(const KeyType& key, KeyHasher hash_func, KeyEqual equal_func)
|
2229
2258
|
{ return this->erase_and_dispose(key, hash_func, equal_func, detail::null_disposer()); }
|
2230
2259
|
|
2231
2260
|
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
|
@@ -2312,7 +2341,7 @@ class hashtable_impl
|
|
2312
2341
|
//! <b>Note</b>: Invalidates the iterators (but not the references)
|
2313
2342
|
//! to the erased elements. No destructors are called.
|
2314
2343
|
template<class Disposer>
|
2315
|
-
size_type erase_and_dispose(const key_type &key, Disposer disposer)
|
2344
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type erase_and_dispose(const key_type &key, Disposer disposer)
|
2316
2345
|
{ return this->erase_and_dispose(key, this->priv_hasher(), this->priv_equal(), disposer); }
|
2317
2346
|
|
2318
2347
|
//! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
|
@@ -2410,7 +2439,7 @@ class hashtable_impl
|
|
2410
2439
|
//! <b>Complexity</b>: Average case O(1), worst case O(this->size()).
|
2411
2440
|
//!
|
2412
2441
|
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
|
2413
|
-
size_type count(const key_type &key) const
|
2442
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type count(const key_type &key) const
|
2414
2443
|
{ return this->count(key, this->priv_hasher(), this->priv_equal()); }
|
2415
2444
|
|
2416
2445
|
//! <b>Requires</b>: "hash_func" must be a hash function that induces
|
@@ -2441,7 +2470,7 @@ class hashtable_impl
|
|
2441
2470
|
//! <b>Complexity</b>: Average case O(1), worst case O(this->size()).
|
2442
2471
|
//!
|
2443
2472
|
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
|
2444
|
-
iterator find(const key_type &key)
|
2473
|
+
BOOST_INTRUSIVE_FORCEINLINE iterator find(const key_type &key)
|
2445
2474
|
{ return this->find(key, this->priv_hasher(), this->priv_equal()); }
|
2446
2475
|
|
2447
2476
|
//! <b>Requires</b>: "hash_func" must be a hash function that induces
|
@@ -2479,7 +2508,7 @@ class hashtable_impl
|
|
2479
2508
|
//! <b>Complexity</b>: Average case O(1), worst case O(this->size()).
|
2480
2509
|
//!
|
2481
2510
|
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
|
2482
|
-
const_iterator find(const key_type &key) const
|
2511
|
+
BOOST_INTRUSIVE_FORCEINLINE const_iterator find(const key_type &key) const
|
2483
2512
|
{ return this->find(key, this->priv_hasher(), this->priv_equal()); }
|
2484
2513
|
|
2485
2514
|
//! <b>Requires</b>: "hash_func" must be a hash function that induces
|
@@ -2519,7 +2548,7 @@ class hashtable_impl
|
|
2519
2548
|
//! <b>Complexity</b>: Average case O(this->count(value)). Worst case O(this->size()).
|
2520
2549
|
//!
|
2521
2550
|
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
|
2522
|
-
std::pair<iterator,iterator> equal_range(const key_type &key)
|
2551
|
+
BOOST_INTRUSIVE_FORCEINLINE std::pair<iterator,iterator> equal_range(const key_type &key)
|
2523
2552
|
{ return this->equal_range(key, this->priv_hasher(), this->priv_equal()); }
|
2524
2553
|
|
2525
2554
|
//! <b>Requires</b>: "hash_func" must be a hash function that induces
|
@@ -2560,7 +2589,7 @@ class hashtable_impl
|
|
2560
2589
|
//! <b>Complexity</b>: Average case O(this->count(value)). Worst case O(this->size()).
|
2561
2590
|
//!
|
2562
2591
|
//! <b>Throws</b>: If the internal hasher or the equality functor throws.
|
2563
|
-
std::pair<const_iterator, const_iterator>
|
2592
|
+
BOOST_INTRUSIVE_FORCEINLINE std::pair<const_iterator, const_iterator>
|
2564
2593
|
equal_range(const key_type &key) const
|
2565
2594
|
{ return this->equal_range(key, this->priv_hasher(), this->priv_equal()); }
|
2566
2595
|
|
@@ -2695,7 +2724,7 @@ class hashtable_impl
|
|
2695
2724
|
//! <b>Throws</b>: If the hash functor throws.
|
2696
2725
|
//!
|
2697
2726
|
//! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
|
2698
|
-
size_type bucket(const key_type& k) const
|
2727
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type bucket(const key_type& k) const
|
2699
2728
|
{ return this->bucket(k, this->priv_hasher()); }
|
2700
2729
|
|
2701
2730
|
//! <b>Requires</b>: "hash_func" must be a hash function that induces
|
@@ -2711,7 +2740,7 @@ class hashtable_impl
|
|
2711
2740
|
//!
|
2712
2741
|
//! <b>Note</b>: the return value is in the range [0, this->bucket_count()).
|
2713
2742
|
template<class KeyType, class KeyHasher>
|
2714
|
-
size_type bucket(const KeyType& k, KeyHasher hash_func) const
|
2743
|
+
BOOST_INTRUSIVE_FORCEINLINE size_type bucket(const KeyType& k, KeyHasher hash_func) const
|
2715
2744
|
{ return this->priv_hash_to_bucket(hash_func(k)); }
|
2716
2745
|
|
2717
2746
|
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
|
@@ -2808,101 +2837,52 @@ class hashtable_impl
|
|
2808
2837
|
//! new_bucket_traits.bucket_count() can be bigger or smaller than this->bucket_count().
|
2809
2838
|
//! 'new_bucket_traits' copy constructor should not throw.
|
2810
2839
|
//!
|
2811
|
-
//! <b>Effects</b>:
|
2812
|
-
//!
|
2840
|
+
//! <b>Effects</b>:
|
2841
|
+
//! If `new_bucket_traits.bucket_begin() == this->bucket_pointer()` is false,
|
2842
|
+
//! unlinks values from the old bucket and inserts then in the new one according
|
2843
|
+
//! to the hash value of values.
|
2844
|
+
//!
|
2845
|
+
//! If `new_bucket_traits.bucket_begin() == this->bucket_pointer()` is true,
|
2846
|
+
//! the implementations avoids moving values as much as possible.
|
2847
|
+
//!
|
2813
2848
|
//! Bucket traits hold by *this is assigned from new_bucket_traits.
|
2814
2849
|
//! If the container is configured as incremental<>, the split bucket is set
|
2815
2850
|
//! to the new bucket_count().
|
2816
2851
|
//!
|
2817
2852
|
//! If store_hash option is true, this method does not use the hash function.
|
2853
|
+
//! If false, the implementation tries to minimize calls to the hash function
|
2854
|
+
//! (e.g. once for equivalent values if optimize_multikey<true> is true).
|
2855
|
+
//!
|
2856
|
+
//! If rehash is successful updates the internal bucket_traits with new_bucket_traits.
|
2818
2857
|
//!
|
2819
2858
|
//! <b>Complexity</b>: Average case linear in this->size(), worst case quadratic.
|
2820
2859
|
//!
|
2821
2860
|
//! <b>Throws</b>: If the hasher functor throws. Basic guarantee.
|
2822
|
-
void rehash(const bucket_traits &new_bucket_traits)
|
2823
|
-
{
|
2824
|
-
const bucket_ptr new_buckets = new_bucket_traits.bucket_begin();
|
2825
|
-
size_type new_bucket_count = new_bucket_traits.bucket_count();
|
2826
|
-
const bucket_ptr old_buckets = this->priv_bucket_pointer();
|
2827
|
-
size_type old_bucket_count = this->priv_bucket_count();
|
2861
|
+
BOOST_INTRUSIVE_FORCEINLINE void rehash(const bucket_traits &new_bucket_traits)
|
2862
|
+
{ this->rehash_impl(new_bucket_traits, false); }
|
2828
2863
|
|
2829
|
-
|
2830
|
-
|
2831
|
-
|
2832
|
-
|
2833
|
-
|
2834
|
-
|
2835
|
-
|
2836
|
-
|
2837
|
-
|
2838
|
-
|
2839
|
-
|
2840
|
-
|
2841
|
-
|
2842
|
-
|
2843
|
-
|
2844
|
-
|
2845
|
-
|
2846
|
-
|
2847
|
-
|
2848
|
-
|
2849
|
-
|
2850
|
-
|
2851
|
-
typedef detail::exception_array_disposer<bucket_type, NodeDisposer, size_type> ArrayDisposer;
|
2852
|
-
NodeDisposer node_disp;
|
2853
|
-
ArrayDisposer rollback1(new_buckets[0], node_disp, new_bucket_count);
|
2854
|
-
ArrayDisposer rollback2(old_buckets[0], node_disp, old_bucket_count);
|
2855
|
-
|
2856
|
-
//Put size in a safe value for rollback exception
|
2857
|
-
size_type const size_backup = this->priv_size_traits().get_size();
|
2858
|
-
this->priv_size_traits().set_size(0);
|
2859
|
-
//Put cache to safe position
|
2860
|
-
this->priv_initialize_cache();
|
2861
|
-
this->priv_insertion_update_cache(size_type(0u));
|
2862
|
-
|
2863
|
-
//Iterate through nodes
|
2864
|
-
for(; n < old_bucket_count; ++n){
|
2865
|
-
bucket_type &old_bucket = old_buckets[n];
|
2866
|
-
if(!fast_shrink){
|
2867
|
-
for( siterator before_i(old_bucket.before_begin()), i(old_bucket.begin()), end_sit(old_bucket.end())
|
2868
|
-
; i != end_sit
|
2869
|
-
; i = before_i, ++i){
|
2870
|
-
const value_type &v = this->priv_value_from_slist_node(i.pointed_node());
|
2871
|
-
const std::size_t hash_value = this->priv_stored_or_compute_hash(v, store_hash_t());
|
2872
|
-
const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>
|
2873
|
-
(hash_value, new_bucket_count, new_bucket_count);
|
2874
|
-
if(cache_begin && new_n < new_first_bucket_num)
|
2875
|
-
new_first_bucket_num = new_n;
|
2876
|
-
siterator const last = (priv_last_in_group)(i);
|
2877
|
-
if(same_buffer && new_n == n){
|
2878
|
-
before_i = last;
|
2879
|
-
}
|
2880
|
-
else{
|
2881
|
-
bucket_type &new_b = new_buckets[new_n];
|
2882
|
-
new_b.splice_after(new_b.before_begin(), old_bucket, before_i, last);
|
2883
|
-
}
|
2884
|
-
}
|
2885
|
-
}
|
2886
|
-
else{
|
2887
|
-
const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>(n, new_bucket_count, new_bucket_count);
|
2888
|
-
if(cache_begin && new_n < new_first_bucket_num)
|
2889
|
-
new_first_bucket_num = new_n;
|
2890
|
-
bucket_type &new_b = new_buckets[new_n];
|
2891
|
-
new_b.splice_after( new_b.before_begin()
|
2892
|
-
, old_bucket
|
2893
|
-
, old_bucket.before_begin()
|
2894
|
-
, bucket_plus_vtraits_t::priv_get_last(old_bucket, optimize_multikey_t()));
|
2895
|
-
}
|
2896
|
-
}
|
2897
|
-
|
2898
|
-
this->priv_size_traits().set_size(size_backup);
|
2899
|
-
this->priv_split_traits().set_size(new_bucket_count);
|
2900
|
-
this->priv_bucket_traits() = new_bucket_traits;
|
2901
|
-
this->priv_initialize_cache();
|
2902
|
-
this->priv_insertion_update_cache(new_first_bucket_num);
|
2903
|
-
rollback1.release();
|
2904
|
-
rollback2.release();
|
2905
|
-
}
|
2864
|
+
//! <b>Note</b>: This function is used when keys from inserted elements are changed
|
2865
|
+
//! (e.g. a language change when key is a string) but uniqueness and hash properties are
|
2866
|
+
//! preserved so a fast full rehash recovers invariants for *this without extracting and
|
2867
|
+
//! reinserting all elements again.
|
2868
|
+
//!
|
2869
|
+
//! <b>Requires</b>: Calls produced to the hash function should not alter the value uniqueness
|
2870
|
+
//! properties of already inserted elements. If hasher(key1) == hasher(key2) was true when
|
2871
|
+
//! elements were inserted, it shall be true during calls produced in the execution of this function.
|
2872
|
+
//!
|
2873
|
+
//! key_equal is not called inside this function so it is assumed that key_equal(value1, value2)
|
2874
|
+
//! should produce the same results as before for inserted elements.
|
2875
|
+
//!
|
2876
|
+
//! <b>Effects</b>: Reprocesses all values hold by *this, recalculating their hash values
|
2877
|
+
//! and redistributing them though the buckets.
|
2878
|
+
//!
|
2879
|
+
//! If store_hash option is true, this method uses the hash function and updates the stored hash value.
|
2880
|
+
//!
|
2881
|
+
//! <b>Complexity</b>: Average case linear in this->size(), worst case quadratic.
|
2882
|
+
//!
|
2883
|
+
//! <b>Throws</b>: If the hasher functor throws. Basic guarantee.
|
2884
|
+
BOOST_INTRUSIVE_FORCEINLINE void full_rehash()
|
2885
|
+
{ this->rehash_impl(this->priv_bucket_traits(), true); }
|
2906
2886
|
|
2907
2887
|
//! <b>Requires</b>:
|
2908
2888
|
//!
|
@@ -3083,9 +3063,113 @@ class hashtable_impl
|
|
3083
3063
|
{ return !(x < y); }
|
3084
3064
|
|
3085
3065
|
/// @cond
|
3086
|
-
void check() const {}
|
3066
|
+
BOOST_INTRUSIVE_FORCEINLINE void check() const {}
|
3087
3067
|
private:
|
3088
3068
|
|
3069
|
+
void rehash_impl(const bucket_traits &new_bucket_traits, bool do_full_rehash)
|
3070
|
+
{
|
3071
|
+
const bucket_ptr new_buckets = new_bucket_traits.bucket_begin();
|
3072
|
+
size_type new_bucket_count = new_bucket_traits.bucket_count();
|
3073
|
+
const bucket_ptr old_buckets = this->priv_bucket_pointer();
|
3074
|
+
size_type old_bucket_count = this->priv_bucket_count();
|
3075
|
+
|
3076
|
+
//Check power of two bucket array if the option is activated
|
3077
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT
|
3078
|
+
(!power_2_buckets || (0 == (new_bucket_count & (new_bucket_count-1u))));
|
3079
|
+
|
3080
|
+
size_type n = this->priv_get_cache_bucket_num();
|
3081
|
+
const bool same_buffer = old_buckets == new_buckets;
|
3082
|
+
//If the new bucket length is a common factor
|
3083
|
+
//of the old one we can avoid hash calculations.
|
3084
|
+
const bool fast_shrink = (!do_full_rehash) && (!incremental) && (old_bucket_count >= new_bucket_count) &&
|
3085
|
+
(power_2_buckets || (old_bucket_count % new_bucket_count) == 0);
|
3086
|
+
//If we are shrinking the same bucket array and it's
|
3087
|
+
//is a fast shrink, just rehash the last nodes
|
3088
|
+
size_type new_first_bucket_num = new_bucket_count;
|
3089
|
+
if(same_buffer && fast_shrink && (n < new_bucket_count)){
|
3090
|
+
new_first_bucket_num = n;
|
3091
|
+
n = new_bucket_count;
|
3092
|
+
}
|
3093
|
+
|
3094
|
+
//Anti-exception stuff: they destroy the elements if something goes wrong.
|
3095
|
+
//If the source and destination buckets are the same, the second rollback function
|
3096
|
+
//is harmless, because all elements have been already unlinked and destroyed
|
3097
|
+
typedef detail::init_disposer<node_algorithms> NodeDisposer;
|
3098
|
+
typedef detail::exception_array_disposer<bucket_type, NodeDisposer, size_type> ArrayDisposer;
|
3099
|
+
NodeDisposer node_disp;
|
3100
|
+
ArrayDisposer rollback1(new_buckets[0], node_disp, new_bucket_count);
|
3101
|
+
ArrayDisposer rollback2(old_buckets[0], node_disp, old_bucket_count);
|
3102
|
+
|
3103
|
+
//Put size in a safe value for rollback exception
|
3104
|
+
size_type const size_backup = this->priv_size_traits().get_size();
|
3105
|
+
this->priv_size_traits().set_size(0);
|
3106
|
+
//Put cache to safe position
|
3107
|
+
this->priv_initialize_cache();
|
3108
|
+
this->priv_insertion_update_cache(size_type(0u));
|
3109
|
+
|
3110
|
+
//Iterate through nodes
|
3111
|
+
for(; n < old_bucket_count; ++n){
|
3112
|
+
bucket_type &old_bucket = old_buckets[n];
|
3113
|
+
if(!fast_shrink){
|
3114
|
+
for( siterator before_i(old_bucket.before_begin()), i(old_bucket.begin()), end_sit(old_bucket.end())
|
3115
|
+
; i != end_sit
|
3116
|
+
; i = before_i, ++i){
|
3117
|
+
|
3118
|
+
//First obtain hash value (and store it if do_full_rehash)
|
3119
|
+
std::size_t hash_value;
|
3120
|
+
if(do_full_rehash){
|
3121
|
+
value_type &v = this->priv_value_from_slist_node(i.pointed_node());
|
3122
|
+
hash_value = this->priv_hasher()(key_of_value()(v));
|
3123
|
+
node_functions_t::store_hash(pointer_traits<node_ptr>::pointer_to(this->priv_value_to_node(v)), hash_value, store_hash_t());
|
3124
|
+
}
|
3125
|
+
else{
|
3126
|
+
const value_type &v = this->priv_value_from_slist_node(i.pointed_node());
|
3127
|
+
hash_value = this->priv_stored_or_compute_hash(v, store_hash_t());
|
3128
|
+
}
|
3129
|
+
|
3130
|
+
//Now calculate the new bucket position
|
3131
|
+
const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>
|
3132
|
+
(hash_value, new_bucket_count, new_bucket_count);
|
3133
|
+
|
3134
|
+
//Update first used bucket cache
|
3135
|
+
if(cache_begin && new_n < new_first_bucket_num)
|
3136
|
+
new_first_bucket_num = new_n;
|
3137
|
+
|
3138
|
+
//If the target bucket is new, transfer the whole group
|
3139
|
+
siterator const last = (priv_last_in_group)(i);
|
3140
|
+
|
3141
|
+
if(same_buffer && new_n == n){
|
3142
|
+
before_i = last;
|
3143
|
+
}
|
3144
|
+
else{
|
3145
|
+
bucket_type &new_b = new_buckets[new_n];
|
3146
|
+
new_b.splice_after(new_b.before_begin(), old_bucket, before_i, last);
|
3147
|
+
}
|
3148
|
+
}
|
3149
|
+
}
|
3150
|
+
else{
|
3151
|
+
const size_type new_n = detail::hash_to_bucket_split<power_2_buckets, incremental>(n, new_bucket_count, new_bucket_count);
|
3152
|
+
if(cache_begin && new_n < new_first_bucket_num)
|
3153
|
+
new_first_bucket_num = new_n;
|
3154
|
+
bucket_type &new_b = new_buckets[new_n];
|
3155
|
+
new_b.splice_after( new_b.before_begin()
|
3156
|
+
, old_bucket
|
3157
|
+
, old_bucket.before_begin()
|
3158
|
+
, bucket_plus_vtraits_t::priv_get_last(old_bucket, optimize_multikey_t()));
|
3159
|
+
}
|
3160
|
+
}
|
3161
|
+
|
3162
|
+
this->priv_size_traits().set_size(size_backup);
|
3163
|
+
this->priv_split_traits().set_size(new_bucket_count);
|
3164
|
+
if(&new_bucket_traits != &this->priv_bucket_traits()){
|
3165
|
+
this->priv_bucket_traits() = new_bucket_traits;
|
3166
|
+
}
|
3167
|
+
this->priv_initialize_cache();
|
3168
|
+
this->priv_insertion_update_cache(new_first_bucket_num);
|
3169
|
+
rollback1.release();
|
3170
|
+
rollback2.release();
|
3171
|
+
}
|
3172
|
+
|
3089
3173
|
template <class MaybeConstHashtableImpl, class Cloner, class Disposer>
|
3090
3174
|
void priv_clone_from(MaybeConstHashtableImpl &src, Cloner cloner, Disposer disposer)
|
3091
3175
|
{
|
@@ -3468,26 +3552,26 @@ class hashtable
|
|
3468
3552
|
//Assert if passed value traits are compatible with the type
|
3469
3553
|
BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
|
3470
3554
|
|
3471
|
-
explicit hashtable ( const bucket_traits &b_traits
|
3555
|
+
BOOST_INTRUSIVE_FORCEINLINE explicit hashtable ( const bucket_traits &b_traits
|
3472
3556
|
, const hasher & hash_func = hasher()
|
3473
3557
|
, const key_equal &equal_func = key_equal()
|
3474
3558
|
, const value_traits &v_traits = value_traits())
|
3475
3559
|
: Base(b_traits, hash_func, equal_func, v_traits)
|
3476
3560
|
{}
|
3477
3561
|
|
3478
|
-
hashtable(BOOST_RV_REF(hashtable) x)
|
3562
|
+
BOOST_INTRUSIVE_FORCEINLINE hashtable(BOOST_RV_REF(hashtable) x)
|
3479
3563
|
: Base(BOOST_MOVE_BASE(Base, x))
|
3480
3564
|
{}
|
3481
3565
|
|
3482
|
-
hashtable& operator=(BOOST_RV_REF(hashtable) x)
|
3566
|
+
BOOST_INTRUSIVE_FORCEINLINE hashtable& operator=(BOOST_RV_REF(hashtable) x)
|
3483
3567
|
{ return static_cast<hashtable&>(this->Base::operator=(BOOST_MOVE_BASE(Base, x))); }
|
3484
3568
|
|
3485
3569
|
template <class Cloner, class Disposer>
|
3486
|
-
void clone_from(const hashtable &src, Cloner cloner, Disposer disposer)
|
3570
|
+
BOOST_INTRUSIVE_FORCEINLINE void clone_from(const hashtable &src, Cloner cloner, Disposer disposer)
|
3487
3571
|
{ Base::clone_from(src, cloner, disposer); }
|
3488
3572
|
|
3489
3573
|
template <class Cloner, class Disposer>
|
3490
|
-
void clone_from(BOOST_RV_REF(hashtable) src, Cloner cloner, Disposer disposer)
|
3574
|
+
BOOST_INTRUSIVE_FORCEINLINE void clone_from(BOOST_RV_REF(hashtable) src, Cloner cloner, Disposer disposer)
|
3491
3575
|
{ Base::clone_from(BOOST_MOVE_BASE(Base, src), cloner, disposer); }
|
3492
3576
|
};
|
3493
3577
|
|