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
@@ -289,11 +289,13 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_alt()
|
|
289
289
|
BidiIterator oldposition(position);
|
290
290
|
const re_syntax_base* old_pstate = jmp->alt.p;
|
291
291
|
pstate = pstate->next.p;
|
292
|
+
bool oldcase = icase;
|
292
293
|
m_have_then = false;
|
293
294
|
if(!match_all_states())
|
294
295
|
{
|
295
296
|
pstate = old_pstate;
|
296
297
|
position = oldposition;
|
298
|
+
icase = oldcase;
|
297
299
|
if(m_have_then)
|
298
300
|
{
|
299
301
|
m_can_backtrack = true;
|
@@ -898,10 +900,27 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_recursion()
|
|
898
900
|
{
|
899
901
|
recursion_stack.reserve(50);
|
900
902
|
}
|
903
|
+
//
|
904
|
+
// See if we've seen this recursion before at this location, if we have then
|
905
|
+
// we need to prevent infinite recursion:
|
906
|
+
//
|
907
|
+
for(typename std::vector<recursion_info<results_type> >::reverse_iterator i = recursion_stack.rbegin(); i != recursion_stack.rend(); ++i)
|
908
|
+
{
|
909
|
+
if(i->idx == static_cast<const re_brace*>(static_cast<const re_jump*>(pstate)->alt.p)->index)
|
910
|
+
{
|
911
|
+
if(i->location_of_start == position)
|
912
|
+
return false;
|
913
|
+
break;
|
914
|
+
}
|
915
|
+
}
|
916
|
+
//
|
917
|
+
// Now get on with it:
|
918
|
+
//
|
901
919
|
recursion_stack.push_back(recursion_info<results_type>());
|
902
920
|
recursion_stack.back().preturn_address = pstate->next.p;
|
903
921
|
recursion_stack.back().results = *m_presult;
|
904
922
|
recursion_stack.back().repeater_stack = next_count;
|
923
|
+
recursion_stack.back().location_of_start = position;
|
905
924
|
pstate = static_cast<const re_jump*>(pstate)->alt.p;
|
906
925
|
recursion_stack.back().idx = static_cast<const re_brace*>(pstate)->index;
|
907
926
|
|
@@ -977,6 +996,7 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_match()
|
|
977
996
|
recursion_stack.push_back(recursion_info<results_type>());
|
978
997
|
recursion_stack.back().preturn_address = saved_state;
|
979
998
|
recursion_stack.back().results = *m_presult;
|
999
|
+
recursion_stack.back().location_of_start = position;
|
980
1000
|
return false;
|
981
1001
|
}
|
982
1002
|
return true;
|
@@ -1036,6 +1056,20 @@ bool perl_matcher<BidiIterator, Allocator, traits>::match_then()
|
|
1036
1056
|
return false;
|
1037
1057
|
}
|
1038
1058
|
|
1059
|
+
template <class BidiIterator, class Allocator, class traits>
|
1060
|
+
bool perl_matcher<BidiIterator, Allocator, traits>::match_toggle_case()
|
1061
|
+
{
|
1062
|
+
// change our case sensitivity:
|
1063
|
+
bool oldcase = this->icase;
|
1064
|
+
this->icase = static_cast<const re_case*>(pstate)->icase;
|
1065
|
+
pstate = pstate->next.p;
|
1066
|
+
bool result = match_all_states();
|
1067
|
+
this->icase = oldcase;
|
1068
|
+
return result;
|
1069
|
+
}
|
1070
|
+
|
1071
|
+
|
1072
|
+
|
1039
1073
|
template <class BidiIterator, class Allocator, class traits>
|
1040
1074
|
bool perl_matcher<BidiIterator, Allocator, traits>::skip_until_paren(int index, bool have_match)
|
1041
1075
|
{
|
@@ -86,7 +86,7 @@ struct trivial_format_traits
|
|
86
86
|
}
|
87
87
|
int toi(const charT*& p1, const charT* p2, int radix)const
|
88
88
|
{
|
89
|
-
return global_toi(p1, p2, radix, *this);
|
89
|
+
return (int)global_toi(p1, p2, radix, *this);
|
90
90
|
}
|
91
91
|
};
|
92
92
|
|
@@ -165,7 +165,7 @@ private:
|
|
165
165
|
std::vector<char_type> v(i, j);
|
166
166
|
const char_type* start = &v[0];
|
167
167
|
const char_type* pos = start;
|
168
|
-
int r = m_traits.toi(pos, &v[0] + v.size(), base);
|
168
|
+
int r = (int)m_traits.toi(pos, &v[0] + v.size(), base);
|
169
169
|
std::advance(i, pos - start);
|
170
170
|
return r;
|
171
171
|
}
|
@@ -109,7 +109,7 @@ struct default_wrapper : public BaseT
|
|
109
109
|
{
|
110
110
|
return ((c & 0x7f) == c) ? get_default_escape_syntax_type(static_cast<char>(c)) : ::boost::regex_constants::escape_type_identity;
|
111
111
|
}
|
112
|
-
|
112
|
+
boost::intmax_t toi(const char_type*& p1, const char_type* p2, int radix)const
|
113
113
|
{
|
114
114
|
return ::boost::BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this);
|
115
115
|
}
|
@@ -304,13 +304,13 @@ int global_value(charT c)
|
|
304
304
|
return -1;
|
305
305
|
}
|
306
306
|
template <class charT, class traits>
|
307
|
-
|
307
|
+
boost::intmax_t global_toi(const charT*& p1, const charT* p2, int radix, const traits& t)
|
308
308
|
{
|
309
309
|
(void)t; // warning suppression
|
310
|
-
|
310
|
+
boost::intmax_t next_value = t.value(*p1, radix);
|
311
311
|
if((p1 == p2) || (next_value < 0) || (next_value >= radix))
|
312
312
|
return -1;
|
313
|
-
|
313
|
+
boost::intmax_t result = 0;
|
314
314
|
while(p1 != p2)
|
315
315
|
{
|
316
316
|
next_value = t.value(*p1, radix);
|
@@ -640,13 +640,13 @@ public:
|
|
640
640
|
return true;
|
641
641
|
return false;
|
642
642
|
}
|
643
|
-
|
643
|
+
boost::intmax_t toi(const charT*& p1, const charT* p2, int radix)const
|
644
644
|
{
|
645
645
|
return ::boost::BOOST_REGEX_DETAIL_NS::global_toi(p1, p2, radix, *this);
|
646
646
|
}
|
647
647
|
int value(charT c, int radix)const
|
648
648
|
{
|
649
|
-
int result = ::boost::BOOST_REGEX_DETAIL_NS::global_value(c);
|
649
|
+
int result = (int)::boost::BOOST_REGEX_DETAIL_NS::global_value(c);
|
650
650
|
return result < radix ? result : -1;
|
651
651
|
}
|
652
652
|
locale_type imbue(locale_type l)
|
@@ -1,181 +1,1026 @@
|
|
1
1
|
/*
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
*/
|
2
|
+
Copyright 2012-2017 Glen Joseph Fernandes
|
3
|
+
(glenjofe@gmail.com)
|
4
|
+
|
5
|
+
Distributed under the Boost Software License, Version 1.0.
|
6
|
+
(http://www.boost.org/LICENSE_1_0.txt)
|
7
|
+
*/
|
9
8
|
#ifndef BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP
|
10
9
|
#define BOOST_SMART_PTR_ALLOCATE_SHARED_ARRAY_HPP
|
11
10
|
|
12
|
-
#include <boost/smart_ptr/
|
13
|
-
#include <boost/
|
11
|
+
#include <boost/smart_ptr/shared_ptr.hpp>
|
12
|
+
#include <boost/type_traits/has_trivial_constructor.hpp>
|
13
|
+
#include <boost/type_traits/has_trivial_destructor.hpp>
|
14
|
+
#include <boost/type_traits/alignment_of.hpp>
|
15
|
+
#include <boost/type_traits/type_with_alignment.hpp>
|
14
16
|
|
15
17
|
namespace boost {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
18
|
+
namespace detail {
|
19
|
+
|
20
|
+
template<class>
|
21
|
+
struct sp_if_array { };
|
22
|
+
|
23
|
+
template<class T>
|
24
|
+
struct sp_if_array<T[]> {
|
25
|
+
typedef boost::shared_ptr<T[]> type;
|
26
|
+
};
|
27
|
+
|
28
|
+
template<class>
|
29
|
+
struct sp_if_size_array { };
|
30
|
+
|
31
|
+
template<class T, std::size_t N>
|
32
|
+
struct sp_if_size_array<T[N]> {
|
33
|
+
typedef boost::shared_ptr<T[N]> type;
|
34
|
+
};
|
35
|
+
|
36
|
+
template<class>
|
37
|
+
struct sp_array_element { };
|
38
|
+
|
39
|
+
template<class T>
|
40
|
+
struct sp_array_element<T[]> {
|
41
|
+
typedef T type;
|
42
|
+
};
|
43
|
+
|
44
|
+
template<class T, std::size_t N>
|
45
|
+
struct sp_array_element<T[N]> {
|
46
|
+
typedef T type;
|
47
|
+
};
|
48
|
+
|
49
|
+
template<class T>
|
50
|
+
struct sp_array_scalar {
|
51
|
+
typedef T type;
|
52
|
+
};
|
53
|
+
|
54
|
+
template<class T, std::size_t N>
|
55
|
+
struct sp_array_scalar<T[N]> {
|
56
|
+
typedef typename sp_array_scalar<T>::type type;
|
57
|
+
};
|
58
|
+
|
59
|
+
template<class T, std::size_t N>
|
60
|
+
struct sp_array_scalar<const T[N]> {
|
61
|
+
typedef typename sp_array_scalar<T>::type type;
|
62
|
+
};
|
63
|
+
|
64
|
+
template<class T, std::size_t N>
|
65
|
+
struct sp_array_scalar<volatile T[N]> {
|
66
|
+
typedef typename sp_array_scalar<T>::type type;
|
67
|
+
};
|
68
|
+
|
69
|
+
template<class T, std::size_t N>
|
70
|
+
struct sp_array_scalar<const volatile T[N]> {
|
71
|
+
typedef typename sp_array_scalar<T>::type type;
|
72
|
+
};
|
73
|
+
|
74
|
+
template<class T>
|
75
|
+
struct sp_array_scalar<T[]> {
|
76
|
+
typedef typename sp_array_scalar<T>::type type;
|
77
|
+
};
|
78
|
+
|
79
|
+
template<class T>
|
80
|
+
struct sp_array_scalar<const T[]> {
|
81
|
+
typedef typename sp_array_scalar<T>::type type;
|
82
|
+
};
|
83
|
+
|
84
|
+
template<class T>
|
85
|
+
struct sp_array_scalar<volatile T[]> {
|
86
|
+
typedef typename sp_array_scalar<T>::type type;
|
87
|
+
};
|
88
|
+
|
89
|
+
template<class T>
|
90
|
+
struct sp_array_scalar<const volatile T[]> {
|
91
|
+
typedef typename sp_array_scalar<T>::type type;
|
92
|
+
};
|
93
|
+
|
94
|
+
template<class T>
|
95
|
+
struct sp_array_count {
|
96
|
+
enum {
|
97
|
+
value = 1
|
98
|
+
};
|
99
|
+
};
|
100
|
+
|
101
|
+
template<class T, std::size_t N>
|
102
|
+
struct sp_array_count<T[N]> {
|
103
|
+
enum {
|
104
|
+
value = N * sp_array_count<T>::value
|
105
|
+
};
|
106
|
+
};
|
107
|
+
|
108
|
+
template<class T>
|
109
|
+
struct sp_array_count<T[]> { };
|
110
|
+
|
111
|
+
template<class D, class T>
|
112
|
+
inline D*
|
113
|
+
sp_get_deleter(const
|
114
|
+
boost::shared_ptr<T>& value) BOOST_NOEXCEPT_OR_NOTHROW
|
115
|
+
{
|
116
|
+
return static_cast<D*>(value._internal_get_untyped_deleter());
|
117
|
+
}
|
118
|
+
|
119
|
+
template<std::size_t N, std::size_t A>
|
120
|
+
struct sp_array_storage {
|
121
|
+
union type {
|
122
|
+
char value[N];
|
123
|
+
typename boost::type_with_alignment<A>::type other;
|
124
|
+
};
|
125
|
+
};
|
126
|
+
|
127
|
+
template<std::size_t N, std::size_t M>
|
128
|
+
struct sp_max_size {
|
129
|
+
enum {
|
130
|
+
value = N < M ? M : N
|
131
|
+
};
|
132
|
+
};
|
133
|
+
|
32
134
|
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
|
33
|
-
|
135
|
+
template<class A, class T>
|
136
|
+
struct sp_bind_allocator {
|
137
|
+
typedef typename std::allocator_traits<A>::template
|
138
|
+
rebind_alloc<T> type;
|
139
|
+
};
|
34
140
|
#else
|
35
|
-
|
141
|
+
template<class A, class T>
|
142
|
+
struct sp_bind_allocator {
|
143
|
+
typedef typename A::template rebind<T>::other type;
|
144
|
+
};
|
36
145
|
#endif
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
146
|
+
|
147
|
+
template<bool, class = void>
|
148
|
+
struct sp_enable { };
|
149
|
+
|
150
|
+
template<class T>
|
151
|
+
struct sp_enable<true, T> {
|
152
|
+
typedef T type;
|
153
|
+
};
|
154
|
+
|
155
|
+
template<class T>
|
156
|
+
inline
|
157
|
+
typename sp_enable<boost::has_trivial_destructor<T>::value>::type
|
158
|
+
sp_array_destroy(T*, std::size_t) BOOST_NOEXCEPT { }
|
159
|
+
|
160
|
+
template<class T>
|
161
|
+
inline
|
162
|
+
typename sp_enable<!boost::has_trivial_destructor<T>::value>::type
|
163
|
+
sp_array_destroy(T* storage, std::size_t size)
|
164
|
+
{
|
165
|
+
while (size > 0) {
|
166
|
+
storage[--size].~T();
|
167
|
+
}
|
168
|
+
}
|
169
|
+
|
60
170
|
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
|
61
|
-
|
171
|
+
template<class A, class T>
|
172
|
+
inline void
|
173
|
+
sp_array_destroy(A& allocator, T* storage, std::size_t size)
|
174
|
+
{
|
175
|
+
while (size > 0) {
|
176
|
+
std::allocator_traits<A>::destroy(allocator, &storage[--size]);
|
177
|
+
}
|
178
|
+
}
|
179
|
+
#endif
|
180
|
+
|
181
|
+
#if !defined(BOOST_NO_EXCEPTIONS)
|
182
|
+
template<class T>
|
183
|
+
inline
|
184
|
+
typename sp_enable<boost::has_trivial_constructor<T>::value ||
|
185
|
+
boost::has_trivial_destructor<T>::value>::type
|
186
|
+
sp_array_construct(T* storage, std::size_t size)
|
187
|
+
{
|
188
|
+
for (std::size_t i = 0; i < size; ++i) {
|
189
|
+
::new(static_cast<void*>(storage + i)) T();
|
190
|
+
}
|
191
|
+
}
|
192
|
+
|
193
|
+
template<class T>
|
194
|
+
inline
|
195
|
+
typename sp_enable<!boost::has_trivial_constructor<T>::value &&
|
196
|
+
!boost::has_trivial_destructor<T>::value>::type
|
197
|
+
sp_array_construct(T* storage, std::size_t size)
|
198
|
+
{
|
199
|
+
std::size_t i = 0;
|
200
|
+
try {
|
201
|
+
for (; i < size; ++i) {
|
202
|
+
::new(static_cast<void*>(storage + i)) T();
|
203
|
+
}
|
204
|
+
} catch (...) {
|
205
|
+
while (i > 0) {
|
206
|
+
storage[--i].~T();
|
207
|
+
}
|
208
|
+
throw;
|
209
|
+
}
|
210
|
+
}
|
211
|
+
|
212
|
+
template<class T>
|
213
|
+
inline void
|
214
|
+
sp_array_construct(T* storage, std::size_t size, const T* list,
|
215
|
+
std::size_t count)
|
216
|
+
{
|
217
|
+
std::size_t i = 0;
|
218
|
+
try {
|
219
|
+
for (; i < size; ++i) {
|
220
|
+
::new(static_cast<void*>(storage + i)) T(list[i % count]);
|
221
|
+
}
|
222
|
+
} catch (...) {
|
223
|
+
while (i > 0) {
|
224
|
+
storage[--i].~T();
|
225
|
+
}
|
226
|
+
throw;
|
227
|
+
}
|
228
|
+
}
|
62
229
|
#else
|
63
|
-
|
230
|
+
template<class T>
|
231
|
+
inline void
|
232
|
+
sp_array_construct(T* storage, std::size_t size)
|
233
|
+
{
|
234
|
+
for (std::size_t i = 0; i < size; ++i) {
|
235
|
+
::new(static_cast<void*>(storage + i)) T();
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
template<class T>
|
240
|
+
inline void
|
241
|
+
sp_array_construct(T* storage, std::size_t size, const T* list,
|
242
|
+
std::size_t count)
|
243
|
+
{
|
244
|
+
for (std::size_t i = 0; i < size; ++i) {
|
245
|
+
::new(static_cast<void*>(storage + i)) T(list[i % count]);
|
246
|
+
}
|
247
|
+
}
|
64
248
|
#endif
|
65
|
-
|
66
|
-
p1 = reinterpret_cast<T1*>(p2);
|
67
|
-
return shared_ptr<T>(s1, p1);
|
68
|
-
}
|
69
|
-
|
70
|
-
template<class T, class A>
|
71
|
-
inline typename boost::detail::sp_if_array<T>::type
|
72
|
-
allocate_shared(const A& allocator, std::size_t size,
|
73
|
-
const typename boost::detail::array_inner<T>::type& value) {
|
74
|
-
typedef typename boost::detail::array_inner<T>::type T1;
|
75
|
-
typedef typename boost::detail::array_base<T1>::type T2;
|
76
|
-
typedef const T2 T3;
|
77
|
-
typedef boost::detail::ms_init_tag R1;
|
78
|
-
typedef boost::detail::as_allocator<A, T, R1> A1;
|
79
|
-
typedef boost::detail::ms_in_allocator_tag D1;
|
80
|
-
enum {
|
81
|
-
M = boost::detail::array_total<T1>::size
|
82
|
-
};
|
83
|
-
std::size_t n1 = M * size;
|
84
|
-
T1* p1 = 0;
|
85
|
-
T2* p2 = 0;
|
86
|
-
T3* p3 = reinterpret_cast<T3*>(&value);
|
87
|
-
D1 d1;
|
88
|
-
A1 a1(allocator, size, &p2);
|
89
|
-
shared_ptr<T> s1(p1, d1, a1);
|
90
|
-
A1* a2 = static_cast<A1*>(s1._internal_get_untyped_deleter());
|
91
|
-
a2->set(0);
|
249
|
+
|
92
250
|
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
|
93
|
-
|
251
|
+
#if !defined(BOOST_NO_EXCEPTIONS)
|
252
|
+
template<class A, class T>
|
253
|
+
inline void
|
254
|
+
sp_array_construct(A& allocator, T* storage, std::size_t size)
|
255
|
+
{
|
256
|
+
std::size_t i = 0;
|
257
|
+
try {
|
258
|
+
for (i = 0; i < size; ++i) {
|
259
|
+
std::allocator_traits<A>::construct(allocator, storage + i);
|
260
|
+
}
|
261
|
+
} catch (...) {
|
262
|
+
sp_array_destroy(allocator, storage, i);
|
263
|
+
throw;
|
264
|
+
}
|
265
|
+
}
|
266
|
+
|
267
|
+
template<class A, class T>
|
268
|
+
inline void
|
269
|
+
sp_array_construct(A& allocator, T* storage, std::size_t size,
|
270
|
+
const T* list, std::size_t count)
|
271
|
+
{
|
272
|
+
std::size_t i = 0;
|
273
|
+
try {
|
274
|
+
for (i = 0; i < size; ++i) {
|
275
|
+
std::allocator_traits<A>::construct(allocator, storage + i,
|
276
|
+
list[i % count]);
|
277
|
+
}
|
278
|
+
} catch (...) {
|
279
|
+
sp_array_destroy(allocator, storage, i);
|
280
|
+
throw;
|
281
|
+
}
|
282
|
+
}
|
94
283
|
#else
|
95
|
-
|
284
|
+
template<class A, class T>
|
285
|
+
inline void
|
286
|
+
sp_array_construct(A& allocator, T* storage, std::size_t size)
|
287
|
+
{
|
288
|
+
for (std::size_t i = 0; i < size; ++i) {
|
289
|
+
std::allocator_traits<A>::construct(allocator, storage + i);
|
290
|
+
}
|
291
|
+
}
|
292
|
+
|
293
|
+
template<class A, class T>
|
294
|
+
inline void
|
295
|
+
sp_array_construct(A& allocator, T* storage, std::size_t size,
|
296
|
+
const T* list, std::size_t count)
|
297
|
+
{
|
298
|
+
for (std::size_t i = 0; i < size; ++i) {
|
299
|
+
std::allocator_traits<A>::construct(allocator, storage + i,
|
300
|
+
list[i % count]);
|
301
|
+
}
|
302
|
+
}
|
303
|
+
#endif
|
96
304
|
#endif
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
305
|
+
|
306
|
+
template<class T>
|
307
|
+
inline
|
308
|
+
typename sp_enable<boost::has_trivial_constructor<T>::value>::type
|
309
|
+
sp_array_default(T*, std::size_t) BOOST_NOEXCEPT { }
|
310
|
+
|
311
|
+
#if !defined(BOOST_NO_EXCEPTIONS)
|
312
|
+
template<class T>
|
313
|
+
inline
|
314
|
+
typename sp_enable<!boost::has_trivial_constructor<T>::value &&
|
315
|
+
boost::has_trivial_destructor<T>::value>::type
|
316
|
+
sp_array_default(T* storage, std::size_t size)
|
317
|
+
{
|
318
|
+
for (std::size_t i = 0; i < size; ++i) {
|
319
|
+
::new(static_cast<void*>(storage + i)) T;
|
320
|
+
}
|
321
|
+
}
|
322
|
+
|
323
|
+
template<class T>
|
324
|
+
inline
|
325
|
+
typename sp_enable<!boost::has_trivial_constructor<T>::value &&
|
326
|
+
!boost::has_trivial_destructor<T>::value>::type
|
327
|
+
sp_array_default(T* storage, std::size_t size)
|
328
|
+
{
|
329
|
+
std::size_t i = 0;
|
330
|
+
try {
|
331
|
+
for (; i < size; ++i) {
|
332
|
+
::new(static_cast<void*>(storage + i)) T;
|
333
|
+
}
|
334
|
+
} catch (...) {
|
335
|
+
while (i > 0) {
|
336
|
+
storage[--i].~T();
|
337
|
+
}
|
338
|
+
throw;
|
339
|
+
}
|
340
|
+
}
|
341
|
+
#else
|
342
|
+
template<class T>
|
343
|
+
inline
|
344
|
+
typename sp_enable<!boost::has_trivial_constructor<T>::value>::type
|
345
|
+
sp_array_default(T* storage, std::size_t size)
|
346
|
+
{
|
347
|
+
for (std::size_t i = 0; i < size; ++i) {
|
348
|
+
::new(static_cast<void*>(storage + i)) T;
|
349
|
+
}
|
350
|
+
}
|
351
|
+
#endif
|
352
|
+
|
353
|
+
template<class T, std::size_t N>
|
354
|
+
struct sp_less_align {
|
355
|
+
enum {
|
356
|
+
value = (boost::alignment_of<T>::value) < N
|
357
|
+
};
|
358
|
+
};
|
359
|
+
|
360
|
+
template<class T, std::size_t N>
|
361
|
+
BOOST_CONSTEXPR inline
|
362
|
+
typename sp_enable<sp_less_align<T, N>::value, std::size_t>::type
|
363
|
+
sp_align(std::size_t size) BOOST_NOEXCEPT
|
364
|
+
{
|
365
|
+
return (sizeof(T) * size + N - 1) & ~(N - 1);
|
366
|
+
}
|
367
|
+
|
368
|
+
template<class T, std::size_t N>
|
369
|
+
BOOST_CONSTEXPR inline
|
370
|
+
typename sp_enable<!sp_less_align<T, N>::value, std::size_t>::type
|
371
|
+
sp_align(std::size_t size) BOOST_NOEXCEPT
|
372
|
+
{
|
373
|
+
return sizeof(T) * size;
|
374
|
+
}
|
375
|
+
|
376
|
+
template<class T>
|
377
|
+
BOOST_CONSTEXPR inline std::size_t
|
378
|
+
sp_types(std::size_t size) BOOST_NOEXCEPT
|
379
|
+
{
|
380
|
+
return (size + sizeof(T) - 1) / sizeof(T);
|
381
|
+
}
|
382
|
+
|
383
|
+
template<class T, std::size_t N>
|
384
|
+
class sp_size_array_deleter {
|
385
|
+
public:
|
386
|
+
template<class U>
|
387
|
+
static void operator_fn(U) BOOST_NOEXCEPT { }
|
388
|
+
|
389
|
+
sp_size_array_deleter() BOOST_NOEXCEPT
|
390
|
+
: enabled_(false) { }
|
391
|
+
|
392
|
+
template<class A>
|
393
|
+
sp_size_array_deleter(const A&) BOOST_NOEXCEPT
|
394
|
+
: enabled_(false) { }
|
395
|
+
|
396
|
+
sp_size_array_deleter(const sp_size_array_deleter&) BOOST_NOEXCEPT
|
397
|
+
: enabled_(false) { }
|
398
|
+
|
399
|
+
~sp_size_array_deleter() {
|
400
|
+
if (enabled_) {
|
401
|
+
sp_array_destroy(reinterpret_cast<T*>(&storage_), N);
|
402
|
+
}
|
403
|
+
}
|
404
|
+
|
405
|
+
template<class U>
|
406
|
+
void operator()(U) {
|
407
|
+
if (enabled_) {
|
408
|
+
sp_array_destroy(reinterpret_cast<T*>(&storage_), N);
|
409
|
+
enabled_ = false;
|
410
|
+
}
|
411
|
+
}
|
412
|
+
|
413
|
+
void* construct() {
|
414
|
+
sp_array_construct(reinterpret_cast<T*>(&storage_), N);
|
415
|
+
enabled_ = true;
|
416
|
+
return &storage_;
|
417
|
+
}
|
418
|
+
|
419
|
+
void* construct(const T* list, std::size_t count) {
|
420
|
+
sp_array_construct(reinterpret_cast<T*>(&storage_), N,
|
421
|
+
list, count);
|
422
|
+
enabled_ = true;
|
423
|
+
return &storage_;
|
424
|
+
}
|
425
|
+
|
426
|
+
void* construct_default() {
|
427
|
+
sp_array_default(reinterpret_cast<T*>(&storage_), N);
|
428
|
+
enabled_ = true;
|
429
|
+
return &storage_;
|
430
|
+
}
|
431
|
+
|
432
|
+
private:
|
433
|
+
bool enabled_;
|
434
|
+
typename sp_array_storage<sizeof(T) * N,
|
435
|
+
boost::alignment_of<T>::value>::type storage_;
|
436
|
+
};
|
437
|
+
|
124
438
|
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
|
125
|
-
|
439
|
+
template<class T, std::size_t N, class A>
|
440
|
+
class sp_size_array_destroyer {
|
441
|
+
public:
|
442
|
+
template<class U>
|
443
|
+
static void operator_fn(U) BOOST_NOEXCEPT { }
|
444
|
+
|
445
|
+
template<class U>
|
446
|
+
sp_size_array_destroyer(const U& allocator) BOOST_NOEXCEPT
|
447
|
+
: allocator_(allocator),
|
448
|
+
enabled_(false) { }
|
449
|
+
|
450
|
+
sp_size_array_destroyer(const sp_size_array_destroyer& other)
|
451
|
+
BOOST_NOEXCEPT
|
452
|
+
: allocator_(other.allocator_),
|
453
|
+
enabled_(false) { }
|
454
|
+
|
455
|
+
~sp_size_array_destroyer() {
|
456
|
+
if (enabled_) {
|
457
|
+
sp_array_destroy(allocator_,
|
458
|
+
reinterpret_cast<T*>(&storage_), N);
|
459
|
+
}
|
460
|
+
}
|
461
|
+
|
462
|
+
template<class U>
|
463
|
+
void operator()(U) {
|
464
|
+
if (enabled_) {
|
465
|
+
sp_array_destroy(allocator_,
|
466
|
+
reinterpret_cast<T*>(&storage_), N);
|
467
|
+
enabled_ = false;
|
468
|
+
}
|
469
|
+
}
|
470
|
+
|
471
|
+
void* construct() {
|
472
|
+
sp_array_construct(allocator_,
|
473
|
+
reinterpret_cast<T*>(&storage_), N);
|
474
|
+
enabled_ = true;
|
475
|
+
return &storage_;
|
476
|
+
}
|
477
|
+
|
478
|
+
void* construct(const T* list, std::size_t count) {
|
479
|
+
sp_array_construct(allocator_,
|
480
|
+
reinterpret_cast<T*>(&storage_), N, list, count);
|
481
|
+
enabled_ = true;
|
482
|
+
return &storage_;
|
483
|
+
}
|
484
|
+
|
485
|
+
const A& allocator() const BOOST_NOEXCEPT {
|
486
|
+
return allocator_;
|
487
|
+
}
|
488
|
+
|
489
|
+
private:
|
490
|
+
typename sp_array_storage<sizeof(T) * N,
|
491
|
+
boost::alignment_of<T>::value>::type storage_;
|
492
|
+
A allocator_;
|
493
|
+
bool enabled_;
|
494
|
+
};
|
495
|
+
#endif
|
496
|
+
|
497
|
+
template<class T>
|
498
|
+
class sp_array_deleter {
|
499
|
+
public:
|
500
|
+
template<class U>
|
501
|
+
static void operator_fn(U) BOOST_NOEXCEPT { }
|
502
|
+
|
503
|
+
sp_array_deleter(std::size_t size) BOOST_NOEXCEPT
|
504
|
+
: address_(0),
|
505
|
+
size_(size) { }
|
506
|
+
|
507
|
+
template<class A>
|
508
|
+
sp_array_deleter(const A& allocator) BOOST_NOEXCEPT
|
509
|
+
: address_(0),
|
510
|
+
size_(allocator.size()) { }
|
511
|
+
|
512
|
+
template<class A>
|
513
|
+
sp_array_deleter(const A&, std::size_t size) BOOST_NOEXCEPT
|
514
|
+
: address_(0),
|
515
|
+
size_(size) { }
|
516
|
+
|
517
|
+
sp_array_deleter(const sp_array_deleter& other) BOOST_NOEXCEPT
|
518
|
+
: address_(0),
|
519
|
+
size_(other.size_) { }
|
520
|
+
|
521
|
+
~sp_array_deleter() {
|
522
|
+
if (address_) {
|
523
|
+
sp_array_destroy(static_cast<T*>(address_), size_);
|
524
|
+
}
|
525
|
+
}
|
526
|
+
|
527
|
+
template<class U>
|
528
|
+
void operator()(U) {
|
529
|
+
if (address_) {
|
530
|
+
sp_array_destroy(static_cast<T*>(address_), size_);
|
531
|
+
address_ = 0;
|
532
|
+
}
|
533
|
+
}
|
534
|
+
|
535
|
+
void construct(T* address) {
|
536
|
+
sp_array_construct(address, size_);
|
537
|
+
address_ = address;
|
538
|
+
}
|
539
|
+
|
540
|
+
void construct(T* address, const T* list, std::size_t count) {
|
541
|
+
sp_array_construct(address, size_, list, count);
|
542
|
+
address_ = address;
|
543
|
+
}
|
544
|
+
|
545
|
+
void construct_default(T* address) {
|
546
|
+
sp_array_default(address, size_);
|
547
|
+
address_ = address;
|
548
|
+
}
|
549
|
+
|
550
|
+
std::size_t size() const BOOST_NOEXCEPT {
|
551
|
+
return size_;
|
552
|
+
}
|
553
|
+
|
554
|
+
private:
|
555
|
+
void* address_;
|
556
|
+
std::size_t size_;
|
557
|
+
};
|
558
|
+
|
559
|
+
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
|
560
|
+
template<class T, class A>
|
561
|
+
class sp_array_destroyer {
|
562
|
+
public:
|
563
|
+
template<class U>
|
564
|
+
static void operator_fn(U) BOOST_NOEXCEPT { }
|
565
|
+
|
566
|
+
template<class U>
|
567
|
+
sp_array_destroyer(const U& allocator, std::size_t size)
|
568
|
+
BOOST_NOEXCEPT
|
569
|
+
: allocator_(allocator),
|
570
|
+
size_(size),
|
571
|
+
address_(0) { }
|
572
|
+
|
573
|
+
template<class U>
|
574
|
+
sp_array_destroyer(const U& allocator) BOOST_NOEXCEPT
|
575
|
+
: allocator_(allocator.allocator()),
|
576
|
+
size_(allocator.size()),
|
577
|
+
address_(0) { }
|
578
|
+
|
579
|
+
sp_array_destroyer(const sp_array_destroyer& other) BOOST_NOEXCEPT
|
580
|
+
: allocator_(other.allocator_),
|
581
|
+
size_(other.size_),
|
582
|
+
address_(0) { }
|
583
|
+
|
584
|
+
~sp_array_destroyer() {
|
585
|
+
if (address_) {
|
586
|
+
sp_array_destroy(allocator_, static_cast<T*>(address_),
|
587
|
+
size_);
|
588
|
+
}
|
589
|
+
}
|
590
|
+
|
591
|
+
template<class U>
|
592
|
+
void operator()(U) {
|
593
|
+
if (address_) {
|
594
|
+
sp_array_destroy(allocator_, static_cast<T*>(address_),
|
595
|
+
size_);
|
596
|
+
address_ = 0;
|
597
|
+
}
|
598
|
+
}
|
599
|
+
|
600
|
+
void construct(T* address) {
|
601
|
+
sp_array_construct(allocator_, address, size_);
|
602
|
+
address_ = address;
|
603
|
+
}
|
604
|
+
|
605
|
+
void construct(T* address, const T* list, std::size_t count) {
|
606
|
+
sp_array_construct(allocator_, address, size_, list, count);
|
607
|
+
address_ = address;
|
608
|
+
}
|
609
|
+
|
610
|
+
const A& allocator() const BOOST_NOEXCEPT {
|
611
|
+
return allocator_;
|
612
|
+
}
|
613
|
+
|
614
|
+
std::size_t size() const BOOST_NOEXCEPT {
|
615
|
+
return size_;
|
616
|
+
}
|
617
|
+
|
618
|
+
private:
|
619
|
+
A allocator_;
|
620
|
+
std::size_t size_;
|
621
|
+
void* address_;
|
622
|
+
};
|
623
|
+
#endif
|
624
|
+
|
625
|
+
template<class T, class A>
|
626
|
+
class sp_array_allocator {
|
627
|
+
template<class U, class V>
|
628
|
+
friend class sp_array_allocator;
|
629
|
+
|
630
|
+
public:
|
631
|
+
typedef typename A::value_type value_type;
|
632
|
+
|
633
|
+
private:
|
634
|
+
enum {
|
635
|
+
alignment = sp_max_size<boost::alignment_of<T>::value,
|
636
|
+
boost::alignment_of<value_type>::value>::value
|
637
|
+
};
|
638
|
+
|
639
|
+
typedef typename boost::type_with_alignment<alignment>::type type;
|
640
|
+
typedef typename sp_bind_allocator<A, type>::type type_allocator;
|
641
|
+
|
642
|
+
public:
|
643
|
+
template<class U>
|
644
|
+
struct rebind {
|
645
|
+
typedef sp_array_allocator<T,
|
646
|
+
typename sp_bind_allocator<A, U>::type> other;
|
647
|
+
};
|
648
|
+
|
649
|
+
sp_array_allocator(const A& allocator, std::size_t size,
|
650
|
+
void** result) BOOST_NOEXCEPT
|
651
|
+
: allocator_(allocator),
|
652
|
+
size_(size),
|
653
|
+
result_(result) { }
|
654
|
+
|
655
|
+
sp_array_allocator(const A& allocator, std::size_t size)
|
656
|
+
BOOST_NOEXCEPT
|
657
|
+
: allocator_(allocator),
|
658
|
+
size_(size) { }
|
659
|
+
|
660
|
+
template<class U>
|
661
|
+
sp_array_allocator(const sp_array_allocator<T, U>& other)
|
662
|
+
BOOST_NOEXCEPT
|
663
|
+
: allocator_(other.allocator_),
|
664
|
+
size_(other.size_),
|
665
|
+
result_(other.result_) { }
|
666
|
+
|
667
|
+
value_type* allocate(std::size_t count) {
|
668
|
+
type_allocator allocator(allocator_);
|
669
|
+
std::size_t node = sp_align<value_type, alignment>(count);
|
670
|
+
std::size_t size = sp_types<type>(node + sizeof(T) * size_);
|
671
|
+
type* address = allocator.allocate(size);
|
672
|
+
*result_ = reinterpret_cast<char*>(address) + node;
|
673
|
+
return reinterpret_cast<value_type*>(address);
|
674
|
+
}
|
675
|
+
|
676
|
+
void deallocate(value_type* value, std::size_t count) {
|
677
|
+
type_allocator allocator(allocator_);
|
678
|
+
std::size_t node = sp_align<value_type, alignment>(count);
|
679
|
+
std::size_t size = sp_types<type>(node + sizeof(T) * size_);
|
680
|
+
allocator.deallocate(reinterpret_cast<type*>(value), size);
|
681
|
+
}
|
682
|
+
|
683
|
+
const A& allocator() const BOOST_NOEXCEPT {
|
684
|
+
return allocator_;
|
685
|
+
}
|
686
|
+
|
687
|
+
std::size_t size() const BOOST_NOEXCEPT {
|
688
|
+
return size_;
|
689
|
+
}
|
690
|
+
|
691
|
+
private:
|
692
|
+
A allocator_;
|
693
|
+
std::size_t size_;
|
694
|
+
void** result_;
|
695
|
+
};
|
696
|
+
|
697
|
+
template<class T, class U, class V>
|
698
|
+
inline bool
|
699
|
+
operator==(const sp_array_allocator<T, U>& first,
|
700
|
+
const sp_array_allocator<T, V>& second) BOOST_NOEXCEPT
|
701
|
+
{
|
702
|
+
return first.allocator() == second.allocator() &&
|
703
|
+
first.size() == second.size();
|
704
|
+
}
|
705
|
+
|
706
|
+
template<class T, class U, class V>
|
707
|
+
inline bool
|
708
|
+
operator!=(const sp_array_allocator<T, U>& first,
|
709
|
+
const sp_array_allocator<T, V>& second) BOOST_NOEXCEPT
|
710
|
+
{
|
711
|
+
return !(first == second);
|
712
|
+
}
|
713
|
+
|
714
|
+
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
|
715
|
+
template<class A, class T, std::size_t N>
|
716
|
+
struct sp_select_size_deleter {
|
717
|
+
typedef sp_size_array_destroyer<T, N,
|
718
|
+
typename sp_bind_allocator<A, T>::type> type;
|
719
|
+
};
|
720
|
+
|
721
|
+
template<class U, class T, std::size_t N>
|
722
|
+
struct sp_select_size_deleter<std::allocator<U>, T, N> {
|
723
|
+
typedef sp_size_array_deleter<T, N> type;
|
724
|
+
};
|
725
|
+
|
726
|
+
template<class A, class T>
|
727
|
+
struct sp_select_deleter {
|
728
|
+
typedef sp_array_destroyer<T,
|
729
|
+
typename sp_bind_allocator<A, T>::type> type;
|
730
|
+
};
|
731
|
+
|
732
|
+
template<class U, class T>
|
733
|
+
struct sp_select_deleter<std::allocator<U>, T> {
|
734
|
+
typedef sp_array_deleter<T> type;
|
735
|
+
};
|
126
736
|
#else
|
127
|
-
|
737
|
+
template<class, class T, std::size_t N>
|
738
|
+
struct sp_select_size_deleter {
|
739
|
+
typedef sp_size_array_deleter<T, N> type;
|
740
|
+
};
|
741
|
+
|
742
|
+
template<class, class T>
|
743
|
+
struct sp_select_deleter {
|
744
|
+
typedef sp_array_deleter<T> type;
|
745
|
+
};
|
746
|
+
#endif
|
747
|
+
|
748
|
+
template<class P, class T, std::size_t N, class A>
|
749
|
+
class sp_counted_impl_pda<P, sp_size_array_deleter<T, N>, A>
|
750
|
+
: public sp_counted_base {
|
751
|
+
public:
|
752
|
+
typedef sp_size_array_deleter<T, N> deleter_type;
|
753
|
+
|
754
|
+
private:
|
755
|
+
typedef sp_counted_impl_pda<P, deleter_type, A> type;
|
756
|
+
typedef typename sp_bind_allocator<A, type>::type deallocator;
|
757
|
+
|
758
|
+
public:
|
759
|
+
sp_counted_impl_pda(P, const deleter_type&, const A& allocator)
|
760
|
+
: deleter_(allocator),
|
761
|
+
allocator_(allocator) { }
|
762
|
+
|
763
|
+
sp_counted_impl_pda(P, const A& allocator)
|
764
|
+
: deleter_(allocator) { }
|
765
|
+
|
766
|
+
void dispose() {
|
767
|
+
deleter_(0);
|
768
|
+
}
|
769
|
+
|
770
|
+
void destroy() {
|
771
|
+
deallocator allocator(allocator_);
|
772
|
+
this->~type();
|
773
|
+
allocator.deallocate(this, 1);
|
774
|
+
}
|
775
|
+
|
776
|
+
void* get_deleter(const sp_typeinfo&) {
|
777
|
+
return &reinterpret_cast<char&>(deleter_);
|
778
|
+
}
|
779
|
+
|
780
|
+
void* get_untyped_deleter() {
|
781
|
+
return &reinterpret_cast<char&>(deleter_);
|
782
|
+
}
|
783
|
+
|
784
|
+
private:
|
785
|
+
deleter_type deleter_;
|
786
|
+
A allocator_;
|
787
|
+
};
|
788
|
+
|
789
|
+
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
|
790
|
+
template<class P, class T, std::size_t N, class U, class A>
|
791
|
+
class sp_counted_impl_pda<P, sp_size_array_destroyer<T, N, U>, A>
|
792
|
+
: public sp_counted_base {
|
793
|
+
public:
|
794
|
+
typedef sp_size_array_destroyer<T, N, U> deleter_type;
|
795
|
+
|
796
|
+
private:
|
797
|
+
typedef sp_counted_impl_pda<P, deleter_type, A> type;
|
798
|
+
typedef typename sp_bind_allocator<A, type>::type deallocator;
|
799
|
+
|
800
|
+
public:
|
801
|
+
sp_counted_impl_pda(P, const deleter_type&, const A& allocator)
|
802
|
+
: deleter_(allocator) { }
|
803
|
+
|
804
|
+
sp_counted_impl_pda(P, const A& allocator)
|
805
|
+
: deleter_(allocator) { }
|
806
|
+
|
807
|
+
void dispose() {
|
808
|
+
deleter_(0);
|
809
|
+
}
|
810
|
+
|
811
|
+
void destroy() {
|
812
|
+
deallocator allocator(deleter_.allocator());
|
813
|
+
this->~type();
|
814
|
+
allocator.deallocate(this, 1);
|
815
|
+
}
|
816
|
+
|
817
|
+
void* get_deleter(const sp_typeinfo&) {
|
818
|
+
return &reinterpret_cast<char&>(deleter_);
|
819
|
+
}
|
820
|
+
|
821
|
+
void* get_untyped_deleter() {
|
822
|
+
return &reinterpret_cast<char&>(deleter_);
|
823
|
+
}
|
824
|
+
|
825
|
+
private:
|
826
|
+
deleter_type deleter_;
|
827
|
+
};
|
128
828
|
#endif
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
829
|
+
|
830
|
+
template<class P, class T, class A>
|
831
|
+
class sp_counted_impl_pda<P, sp_array_deleter<T>,
|
832
|
+
sp_array_allocator<T, A> >
|
833
|
+
: public sp_counted_base {
|
834
|
+
public:
|
835
|
+
typedef sp_array_deleter<T> deleter_type;
|
836
|
+
typedef sp_array_allocator<T, A> allocator_type;
|
837
|
+
|
838
|
+
private:
|
839
|
+
typedef sp_counted_impl_pda<P, deleter_type, allocator_type> type;
|
840
|
+
typedef sp_array_allocator<T,
|
841
|
+
typename sp_bind_allocator<A, type>::type> deallocator;
|
842
|
+
|
843
|
+
public:
|
844
|
+
sp_counted_impl_pda(P, const deleter_type&,
|
845
|
+
const allocator_type& allocator)
|
846
|
+
: deleter_(allocator),
|
847
|
+
allocator_(allocator.allocator()) { }
|
848
|
+
|
849
|
+
sp_counted_impl_pda(P, const allocator_type& allocator)
|
850
|
+
: deleter_(allocator),
|
851
|
+
allocator_(allocator.allocator()) { }
|
852
|
+
|
853
|
+
void dispose() {
|
854
|
+
deleter_(0);
|
855
|
+
}
|
856
|
+
|
857
|
+
void destroy() {
|
858
|
+
deallocator allocator(allocator_, deleter_.size());
|
859
|
+
this->~type();
|
860
|
+
allocator.deallocate(this, 1);
|
861
|
+
}
|
862
|
+
|
863
|
+
void* get_deleter(const sp_typeinfo&) {
|
864
|
+
return &reinterpret_cast<char&>(deleter_);
|
865
|
+
}
|
866
|
+
|
867
|
+
void* get_untyped_deleter() {
|
868
|
+
return &reinterpret_cast<char&>(deleter_);
|
869
|
+
}
|
870
|
+
|
871
|
+
private:
|
872
|
+
deleter_type deleter_;
|
873
|
+
A allocator_;
|
874
|
+
};
|
875
|
+
|
876
|
+
#if !defined(BOOST_NO_CXX11_ALLOCATOR)
|
877
|
+
template<class P, class T, class U, class A>
|
878
|
+
class sp_counted_impl_pda<P, sp_array_destroyer<T, U>,
|
879
|
+
sp_array_allocator<T, A> >
|
880
|
+
: public sp_counted_base {
|
881
|
+
public:
|
882
|
+
typedef sp_array_destroyer<T, U> deleter_type;
|
883
|
+
typedef sp_array_allocator<T, A> allocator_type;
|
884
|
+
|
885
|
+
private:
|
886
|
+
typedef sp_counted_impl_pda<P, deleter_type, allocator_type> type;
|
887
|
+
typedef sp_array_allocator<T,
|
888
|
+
typename sp_bind_allocator<A, type>::type> deallocator;
|
889
|
+
|
890
|
+
public:
|
891
|
+
sp_counted_impl_pda(P, const deleter_type&,
|
892
|
+
const allocator_type& allocator)
|
893
|
+
: deleter_(allocator) { }
|
894
|
+
|
895
|
+
sp_counted_impl_pda(P, const allocator_type& allocator)
|
896
|
+
: deleter_(allocator) { }
|
897
|
+
|
898
|
+
void dispose() {
|
899
|
+
deleter_(0);
|
900
|
+
}
|
901
|
+
|
902
|
+
void destroy() {
|
903
|
+
deallocator allocator(deleter_.allocator(), deleter_.size());
|
904
|
+
this->~type();
|
905
|
+
allocator.deallocate(this, 1);
|
906
|
+
}
|
907
|
+
|
908
|
+
void* get_deleter(const sp_typeinfo&) {
|
909
|
+
return &reinterpret_cast<char&>(deleter_);
|
910
|
+
}
|
911
|
+
|
912
|
+
void* get_untyped_deleter() {
|
913
|
+
return &reinterpret_cast<char&>(deleter_);
|
178
914
|
}
|
915
|
+
|
916
|
+
private:
|
917
|
+
deleter_type deleter_;
|
918
|
+
};
|
919
|
+
#endif
|
920
|
+
|
921
|
+
} /* detail */
|
922
|
+
|
923
|
+
template<class T, class A>
|
924
|
+
inline typename detail::sp_if_size_array<T>::type
|
925
|
+
allocate_shared(const A& allocator)
|
926
|
+
{
|
927
|
+
typedef typename detail::sp_array_element<T>::type type;
|
928
|
+
typedef typename detail::sp_array_scalar<T>::type scalar;
|
929
|
+
typedef typename detail::sp_select_size_deleter<A, scalar,
|
930
|
+
detail::sp_array_count<T>::value>::type deleter;
|
931
|
+
shared_ptr<T> result(static_cast<type*>(0),
|
932
|
+
detail::sp_inplace_tag<deleter>(), allocator);
|
933
|
+
deleter* state = detail::sp_get_deleter<deleter>(result);
|
934
|
+
void* start = state->construct();
|
935
|
+
return shared_ptr<T>(result, static_cast<type*>(start));
|
936
|
+
}
|
937
|
+
|
938
|
+
template<class T, class A>
|
939
|
+
inline typename detail::sp_if_size_array<T>::type
|
940
|
+
allocate_shared(const A& allocator,
|
941
|
+
const typename detail::sp_array_element<T>::type& value)
|
942
|
+
{
|
943
|
+
typedef typename detail::sp_array_element<T>::type type;
|
944
|
+
typedef typename detail::sp_array_scalar<T>::type scalar;
|
945
|
+
typedef typename detail::sp_select_size_deleter<A, scalar,
|
946
|
+
detail::sp_array_count<T>::value>::type deleter;
|
947
|
+
shared_ptr<T> result(static_cast<type*>(0),
|
948
|
+
detail::sp_inplace_tag<deleter>(), allocator);
|
949
|
+
deleter* state = detail::sp_get_deleter<deleter>(result);
|
950
|
+
void* start = state->construct(reinterpret_cast<const
|
951
|
+
scalar*>(&value), detail::sp_array_count<type>::value);
|
952
|
+
return shared_ptr<T>(result, static_cast<type*>(start));
|
953
|
+
}
|
954
|
+
|
955
|
+
template<class T, class A>
|
956
|
+
inline typename detail::sp_if_size_array<T>::type
|
957
|
+
allocate_shared_noinit(const A& allocator)
|
958
|
+
{
|
959
|
+
typedef typename detail::sp_array_element<T>::type type;
|
960
|
+
typedef typename detail::sp_array_scalar<T>::type scalar;
|
961
|
+
typedef detail::sp_size_array_deleter<scalar,
|
962
|
+
detail::sp_array_count<T>::value> deleter;
|
963
|
+
shared_ptr<T> result(static_cast<type*>(0),
|
964
|
+
detail::sp_inplace_tag<deleter>(), allocator);
|
965
|
+
deleter* state = detail::sp_get_deleter<deleter>(result);
|
966
|
+
void* start = state->construct_default();
|
967
|
+
return shared_ptr<T>(result, static_cast<type*>(start));
|
179
968
|
}
|
180
969
|
|
970
|
+
template<class T, class A>
|
971
|
+
inline typename detail::sp_if_array<T>::type
|
972
|
+
allocate_shared(const A& allocator, std::size_t count)
|
973
|
+
{
|
974
|
+
typedef typename detail::sp_array_element<T>::type type;
|
975
|
+
typedef typename detail::sp_array_scalar<T>::type scalar;
|
976
|
+
typedef typename detail::sp_select_deleter<A, scalar>::type deleter;
|
977
|
+
std::size_t size = count * detail::sp_array_count<type>::value;
|
978
|
+
void* start;
|
979
|
+
shared_ptr<T> result(static_cast<type*>(0),
|
980
|
+
detail::sp_inplace_tag<deleter>(),
|
981
|
+
detail::sp_array_allocator<scalar, A>(allocator, size, &start));
|
982
|
+
deleter* state = detail::sp_get_deleter<deleter>(result);
|
983
|
+
state->construct(static_cast<scalar*>(start));
|
984
|
+
return shared_ptr<T>(result, static_cast<type*>(start));
|
985
|
+
}
|
986
|
+
|
987
|
+
template<class T, class A>
|
988
|
+
inline typename detail::sp_if_array<T>::type
|
989
|
+
allocate_shared(const A& allocator, std::size_t count,
|
990
|
+
const typename detail::sp_array_element<T>::type& value)
|
991
|
+
{
|
992
|
+
typedef typename detail::sp_array_element<T>::type type;
|
993
|
+
typedef typename detail::sp_array_scalar<T>::type scalar;
|
994
|
+
typedef typename detail::sp_select_deleter<A, scalar>::type deleter;
|
995
|
+
std::size_t size = count * detail::sp_array_count<type>::value;
|
996
|
+
void* start;
|
997
|
+
shared_ptr<T> result(static_cast<type*>(0),
|
998
|
+
detail::sp_inplace_tag<deleter>(),
|
999
|
+
detail::sp_array_allocator<scalar, A>(allocator, size, &start));
|
1000
|
+
deleter* state = detail::sp_get_deleter<deleter>(result);
|
1001
|
+
state->construct(static_cast<scalar*>(start),
|
1002
|
+
reinterpret_cast<const scalar*>(&value),
|
1003
|
+
detail::sp_array_count<type>::value);
|
1004
|
+
return shared_ptr<T>(result, static_cast<type*>(start));
|
1005
|
+
}
|
1006
|
+
|
1007
|
+
template<class T, class A>
|
1008
|
+
inline typename detail::sp_if_array<T>::type
|
1009
|
+
allocate_shared_noinit(const A& allocator, std::size_t count)
|
1010
|
+
{
|
1011
|
+
typedef typename detail::sp_array_element<T>::type type;
|
1012
|
+
typedef typename detail::sp_array_scalar<T>::type scalar;
|
1013
|
+
typedef detail::sp_array_deleter<scalar> deleter;
|
1014
|
+
std::size_t size = count * detail::sp_array_count<type>::value;
|
1015
|
+
void* start;
|
1016
|
+
shared_ptr<T> result(static_cast<type*>(0),
|
1017
|
+
detail::sp_inplace_tag<deleter>(),
|
1018
|
+
detail::sp_array_allocator<scalar, A>(allocator, size, &start));
|
1019
|
+
deleter* state = detail::sp_get_deleter<deleter>(result);
|
1020
|
+
state->construct_default(static_cast<scalar*>(start));
|
1021
|
+
return shared_ptr<T>(result, static_cast<type*>(start));
|
1022
|
+
}
|
1023
|
+
|
1024
|
+
} /* boost */
|
1025
|
+
|
181
1026
|
#endif
|