passenger 5.0.24 → 5.0.25
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 +8 -18
- data/CHANGELOG +20 -0
- data/build/cplusplus_support.rb +3 -3
- data/build/cxx_dependency_map.rb +148 -96
- data/build/cxx_tests.rb +24 -12
- data/build/packaging.rb +1 -2
- data/dev/copy_boost_headers +32 -9
- data/resources/templates/standalone/config.erb +2 -0
- data/resources/templates/standalone/footer.erb +3 -0
- data/resources/templates/standalone/server.erb +7 -0
- data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +2 -2
- data/src/agent/Core/SpawningKit/DirectSpawner.h +3 -0
- data/src/agent/Core/UnionStation/Transaction.h +1 -15
- data/src/agent/README.md +15 -3
- data/src/agent/UstRouter/Controller.h +95 -90
- data/src/agent/UstRouter/FileSink.h +3 -2
- data/src/agent/UstRouter/LogSink.h +5 -6
- data/src/agent/UstRouter/RemoteSender.h +41 -12
- data/src/agent/UstRouter/RemoteSink.h +3 -2
- data/src/agent/UstRouter/Transaction.h +198 -66
- data/src/apache2_module/Configuration.cpp +57 -2
- data/src/apache2_module/Configuration.h +3 -1
- data/src/apache2_module/Configuration.hpp +3 -1
- data/src/apache2_module/Hooks.cpp +4 -2
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/MemoryKit/palloc.h +1 -0
- data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +1 -0
- data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +4 -3
- data/src/cxx_supportlib/ServerKit/Server.h +1 -0
- data/src/cxx_supportlib/Utils/BufferedIO.h +21 -4
- data/src/cxx_supportlib/Utils/IOUtils.cpp +62 -12
- data/src/cxx_supportlib/Utils/StrIntUtils.cpp +3 -3
- data/src/cxx_supportlib/Utils/StrIntUtils.h +2 -2
- data/src/cxx_supportlib/WatchdogLauncher.cpp +13 -1
- data/src/cxx_supportlib/WatchdogLauncher.h +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/classification.hpp +312 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/concept.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/classification.hpp +353 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_format.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_format_all.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_format_store.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +87 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/finder.hpp +1 -8
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/finder_regex.hpp +122 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/formatter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/formatter_regex.hpp +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/predicate.hpp +77 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/trim.hpp +95 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/util.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/erase.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find.hpp +334 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_format.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/find_iterator.hpp +388 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/finder.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/formatter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/iter_find.hpp +193 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/join.hpp +145 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/predicate.hpp +475 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/predicate_facade.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/regex.hpp +646 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/regex_find_format.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/replace.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/sequence_traits.hpp +0 -73
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/split.hpp +163 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/std/list_traits.hpp +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/std/rope_traits.hpp +81 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/std/slist_traits.hpp +69 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/std/string_traits.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/std_containers_traits.hpp +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/trim.hpp +398 -0
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/trim_all.hpp +217 -0
- data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/address.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/align.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/aligned_storage.hpp +1 -164
- data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +33 -84
- data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +83 -231
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +33 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/capabilities.hpp +161 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag.hpp +70 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +774 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_alpha.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_arm.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_atomic.hpp +134 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_ppc.hpp +36 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sparc.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sync.hpp +62 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_linux_arm.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_arm.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_msvc_x86.hpp +50 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +57 -36
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +140 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +297 -16
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/link.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lockpool.hpp +30 -76
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_fwd.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_lockfree.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_cas_based.hpp +105 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +161 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_extending_cas_based.hpp +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +876 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +973 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +395 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +802 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +240 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +270 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +514 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +616 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +178 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +824 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_common.hpp +38 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +928 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +91 -32
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_type.hpp +280 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +67 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind.hpp +18 -1
- data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +74 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/arg.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +507 -2
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +214 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/make_adaptable.hpp +187 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/mem_fn_vw.hpp +130 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +29 -36
- data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +304 -0
- data/src/cxx_supportlib/vendor-modified/boost/checked_delete.hpp +13 -65
- data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +9 -13
- data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +10 -4
- data/src/cxx_supportlib/vendor-modified/boost/concept/assert.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/concept/detail/concept_def.hpp +0 -17
- data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +0 -8
- data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +25 -26
- data/src/cxx_supportlib/vendor-modified/boost/config.hpp +9 -12
- data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +17 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +36 -6
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +135 -14
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +41 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +48 -9
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +33 -5
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +36 -16
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +121 -87
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +39 -5
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/hp_acc.hpp +13 -9
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +327 -64
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +44 -10
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +38 -4
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +0 -12
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +36 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +37 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +63 -23
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +44 -13
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +102 -128
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +258 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/cloudabi.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/haiku.hpp +31 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/macos.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/solaris.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/select_compiler_config.hpp +43 -7
- data/src/cxx_supportlib/vendor-modified/boost/config/select_platform_config.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/select_stdlib_config.hpp +28 -8
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +58 -15
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +13 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +129 -14
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +13 -9
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +14 -4
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +13 -8
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/suffix.hpp +159 -85
- data/src/cxx_supportlib/vendor-modified/boost/config/user.hpp +15 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +351 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +371 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +283 -213
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +195 -51
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +840 -625
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +166 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +24 -13
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +289 -181
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +314 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocation_type.hpp +11 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +24 -25
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/auto_link.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_list.hpp +139 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/block_slist.hpp +157 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +74 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +16 -14
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +1 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +62 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +1142 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +61 -48
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +293 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dlmalloc.hpp +103 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +335 -408
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/function_detector.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/hash_table.hpp +383 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator_to_raw_pointer.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +300 -83
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +13 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/min_max.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/minimal_char_traits_header.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +45 -118
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +22 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +288 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +75 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +115 -109
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +157 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +33 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +62 -89
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/placement_new.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +11 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +102 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_resource.hpp +191 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/singleton.hpp +121 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/to_raw_pointer.hpp +33 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +17 -13
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +646 -595
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +44 -184
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +7 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +9 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +23 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +50 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +627 -287
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +608 -657
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +395 -376
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +616 -625
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +179 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +344 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +80 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/deque.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +63 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/global_resource.hpp +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/list.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +63 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +101 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/monotonic_buffer_resource.hpp +180 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +166 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/pool_options.hpp +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +193 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/slist.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/small_vector.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/stable_vector.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/string.hpp +48 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/synchronized_pool_resource.hpp +138 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/unsynchronized_pool_resource.hpp +194 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/vector.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +423 -1019
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator_fwd.hpp +23 -35
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +520 -626
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +416 -407
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +574 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +711 -470
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +314 -145
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +477 -282
- data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +63 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +169 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator_fwd.hpp +73 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +1660 -945
- data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +162 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/checked_delete.hpp +69 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +128 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/enable_if.hpp +128 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/explicit_operator_bool.hpp +154 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/ignore_unused.hpp +70 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/is_same.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test_trait.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/no_exceptions_support.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/noncopyable.hpp +48 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/null_deleter.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +301 -0
- data/src/cxx_supportlib/vendor-modified/boost/{detail/scoped_enum_emulation.hpp → core/scoped_enum.hpp} +19 -164
- data/src/cxx_supportlib/vendor-modified/boost/core/swap.hpp +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/typeinfo.hpp +151 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/underlying_type.hpp +79 -0
- data/src/cxx_supportlib/vendor-modified/boost/cstdint.hpp +132 -95
- data/src/cxx_supportlib/vendor-modified/boost/current_function.hpp +8 -5
- data/src/cxx_supportlib/vendor-modified/boost/date_time/adjust_functors.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/c_local_time_adjustor.hpp +69 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/c_time.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/compiler_config.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/constrained_value.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_clock_device.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_defs.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration_types.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_facet.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_format_simple.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting_limited.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting_locales.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_generator_formatter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_generator_parser.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_generators.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_names_put.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_parsing.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_rules.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_transition_generators.hpp +75 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/filetime_functions.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/format_date_parser.hpp +11 -7
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/conversion.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_calendar.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day_of_year.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_duration_types.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +352 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_serialize.hpp +517 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_ymd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/gregorian.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/gregorian_io.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/gregorian_types.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/date_time/int_adapter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/conversion.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/custom_time_zone.hpp +169 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/date_duration_operators.hpp +115 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/dst_transition_day_rules.hpp +77 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +528 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_time.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_time_io.hpp +184 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_time_types.hpp +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/posix_time_zone.hpp +474 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/tz_database.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time_adjustor.hpp +218 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_timezone_defs.hpp +193 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/locale_config.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/microsec_time_clock.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/parse_format_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/period.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/period_formatter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/period_parser.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +9 -1
- 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.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_config.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_legacy_io.hpp +153 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_system.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/ptime.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +212 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_parsers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_period.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_serialize.hpp +201 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/special_defs.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_formatter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/string_convert.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/string_parse_tree.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/strings_from_facet.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_clock.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_defs.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_formatting_streams.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_resolution_traits.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_counted.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_split.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_base.hpp +99 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_zone_names.hpp +98 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/tz_db_base.hpp +396 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/wrapping_int.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/year_month_day.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/detail/basic_pointerbuf.hpp +139 -0
- data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/detail/endian.hpp +3 -118
- data/src/cxx_supportlib/vendor-modified/boost/detail/fenv.hpp +30 -3
- data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +0 -283
- data/src/cxx_supportlib/vendor-modified/boost/detail/iterator.hpp +9 -477
- data/src/cxx_supportlib/vendor-modified/boost/detail/no_exceptions_support.hpp +12 -82
- data/src/cxx_supportlib/vendor-modified/boost/detail/reference_content.hpp +0 -21
- data/src/cxx_supportlib/vendor-modified/boost/detail/sp_typeinfo.hpp +8 -107
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/clone_current_exception.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +8 -3
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +7 -9
- data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/exception/exception.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +11 -12
- data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function0.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function1.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function10.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function2.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function3.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function4.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function5.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function6.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function7.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function8.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function9.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +6 -24
- data/src/cxx_supportlib/vendor-modified/boost/function/function_fwd.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +35 -30
- data/src/cxx_supportlib/vendor-modified/boost/function/function_typeof.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/gen_function_N.pl +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/detail/float_functions.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/detail/hash_float.hpp +22 -28
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/detail/limits.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/extensions.hpp +5 -66
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/hash.hpp +77 -48
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash/hash_fwd.hpp +3 -7
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/get_pointer.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/integer.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_ct.hpp +102 -0
- data/src/cxx_supportlib/vendor-modified/boost/integer_fwd.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/integer_traits.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/any_hook.hpp +47 -55
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set.hpp +655 -2197
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avl_set_hook.hpp +16 -22
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree.hpp +376 -1605
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +329 -601
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set.hpp +982 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bs_set_hook.hpp +17 -27
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +2101 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/{detail/tree_algorithms.hpp → bstree_algorithms.hpp} +973 -684
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +121 -66
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_slist_algorithms.hpp +30 -28
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/derivation_value_traits.hpp +22 -15
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algo_type.hpp +50 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/algorithm.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +48 -61
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +95 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/assert.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/avltree_node.hpp +19 -24
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +184 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/common_slist_algorithms.hpp +104 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_end.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +69 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +235 -39
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/empty_node_checker.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/equal_to_value.hpp +48 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/exception_disposer.hpp +88 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/function_detector.hpp +8 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/generic_hook.hpp +107 -95
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/get_value_traits.hpp +222 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/has_member_function_callable_with.hpp +279 -296
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +122 -85
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +186 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iiterator.hpp +121 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/is_stateful_value_traits.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +155 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/key_nodeptr_comp.hpp +99 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_iterator.hpp +133 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/list_node.hpp +14 -139
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +295 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/minimal_less_equal_header.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/minimal_pair_header.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +160 -337
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_cloner_disposer.hpp +105 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_holder.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +130 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/parent_from_member.hpp +34 -11
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/pointer_element.hpp +168 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/rbtree_node.hpp +22 -19
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/reverse_iterator.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +50 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/size_holder.hpp +84 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_iterator.hpp +124 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/slist_node.hpp +14 -117
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/std_fwd.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/transform_iterator.hpp +18 -20
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_iterator.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_node.hpp +13 -133
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +89 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/uncast.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +22 -6
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +2006 -1615
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/intrusive_fwd.hpp +450 -229
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +17 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/link_mode.hpp +21 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +253 -282
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list_hook.hpp +17 -20
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +21 -7
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/options.hpp +94 -648
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +374 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/parent_from_member.hpp +10 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +16 -8
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_rebind.hpp +188 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +97 -44
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/priority_compare.hpp +29 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree.hpp +366 -1592
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +297 -639
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/set.hpp +619 -2187
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/set_hook.hpp +16 -22
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sg_set.hpp +661 -2252
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +468 -1493
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +163 -594
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +326 -307
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist_hook.hpp +16 -21
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set.hpp +686 -2238
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree.hpp +425 -1575
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +422 -703
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap.hpp +440 -1122
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +158 -406
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_set.hpp +558 -2257
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/trivial_value_traits.hpp +14 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set.hpp +476 -1611
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/unordered_set_hook.hpp +36 -27
- data/src/cxx_supportlib/vendor-modified/boost/iterator.hpp +3 -42
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +4 -13
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +15 -22
- data/src/cxx_supportlib/vendor-modified/boost/iterator/interoperable.hpp +8 -4
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +59 -64
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +77 -50
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +13 -22
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +318 -212
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +17 -49
- data/src/cxx_supportlib/vendor-modified/boost/iterator/{detail/minimum_category.hpp → minimum_category.hpp} +24 -45
- data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +10 -5
- data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +17 -18
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +29 -2649
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +101 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +498 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +787 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +194 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +197 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +294 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +212 -0
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/c_regex_traits.cpp +24 -11
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cpp_regex_traits.cpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +40 -40
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +14 -17
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_raw_buffer.cpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_traits_defaults.cpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +8 -4
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wc_regex_traits.cpp +24 -11
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +11 -14
- data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +3 -420
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/future.cpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once.cpp +3 -5
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +173 -77
- data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +83 -33
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +42 -12
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +196 -18
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/sign.hpp +52 -8
- data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +111 -13
- data/src/cxx_supportlib/vendor-modified/boost/math/tools/promotion.hpp +40 -8
- data/src/cxx_supportlib/vendor-modified/boost/math/tools/real_cast.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/math/tools/user.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +233 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algorithm.hpp +10 -3
- data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +223 -54
- data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +201 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_begin.hpp +6 -10
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/config_end.hpp +2 -10
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +661 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_traits.hpp +73 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils.hpp +468 -62
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/meta_utils_core.hpp +120 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/move_helpers.hpp +206 -129
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_end.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +1078 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +591 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/workaround.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/iterator.hpp +33 -19
- data/src/cxx_supportlib/vendor-modified/boost/move/make_unique.hpp +237 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/move.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/traits.hpp +30 -95
- data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +871 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/utility.hpp +53 -98
- data/src/cxx_supportlib/vendor-modified/boost/move/utility_core.hpp +317 -0
- data/src/cxx_supportlib/vendor-modified/boost/mpl/O1_size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/O1_size_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/accumulate.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/advance.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/advance_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/alias.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/always.hpp +6 -7
- data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/mpl/apply.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/apply_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/apply_wrap.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/arg.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/arg_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/arithmetic.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/as_sequence.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/mpl/at.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/at_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/O1_size_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/adl_barrier.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/advance_backward.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/advance_forward.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/apply_1st.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/arg_typedef.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/arithmetic_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/arity.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/arity_spec.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/at_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/back_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/basic_bind.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/begin_end_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/clear_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/common_name_wknd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/comparison_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/adl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/arrays.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/bcc.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/bind.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/compiler.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/ctps.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/dependent_nttp.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/dtp.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/eti.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/forwarding.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/gcc.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/gpu.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/has_apply.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/has_xxx.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/integral.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/intel.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/lambda.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/msvc.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/msvc_typename.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/nttp.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/operators.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/overload_resolution.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/pp_counter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/preprocessor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/static_constant.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/ttp.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/typeof.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/use_preprocessed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/config/workaround.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/contains_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/count_args.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/count_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/empty_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/erase_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/erase_key_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/filter_iter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/fold_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/fold_impl_body.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/fold_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/fold_pred.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/front_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/full_lambda.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_apply.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_begin.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_key_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_rebind.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/has_type.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/include_preprocessed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/insert_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/insert_range_impl.hpp +22 -19
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/inserter_algorithm.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/integral_wrapper.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/is_msvc_eti_arg.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/iter_apply.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/iter_fold_if_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/iter_fold_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/iter_push_front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/joint_iter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/lambda_arity_param.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/lambda_no_ctps.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/lambda_spec.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/lambda_support.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/largest_int.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/logical_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/msvc_dtw.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/msvc_eti_base.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/msvc_is_class.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/msvc_never_true.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/msvc_type.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_assert.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_spec.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/nested_type_wknd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/nttp_decl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/numeric_cast_utils.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/numeric_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/order_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/overload_names.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/partition_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/pop_back_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/pop_front_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/add.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/def_params_tail.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/default_params.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/enum.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/ext_params.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/filter_params.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/is_seq.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/params.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/partial_spec_params.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/range.hpp +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/repeat.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/sub.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/token_equal.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/tuple.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/ptr_to_ref.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/push_back_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/push_front_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/range_c/O1_size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/range_c/back.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/range_c/empty.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/range_c/front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/range_c/iterator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/range_c/size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/range_c/tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/reverse_fold_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/reverse_fold_impl_body.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/reverse_iter_fold_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/sequence_wrapper.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/shift_op.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/single_element_iter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/size_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/sort_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/static_cast.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/template_arity.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/template_arity_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/test.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/test/assert.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/test/data.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/test/test_case.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/traits_lambda_spec.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/transform_iter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/type_wrapper.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/unwrap.hpp +7 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/value_wknd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/yes_no.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/back.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/back_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/back_inserter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/base.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/begin.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/begin_end.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/begin_end_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bind.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bind_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitwise.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitxor.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bool.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bool_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/clear.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/clear_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/comparison.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/contains.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/contains_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/copy.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/copy_if.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/count.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/count_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/count_if.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/deque.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/deref.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/distance.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/distance_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/divides.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/empty.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/empty_base.hpp +13 -9
- data/src/cxx_supportlib/vendor-modified/boost/mpl/empty_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/empty_sequence.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/mpl/end.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/equal.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/equal_to.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/erase.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/erase_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/erase_key.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/erase_key_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/eval_if.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/filter_view.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/find.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/find_if.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/fold.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/for_each.hpp +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/mpl/front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/front_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/front_inserter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/greater.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/greater_equal.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/has_key.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/has_key_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/has_xxx.hpp +12 -5
- data/src/cxx_supportlib/vendor-modified/boost/mpl/identity.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/if.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/index_if.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/index_of.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/inherit.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/inherit_linearly.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/insert.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/insert_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/insert_range.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/insert_range_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/inserter.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/int.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/int_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/integral_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/integral_c_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/integral_c_tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/is_placeholder.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/is_sequence.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/iter_fold.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/iter_fold_if.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/iterator_category.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/iterator_range.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/iterator_tags.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/joint_view.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/key_type.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/key_type_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/lambda.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/lambda_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/less.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/less_equal.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/limits/arity.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/limits/list.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/limits/map.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/limits/set.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/limits/unrolling.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/limits/vector.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/O1_size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/begin_end.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/clear.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/empty.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/include_preprocessed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/item.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/iterator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/numbered.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/numbered_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/pop_front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/push_back.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/push_front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/aux_/tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list0.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list0_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list10.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list10_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list20.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list20_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list30.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list30_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list40.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list40_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list50.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list/list50_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/list_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/logical.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/long.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/long_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/lower_bound.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/at_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/begin_end_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/clear_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/contains_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/empty_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/erase_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/erase_key_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/has_key_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/include_preprocessed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/insert_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/insert_range_impl.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/item.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/iterator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/key_type_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/map0.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/numbered.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/size_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/aux_/value_type_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/map0.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/map10.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/map20.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/map30.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/map40.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/map/map50.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/math/fixed_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/math/is_even.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/math/rational_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/max.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/max_element.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/min.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/min_element.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/min_max.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/minus.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/modulus.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/multiplies.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/multiset/aux_/count_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/multiset/aux_/insert_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/multiset/aux_/item.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/multiset/aux_/multiset0.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/multiset/aux_/tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/multiset/multiset0.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/negate.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/next.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/next_prior.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/not.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/not_equal_to.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/numeric_cast.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/mpl/order.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/order_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/pair.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/pair_view.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/partition.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/placeholders.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/plus.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/pop_back.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/pop_back_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/pop_front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/pop_front_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/print.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/prior.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/protect.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/push_back.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/push_back_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/push_front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/push_front_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/quote.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/range_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/remove.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/remove_if.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/replace.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/replace_if.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/reverse.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/reverse_fold.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/reverse_iter_fold.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/same_as.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/sequence_tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/sequence_tag_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/at_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/begin_end_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/clear_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/empty_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/erase_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/erase_key_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/has_key_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/include_preprocessed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/insert_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/insert_range_impl.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/item.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/iterator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/key_type_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/numbered.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/numbered_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/set0.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/size_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/aux_/value_type_impl.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set0.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set0_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set10.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set10_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set20.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set20_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set30.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set30_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set40.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set40_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set50.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set/set50_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/set_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/shift_left.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/shift_right.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/single_view.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/size_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/size_t.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/size_t_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/sizeof.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/sort.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/stable_partition.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/string.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/mpl/switch.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/times.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/transform.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/transform_view.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/unique.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/unpack_args.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/upper_bound.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/value_type.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/value_type_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/O1_size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/at.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/back.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/begin_end.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/clear.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/empty.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/include_preprocessed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/item.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/iterator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/numbered.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/numbered_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/pop_back.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/pop_front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/push_back.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/push_front.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/size.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/tag.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/aux_/vector0.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector0.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector0_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector10.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector10_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector20.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector20_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector30.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector30_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector40.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector40_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector50.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector/vector50_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/vector_c.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/void.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/void_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/mpl/zip_view.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +118 -4
- data/src/cxx_supportlib/vendor-modified/boost/noncopyable.hpp +12 -43
- data/src/cxx_supportlib/vendor-modified/boost/none.hpp +32 -1
- data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +18 -2
- data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +9 -37
- data/src/cxx_supportlib/vendor-modified/boost/optional/bad_optional_access.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +660 -84
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional_fwd.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional_io.hpp +94 -0
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/arg_list.hpp +4 -27
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/cast.hpp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/parenthesized_type.hpp +0 -84
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/set.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tagged_argument.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/parameter/binding.hpp +2 -28
- data/src/cxx_supportlib/vendor-modified/boost/parameter/keyword.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/parameter/name.hpp +5 -15
- data/src/cxx_supportlib/vendor-modified/boost/parameter/preprocessor.hpp +6 -107
- data/src/cxx_supportlib/vendor-modified/boost/parameter/value_type.hpp +2 -28
- data/src/cxx_supportlib/vendor-modified/boost/pool/detail/mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/predef.h +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/alpha.h +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +70 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/blackfin.h +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/convex.h +65 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ia64.h +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/m68k.h +82 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/mips.h +73 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/parisc.h +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ppc.h +72 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/pyramid.h +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/rs6k.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sparc.h +54 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/superh.h +67 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys370.h +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys390.h +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86.h +38 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/32.h +87 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/64.h +50 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/z.h +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler.h +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/borland.h +63 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/clang.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/comeau.h +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/compaq.h +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/diab.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/digitalmars.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/dignus.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/edg.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/ekopath.h +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/gcc.h +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/gcc_xml.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/greenhills.h +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/hp_acc.h +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/iar.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/ibm.h +72 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +65 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/kai.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/llvm.h +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/metaware.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/metrowerks.h +77 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/microtec.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/mpw.h +63 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/palm.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/pgi.h +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/sgi_mipspro.h +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/sunpro.h +76 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/tendra.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/visualc.h +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/watcom.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/_cassert.h +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/_exception.h +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/comp_detected.h +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/endian_compat.h +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/os_detected.h +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/platform_detected.h +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/test.h +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/detail/test_def.h +71 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware.h +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd.h +107 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm.h +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm/versions.h +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/ppc.h +69 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/ppc/versions.h +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86.h +123 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86/versions.h +129 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd.h +87 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/x86_amd/versions.h +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/language.h +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/language/objc.h +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdc.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/language/stdcpp.h +121 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library.h +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/c.h +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/_prefix.h +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/gnu.h +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/uc.h +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/vms.h +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/zos.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std.h +25 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/_prefix.h +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/cxx.h +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/dinkumware.h +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/libcomo.h +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/modena.h +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/msl.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/roguewave.h +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/sgi.h +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stdcpp3.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stlport.h +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/vacpp.h +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +89 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os.h +33 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/aix.h +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/amigaos.h +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/android.h +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/beos.h +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd.h +103 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/bsdi.h +48 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/dragonfly.h +50 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/free.h +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/net.h +84 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/open.h +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/cygwin.h +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/haiku.h +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/hpux.h +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/ios.h +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/irix.h +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/linux.h +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/macos.h +65 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/os400.h +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/qnxnto.h +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/solaris.h +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/unix.h +76 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/vms.h +52 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/windows.h +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/other.h +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +204 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform.h +21 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw.h +69 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_desktop.h +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_phone.h +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_runtime.h +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_store.h +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/version_number.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/dec.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/detail/get_data.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/push_back.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/push_front.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_list.hpp +17 -3
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_seq.hpp +16 -3
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/to_tuple.hpp +12 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +11 -12
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/detail/is_empty.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/empty.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/identity.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty.hpp +17 -4
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty_or_1.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty_variadic.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/library.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_array.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_tuple.hpp +27 -4
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/detail/is_begin_parens.hpp +48 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/is_begin_parens.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/remove_parens.hpp +39 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/for.hpp +19 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/is_empty.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/for_each.hpp +57 -10
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/for_each_i.hpp +58 -10
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/replace.hpp +18 -2
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/rest_n.hpp +19 -3
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/size.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/variadic_seq_to_seq.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/detail/is_single_return.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/eat.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/elem.hpp +12 -2
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/insert.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_back.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_front.hpp +65 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_back.hpp +31 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_front.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/rem.hpp +18 -3
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/remove.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/replace.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/reverse.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_array.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_list.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_seq.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/is_single_return.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/algorithm/equal.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/range/as_literal.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/begin.hpp +5 -13
- data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +35 -15
- data/src/cxx_supportlib/vendor-modified/boost/range/config.hpp +9 -7
- data/src/cxx_supportlib/vendor-modified/boost/range/const_iterator.hpp +39 -30
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/common.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/extract_optional_type.hpp +21 -25
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/has_member_size.hpp +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/implementation_help.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/msvc_has_iterator_workaround.hpp +132 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/difference_type.hpp +20 -2
- data/src/cxx_supportlib/vendor-modified/boost/range/distance.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/empty.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/end.hpp +5 -13
- data/src/cxx_supportlib/vendor-modified/boost/range/functions.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +83 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator.hpp +36 -34
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +481 -251
- data/src/cxx_supportlib/vendor-modified/boost/range/mutable_iterator.hpp +41 -29
- data/src/cxx_supportlib/vendor-modified/boost/range/range_fwd.hpp +63 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/rbegin.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/rend.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/reverse_iterator.hpp +5 -3
- data/src/cxx_supportlib/vendor-modified/boost/range/size.hpp +30 -6
- data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +18 -12
- data/src/cxx_supportlib/vendor-modified/boost/range/value_type.hpp +1 -5
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/abs.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/gcd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/lcm.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/mpl/sign.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/ratio/detail/overflow_helpers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio.hpp +63 -3
- data/src/cxx_supportlib/vendor-modified/boost/ratio/ratio_fwd.hpp +25 -0
- data/src/cxx_supportlib/vendor-modified/boost/ref.hpp +12 -184
- data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +51 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/mfc.hpp +30 -34
- data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/static_mutex.hpp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +11 -5
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +18 -19
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +25 -38
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +211 -14
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +161 -106
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +24 -21
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_traits.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +24 -19
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +46 -20
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +38 -14
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +206 -31
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +122 -16
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_grep.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_match.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_replace.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_search.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +6 -15
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +10 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +23 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +75 -71
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +6 -15
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +43 -41
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +103 -172
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_allocator.hpp +318 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_count_impl.hpp +67 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_traits.hpp +16 -9
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_utility.hpp +106 -70
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +36 -59
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_nt.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/{atomic_count_pthreads.hpp → atomic_count_pt.hpp} +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +62 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_std_atomic.hpp +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/operator_bool.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +116 -10
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_convertible.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +15 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +140 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +16 -15
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +137 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +21 -4
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_disable_deprecated.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_forward.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_if_array.hpp +8 -5
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_nullptr_t.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pool.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_std_atomic.hpp +83 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +30 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_array.hpp +80 -169
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +121 -118
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +54 -12
- data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +4 -19
- data/src/cxx_supportlib/vendor-modified/boost/swap.hpp +11 -6
- data/src/cxx_supportlib/vendor-modified/boost/system/config.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +467 -0
- data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/barrier.hpp +222 -36
- data/src/cxx_supportlib/vendor-modified/boost/thread/caller_context.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/completion_latch.hpp +4 -11
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_adaptor.hpp +209 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_base.hpp +202 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/deque_views.hpp +165 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +223 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +223 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_adaptor.hpp +209 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_base.hpp +202 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_op_status.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/queue_views.hpp +155 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_bounded_queue.hpp +725 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_deque.hpp +327 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_priority_queue.hpp +369 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_queue.hpp +335 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +466 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/deque.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/devector.hpp +102 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/functional.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/list.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory.hpp +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_arg.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/allocator_traits.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/config.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/default_delete.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/pointer_traits.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/scoped_allocator.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/shared_ptr.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/memory/unique_ptr.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/queue.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/tuple.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/csbl/vector.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/cv_status.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +32 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/counter.hpp +17 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/delete.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/function_wrapper.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoke.hpp +373 -120
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/invoker.hpp +762 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/is_convertible.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/memory.hpp +11 -119
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +116 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/nullary_function.hpp +234 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +41 -16
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread_group.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/variadic_footer.hpp +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/variadic_header.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/exceptional_ptr.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/exceptions.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/executor.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +318 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/detail/priority_executor_base.hpp +77 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/detail/scheduled_executor_base.hpp +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor.hpp +148 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/executor_adaptor.hpp +136 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/generic_executor_ref.hpp +213 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/inline_executor.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/loop_executor.hpp +205 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduled_thread_pool.hpp +48 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduler.hpp +271 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduling_adaptor.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor.hpp +216 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor_cont.hpp +170 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/thread_executor.hpp +157 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/work.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/config/inline_namespace.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/exception_list.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v1/exception_list.hpp +70 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v1/inline_namespace.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/inline_namespace.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/parallel/v2/task_region.hpp +316 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/experimental/task_region.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/externally_locked.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +3327 -1705
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/future_error.hpp +98 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/{future_error_code.hpp → futures/future_error_code.hpp} +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/future_status.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/is_future_type.hpp +21 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/launch.hpp +31 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_all.hpp +74 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/futures/wait_for_any.hpp +161 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/latch.hpp +43 -15
- data/src/cxx_supportlib/vendor-modified/boost/thread/lock_types.hpp +45 -41
- data/src/cxx_supportlib/vendor-modified/boost/thread/lockable_adapter.hpp +28 -28
- data/src/cxx_supportlib/vendor-modified/boost/thread/once.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/ostream_buffer.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/poly_lockable.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +101 -56
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +141 -47
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +20 -13
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/once_atomic.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +11 -8
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +39 -10
- data/src/cxx_supportlib/vendor-modified/boost/thread/scoped_thread.hpp +15 -11
- data/src/cxx_supportlib/vendor-modified/boost/thread/shared_mutex.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/sync_bounded_queue.hpp +2 -580
- data/src/cxx_supportlib/vendor-modified/boost/thread/sync_queue.hpp +2 -502
- data/src/cxx_supportlib/vendor-modified/boost/thread/synchronized_value.hpp +78 -11
- data/src/cxx_supportlib/vendor-modified/boost/thread/testable_mutex.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/thread_pool.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/tss.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/thread/user_scheduler.hpp +202 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/thread/v2/thread.hpp +73 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/with_lock_guard.hpp +234 -0
- data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +7 -5
- data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +3 -17
- data/src/cxx_supportlib/vendor-modified/boost/token_iterator.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +14 -5
- data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +1 -24
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_const.hpp +9 -10
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_cv.hpp +2 -9
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_lvalue_reference.hpp +8 -7
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_pointer.hpp +6 -17
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +14 -62
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_rvalue_reference.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_volatile.hpp +2 -9
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/aligned_storage.hpp +134 -9
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/alignment_of.hpp +9 -18
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/{detail/wrap.hpp → alignment_traits.hpp} +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/arithmetic_traits.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/array_traits.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/broken_compiler_spec.hpp +9 -105
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +118 -131
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/conditional.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/config.hpp +5 -60
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_cv.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/decay.hpp +12 -13
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/declval.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/bool_trait_def.hpp +9 -26
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/bool_trait_undef.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_arithmetic_type.hpp +212 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_type_impl.hpp +107 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/composite_member_pointer_type.hpp +113 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/composite_pointer_type.hpp +153 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +72 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_binary_operator.hpp +12 -19
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +12 -19
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +14 -19
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/ice_and.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/ice_eq.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/ice_not.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/ice_or.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +13 -57
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_tester.hpp +13 -218
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +13 -107
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +15 -974
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/mp_defer.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/template_arity_spec.hpp +6 -21
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/extent.hpp +138 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/floating_point_promotion.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/function_traits.hpp +0 -62
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_bit_and.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_bit_and_assign.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_bit_or.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_bit_or_assign.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_bit_xor.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_bit_xor_assign.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_complement.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_dereference.hpp +31 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_divides.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_divides_assign.hpp +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_equal_to.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_greater.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_greater_equal.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_left_shift.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_left_shift_assign.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_less.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_less_equal.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_logical_and.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_logical_not.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_logical_or.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +65 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_modulus.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_modulus_assign.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_multiplies.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_multiplies_assign.hpp +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_negate.hpp +25 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_new_operator.hpp +147 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_not_equal_to.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_assign.hpp +57 -18
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_constructor.hpp +43 -24
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_copy.hpp +52 -23
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_operator.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus.hpp +54 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +66 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_decrement.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_post_increment.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_decrement.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_pre_increment.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_right_shift.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_right_shift_assign.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_assign.hpp +23 -29
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_constructor.hpp +31 -25
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_copy.hpp +34 -36
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_destructor.hpp +21 -22
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_assign.hpp +40 -25
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_trivial_move_constructor.hpp +45 -25
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_unary_minus.hpp +25 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_unary_plus.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_virtual_destructor.hpp +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +86 -33
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_promotion.hpp +181 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +116 -41
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_abstract.hpp +6 -10
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_arithmetic.hpp +3 -32
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_array.hpp +12 -60
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +76 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_base_and_derived.hpp +9 -19
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_base_of.hpp +8 -20
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_base_of_tr1.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_class.hpp +17 -43
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complex.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_compound.hpp +2 -24
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_const.hpp +8 -127
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_constructible.hpp +80 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_convertible.hpp +94 -98
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_assignable.hpp +141 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_copy_constructible.hpp +187 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +64 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_empty.hpp +8 -117
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_enum.hpp +19 -42
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_final.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_float.hpp +2 -9
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_floating_point.hpp +12 -9
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_function.hpp +9 -18
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_fundamental.hpp +2 -21
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_integral.hpp +43 -37
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_lvalue_reference.hpp +8 -76
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_function_pointer.hpp +18 -34
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_object_pointer.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_member_pointer.hpp +8 -79
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +32 -35
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +43 -41
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_object.hpp +7 -32
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pod.hpp +14 -101
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_pointer.hpp +12 -127
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_polymorphic.hpp +122 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_reference.hpp +6 -21
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_rvalue_reference.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_same.hpp +4 -66
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_scalar.hpp +3 -31
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_signed.hpp +83 -60
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_stateless.hpp +8 -23
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_union.hpp +6 -32
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_unsigned.hpp +85 -57
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_virtual_base_of.hpp +105 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_void.hpp +7 -19
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_volatile.hpp +8 -115
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_signed.hpp +35 -57
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_unsigned.hpp +34 -57
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/promote.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/rank.hpp +86 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/reference_traits.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_bounds.hpp +4 -31
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +8 -65
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +13 -57
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +8 -23
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_reference.hpp +5 -21
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +7 -61
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_identity.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +101 -239
- data/src/cxx_supportlib/vendor-modified/boost/typeof/dmc/typeof_impl.hpp +100 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode.hpp +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/encode_decode_params.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/incr_registration_group.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/int_encoding.hpp +118 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/integral_template_param.hpp +80 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +121 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +283 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/pointers_data_members.hpp +38 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions.hpp +50 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_functions_iterate.hpp +135 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +62 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_mem_functions.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/bitset.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/complex.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/deque.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/fstream.hpp +27 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iostream.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/istream.hpp +21 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/iterator.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/list.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/locale.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/map.hpp +23 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/ostream.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/queue.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/set.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/sstream.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/stack.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/streambuf.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/utility.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/valarray.hpp +21 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/vector.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +160 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +149 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/type_encoding.hpp +27 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/type_template_param.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +186 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/unsupported.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector.hpp +166 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector100.hpp +321 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector150.hpp +471 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector200.hpp +621 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/vector50.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/allocate.hpp +42 -34
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/buckets.hpp +108 -56
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/equivalent.hpp +30 -24
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/extract_key.hpp +21 -16
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/table.hpp +45 -33
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/unique.hpp +21 -15
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/util.hpp +8 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +11 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +11 -6
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/unordered_map.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/unordered_set.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +21 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/addressof.hpp +11 -96
- data/src/cxx_supportlib/vendor-modified/boost/utility/base_from_member.hpp +171 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/binary.hpp +708 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/declval.hpp +5 -41
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_iterate.hpp +18 -5
- data/src/cxx_supportlib/vendor-modified/boost/utility/empty_deleter.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/enable_if.hpp +10 -112
- data/src/cxx_supportlib/vendor-modified/boost/utility/explicit_operator_bool.hpp +17 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/identity_type.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/in_place_factory.hpp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +25 -9
- data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref.hpp +536 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/string_ref_fwd.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/swap.hpp +10 -48
- data/src/cxx_supportlib/vendor-modified/boost/utility/typed_in_place_factory.hpp +77 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/value_init.hpp +281 -0
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/visit_each.hpp +0 -2
- data/src/cxx_supportlib/vendor-modified/modp_b64.cpp +3 -1
- data/src/nginx_module/Configuration.c +157 -6
- data/src/nginx_module/Configuration.h +3 -1
- data/src/nginx_module/ContentHandler.c +2 -1
- data/src/nginx_module/ngx_http_passenger_module.c +27 -46
- data/src/nodejs_supportlib/phusion_passenger/log_express.js +1 -1
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/rack_handler.rb +102 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/config_options_list.rb +20 -3
- data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +36 -3
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command.rb +1 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/nginx_engine.rb +3 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/LICENSE.md +1 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core.rb +7 -0
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/api.rb +28 -0
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter/misc.rb +4 -0
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/spec_helper.rb +18 -0
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/transaction.rb +1 -10
- data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/version_data.rb +4 -4
- metadata +609 -62
- data/src/agent/UstRouter/DataStoreId.h +0 -184
- data/src/cxx_supportlib/vendor-copy/libuv/autom4te.cache/output.0 +0 -15374
- data/src/cxx_supportlib/vendor-copy/libuv/autom4te.cache/output.1 +0 -15374
- data/src/cxx_supportlib/vendor-copy/libuv/autom4te.cache/output.2 +0 -15374
- data/src/cxx_supportlib/vendor-copy/libuv/autom4te.cache/requests +0 -568
- data/src/cxx_supportlib/vendor-copy/libuv/autom4te.cache/traces.0 +0 -3104
- data/src/cxx_supportlib/vendor-copy/libuv/autom4te.cache/traces.1 +0 -3104
- data/src/cxx_supportlib/vendor-copy/libuv/autom4te.cache/traces.2 +0 -699
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/base.hpp +0 -585
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas32strong.hpp +0 -885
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas32weak.hpp +0 -947
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas64strong.hpp +0 -443
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc-alpha.hpp +0 -368
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc-armv6plus.hpp +0 -252
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc-cas.hpp +0 -157
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc-ppc.hpp +0 -2850
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc-sparcv9.hpp +0 -1259
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc-x86.hpp +0 -1766
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/generic-cas.hpp +0 -206
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/linux-arm.hpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type-classification.hpp +0 -45
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithms.hpp +0 -84
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/memory_util.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/preprocessor.hpp +0 -232
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/utilities.hpp +0 -1141
- data/src/cxx_supportlib/vendor-modified/boost/detail/is_incrementable.hpp +0 -134
- data/src/cxx_supportlib/vendor-modified/boost/detail/is_xxx.hpp +0 -61
- data/src/cxx_supportlib/vendor-modified/boost/detail/limits.hpp +0 -449
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/attribute_noreturn.hpp +0 -17
- data/src/cxx_supportlib/vendor-modified/boost/indirect_reference.hpp +0 -43
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/clear_on_destructor_base.hpp +0 -36
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/memory_util.hpp +0 -288
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/preprocessor.hpp +0 -52
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/utilities.hpp +0 -858
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/splay_set_hook.hpp +0 -292
- data/src/cxx_supportlib/vendor-modified/boost/libs/atomic/lockpool.cpp +0 -24
- data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/local_free_on_destruction.hpp +0 -40
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/timeconv.inl +0 -151
- data/src/cxx_supportlib/vendor-modified/boost/math/common_factor_ct.hpp +0 -180
- data/src/cxx_supportlib/vendor-modified/boost/math_fwd.hpp +0 -108
- data/src/cxx_supportlib/vendor-modified/boost/parameter.hpp +0 -21
- data/src/cxx_supportlib/vendor-modified/boost/pointee.hpp +0 -74
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/allocate_array_helper.hpp +0 -169
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/array_deleter.hpp +0 -124
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/make_array_helper.hpp +0 -157
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/async_func.hpp +0 -571
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/common_type_imp.hpp +0 -333
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/cv_traits_impl.hpp +0 -97
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/false_result.hpp +0 -28
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/size_t_trait_def.hpp +0 -60
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/size_t_trait_undef.hpp +0 -16
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/type_trait_def.hpp +0 -67
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/type_trait_undef.hpp +0 -19
- data/src/cxx_supportlib/vendor-modified/boost/units/detail/utility.hpp +0 -104
@@ -1,6 +1,6 @@
|
|
1
1
|
/////////////////////////////////////////////////////////////////////////////
|
2
2
|
//
|
3
|
-
// (C) Copyright Ion Gaztanaga 2007-
|
3
|
+
// (C) Copyright Ion Gaztanaga 2007-2014
|
4
4
|
//
|
5
5
|
// Distributed under the Boost Software License, Version 1.0.
|
6
6
|
// (See accompanying file LICENSE_1_0.txt or copy at
|
@@ -10,20 +10,93 @@
|
|
10
10
|
//
|
11
11
|
/////////////////////////////////////////////////////////////////////////////
|
12
12
|
|
13
|
-
#ifndef
|
14
|
-
#define
|
13
|
+
#ifndef BOOST_INTRUSIVE_BSTREE_ALGORITHMS_HPP
|
14
|
+
#define BOOST_INTRUSIVE_BSTREE_ALGORITHMS_HPP
|
15
15
|
|
16
|
+
#include <cstddef>
|
16
17
|
#include <boost/intrusive/detail/config_begin.hpp>
|
17
|
-
#include <boost/intrusive/detail/assert.hpp>
|
18
18
|
#include <boost/intrusive/intrusive_fwd.hpp>
|
19
|
-
#include <
|
20
|
-
#include <boost/intrusive/detail/
|
21
|
-
#include <boost/intrusive/
|
19
|
+
#include <boost/intrusive/detail/bstree_algorithms_base.hpp>
|
20
|
+
#include <boost/intrusive/detail/assert.hpp>
|
21
|
+
#include <boost/intrusive/detail/uncast.hpp>
|
22
|
+
#include <boost/intrusive/detail/math.hpp>
|
23
|
+
#include <boost/intrusive/detail/algo_type.hpp>
|
24
|
+
|
25
|
+
#include <boost/intrusive/detail/minimal_pair_header.hpp>
|
26
|
+
|
27
|
+
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
28
|
+
# pragma once
|
29
|
+
#endif
|
22
30
|
|
23
31
|
namespace boost {
|
24
32
|
namespace intrusive {
|
33
|
+
|
34
|
+
/// @cond
|
35
|
+
|
36
|
+
//! This type is the information that will be filled by insert_unique_check
|
37
|
+
template <class NodePtr>
|
38
|
+
struct insert_commit_data_t
|
39
|
+
{
|
40
|
+
bool link_left;
|
41
|
+
NodePtr node;
|
42
|
+
};
|
43
|
+
|
44
|
+
template <class NodePtr>
|
45
|
+
struct data_for_rebalance_t
|
46
|
+
{
|
47
|
+
NodePtr x;
|
48
|
+
NodePtr x_parent;
|
49
|
+
NodePtr y;
|
50
|
+
};
|
51
|
+
|
25
52
|
namespace detail {
|
26
53
|
|
54
|
+
template<class ValueTraits, class NodePtrCompare, class ExtraChecker>
|
55
|
+
struct bstree_node_checker
|
56
|
+
: public ExtraChecker
|
57
|
+
{
|
58
|
+
typedef ExtraChecker base_checker_t;
|
59
|
+
typedef ValueTraits value_traits;
|
60
|
+
typedef typename value_traits::node_traits node_traits;
|
61
|
+
typedef typename node_traits::const_node_ptr const_node_ptr;
|
62
|
+
|
63
|
+
struct return_type
|
64
|
+
: public base_checker_t::return_type
|
65
|
+
{
|
66
|
+
return_type() : min_key_node_ptr(const_node_ptr()), max_key_node_ptr(const_node_ptr()), node_count(0) {}
|
67
|
+
|
68
|
+
const_node_ptr min_key_node_ptr;
|
69
|
+
const_node_ptr max_key_node_ptr;
|
70
|
+
size_t node_count;
|
71
|
+
};
|
72
|
+
|
73
|
+
bstree_node_checker(const NodePtrCompare& comp, ExtraChecker extra_checker)
|
74
|
+
: base_checker_t(extra_checker), comp_(comp)
|
75
|
+
{}
|
76
|
+
|
77
|
+
void operator () (const const_node_ptr& p,
|
78
|
+
const return_type& check_return_left, const return_type& check_return_right,
|
79
|
+
return_type& check_return)
|
80
|
+
{
|
81
|
+
if (check_return_left.max_key_node_ptr)
|
82
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(!comp_(p, check_return_left.max_key_node_ptr));
|
83
|
+
if (check_return_right.min_key_node_ptr)
|
84
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(!comp_(check_return_right.min_key_node_ptr, p));
|
85
|
+
check_return.min_key_node_ptr = node_traits::get_left(p)? check_return_left.min_key_node_ptr : p;
|
86
|
+
check_return.max_key_node_ptr = node_traits::get_right(p)? check_return_right.max_key_node_ptr : p;
|
87
|
+
check_return.node_count = check_return_left.node_count + check_return_right.node_count + 1;
|
88
|
+
base_checker_t::operator()(p, check_return_left, check_return_right, check_return);
|
89
|
+
}
|
90
|
+
|
91
|
+
const NodePtrCompare comp_;
|
92
|
+
};
|
93
|
+
|
94
|
+
} // namespace detail
|
95
|
+
|
96
|
+
/// @endcond
|
97
|
+
|
98
|
+
|
99
|
+
|
27
100
|
//! This is an implementation of a binary search tree.
|
28
101
|
//! A node in the search tree has references to its children and its parent. This
|
29
102
|
//! is to allow traversal of the whole tree from a given node making the
|
@@ -66,14 +139,13 @@ namespace detail {
|
|
66
139
|
//! | | | | | | | |
|
67
140
|
//! +---------+ +---------+ +---------+ +---------+
|
68
141
|
//!
|
69
|
-
|
70
|
-
//! tree_algorithms is configured with a NodeTraits class, which encapsulates the
|
142
|
+
//! bstree_algorithms is configured with a NodeTraits class, which encapsulates the
|
71
143
|
//! information about the node to be manipulated. NodeTraits must support the
|
72
144
|
//! following interface:
|
73
145
|
//!
|
74
146
|
//! <b>Typedefs</b>:
|
75
147
|
//!
|
76
|
-
//! <tt>node</tt>: The type of the node that forms the
|
148
|
+
//! <tt>node</tt>: The type of the node that forms the binary search tree
|
77
149
|
//!
|
78
150
|
//! <tt>node_ptr</tt>: A pointer to a node
|
79
151
|
//!
|
@@ -93,31 +165,19 @@ namespace detail {
|
|
93
165
|
//!
|
94
166
|
//! <tt>static void set_right(node_ptr n, node_ptr right);</tt>
|
95
167
|
template<class NodeTraits>
|
96
|
-
class
|
168
|
+
class bstree_algorithms : public bstree_algorithms_base<NodeTraits>
|
97
169
|
{
|
98
170
|
public:
|
99
171
|
typedef typename NodeTraits::node node;
|
100
172
|
typedef NodeTraits node_traits;
|
101
173
|
typedef typename NodeTraits::node_ptr node_ptr;
|
102
174
|
typedef typename NodeTraits::const_node_ptr const_node_ptr;
|
103
|
-
|
104
|
-
|
105
|
-
struct insert_commit_data
|
106
|
-
{
|
107
|
-
insert_commit_data()
|
108
|
-
: link_left(false)
|
109
|
-
, node()
|
110
|
-
{}
|
111
|
-
bool link_left;
|
112
|
-
node_ptr node;
|
113
|
-
};
|
114
|
-
|
115
|
-
struct nop_erase_fixup
|
116
|
-
{
|
117
|
-
void operator()(const node_ptr&, const node_ptr&){}
|
118
|
-
};
|
175
|
+
typedef insert_commit_data_t<node_ptr> insert_commit_data;
|
176
|
+
typedef data_for_rebalance_t<node_ptr> data_for_rebalance;
|
119
177
|
|
120
178
|
/// @cond
|
179
|
+
typedef bstree_algorithms<NodeTraits> this_type;
|
180
|
+
typedef bstree_algorithms_base<NodeTraits> base_type;
|
121
181
|
private:
|
122
182
|
template<class Disposer>
|
123
183
|
struct dispose_subtree_disposer
|
@@ -136,22 +196,46 @@ class tree_algorithms
|
|
136
196
|
}
|
137
197
|
}
|
138
198
|
Disposer *disposer_;
|
139
|
-
node_ptr subtree_;
|
199
|
+
const node_ptr subtree_;
|
140
200
|
};
|
141
201
|
|
142
|
-
static node_ptr uncast(const const_node_ptr & ptr)
|
143
|
-
{ return pointer_traits<node_ptr>::const_cast_from(ptr); }
|
144
|
-
|
145
202
|
/// @endcond
|
146
203
|
|
147
204
|
public:
|
205
|
+
//! <b>Requires</b>: 'header' is the header node of a tree.
|
206
|
+
//!
|
207
|
+
//! <b>Effects</b>: Returns the first node of the tree, the header if the tree is empty.
|
208
|
+
//!
|
209
|
+
//! <b>Complexity</b>: Constant time.
|
210
|
+
//!
|
211
|
+
//! <b>Throws</b>: Nothing.
|
148
212
|
static node_ptr begin_node(const const_node_ptr & header)
|
149
213
|
{ return node_traits::get_left(header); }
|
150
214
|
|
215
|
+
//! <b>Requires</b>: 'header' is the header node of a tree.
|
216
|
+
//!
|
217
|
+
//! <b>Effects</b>: Returns the header of the tree.
|
218
|
+
//!
|
219
|
+
//! <b>Complexity</b>: Constant time.
|
220
|
+
//!
|
221
|
+
//! <b>Throws</b>: Nothing.
|
151
222
|
static node_ptr end_node(const const_node_ptr & header)
|
152
|
-
{ return uncast(header); }
|
223
|
+
{ return detail::uncast(header); }
|
224
|
+
|
225
|
+
//! <b>Requires</b>: 'header' is the header node of a tree.
|
226
|
+
//!
|
227
|
+
//! <b>Effects</b>: Returns the root of the tree if any, header otherwise
|
228
|
+
//!
|
229
|
+
//! <b>Complexity</b>: Constant time.
|
230
|
+
//!
|
231
|
+
//! <b>Throws</b>: Nothing.
|
232
|
+
static node_ptr root_node(const const_node_ptr & header)
|
233
|
+
{
|
234
|
+
node_ptr p = node_traits::get_parent(header);
|
235
|
+
return p ? p : detail::uncast(header);
|
236
|
+
}
|
153
237
|
|
154
|
-
//! <b>Requires</b>: 'node' is a node of the tree or
|
238
|
+
//! <b>Requires</b>: 'node' is a node of the tree or a node initialized
|
155
239
|
//! by init(...) or init_node.
|
156
240
|
//!
|
157
241
|
//! <b>Effects</b>: Returns true if the node is initialized by init() or init_node().
|
@@ -162,16 +246,16 @@ class tree_algorithms
|
|
162
246
|
static bool unique(const const_node_ptr & node)
|
163
247
|
{ return !NodeTraits::get_parent(node); }
|
164
248
|
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
249
|
+
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
|
250
|
+
//! <b>Requires</b>: 'node' is a node of the tree or a header node.
|
251
|
+
//!
|
252
|
+
//! <b>Effects</b>: Returns the header of the tree.
|
253
|
+
//!
|
254
|
+
//! <b>Complexity</b>: Logarithmic.
|
255
|
+
//!
|
256
|
+
//! <b>Throws</b>: Nothing.
|
257
|
+
static node_ptr get_header(const const_node_ptr & node);
|
258
|
+
#endif
|
175
259
|
|
176
260
|
//! <b>Requires</b>: node1 and node2 can't be header nodes
|
177
261
|
//! of two trees.
|
@@ -193,7 +277,7 @@ class tree_algorithms
|
|
193
277
|
if(node1 == node2)
|
194
278
|
return;
|
195
279
|
|
196
|
-
node_ptr header1(get_header(node1)), header2(get_header(node2));
|
280
|
+
node_ptr header1(base_type::get_header(node1)), header2(base_type::get_header(node2));
|
197
281
|
swap_nodes(node1, header1, node2, header2);
|
198
282
|
}
|
199
283
|
|
@@ -358,14 +442,12 @@ class tree_algorithms
|
|
358
442
|
//! <b>Note</b>: This function will break container ordering invariants if
|
359
443
|
//! new_node is not equivalent to node_to_be_replaced according to the
|
360
444
|
//! ordering rules. This function is faster than erasing and inserting
|
361
|
-
//! the node, since no rebalancing and comparison is needed.
|
362
|
-
//!
|
363
|
-
//!Experimental function
|
445
|
+
//! the node, since no rebalancing and comparison is needed. Experimental function
|
364
446
|
static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & new_node)
|
365
447
|
{
|
366
448
|
if(node_to_be_replaced == new_node)
|
367
449
|
return;
|
368
|
-
replace_node(node_to_be_replaced, get_header(node_to_be_replaced), new_node);
|
450
|
+
replace_node(node_to_be_replaced, base_type::get_header(node_to_be_replaced), new_node);
|
369
451
|
}
|
370
452
|
|
371
453
|
//! <b>Requires</b>: node_to_be_replaced must be inserted in a tree
|
@@ -381,9 +463,7 @@ class tree_algorithms
|
|
381
463
|
//! <b>Note</b>: This function will break container ordering invariants if
|
382
464
|
//! new_node is not equivalent to node_to_be_replaced according to the
|
383
465
|
//! ordering rules. This function is faster than erasing and inserting
|
384
|
-
//! the node, since no rebalancing or comparison is needed.
|
385
|
-
//!
|
386
|
-
//!Experimental function
|
466
|
+
//! the node, since no rebalancing or comparison is needed. Experimental function
|
387
467
|
static void replace_node(const node_ptr & node_to_be_replaced, const node_ptr & header, const node_ptr & new_node)
|
388
468
|
{
|
389
469
|
if(node_to_be_replaced == new_node)
|
@@ -427,6 +507,7 @@ class tree_algorithms
|
|
427
507
|
}
|
428
508
|
}
|
429
509
|
|
510
|
+
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
|
430
511
|
//! <b>Requires</b>: 'node' is a node from the tree except the header.
|
431
512
|
//!
|
432
513
|
//! <b>Effects</b>: Returns the next node of the tree.
|
@@ -434,22 +515,7 @@ class tree_algorithms
|
|
434
515
|
//! <b>Complexity</b>: Average constant time.
|
435
516
|
//!
|
436
517
|
//! <b>Throws</b>: Nothing.
|
437
|
-
static node_ptr next_node(const node_ptr & node)
|
438
|
-
{
|
439
|
-
node_ptr p_right(NodeTraits::get_right(node));
|
440
|
-
if(p_right){
|
441
|
-
return minimum(p_right);
|
442
|
-
}
|
443
|
-
else {
|
444
|
-
node_ptr p(node);
|
445
|
-
node_ptr x = NodeTraits::get_parent(p);
|
446
|
-
while(p == NodeTraits::get_right(x)){
|
447
|
-
p = x;
|
448
|
-
x = NodeTraits::get_parent(x);
|
449
|
-
}
|
450
|
-
return NodeTraits::get_right(p) != x ? x : uncast(p);
|
451
|
-
}
|
452
|
-
}
|
518
|
+
static node_ptr next_node(const node_ptr & node);
|
453
519
|
|
454
520
|
//! <b>Requires</b>: 'node' is a node from the tree except the leftmost node.
|
455
521
|
//!
|
@@ -458,25 +524,7 @@ class tree_algorithms
|
|
458
524
|
//! <b>Complexity</b>: Average constant time.
|
459
525
|
//!
|
460
526
|
//! <b>Throws</b>: Nothing.
|
461
|
-
static node_ptr prev_node(const node_ptr & node)
|
462
|
-
{
|
463
|
-
if(is_header(node)){
|
464
|
-
return NodeTraits::get_right(node);
|
465
|
-
//return maximum(NodeTraits::get_parent(node));
|
466
|
-
}
|
467
|
-
else if(NodeTraits::get_left(node)){
|
468
|
-
return maximum(NodeTraits::get_left(node));
|
469
|
-
}
|
470
|
-
else {
|
471
|
-
node_ptr p(node);
|
472
|
-
node_ptr x = NodeTraits::get_parent(p);
|
473
|
-
while(p == NodeTraits::get_left(x)){
|
474
|
-
p = x;
|
475
|
-
x = NodeTraits::get_parent(x);
|
476
|
-
}
|
477
|
-
return x;
|
478
|
-
}
|
479
|
-
}
|
527
|
+
static node_ptr prev_node(const node_ptr & node);
|
480
528
|
|
481
529
|
//! <b>Requires</b>: 'node' is a node of a tree but not the header.
|
482
530
|
//!
|
@@ -485,15 +533,7 @@ class tree_algorithms
|
|
485
533
|
//! <b>Complexity</b>: Logarithmic to the size of the subtree.
|
486
534
|
//!
|
487
535
|
//! <b>Throws</b>: Nothing.
|
488
|
-
static node_ptr minimum
|
489
|
-
{
|
490
|
-
for(node_ptr p_left = NodeTraits::get_left(node)
|
491
|
-
;p_left
|
492
|
-
;p_left = NodeTraits::get_left(node)){
|
493
|
-
node = p_left;
|
494
|
-
}
|
495
|
-
return node;
|
496
|
-
}
|
536
|
+
static node_ptr minimum(node_ptr node);
|
497
537
|
|
498
538
|
//! <b>Requires</b>: 'node' is a node of a tree but not the header.
|
499
539
|
//!
|
@@ -502,15 +542,8 @@ class tree_algorithms
|
|
502
542
|
//! <b>Complexity</b>: Logarithmic to the size of the subtree.
|
503
543
|
//!
|
504
544
|
//! <b>Throws</b>: Nothing.
|
505
|
-
static node_ptr maximum(node_ptr node)
|
506
|
-
|
507
|
-
for(node_ptr p_right = NodeTraits::get_right(node)
|
508
|
-
;p_right
|
509
|
-
;p_right = NodeTraits::get_right(node)){
|
510
|
-
node = p_right;
|
511
|
-
}
|
512
|
-
return node;
|
513
|
-
}
|
545
|
+
static node_ptr maximum(node_ptr node);
|
546
|
+
#endif
|
514
547
|
|
515
548
|
//! <b>Requires</b>: 'node' must not be part of any tree.
|
516
549
|
//!
|
@@ -602,7 +635,7 @@ class tree_algorithms
|
|
602
635
|
|
603
636
|
if (leftmost_right){
|
604
637
|
NodeTraits::set_parent(leftmost_right, leftmost_parent);
|
605
|
-
NodeTraits::set_left(header,
|
638
|
+
NodeTraits::set_left(header, base_type::minimum(leftmost_right));
|
606
639
|
|
607
640
|
if (is_root)
|
608
641
|
NodeTraits::set_parent(header, leftmost_right);
|
@@ -621,42 +654,6 @@ class tree_algorithms
|
|
621
654
|
return leftmost;
|
622
655
|
}
|
623
656
|
|
624
|
-
//! <b>Requires</b>: node is a node of the tree but it's not the header.
|
625
|
-
//!
|
626
|
-
//! <b>Effects</b>: Returns the number of nodes of the subtree.
|
627
|
-
//!
|
628
|
-
//! <b>Complexity</b>: Linear time.
|
629
|
-
//!
|
630
|
-
//! <b>Throws</b>: Nothing.
|
631
|
-
static std::size_t count(const const_node_ptr & subtree)
|
632
|
-
{
|
633
|
-
if(!subtree) return 0;
|
634
|
-
std::size_t count = 0;
|
635
|
-
node_ptr p = minimum(uncast(subtree));
|
636
|
-
bool continue_looping = true;
|
637
|
-
while(continue_looping){
|
638
|
-
++count;
|
639
|
-
node_ptr p_right(NodeTraits::get_right(p));
|
640
|
-
if(p_right){
|
641
|
-
p = minimum(p_right);
|
642
|
-
}
|
643
|
-
else {
|
644
|
-
for(;;){
|
645
|
-
node_ptr q;
|
646
|
-
if (p == subtree){
|
647
|
-
continue_looping = false;
|
648
|
-
break;
|
649
|
-
}
|
650
|
-
q = p;
|
651
|
-
p = NodeTraits::get_parent(p);
|
652
|
-
if (NodeTraits::get_left(p) == q)
|
653
|
-
break;
|
654
|
-
}
|
655
|
-
}
|
656
|
-
}
|
657
|
-
return count;
|
658
|
-
}
|
659
|
-
|
660
657
|
//! <b>Requires</b>: node is a node of the tree but it's not the header.
|
661
658
|
//!
|
662
659
|
//! <b>Effects</b>: Returns the number of nodes of the subtree.
|
@@ -669,7 +666,7 @@ class tree_algorithms
|
|
669
666
|
node_ptr beg(begin_node(header));
|
670
667
|
node_ptr end(end_node(header));
|
671
668
|
std::size_t i = 0;
|
672
|
-
for(;beg != end; beg = next_node(beg)) ++i;
|
669
|
+
for(;beg != end; beg = base_type::next_node(beg)) ++i;
|
673
670
|
return i;
|
674
671
|
}
|
675
672
|
|
@@ -722,29 +719,23 @@ class tree_algorithms
|
|
722
719
|
}
|
723
720
|
}
|
724
721
|
|
725
|
-
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
//and rightmost's parent
|
736
|
-
)){
|
737
|
-
return true;
|
738
|
-
}
|
739
|
-
return false;
|
740
|
-
}
|
722
|
+
#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
|
723
|
+
//! <b>Requires</b>: p is a node of a tree.
|
724
|
+
//!
|
725
|
+
//! <b>Effects</b>: Returns true if p is the header of the tree.
|
726
|
+
//!
|
727
|
+
//! <b>Complexity</b>: Constant.
|
728
|
+
//!
|
729
|
+
//! <b>Throws</b>: Nothing.
|
730
|
+
static bool is_header(const const_node_ptr & p);
|
731
|
+
#endif
|
741
732
|
|
742
733
|
//! <b>Requires</b>: "header" must be the header node of a tree.
|
743
734
|
//! KeyNodePtrCompare is a function object that induces a strict weak
|
744
735
|
//! ordering compatible with the strict weak ordering used to create the
|
745
736
|
//! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
|
746
737
|
//!
|
747
|
-
//! <b>Effects</b>: Returns
|
738
|
+
//! <b>Effects</b>: Returns a node_ptr to the first element that is equivalent to
|
748
739
|
//! "key" according to "comp" or "header" if that element does not exist.
|
749
740
|
//!
|
750
741
|
//! <b>Complexity</b>: Logarithmic.
|
@@ -754,7 +745,7 @@ class tree_algorithms
|
|
754
745
|
static node_ptr find
|
755
746
|
(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
|
756
747
|
{
|
757
|
-
node_ptr end = uncast(header);
|
748
|
+
node_ptr end = detail::uncast(header);
|
758
749
|
node_ptr y = lower_bound(header, key, comp);
|
759
750
|
return (y == end || comp(key, y)) ? end : y;
|
760
751
|
}
|
@@ -764,7 +755,7 @@ class tree_algorithms
|
|
764
755
|
//! ordering compatible with the strict weak ordering used to create the
|
765
756
|
//! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
|
766
757
|
//! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
|
767
|
-
//! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be
|
758
|
+
//! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be true.
|
768
759
|
//!
|
769
760
|
//! <b>Effects</b>: Returns an a pair with the following criteria:
|
770
761
|
//!
|
@@ -778,6 +769,8 @@ class tree_algorithms
|
|
778
769
|
//!
|
779
770
|
//! <b>Note</b>: This function can be more efficient than calling upper_bound
|
780
771
|
//! and lower_bound for lower_key and upper_key.
|
772
|
+
//!
|
773
|
+
//! <b>Note</b>: Experimental function, the interface might change.
|
781
774
|
template< class KeyType, class KeyNodePtrCompare>
|
782
775
|
static std::pair<node_ptr, node_ptr> bounded_range
|
783
776
|
( const const_node_ptr & header
|
@@ -787,7 +780,7 @@ class tree_algorithms
|
|
787
780
|
, bool left_closed
|
788
781
|
, bool right_closed)
|
789
782
|
{
|
790
|
-
node_ptr y = uncast(header);
|
783
|
+
node_ptr y = detail::uncast(header);
|
791
784
|
node_ptr x = NodeTraits::get_parent(header);
|
792
785
|
|
793
786
|
while(x){
|
@@ -801,12 +794,11 @@ class tree_algorithms
|
|
801
794
|
//If the upper_key is less than x, the target
|
802
795
|
//range is on the left part
|
803
796
|
else if(comp(upper_key, x)){
|
804
|
-
//y > upper_key
|
805
797
|
y = x;
|
806
798
|
x = NodeTraits::get_left(x);
|
807
799
|
}
|
808
800
|
else{
|
809
|
-
//x is inside the bounded range(
|
801
|
+
//x is inside the bounded range(lower_key <= x <= upper_key),
|
810
802
|
//so we must split lower and upper searches
|
811
803
|
//
|
812
804
|
//Sanity check: if lower_key and upper_key are equal, then both left_closed and right_closed can't be false
|
@@ -835,6 +827,30 @@ class tree_algorithms
|
|
835
827
|
return std::pair<node_ptr,node_ptr> (y, y);
|
836
828
|
}
|
837
829
|
|
830
|
+
//! <b>Requires</b>: "header" must be the header node of a tree.
|
831
|
+
//! KeyNodePtrCompare is a function object that induces a strict weak
|
832
|
+
//! ordering compatible with the strict weak ordering used to create the
|
833
|
+
//! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
|
834
|
+
//!
|
835
|
+
//! <b>Effects</b>: Returns the number of elements with a key equivalent to "key"
|
836
|
+
//! according to "comp".
|
837
|
+
//!
|
838
|
+
//! <b>Complexity</b>: Logarithmic.
|
839
|
+
//!
|
840
|
+
//! <b>Throws</b>: If "comp" throws.
|
841
|
+
template<class KeyType, class KeyNodePtrCompare>
|
842
|
+
static std::size_t count
|
843
|
+
(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
|
844
|
+
{
|
845
|
+
std::pair<node_ptr, node_ptr> ret = equal_range(header, key, comp);
|
846
|
+
std::size_t n = 0;
|
847
|
+
while(ret.first != ret.second){
|
848
|
+
++n;
|
849
|
+
ret.first = base_type::next_node(ret.first);
|
850
|
+
}
|
851
|
+
return n;
|
852
|
+
}
|
853
|
+
|
838
854
|
//! <b>Requires</b>: "header" must be the header node of a tree.
|
839
855
|
//! KeyNodePtrCompare is a function object that induces a strict weak
|
840
856
|
//! ordering compatible with the strict weak ordering used to create the
|
@@ -860,7 +876,32 @@ class tree_algorithms
|
|
860
876
|
//! ordering compatible with the strict weak ordering used to create the
|
861
877
|
//! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
|
862
878
|
//!
|
863
|
-
//! <b>Effects</b>: Returns an
|
879
|
+
//! <b>Effects</b>: Returns an a pair of node_ptr delimiting a range containing
|
880
|
+
//! the first element that is equivalent to "key" according to "comp" or an
|
881
|
+
//! empty range that indicates the position where that element would be
|
882
|
+
//! if there are no equivalent elements.
|
883
|
+
//!
|
884
|
+
//! <b>Complexity</b>: Logarithmic.
|
885
|
+
//!
|
886
|
+
//! <b>Throws</b>: If "comp" throws.
|
887
|
+
template<class KeyType, class KeyNodePtrCompare>
|
888
|
+
static std::pair<node_ptr, node_ptr> lower_bound_range
|
889
|
+
(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
|
890
|
+
{
|
891
|
+
node_ptr const lb(lower_bound(header, key, comp));
|
892
|
+
std::pair<node_ptr, node_ptr> ret_ii(lb, lb);
|
893
|
+
if(lb != header && !comp(key, lb)){
|
894
|
+
ret_ii.second = base_type::next_node(ret_ii.second);
|
895
|
+
}
|
896
|
+
return ret_ii;
|
897
|
+
}
|
898
|
+
|
899
|
+
//! <b>Requires</b>: "header" must be the header node of a tree.
|
900
|
+
//! KeyNodePtrCompare is a function object that induces a strict weak
|
901
|
+
//! ordering compatible with the strict weak ordering used to create the
|
902
|
+
//! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
|
903
|
+
//!
|
904
|
+
//! <b>Effects</b>: Returns a node_ptr to the first element that is
|
864
905
|
//! not less than "key" according to "comp" or "header" if that element does
|
865
906
|
//! not exist.
|
866
907
|
//!
|
@@ -871,7 +912,7 @@ class tree_algorithms
|
|
871
912
|
static node_ptr lower_bound
|
872
913
|
(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
|
873
914
|
{
|
874
|
-
return lower_bound_loop(NodeTraits::get_parent(header), uncast(header), key, comp);
|
915
|
+
return lower_bound_loop(NodeTraits::get_parent(header), detail::uncast(header), key, comp);
|
875
916
|
}
|
876
917
|
|
877
918
|
//! <b>Requires</b>: "header" must be the header node of a tree.
|
@@ -879,7 +920,7 @@ class tree_algorithms
|
|
879
920
|
//! ordering compatible with the strict weak ordering used to create the
|
880
921
|
//! the tree. KeyNodePtrCompare can compare KeyType with tree's node_ptrs.
|
881
922
|
//!
|
882
|
-
//! <b>Effects</b>: Returns
|
923
|
+
//! <b>Effects</b>: Returns a node_ptr to the first element that is greater
|
883
924
|
//! than "key" according to "comp" or "header" if that element does not exist.
|
884
925
|
//!
|
885
926
|
//! <b>Complexity</b>: Logarithmic.
|
@@ -889,7 +930,7 @@ class tree_algorithms
|
|
889
930
|
static node_ptr upper_bound
|
890
931
|
(const const_node_ptr & header, const KeyType &key, KeyNodePtrCompare comp)
|
891
932
|
{
|
892
|
-
return upper_bound_loop(NodeTraits::get_parent(header), uncast(header), key, comp);
|
933
|
+
return upper_bound_loop(NodeTraits::get_parent(header), detail::uncast(header), key, comp);
|
893
934
|
}
|
894
935
|
|
895
936
|
//! <b>Requires</b>: "header" must be the header node of a tree.
|
@@ -913,32 +954,6 @@ class tree_algorithms
|
|
913
954
|
(const node_ptr & header, const node_ptr & new_value, const insert_commit_data &commit_data)
|
914
955
|
{ return insert_commit(header, new_value, commit_data); }
|
915
956
|
|
916
|
-
static void insert_commit
|
917
|
-
(const node_ptr & header, const node_ptr & new_node, const insert_commit_data &commit_data)
|
918
|
-
{
|
919
|
-
//Check if commit_data has not been initialized by a insert_unique_check call.
|
920
|
-
BOOST_INTRUSIVE_INVARIANT_ASSERT(commit_data.node != node_ptr());
|
921
|
-
node_ptr parent_node(commit_data.node);
|
922
|
-
if(parent_node == header){
|
923
|
-
NodeTraits::set_parent(header, new_node);
|
924
|
-
NodeTraits::set_right(header, new_node);
|
925
|
-
NodeTraits::set_left(header, new_node);
|
926
|
-
}
|
927
|
-
else if(commit_data.link_left){
|
928
|
-
NodeTraits::set_left(parent_node, new_node);
|
929
|
-
if(parent_node == NodeTraits::get_left(header))
|
930
|
-
NodeTraits::set_left(header, new_node);
|
931
|
-
}
|
932
|
-
else{
|
933
|
-
NodeTraits::set_right(parent_node, new_node);
|
934
|
-
if(parent_node == NodeTraits::get_right(header))
|
935
|
-
NodeTraits::set_right(header, new_node);
|
936
|
-
}
|
937
|
-
NodeTraits::set_parent(new_node, parent_node);
|
938
|
-
NodeTraits::set_right(new_node, node_ptr());
|
939
|
-
NodeTraits::set_left(new_node, node_ptr());
|
940
|
-
}
|
941
|
-
|
942
957
|
//! <b>Requires</b>: "header" must be the header node of a tree.
|
943
958
|
//! KeyNodePtrCompare is a function object that induces a strict weak
|
944
959
|
//! ordering compatible with the strict weak ordering used to create the
|
@@ -975,11 +990,15 @@ class tree_algorithms
|
|
975
990
|
//! if no more objects are inserted or erased from the set.
|
976
991
|
template<class KeyType, class KeyNodePtrCompare>
|
977
992
|
static std::pair<node_ptr, bool> insert_unique_check
|
978
|
-
(const const_node_ptr & header,
|
979
|
-
,KeyNodePtrCompare comp, insert_commit_data &commit_data
|
993
|
+
(const const_node_ptr & header, const KeyType &key
|
994
|
+
,KeyNodePtrCompare comp, insert_commit_data &commit_data
|
995
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
996
|
+
, std::size_t *pdepth = 0
|
997
|
+
#endif
|
998
|
+
)
|
980
999
|
{
|
981
1000
|
std::size_t depth = 0;
|
982
|
-
node_ptr h(uncast(header));
|
1001
|
+
node_ptr h(detail::uncast(header));
|
983
1002
|
node_ptr y(h);
|
984
1003
|
node_ptr x(NodeTraits::get_parent(y));
|
985
1004
|
node_ptr prev = node_ptr();
|
@@ -999,28 +1018,67 @@ class tree_algorithms
|
|
999
1018
|
//Since we've found the upper bound there is no other value with the same key if:
|
1000
1019
|
// - There is no previous node
|
1001
1020
|
// - The previous node is less than the key
|
1002
|
-
|
1021
|
+
const bool not_present = !prev || comp(prev, key);
|
1022
|
+
if(not_present){
|
1003
1023
|
commit_data.link_left = left_child;
|
1004
1024
|
commit_data.node = y;
|
1005
|
-
return std::pair<node_ptr, bool>(node_ptr(), true);
|
1006
|
-
}
|
1007
|
-
//If the previous value was not less than key, it means that it's equal
|
1008
|
-
//(because we've checked the upper bound)
|
1009
|
-
else{
|
1010
|
-
return std::pair<node_ptr, bool>(prev, false);
|
1011
1025
|
}
|
1026
|
+
return std::pair<node_ptr, bool>(prev, not_present);
|
1012
1027
|
}
|
1013
1028
|
|
1029
|
+
//! <b>Requires</b>: "header" must be the header node of a tree.
|
1030
|
+
//! KeyNodePtrCompare is a function object that induces a strict weak
|
1031
|
+
//! ordering compatible with the strict weak ordering used to create the
|
1032
|
+
//! the tree. NodePtrCompare compares KeyType with a node_ptr.
|
1033
|
+
//! "hint" is node from the "header"'s tree.
|
1034
|
+
//!
|
1035
|
+
//! <b>Effects</b>: Checks if there is an equivalent node to "key" in the
|
1036
|
+
//! tree according to "comp" using "hint" as a hint to where it should be
|
1037
|
+
//! inserted and obtains the needed information to realize
|
1038
|
+
//! a constant-time node insertion if there is no equivalent node.
|
1039
|
+
//! If "hint" is the upper_bound the function has constant time
|
1040
|
+
//! complexity (two comparisons in the worst case).
|
1041
|
+
//!
|
1042
|
+
//! <b>Returns</b>: If there is an equivalent value
|
1043
|
+
//! returns a pair containing a node_ptr to the already present node
|
1044
|
+
//! and false. If there is not equivalent key can be inserted returns true
|
1045
|
+
//! in the returned pair's boolean and fills "commit_data" that is meant to
|
1046
|
+
//! be used with the "insert_commit" function to achieve a constant-time
|
1047
|
+
//! insertion function.
|
1048
|
+
//!
|
1049
|
+
//! <b>Complexity</b>: Average complexity is at most logarithmic, but it is
|
1050
|
+
//! amortized constant time if new_node should be inserted immediately before "hint".
|
1051
|
+
//!
|
1052
|
+
//! <b>Throws</b>: If "comp" throws.
|
1053
|
+
//!
|
1054
|
+
//! <b>Notes</b>: This function is used to improve performance when constructing
|
1055
|
+
//! a node is expensive and the user does not want to have two equivalent nodes
|
1056
|
+
//! in the tree: if there is an equivalent value
|
1057
|
+
//! the constructed object must be discarded. Many times, the part of the
|
1058
|
+
//! node that is used to impose the order is much cheaper to construct
|
1059
|
+
//! than the node and this function offers the possibility to use that part
|
1060
|
+
//! to check if the insertion will be successful.
|
1061
|
+
//!
|
1062
|
+
//! If the check is successful, the user can construct the node and use
|
1063
|
+
//! "insert_commit" to insert the node in constant-time. This gives a total
|
1064
|
+
//! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
|
1065
|
+
//!
|
1066
|
+
//! "commit_data" remains valid for a subsequent "insert_unique_commit" only
|
1067
|
+
//! if no more objects are inserted or erased from the set.
|
1014
1068
|
template<class KeyType, class KeyNodePtrCompare>
|
1015
1069
|
static std::pair<node_ptr, bool> insert_unique_check
|
1016
1070
|
(const const_node_ptr & header, const node_ptr &hint, const KeyType &key
|
1017
|
-
,KeyNodePtrCompare comp, insert_commit_data &commit_data
|
1071
|
+
,KeyNodePtrCompare comp, insert_commit_data &commit_data
|
1072
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1073
|
+
, std::size_t *pdepth = 0
|
1074
|
+
#endif
|
1075
|
+
)
|
1018
1076
|
{
|
1019
1077
|
//hint must be bigger than the key
|
1020
1078
|
if(hint == header || comp(key, hint)){
|
1021
1079
|
node_ptr prev(hint);
|
1022
1080
|
//Previous value should be less than the key
|
1023
|
-
if(hint == begin_node(header) || comp((prev = prev_node(hint)), key)){
|
1081
|
+
if(hint == begin_node(header) || comp((prev = base_type::prev_node(hint)), key)){
|
1024
1082
|
commit_data.link_left = unique(header) || !NodeTraits::get_left(hint);
|
1025
1083
|
commit_data.node = commit_data.link_left ? hint : prev;
|
1026
1084
|
if(pdepth){
|
@@ -1033,44 +1091,27 @@ class tree_algorithms
|
|
1033
1091
|
return insert_unique_check(header, key, comp, commit_data, pdepth);
|
1034
1092
|
}
|
1035
1093
|
|
1036
|
-
|
1037
|
-
|
1038
|
-
|
1039
|
-
|
1040
|
-
|
1041
|
-
|
1042
|
-
|
1043
|
-
|
1044
|
-
|
1045
|
-
|
1046
|
-
|
1047
|
-
|
1048
|
-
|
1049
|
-
|
1050
|
-
}
|
1051
|
-
}
|
1052
|
-
else{
|
1053
|
-
insert_equal_upper_bound_check(header, new_node, comp, commit_data, pdepth);
|
1054
|
-
}
|
1055
|
-
}
|
1056
|
-
else{
|
1057
|
-
insert_equal_lower_bound_check(header, new_node, comp, commit_data, pdepth);
|
1058
|
-
}
|
1059
|
-
}
|
1060
|
-
|
1061
|
-
template<class NodePtrCompare>
|
1062
|
-
static void insert_equal_upper_bound_check
|
1063
|
-
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
|
1064
|
-
{ insert_equal_check_impl(true, h, new_node, comp, commit_data, pdepth); }
|
1065
|
-
|
1066
|
-
template<class NodePtrCompare>
|
1067
|
-
static void insert_equal_lower_bound_check
|
1068
|
-
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
|
1069
|
-
{ insert_equal_check_impl(false, h, new_node, comp, commit_data, pdepth); }
|
1070
|
-
|
1094
|
+
//! <b>Requires</b>: "header" must be the header node of a tree.
|
1095
|
+
//! NodePtrCompare is a function object that induces a strict weak
|
1096
|
+
//! ordering compatible with the strict weak ordering used to create the
|
1097
|
+
//! the tree. NodePtrCompare compares two node_ptrs. "hint" is node from
|
1098
|
+
//! the "header"'s tree.
|
1099
|
+
//!
|
1100
|
+
//! <b>Effects</b>: Inserts new_node into the tree, using "hint" as a hint to
|
1101
|
+
//! where it will be inserted. If "hint" is the upper_bound
|
1102
|
+
//! the insertion takes constant time (two comparisons in the worst case).
|
1103
|
+
//!
|
1104
|
+
//! <b>Complexity</b>: Logarithmic in general, but it is amortized
|
1105
|
+
//! constant time if new_node is inserted immediately before "hint".
|
1106
|
+
//!
|
1107
|
+
//! <b>Throws</b>: If "comp" throws.
|
1071
1108
|
template<class NodePtrCompare>
|
1072
1109
|
static node_ptr insert_equal
|
1073
|
-
(const node_ptr & h, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp
|
1110
|
+
(const node_ptr & h, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp
|
1111
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1112
|
+
, std::size_t *pdepth = 0
|
1113
|
+
#endif
|
1114
|
+
)
|
1074
1115
|
{
|
1075
1116
|
insert_commit_data commit_data;
|
1076
1117
|
insert_equal_check(h, hint, new_node, comp, commit_data, pdepth);
|
@@ -1078,9 +1119,25 @@ class tree_algorithms
|
|
1078
1119
|
return new_node;
|
1079
1120
|
}
|
1080
1121
|
|
1122
|
+
//! <b>Requires</b>: "h" must be the header node of a tree.
|
1123
|
+
//! NodePtrCompare is a function object that induces a strict weak
|
1124
|
+
//! ordering compatible with the strict weak ordering used to create the
|
1125
|
+
//! the tree. NodePtrCompare compares two node_ptrs.
|
1126
|
+
//!
|
1127
|
+
//! <b>Effects</b>: Inserts new_node into the tree before the upper bound
|
1128
|
+
//! according to "comp".
|
1129
|
+
//!
|
1130
|
+
//! <b>Complexity</b>: Average complexity for insert element is at
|
1131
|
+
//! most logarithmic.
|
1132
|
+
//!
|
1133
|
+
//! <b>Throws</b>: If "comp" throws.
|
1081
1134
|
template<class NodePtrCompare>
|
1082
1135
|
static node_ptr insert_equal_upper_bound
|
1083
|
-
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp
|
1136
|
+
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp
|
1137
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1138
|
+
, std::size_t *pdepth = 0
|
1139
|
+
#endif
|
1140
|
+
)
|
1084
1141
|
{
|
1085
1142
|
insert_commit_data commit_data;
|
1086
1143
|
insert_equal_upper_bound_check(h, new_node, comp, commit_data, pdepth);
|
@@ -1088,9 +1145,25 @@ class tree_algorithms
|
|
1088
1145
|
return new_node;
|
1089
1146
|
}
|
1090
1147
|
|
1148
|
+
//! <b>Requires</b>: "h" must be the header node of a tree.
|
1149
|
+
//! NodePtrCompare is a function object that induces a strict weak
|
1150
|
+
//! ordering compatible with the strict weak ordering used to create the
|
1151
|
+
//! the tree. NodePtrCompare compares two node_ptrs.
|
1152
|
+
//!
|
1153
|
+
//! <b>Effects</b>: Inserts new_node into the tree before the lower bound
|
1154
|
+
//! according to "comp".
|
1155
|
+
//!
|
1156
|
+
//! <b>Complexity</b>: Average complexity for insert element is at
|
1157
|
+
//! most logarithmic.
|
1158
|
+
//!
|
1159
|
+
//! <b>Throws</b>: If "comp" throws.
|
1091
1160
|
template<class NodePtrCompare>
|
1092
1161
|
static node_ptr insert_equal_lower_bound
|
1093
|
-
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp
|
1162
|
+
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp
|
1163
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1164
|
+
, std::size_t *pdepth = 0
|
1165
|
+
#endif
|
1166
|
+
)
|
1094
1167
|
{
|
1095
1168
|
insert_commit_data commit_data;
|
1096
1169
|
insert_equal_lower_bound_check(h, new_node, comp, commit_data, pdepth);
|
@@ -1098,8 +1171,26 @@ class tree_algorithms
|
|
1098
1171
|
return new_node;
|
1099
1172
|
}
|
1100
1173
|
|
1174
|
+
//! <b>Requires</b>: "header" must be the header node of a tree.
|
1175
|
+
//! "pos" must be a valid iterator or header (end) node.
|
1176
|
+
//! "pos" must be an iterator pointing to the successor to "new_node"
|
1177
|
+
//! once inserted according to the order of already inserted nodes. This function does not
|
1178
|
+
//! check "pos" and this precondition must be guaranteed by the caller.
|
1179
|
+
//!
|
1180
|
+
//! <b>Effects</b>: Inserts new_node into the tree before "pos".
|
1181
|
+
//!
|
1182
|
+
//! <b>Complexity</b>: Constant-time.
|
1183
|
+
//!
|
1184
|
+
//! <b>Throws</b>: Nothing.
|
1185
|
+
//!
|
1186
|
+
//! <b>Note</b>: If "pos" is not the successor of the newly inserted "new_node"
|
1187
|
+
//! tree invariants might be broken.
|
1101
1188
|
static node_ptr insert_before
|
1102
|
-
(const node_ptr & header, const node_ptr & pos, const node_ptr & new_node
|
1189
|
+
(const node_ptr & header, const node_ptr & pos, const node_ptr & new_node
|
1190
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1191
|
+
, std::size_t *pdepth = 0
|
1192
|
+
#endif
|
1193
|
+
)
|
1103
1194
|
{
|
1104
1195
|
insert_commit_data commit_data;
|
1105
1196
|
insert_before_check(header, pos, commit_data, pdepth);
|
@@ -1107,59 +1198,56 @@ class tree_algorithms
|
|
1107
1198
|
return new_node;
|
1108
1199
|
}
|
1109
1200
|
|
1110
|
-
|
1111
|
-
|
1112
|
-
|
1113
|
-
|
1114
|
-
|
1115
|
-
|
1116
|
-
|
1117
|
-
|
1118
|
-
|
1119
|
-
|
1120
|
-
|
1121
|
-
|
1122
|
-
|
1123
|
-
}
|
1124
|
-
|
1201
|
+
//! <b>Requires</b>: "header" must be the header node of a tree.
|
1202
|
+
//! "new_node" must be, according to the used ordering no less than the
|
1203
|
+
//! greatest inserted key.
|
1204
|
+
//!
|
1205
|
+
//! <b>Effects</b>: Inserts new_node into the tree before "pos".
|
1206
|
+
//!
|
1207
|
+
//! <b>Complexity</b>: Constant-time.
|
1208
|
+
//!
|
1209
|
+
//! <b>Throws</b>: Nothing.
|
1210
|
+
//!
|
1211
|
+
//! <b>Note</b>: If "new_node" is less than the greatest inserted key
|
1212
|
+
//! tree invariants are broken. This function is slightly faster than
|
1213
|
+
//! using "insert_before".
|
1125
1214
|
static void push_back
|
1126
|
-
(const node_ptr & header, const node_ptr & new_node
|
1215
|
+
(const node_ptr & header, const node_ptr & new_node
|
1216
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1217
|
+
, std::size_t *pdepth = 0
|
1218
|
+
#endif
|
1219
|
+
)
|
1127
1220
|
{
|
1128
1221
|
insert_commit_data commit_data;
|
1129
1222
|
push_back_check(header, commit_data, pdepth);
|
1130
1223
|
insert_commit(header, new_node, commit_data);
|
1131
1224
|
}
|
1132
1225
|
|
1133
|
-
|
1134
|
-
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1138
|
-
|
1139
|
-
|
1140
|
-
|
1141
|
-
|
1142
|
-
|
1143
|
-
|
1226
|
+
//! <b>Requires</b>: "header" must be the header node of a tree.
|
1227
|
+
//! "new_node" must be, according to the used ordering, no greater than the
|
1228
|
+
//! lowest inserted key.
|
1229
|
+
//!
|
1230
|
+
//! <b>Effects</b>: Inserts new_node into the tree before "pos".
|
1231
|
+
//!
|
1232
|
+
//! <b>Complexity</b>: Constant-time.
|
1233
|
+
//!
|
1234
|
+
//! <b>Throws</b>: Nothing.
|
1235
|
+
//!
|
1236
|
+
//! <b>Note</b>: If "new_node" is greater than the lowest inserted key
|
1237
|
+
//! tree invariants are broken. This function is slightly faster than
|
1238
|
+
//! using "insert_before".
|
1144
1239
|
static void push_front
|
1145
|
-
(const node_ptr & header, const node_ptr & new_node
|
1240
|
+
(const node_ptr & header, const node_ptr & new_node
|
1241
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1242
|
+
, std::size_t *pdepth = 0
|
1243
|
+
#endif
|
1244
|
+
)
|
1146
1245
|
{
|
1147
1246
|
insert_commit_data commit_data;
|
1148
1247
|
push_front_check(header, commit_data, pdepth);
|
1149
1248
|
insert_commit(header, new_node, commit_data);
|
1150
1249
|
}
|
1151
1250
|
|
1152
|
-
static void push_front_check
|
1153
|
-
(const node_ptr & header, insert_commit_data &commit_data, std::size_t *pdepth = 0)
|
1154
|
-
{
|
1155
|
-
node_ptr pos(NodeTraits::get_left(header));
|
1156
|
-
if(pdepth){
|
1157
|
-
*pdepth = pos == header ? 0 : depth(pos) + 1;
|
1158
|
-
}
|
1159
|
-
commit_data.link_left = true;
|
1160
|
-
commit_data.node = pos;
|
1161
|
-
}
|
1162
|
-
|
1163
1251
|
//! <b>Requires</b>: 'node' can't be a header node.
|
1164
1252
|
//!
|
1165
1253
|
//! <b>Effects</b>: Calculates the depth of a node: the depth of a
|
@@ -1193,26 +1281,582 @@ class tree_algorithms
|
|
1193
1281
|
//! the nodes of the target tree. If "cloner" throws, the cloned target nodes
|
1194
1282
|
//! are disposed using <tt>void disposer(const node_ptr &)</tt>.
|
1195
1283
|
//!
|
1196
|
-
//! <b>Complexity</b>: Linear to the number of element of the source tree plus the
|
1284
|
+
//! <b>Complexity</b>: Linear to the number of element of the source tree plus the
|
1197
1285
|
//! number of elements of tree target tree when calling this function.
|
1198
1286
|
//!
|
1199
|
-
//! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
|
1200
|
-
template <class Cloner, class Disposer>
|
1201
|
-
static void clone
|
1202
|
-
(const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
|
1287
|
+
//! <b>Throws</b>: If cloner functor throws. If this happens target nodes are disposed.
|
1288
|
+
template <class Cloner, class Disposer>
|
1289
|
+
static void clone
|
1290
|
+
(const const_node_ptr & source_header, const node_ptr & target_header, Cloner cloner, Disposer disposer)
|
1291
|
+
{
|
1292
|
+
if(!unique(target_header)){
|
1293
|
+
clear_and_dispose(target_header, disposer);
|
1294
|
+
}
|
1295
|
+
|
1296
|
+
node_ptr leftmost, rightmost;
|
1297
|
+
node_ptr new_root = clone_subtree
|
1298
|
+
(source_header, target_header, cloner, disposer, leftmost, rightmost);
|
1299
|
+
|
1300
|
+
//Now update header node
|
1301
|
+
NodeTraits::set_parent(target_header, new_root);
|
1302
|
+
NodeTraits::set_left (target_header, leftmost);
|
1303
|
+
NodeTraits::set_right (target_header, rightmost);
|
1304
|
+
}
|
1305
|
+
|
1306
|
+
//! <b>Requires</b>: header must be the header of a tree, z a node
|
1307
|
+
//! of that tree and z != header.
|
1308
|
+
//!
|
1309
|
+
//! <b>Effects</b>: Erases node "z" from the tree with header "header".
|
1310
|
+
//!
|
1311
|
+
//! <b>Complexity</b>: Amortized constant time.
|
1312
|
+
//!
|
1313
|
+
//! <b>Throws</b>: Nothing.
|
1314
|
+
static void erase(const node_ptr & header, const node_ptr & z)
|
1315
|
+
{
|
1316
|
+
data_for_rebalance ignored;
|
1317
|
+
erase(header, z, ignored);
|
1318
|
+
}
|
1319
|
+
|
1320
|
+
//! <b>Requires</b>: node is a tree node but not the header.
|
1321
|
+
//!
|
1322
|
+
//! <b>Effects</b>: Unlinks the node and rebalances the tree.
|
1323
|
+
//!
|
1324
|
+
//! <b>Complexity</b>: Average complexity is constant time.
|
1325
|
+
//!
|
1326
|
+
//! <b>Throws</b>: Nothing.
|
1327
|
+
static void unlink(const node_ptr & node)
|
1328
|
+
{
|
1329
|
+
node_ptr x = NodeTraits::get_parent(node);
|
1330
|
+
if(x){
|
1331
|
+
while(!base_type::is_header(x))
|
1332
|
+
x = NodeTraits::get_parent(x);
|
1333
|
+
erase(x, node);
|
1334
|
+
}
|
1335
|
+
}
|
1336
|
+
|
1337
|
+
//! <b>Requires</b>: header must be the header of a tree.
|
1338
|
+
//!
|
1339
|
+
//! <b>Effects</b>: Rebalances the tree.
|
1340
|
+
//!
|
1341
|
+
//! <b>Throws</b>: Nothing.
|
1342
|
+
//!
|
1343
|
+
//! <b>Complexity</b>: Linear.
|
1344
|
+
static void rebalance(const node_ptr & header)
|
1345
|
+
{
|
1346
|
+
node_ptr root = NodeTraits::get_parent(header);
|
1347
|
+
if(root){
|
1348
|
+
rebalance_subtree(root);
|
1349
|
+
}
|
1350
|
+
}
|
1351
|
+
|
1352
|
+
//! <b>Requires</b>: old_root is a node of a tree. It shall not be null.
|
1353
|
+
//!
|
1354
|
+
//! <b>Effects</b>: Rebalances the subtree rooted at old_root.
|
1355
|
+
//!
|
1356
|
+
//! <b>Returns</b>: The new root of the subtree.
|
1357
|
+
//!
|
1358
|
+
//! <b>Throws</b>: Nothing.
|
1359
|
+
//!
|
1360
|
+
//! <b>Complexity</b>: Linear.
|
1361
|
+
static node_ptr rebalance_subtree(const node_ptr & old_root)
|
1362
|
+
{
|
1363
|
+
//Taken from:
|
1364
|
+
//"Tree rebalancing in optimal time and space"
|
1365
|
+
//Quentin F. Stout and Bette L. Warren
|
1366
|
+
|
1367
|
+
//To avoid irregularities in the algorithm (old_root can be a
|
1368
|
+
//left or right child or even the root of the tree) just put the
|
1369
|
+
//root as the right child of its parent. Before doing this backup
|
1370
|
+
//information to restore the original relationship after
|
1371
|
+
//the algorithm is applied.
|
1372
|
+
node_ptr super_root = NodeTraits::get_parent(old_root);
|
1373
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(super_root);
|
1374
|
+
|
1375
|
+
//Get root info
|
1376
|
+
node_ptr super_root_right_backup = NodeTraits::get_right(super_root);
|
1377
|
+
bool super_root_is_header = NodeTraits::get_parent(super_root) == old_root;
|
1378
|
+
bool old_root_is_right = is_right_child(old_root);
|
1379
|
+
NodeTraits::set_right(super_root, old_root);
|
1380
|
+
|
1381
|
+
std::size_t size;
|
1382
|
+
subtree_to_vine(super_root, size);
|
1383
|
+
vine_to_subtree(super_root, size);
|
1384
|
+
node_ptr new_root = NodeTraits::get_right(super_root);
|
1385
|
+
|
1386
|
+
//Recover root
|
1387
|
+
if(super_root_is_header){
|
1388
|
+
NodeTraits::set_right(super_root, super_root_right_backup);
|
1389
|
+
NodeTraits::set_parent(super_root, new_root);
|
1390
|
+
}
|
1391
|
+
else if(old_root_is_right){
|
1392
|
+
NodeTraits::set_right(super_root, new_root);
|
1393
|
+
}
|
1394
|
+
else{
|
1395
|
+
NodeTraits::set_right(super_root, super_root_right_backup);
|
1396
|
+
NodeTraits::set_left(super_root, new_root);
|
1397
|
+
}
|
1398
|
+
return new_root;
|
1399
|
+
}
|
1400
|
+
|
1401
|
+
//! <b>Effects</b>: Asserts the integrity of the container with additional checks provided by the user.
|
1402
|
+
//!
|
1403
|
+
//! <b>Requires</b>: header must be the header of a tree.
|
1404
|
+
//!
|
1405
|
+
//! <b>Complexity</b>: Linear time.
|
1406
|
+
//!
|
1407
|
+
//! <b>Note</b>: The method might not have effect when asserts are turned off (e.g., with NDEBUG).
|
1408
|
+
//! Experimental function, interface might change in future versions.
|
1409
|
+
template<class Checker>
|
1410
|
+
static void check(const const_node_ptr& header, Checker checker, typename Checker::return_type& checker_return)
|
1411
|
+
{
|
1412
|
+
const_node_ptr root_node_ptr = NodeTraits::get_parent(header);
|
1413
|
+
if (!root_node_ptr){
|
1414
|
+
// check left&right header pointers
|
1415
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_left(header) == header);
|
1416
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_right(header) == header);
|
1417
|
+
}
|
1418
|
+
else{
|
1419
|
+
// check parent pointer of root node
|
1420
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_parent(root_node_ptr) == header);
|
1421
|
+
// check subtree from root
|
1422
|
+
check_subtree(root_node_ptr, checker, checker_return);
|
1423
|
+
// check left&right header pointers
|
1424
|
+
const_node_ptr p = root_node_ptr;
|
1425
|
+
while (NodeTraits::get_left(p)) { p = NodeTraits::get_left(p); }
|
1426
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_left(header) == p);
|
1427
|
+
p = root_node_ptr;
|
1428
|
+
while (NodeTraits::get_right(p)) { p = NodeTraits::get_right(p); }
|
1429
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_right(header) == p);
|
1430
|
+
}
|
1431
|
+
}
|
1432
|
+
|
1433
|
+
protected:
|
1434
|
+
static void erase(const node_ptr & header, const node_ptr & z, data_for_rebalance &info)
|
1435
|
+
{
|
1436
|
+
node_ptr y(z);
|
1437
|
+
node_ptr x;
|
1438
|
+
const node_ptr z_left(NodeTraits::get_left(z));
|
1439
|
+
const node_ptr z_right(NodeTraits::get_right(z));
|
1440
|
+
|
1441
|
+
if(!z_left){
|
1442
|
+
x = z_right; // x might be null.
|
1443
|
+
}
|
1444
|
+
else if(!z_right){ // z has exactly one non-null child. y == z.
|
1445
|
+
x = z_left; // x is not null.
|
1446
|
+
BOOST_ASSERT(x);
|
1447
|
+
}
|
1448
|
+
else{ //make y != z
|
1449
|
+
// y = find z's successor
|
1450
|
+
y = base_type::minimum(z_right);
|
1451
|
+
x = NodeTraits::get_right(y); // x might be null.
|
1452
|
+
}
|
1453
|
+
|
1454
|
+
node_ptr x_parent;
|
1455
|
+
const node_ptr z_parent(NodeTraits::get_parent(z));
|
1456
|
+
const bool z_is_leftchild(NodeTraits::get_left(z_parent) == z);
|
1457
|
+
|
1458
|
+
if(y != z){ //has two children and y is the minimum of z
|
1459
|
+
//y is z's successor and it has a null left child.
|
1460
|
+
//x is the right child of y (it can be null)
|
1461
|
+
//Relink y in place of z and link x with y's old parent
|
1462
|
+
NodeTraits::set_parent(z_left, y);
|
1463
|
+
NodeTraits::set_left(y, z_left);
|
1464
|
+
if(y != z_right){
|
1465
|
+
//Link y with the right tree of z
|
1466
|
+
NodeTraits::set_right(y, z_right);
|
1467
|
+
NodeTraits::set_parent(z_right, y);
|
1468
|
+
//Link x with y's old parent (y must be a left child)
|
1469
|
+
x_parent = NodeTraits::get_parent(y);
|
1470
|
+
BOOST_ASSERT(NodeTraits::get_left(x_parent) == y);
|
1471
|
+
if(x)
|
1472
|
+
NodeTraits::set_parent(x, x_parent);
|
1473
|
+
//Since y was the successor and not the right child of z, it must be a left child
|
1474
|
+
NodeTraits::set_left(x_parent, x);
|
1475
|
+
}
|
1476
|
+
else{ //y was the right child of y so no need to fix x's position
|
1477
|
+
x_parent = y;
|
1478
|
+
}
|
1479
|
+
NodeTraits::set_parent(y, z_parent);
|
1480
|
+
this_type::set_child(header, y, z_parent, z_is_leftchild);
|
1481
|
+
}
|
1482
|
+
else { // z has zero or one child, x is one child (it can be null)
|
1483
|
+
//Just link x to z's parent
|
1484
|
+
x_parent = z_parent;
|
1485
|
+
if(x)
|
1486
|
+
NodeTraits::set_parent(x, z_parent);
|
1487
|
+
this_type::set_child(header, x, z_parent, z_is_leftchild);
|
1488
|
+
|
1489
|
+
//Now update leftmost/rightmost in case z was one of them
|
1490
|
+
if(NodeTraits::get_left(header) == z){
|
1491
|
+
//z_left must be null because z is the leftmost
|
1492
|
+
BOOST_ASSERT(!z_left);
|
1493
|
+
NodeTraits::set_left(header, !z_right ?
|
1494
|
+
z_parent : // makes leftmost == header if z == root
|
1495
|
+
base_type::minimum(z_right));
|
1496
|
+
}
|
1497
|
+
if(NodeTraits::get_right(header) == z){
|
1498
|
+
//z_right must be null because z is the rightmost
|
1499
|
+
BOOST_ASSERT(!z_right);
|
1500
|
+
NodeTraits::set_right(header, !z_left ?
|
1501
|
+
z_parent : // makes rightmost == header if z == root
|
1502
|
+
base_type::maximum(z_left));
|
1503
|
+
}
|
1504
|
+
}
|
1505
|
+
|
1506
|
+
//If z had 0/1 child, y == z and one of its children (and maybe null)
|
1507
|
+
//If z had 2 children, y is the successor of z and x is the right child of y
|
1508
|
+
info.x = x;
|
1509
|
+
info.y = y;
|
1510
|
+
//If z had 0/1 child, x_parent is the new parent of the old right child of y (z's successor)
|
1511
|
+
//If z had 2 children, x_parent is the new parent of y (z_parent)
|
1512
|
+
BOOST_ASSERT(!x || NodeTraits::get_parent(x) == x_parent);
|
1513
|
+
info.x_parent = x_parent;
|
1514
|
+
}
|
1515
|
+
|
1516
|
+
//! <b>Requires</b>: node is a node of the tree but it's not the header.
|
1517
|
+
//!
|
1518
|
+
//! <b>Effects</b>: Returns the number of nodes of the subtree.
|
1519
|
+
//!
|
1520
|
+
//! <b>Complexity</b>: Linear time.
|
1521
|
+
//!
|
1522
|
+
//! <b>Throws</b>: Nothing.
|
1523
|
+
static std::size_t subtree_size(const const_node_ptr & subtree)
|
1524
|
+
{
|
1525
|
+
std::size_t count = 0;
|
1526
|
+
if (subtree){
|
1527
|
+
node_ptr n = detail::uncast(subtree);
|
1528
|
+
node_ptr m = NodeTraits::get_left(n);
|
1529
|
+
while(m){
|
1530
|
+
n = m;
|
1531
|
+
m = NodeTraits::get_left(n);
|
1532
|
+
}
|
1533
|
+
|
1534
|
+
while(1){
|
1535
|
+
++count;
|
1536
|
+
node_ptr n_right(NodeTraits::get_right(n));
|
1537
|
+
if(n_right){
|
1538
|
+
n = n_right;
|
1539
|
+
m = NodeTraits::get_left(n);
|
1540
|
+
while(m){
|
1541
|
+
n = m;
|
1542
|
+
m = NodeTraits::get_left(n);
|
1543
|
+
}
|
1544
|
+
}
|
1545
|
+
else {
|
1546
|
+
do{
|
1547
|
+
if (n == subtree){
|
1548
|
+
return count;
|
1549
|
+
}
|
1550
|
+
m = n;
|
1551
|
+
n = NodeTraits::get_parent(n);
|
1552
|
+
}while(NodeTraits::get_left(n) != m);
|
1553
|
+
}
|
1554
|
+
}
|
1555
|
+
}
|
1556
|
+
return count;
|
1557
|
+
}
|
1558
|
+
|
1559
|
+
//! <b>Requires</b>: p is a node of a tree.
|
1560
|
+
//!
|
1561
|
+
//! <b>Effects</b>: Returns true if p is a left child.
|
1562
|
+
//!
|
1563
|
+
//! <b>Complexity</b>: Constant.
|
1564
|
+
//!
|
1565
|
+
//! <b>Throws</b>: Nothing.
|
1566
|
+
static bool is_left_child(const node_ptr & p)
|
1567
|
+
{ return NodeTraits::get_left(NodeTraits::get_parent(p)) == p; }
|
1568
|
+
|
1569
|
+
//! <b>Requires</b>: p is a node of a tree.
|
1570
|
+
//!
|
1571
|
+
//! <b>Effects</b>: Returns true if p is a right child.
|
1572
|
+
//!
|
1573
|
+
//! <b>Complexity</b>: Constant.
|
1574
|
+
//!
|
1575
|
+
//! <b>Throws</b>: Nothing.
|
1576
|
+
static bool is_right_child(const node_ptr & p)
|
1577
|
+
{ return NodeTraits::get_right(NodeTraits::get_parent(p)) == p; }
|
1578
|
+
|
1579
|
+
static void insert_before_check
|
1580
|
+
(const node_ptr &header, const node_ptr & pos
|
1581
|
+
, insert_commit_data &commit_data
|
1582
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1583
|
+
, std::size_t *pdepth = 0
|
1584
|
+
#endif
|
1585
|
+
)
|
1586
|
+
{
|
1587
|
+
node_ptr prev(pos);
|
1588
|
+
if(pos != NodeTraits::get_left(header))
|
1589
|
+
prev = base_type::prev_node(pos);
|
1590
|
+
bool link_left = unique(header) || !NodeTraits::get_left(pos);
|
1591
|
+
commit_data.link_left = link_left;
|
1592
|
+
commit_data.node = link_left ? pos : prev;
|
1593
|
+
if(pdepth){
|
1594
|
+
*pdepth = commit_data.node == header ? 0 : depth(commit_data.node) + 1;
|
1595
|
+
}
|
1596
|
+
}
|
1597
|
+
|
1598
|
+
static void push_back_check
|
1599
|
+
(const node_ptr & header, insert_commit_data &commit_data
|
1600
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1601
|
+
, std::size_t *pdepth = 0
|
1602
|
+
#endif
|
1603
|
+
)
|
1604
|
+
{
|
1605
|
+
node_ptr prev(NodeTraits::get_right(header));
|
1606
|
+
if(pdepth){
|
1607
|
+
*pdepth = prev == header ? 0 : depth(prev) + 1;
|
1608
|
+
}
|
1609
|
+
commit_data.link_left = false;
|
1610
|
+
commit_data.node = prev;
|
1611
|
+
}
|
1612
|
+
|
1613
|
+
static void push_front_check
|
1614
|
+
(const node_ptr & header, insert_commit_data &commit_data
|
1615
|
+
#ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
|
1616
|
+
, std::size_t *pdepth = 0
|
1617
|
+
#endif
|
1618
|
+
)
|
1619
|
+
{
|
1620
|
+
node_ptr pos(NodeTraits::get_left(header));
|
1621
|
+
if(pdepth){
|
1622
|
+
*pdepth = pos == header ? 0 : depth(pos) + 1;
|
1623
|
+
}
|
1624
|
+
commit_data.link_left = true;
|
1625
|
+
commit_data.node = pos;
|
1626
|
+
}
|
1627
|
+
|
1628
|
+
template<class NodePtrCompare>
|
1629
|
+
static void insert_equal_check
|
1630
|
+
(const node_ptr &header, const node_ptr & hint, const node_ptr & new_node, NodePtrCompare comp
|
1631
|
+
, insert_commit_data &commit_data
|
1632
|
+
/// @cond
|
1633
|
+
, std::size_t *pdepth = 0
|
1634
|
+
/// @endcond
|
1635
|
+
)
|
1636
|
+
{
|
1637
|
+
if(hint == header || !comp(hint, new_node)){
|
1638
|
+
node_ptr prev(hint);
|
1639
|
+
if(hint == NodeTraits::get_left(header) ||
|
1640
|
+
!comp(new_node, (prev = base_type::prev_node(hint)))){
|
1641
|
+
bool link_left = unique(header) || !NodeTraits::get_left(hint);
|
1642
|
+
commit_data.link_left = link_left;
|
1643
|
+
commit_data.node = link_left ? hint : prev;
|
1644
|
+
if(pdepth){
|
1645
|
+
*pdepth = commit_data.node == header ? 0 : depth(commit_data.node) + 1;
|
1646
|
+
}
|
1647
|
+
}
|
1648
|
+
else{
|
1649
|
+
insert_equal_upper_bound_check(header, new_node, comp, commit_data, pdepth);
|
1650
|
+
}
|
1651
|
+
}
|
1652
|
+
else{
|
1653
|
+
insert_equal_lower_bound_check(header, new_node, comp, commit_data, pdepth);
|
1654
|
+
}
|
1655
|
+
}
|
1656
|
+
|
1657
|
+
template<class NodePtrCompare>
|
1658
|
+
static void insert_equal_upper_bound_check
|
1659
|
+
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
|
1660
|
+
{
|
1661
|
+
std::size_t depth = 0;
|
1662
|
+
node_ptr y(h);
|
1663
|
+
node_ptr x(NodeTraits::get_parent(y));
|
1664
|
+
|
1665
|
+
while(x){
|
1666
|
+
++depth;
|
1667
|
+
y = x;
|
1668
|
+
x = comp(new_node, x) ?
|
1669
|
+
NodeTraits::get_left(x) : NodeTraits::get_right(x);
|
1670
|
+
}
|
1671
|
+
if(pdepth) *pdepth = depth;
|
1672
|
+
commit_data.link_left = (y == h) || comp(new_node, y);
|
1673
|
+
commit_data.node = y;
|
1674
|
+
}
|
1675
|
+
|
1676
|
+
template<class NodePtrCompare>
|
1677
|
+
static void insert_equal_lower_bound_check
|
1678
|
+
(const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
|
1679
|
+
{
|
1680
|
+
std::size_t depth = 0;
|
1681
|
+
node_ptr y(h);
|
1682
|
+
node_ptr x(NodeTraits::get_parent(y));
|
1683
|
+
|
1684
|
+
while(x){
|
1685
|
+
++depth;
|
1686
|
+
y = x;
|
1687
|
+
x = !comp(x, new_node) ?
|
1688
|
+
NodeTraits::get_left(x) : NodeTraits::get_right(x);
|
1689
|
+
}
|
1690
|
+
if(pdepth) *pdepth = depth;
|
1691
|
+
commit_data.link_left = (y == h) || !comp(y, new_node);
|
1692
|
+
commit_data.node = y;
|
1693
|
+
}
|
1694
|
+
|
1695
|
+
static void insert_commit
|
1696
|
+
(const node_ptr & header, const node_ptr & new_node, const insert_commit_data &commit_data)
|
1697
|
+
{
|
1698
|
+
//Check if commit_data has not been initialized by a insert_unique_check call.
|
1699
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(commit_data.node != node_ptr());
|
1700
|
+
node_ptr parent_node(commit_data.node);
|
1701
|
+
if(parent_node == header){
|
1702
|
+
NodeTraits::set_parent(header, new_node);
|
1703
|
+
NodeTraits::set_right(header, new_node);
|
1704
|
+
NodeTraits::set_left(header, new_node);
|
1705
|
+
}
|
1706
|
+
else if(commit_data.link_left){
|
1707
|
+
NodeTraits::set_left(parent_node, new_node);
|
1708
|
+
if(parent_node == NodeTraits::get_left(header))
|
1709
|
+
NodeTraits::set_left(header, new_node);
|
1710
|
+
}
|
1711
|
+
else{
|
1712
|
+
NodeTraits::set_right(parent_node, new_node);
|
1713
|
+
if(parent_node == NodeTraits::get_right(header))
|
1714
|
+
NodeTraits::set_right(header, new_node);
|
1715
|
+
}
|
1716
|
+
NodeTraits::set_parent(new_node, parent_node);
|
1717
|
+
NodeTraits::set_right(new_node, node_ptr());
|
1718
|
+
NodeTraits::set_left(new_node, node_ptr());
|
1719
|
+
}
|
1720
|
+
|
1721
|
+
//Fix header and own's parent data when replacing x with own, providing own's old data with parent
|
1722
|
+
static void set_child(const node_ptr & header, const node_ptr & new_child, const node_ptr & new_parent, const bool link_left)
|
1723
|
+
{
|
1724
|
+
if(new_parent == header)
|
1725
|
+
NodeTraits::set_parent(header, new_child);
|
1726
|
+
else if(link_left)
|
1727
|
+
NodeTraits::set_left(new_parent, new_child);
|
1728
|
+
else
|
1729
|
+
NodeTraits::set_right(new_parent, new_child);
|
1730
|
+
}
|
1731
|
+
|
1732
|
+
// rotate p to left (no header and p's parent fixup)
|
1733
|
+
static void rotate_left_no_parent_fix(const node_ptr & p, const node_ptr &p_right)
|
1734
|
+
{
|
1735
|
+
node_ptr p_right_left(NodeTraits::get_left(p_right));
|
1736
|
+
NodeTraits::set_right(p, p_right_left);
|
1737
|
+
if(p_right_left){
|
1738
|
+
NodeTraits::set_parent(p_right_left, p);
|
1739
|
+
}
|
1740
|
+
NodeTraits::set_left(p_right, p);
|
1741
|
+
NodeTraits::set_parent(p, p_right);
|
1742
|
+
}
|
1743
|
+
|
1744
|
+
// rotate p to left (with header and p's parent fixup)
|
1745
|
+
static void rotate_left(const node_ptr & p, const node_ptr & p_right, const node_ptr & p_parent, const node_ptr & header)
|
1746
|
+
{
|
1747
|
+
const bool p_was_left(NodeTraits::get_left(p_parent) == p);
|
1748
|
+
rotate_left_no_parent_fix(p, p_right);
|
1749
|
+
NodeTraits::set_parent(p_right, p_parent);
|
1750
|
+
set_child(header, p_right, p_parent, p_was_left);
|
1751
|
+
}
|
1752
|
+
|
1753
|
+
// rotate p to right (no header and p's parent fixup)
|
1754
|
+
static void rotate_right_no_parent_fix(const node_ptr & p, const node_ptr &p_left)
|
1755
|
+
{
|
1756
|
+
node_ptr p_left_right(NodeTraits::get_right(p_left));
|
1757
|
+
NodeTraits::set_left(p, p_left_right);
|
1758
|
+
if(p_left_right){
|
1759
|
+
NodeTraits::set_parent(p_left_right, p);
|
1760
|
+
}
|
1761
|
+
NodeTraits::set_right(p_left, p);
|
1762
|
+
NodeTraits::set_parent(p, p_left);
|
1763
|
+
}
|
1764
|
+
|
1765
|
+
// rotate p to right (with header and p's parent fixup)
|
1766
|
+
static void rotate_right(const node_ptr & p, const node_ptr & p_left, const node_ptr & p_parent, const node_ptr & header)
|
1767
|
+
{
|
1768
|
+
const bool p_was_left(NodeTraits::get_left(p_parent) == p);
|
1769
|
+
rotate_right_no_parent_fix(p, p_left);
|
1770
|
+
NodeTraits::set_parent(p_left, p_parent);
|
1771
|
+
set_child(header, p_left, p_parent, p_was_left);
|
1772
|
+
}
|
1773
|
+
|
1774
|
+
private:
|
1775
|
+
|
1776
|
+
static void subtree_to_vine(node_ptr vine_tail, std::size_t &size)
|
1777
|
+
{
|
1778
|
+
//Inspired by LibAVL:
|
1779
|
+
//It uses a clever optimization for trees with parent pointers.
|
1780
|
+
//No parent pointer is updated when transforming a tree to a vine as
|
1781
|
+
//most of them will be overriten during compression rotations.
|
1782
|
+
//A final pass must be made after the rebalancing to updated those
|
1783
|
+
//pointers not updated by tree_to_vine + compression calls
|
1784
|
+
std::size_t len = 0;
|
1785
|
+
node_ptr remainder = NodeTraits::get_right(vine_tail);
|
1786
|
+
while(remainder){
|
1787
|
+
node_ptr tempptr = NodeTraits::get_left(remainder);
|
1788
|
+
if(!tempptr){ //move vine-tail down one
|
1789
|
+
vine_tail = remainder;
|
1790
|
+
remainder = NodeTraits::get_right(remainder);
|
1791
|
+
++len;
|
1792
|
+
}
|
1793
|
+
else{ //rotate
|
1794
|
+
NodeTraits::set_left(remainder, NodeTraits::get_right(tempptr));
|
1795
|
+
NodeTraits::set_right(tempptr, remainder);
|
1796
|
+
remainder = tempptr;
|
1797
|
+
NodeTraits::set_right(vine_tail, tempptr);
|
1798
|
+
}
|
1799
|
+
}
|
1800
|
+
size = len;
|
1801
|
+
}
|
1802
|
+
|
1803
|
+
static void compress_subtree(node_ptr scanner, std::size_t count)
|
1804
|
+
{
|
1805
|
+
while(count--){ //compress "count" spine nodes in the tree with pseudo-root scanner
|
1806
|
+
node_ptr child = NodeTraits::get_right(scanner);
|
1807
|
+
node_ptr child_right = NodeTraits::get_right(child);
|
1808
|
+
NodeTraits::set_right(scanner, child_right);
|
1809
|
+
//Avoid setting the parent of child_right
|
1810
|
+
scanner = child_right;
|
1811
|
+
node_ptr scanner_left = NodeTraits::get_left(scanner);
|
1812
|
+
NodeTraits::set_right(child, scanner_left);
|
1813
|
+
if(scanner_left)
|
1814
|
+
NodeTraits::set_parent(scanner_left, child);
|
1815
|
+
NodeTraits::set_left(scanner, child);
|
1816
|
+
NodeTraits::set_parent(child, scanner);
|
1817
|
+
}
|
1818
|
+
}
|
1819
|
+
|
1820
|
+
static void vine_to_subtree(const node_ptr & super_root, std::size_t count)
|
1821
|
+
{
|
1822
|
+
const std::size_t one_szt = 1u;
|
1823
|
+
std::size_t leaf_nodes = count + one_szt - std::size_t(one_szt << detail::floor_log2(count + one_szt));
|
1824
|
+
compress_subtree(super_root, leaf_nodes); //create deepest leaves
|
1825
|
+
std::size_t vine_nodes = count - leaf_nodes;
|
1826
|
+
while(vine_nodes > 1){
|
1827
|
+
vine_nodes /= 2;
|
1828
|
+
compress_subtree(super_root, vine_nodes);
|
1829
|
+
}
|
1830
|
+
|
1831
|
+
//Update parents of nodes still in the in the original vine line
|
1832
|
+
//as those have not been updated by subtree_to_vine or compress_subtree
|
1833
|
+
for ( node_ptr q = super_root, p = NodeTraits::get_right(super_root)
|
1834
|
+
; p
|
1835
|
+
; q = p, p = NodeTraits::get_right(p)){
|
1836
|
+
NodeTraits::set_parent(p, q);
|
1837
|
+
}
|
1838
|
+
}
|
1839
|
+
|
1840
|
+
//! <b>Requires</b>: "n" must be a node inserted in a tree.
|
1841
|
+
//!
|
1842
|
+
//! <b>Effects</b>: Returns a pointer to the header node of the tree.
|
1843
|
+
//!
|
1844
|
+
//! <b>Complexity</b>: Logarithmic.
|
1845
|
+
//!
|
1846
|
+
//! <b>Throws</b>: Nothing.
|
1847
|
+
static node_ptr get_root(const node_ptr & node)
|
1203
1848
|
{
|
1204
|
-
|
1205
|
-
|
1849
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT((!inited(node)));
|
1850
|
+
node_ptr x = NodeTraits::get_parent(node);
|
1851
|
+
if(x){
|
1852
|
+
while(!base_type::is_header(x)){
|
1853
|
+
x = NodeTraits::get_parent(x);
|
1854
|
+
}
|
1855
|
+
return x;
|
1856
|
+
}
|
1857
|
+
else{
|
1858
|
+
return node;
|
1206
1859
|
}
|
1207
|
-
|
1208
|
-
node_ptr leftmost, rightmost;
|
1209
|
-
node_ptr new_root = clone_subtree
|
1210
|
-
(source_header, target_header, cloner, disposer, leftmost, rightmost);
|
1211
|
-
|
1212
|
-
//Now update header node
|
1213
|
-
NodeTraits::set_parent(target_header, new_root);
|
1214
|
-
NodeTraits::set_left (target_header, leftmost);
|
1215
|
-
NodeTraits::set_right (target_header, rightmost);
|
1216
1860
|
}
|
1217
1861
|
|
1218
1862
|
template <class Cloner, class Disposer>
|
@@ -1310,304 +1954,6 @@ class tree_algorithms
|
|
1310
1954
|
}
|
1311
1955
|
}
|
1312
1956
|
|
1313
|
-
//! <b>Requires</b>: p is a node of a tree.
|
1314
|
-
//!
|
1315
|
-
//! <b>Effects</b>: Returns true if p is a left child.
|
1316
|
-
//!
|
1317
|
-
//! <b>Complexity</b>: Constant.
|
1318
|
-
//!
|
1319
|
-
//! <b>Throws</b>: Nothing.
|
1320
|
-
static bool is_left_child(const node_ptr & p)
|
1321
|
-
{ return NodeTraits::get_left(NodeTraits::get_parent(p)) == p; }
|
1322
|
-
|
1323
|
-
//! <b>Requires</b>: p is a node of a tree.
|
1324
|
-
//!
|
1325
|
-
//! <b>Effects</b>: Returns true if p is a right child.
|
1326
|
-
//!
|
1327
|
-
//! <b>Complexity</b>: Constant.
|
1328
|
-
//!
|
1329
|
-
//! <b>Throws</b>: Nothing.
|
1330
|
-
static bool is_right_child(const node_ptr & p)
|
1331
|
-
{ return NodeTraits::get_right(NodeTraits::get_parent(p)) == p; }
|
1332
|
-
|
1333
|
-
//Fix header and own's parent data when replacing x with own, providing own's old data with parent
|
1334
|
-
static void replace_own_impl(const node_ptr & own, const node_ptr & x, const node_ptr & header, const node_ptr & own_parent, bool own_was_left)
|
1335
|
-
{
|
1336
|
-
if(NodeTraits::get_parent(header) == own)
|
1337
|
-
NodeTraits::set_parent(header, x);
|
1338
|
-
else if(own_was_left)
|
1339
|
-
NodeTraits::set_left(own_parent, x);
|
1340
|
-
else
|
1341
|
-
NodeTraits::set_right(own_parent, x);
|
1342
|
-
}
|
1343
|
-
|
1344
|
-
//Fix header and own's parent data when replacing x with own, supposing own
|
1345
|
-
//links with its parent are still ok
|
1346
|
-
static void replace_own(const node_ptr & own, const node_ptr & x, const node_ptr & header)
|
1347
|
-
{
|
1348
|
-
node_ptr own_parent(NodeTraits::get_parent(own));
|
1349
|
-
bool own_is_left(NodeTraits::get_left(own_parent) == own);
|
1350
|
-
replace_own_impl(own, x, header, own_parent, own_is_left);
|
1351
|
-
}
|
1352
|
-
|
1353
|
-
// rotate parent p to left (no header and p's parent fixup)
|
1354
|
-
static node_ptr rotate_left(const node_ptr & p)
|
1355
|
-
{
|
1356
|
-
node_ptr x(NodeTraits::get_right(p));
|
1357
|
-
node_ptr x_left(NodeTraits::get_left(x));
|
1358
|
-
NodeTraits::set_right(p, x_left);
|
1359
|
-
if(x_left){
|
1360
|
-
NodeTraits::set_parent(x_left, p);
|
1361
|
-
}
|
1362
|
-
NodeTraits::set_left(x, p);
|
1363
|
-
NodeTraits::set_parent(p, x);
|
1364
|
-
return x;
|
1365
|
-
}
|
1366
|
-
|
1367
|
-
// rotate parent p to left (with header and p's parent fixup)
|
1368
|
-
static void rotate_left(const node_ptr & p, const node_ptr & header)
|
1369
|
-
{
|
1370
|
-
bool p_was_left(is_left_child(p));
|
1371
|
-
node_ptr p_old_parent(NodeTraits::get_parent(p));
|
1372
|
-
node_ptr x(rotate_left(p));
|
1373
|
-
NodeTraits::set_parent(x, p_old_parent);
|
1374
|
-
replace_own_impl(p, x, header, p_old_parent, p_was_left);
|
1375
|
-
}
|
1376
|
-
|
1377
|
-
// rotate parent p to right (no header and p's parent fixup)
|
1378
|
-
static node_ptr rotate_right(const node_ptr & p)
|
1379
|
-
{
|
1380
|
-
node_ptr x(NodeTraits::get_left(p));
|
1381
|
-
node_ptr x_right(NodeTraits::get_right(x));
|
1382
|
-
NodeTraits::set_left(p, x_right);
|
1383
|
-
if(x_right){
|
1384
|
-
NodeTraits::set_parent(x_right, p);
|
1385
|
-
}
|
1386
|
-
NodeTraits::set_right(x, p);
|
1387
|
-
NodeTraits::set_parent(p, x);
|
1388
|
-
return x;
|
1389
|
-
}
|
1390
|
-
|
1391
|
-
// rotate parent p to right (with header and p's parent fixup)
|
1392
|
-
static void rotate_right(const node_ptr & p, const node_ptr & header)
|
1393
|
-
{
|
1394
|
-
bool p_was_left(is_left_child(p));
|
1395
|
-
node_ptr p_old_parent(NodeTraits::get_parent(p));
|
1396
|
-
node_ptr x(rotate_right(p));
|
1397
|
-
NodeTraits::set_parent(x, p_old_parent);
|
1398
|
-
replace_own_impl(p, x, header, p_old_parent, p_was_left);
|
1399
|
-
}
|
1400
|
-
|
1401
|
-
static void erase(const node_ptr & header, const node_ptr & z)
|
1402
|
-
{
|
1403
|
-
data_for_rebalance ignored;
|
1404
|
-
erase_impl(header, z, ignored);
|
1405
|
-
}
|
1406
|
-
|
1407
|
-
struct data_for_rebalance
|
1408
|
-
{
|
1409
|
-
node_ptr x;
|
1410
|
-
node_ptr x_parent;
|
1411
|
-
node_ptr y;
|
1412
|
-
};
|
1413
|
-
|
1414
|
-
template<class F>
|
1415
|
-
static void erase(const node_ptr & header, const node_ptr & z, F z_and_successor_fixup, data_for_rebalance &info)
|
1416
|
-
{
|
1417
|
-
erase_impl(header, z, info);
|
1418
|
-
if(info.y != z){
|
1419
|
-
z_and_successor_fixup(z, info.y);
|
1420
|
-
}
|
1421
|
-
}
|
1422
|
-
|
1423
|
-
static void unlink(const node_ptr & node)
|
1424
|
-
{
|
1425
|
-
node_ptr x = NodeTraits::get_parent(node);
|
1426
|
-
if(x){
|
1427
|
-
while(!is_header(x))
|
1428
|
-
x = NodeTraits::get_parent(x);
|
1429
|
-
erase(x, node);
|
1430
|
-
}
|
1431
|
-
}
|
1432
|
-
|
1433
|
-
static void tree_to_vine(const node_ptr & header)
|
1434
|
-
{ subtree_to_vine(NodeTraits::get_parent(header)); }
|
1435
|
-
|
1436
|
-
static void vine_to_tree(const node_ptr & header, std::size_t count)
|
1437
|
-
{ vine_to_subtree(NodeTraits::get_parent(header), count); }
|
1438
|
-
|
1439
|
-
static void rebalance(const node_ptr & header)
|
1440
|
-
{
|
1441
|
-
//Taken from:
|
1442
|
-
//"Tree rebalancing in optimal time and space"
|
1443
|
-
//Quentin F. Stout and Bette L. Warren
|
1444
|
-
std::size_t len = 0;
|
1445
|
-
subtree_to_vine(NodeTraits::get_parent(header), &len);
|
1446
|
-
vine_to_subtree(NodeTraits::get_parent(header), len);
|
1447
|
-
}
|
1448
|
-
|
1449
|
-
static node_ptr rebalance_subtree(const node_ptr & old_root)
|
1450
|
-
{
|
1451
|
-
std::size_t len = 0;
|
1452
|
-
node_ptr new_root = subtree_to_vine(old_root, &len);
|
1453
|
-
return vine_to_subtree(new_root, len);
|
1454
|
-
}
|
1455
|
-
|
1456
|
-
static node_ptr subtree_to_vine(const node_ptr & old_root, std::size_t *plen = 0)
|
1457
|
-
{
|
1458
|
-
std::size_t len;
|
1459
|
-
len = 0;
|
1460
|
-
if(!old_root) return node_ptr();
|
1461
|
-
|
1462
|
-
//To avoid irregularities in the algorithm (old_root can be a
|
1463
|
-
//left or right child or even the root of the tree) just put the
|
1464
|
-
//root as the right child of its parent. Before doing this backup
|
1465
|
-
//information to restore the original relationship after
|
1466
|
-
//the algorithm is applied.
|
1467
|
-
node_ptr super_root = NodeTraits::get_parent(old_root);
|
1468
|
-
BOOST_INTRUSIVE_INVARIANT_ASSERT(super_root);
|
1469
|
-
|
1470
|
-
//Get info
|
1471
|
-
node_ptr super_root_right_backup = NodeTraits::get_right(super_root);
|
1472
|
-
bool super_root_is_header = is_header(super_root);
|
1473
|
-
bool old_root_is_right = is_right_child(old_root);
|
1474
|
-
|
1475
|
-
node_ptr x(old_root);
|
1476
|
-
node_ptr new_root(x);
|
1477
|
-
node_ptr save;
|
1478
|
-
bool moved_to_right = false;
|
1479
|
-
for( ; x; x = save){
|
1480
|
-
save = NodeTraits::get_left(x);
|
1481
|
-
if(save){
|
1482
|
-
// Right rotation
|
1483
|
-
node_ptr save_right = NodeTraits::get_right(save);
|
1484
|
-
node_ptr x_parent = NodeTraits::get_parent(x);
|
1485
|
-
NodeTraits::set_parent(save, x_parent);
|
1486
|
-
NodeTraits::set_right (x_parent, save);
|
1487
|
-
NodeTraits::set_parent(x, save);
|
1488
|
-
NodeTraits::set_right (save, x);
|
1489
|
-
NodeTraits::set_left(x, save_right);
|
1490
|
-
if(save_right)
|
1491
|
-
NodeTraits::set_parent(save_right, x);
|
1492
|
-
if(!moved_to_right)
|
1493
|
-
new_root = save;
|
1494
|
-
}
|
1495
|
-
else{
|
1496
|
-
moved_to_right = true;
|
1497
|
-
save = NodeTraits::get_right(x);
|
1498
|
-
++len;
|
1499
|
-
}
|
1500
|
-
}
|
1501
|
-
|
1502
|
-
if(super_root_is_header){
|
1503
|
-
NodeTraits::set_right(super_root, super_root_right_backup);
|
1504
|
-
NodeTraits::set_parent(super_root, new_root);
|
1505
|
-
}
|
1506
|
-
else if(old_root_is_right){
|
1507
|
-
NodeTraits::set_right(super_root, new_root);
|
1508
|
-
}
|
1509
|
-
else{
|
1510
|
-
NodeTraits::set_right(super_root, super_root_right_backup);
|
1511
|
-
NodeTraits::set_left(super_root, new_root);
|
1512
|
-
}
|
1513
|
-
if(plen) *plen = len;
|
1514
|
-
return new_root;
|
1515
|
-
}
|
1516
|
-
|
1517
|
-
static node_ptr vine_to_subtree(const node_ptr & old_root, std::size_t count)
|
1518
|
-
{
|
1519
|
-
std::size_t leaf_nodes = count + 1 - ((std::size_t) 1 << floor_log2 (count + 1));
|
1520
|
-
std::size_t vine_nodes = count - leaf_nodes;
|
1521
|
-
|
1522
|
-
node_ptr new_root = compress_subtree(old_root, leaf_nodes);
|
1523
|
-
while(vine_nodes > 1){
|
1524
|
-
vine_nodes /= 2;
|
1525
|
-
new_root = compress_subtree(new_root, vine_nodes);
|
1526
|
-
}
|
1527
|
-
return new_root;
|
1528
|
-
}
|
1529
|
-
|
1530
|
-
static node_ptr compress_subtree(const node_ptr & old_root, std::size_t count)
|
1531
|
-
{
|
1532
|
-
if(!old_root) return old_root;
|
1533
|
-
|
1534
|
-
//To avoid irregularities in the algorithm (old_root can be
|
1535
|
-
//left or right child or even the root of the tree) just put the
|
1536
|
-
//root as the right child of its parent. First obtain
|
1537
|
-
//information to restore the original relationship after
|
1538
|
-
//the algorithm is applied.
|
1539
|
-
node_ptr super_root = NodeTraits::get_parent(old_root);
|
1540
|
-
BOOST_INTRUSIVE_INVARIANT_ASSERT(super_root);
|
1541
|
-
|
1542
|
-
//Get info
|
1543
|
-
node_ptr super_root_right_backup = NodeTraits::get_right(super_root);
|
1544
|
-
bool super_root_is_header = is_header(super_root);
|
1545
|
-
bool old_root_is_right = is_right_child(old_root);
|
1546
|
-
|
1547
|
-
//Put old_root as right child
|
1548
|
-
NodeTraits::set_right(super_root, old_root);
|
1549
|
-
|
1550
|
-
//Start the compression algorithm
|
1551
|
-
node_ptr even_parent = super_root;
|
1552
|
-
node_ptr new_root = old_root;
|
1553
|
-
|
1554
|
-
while(count--){
|
1555
|
-
node_ptr even = NodeTraits::get_right(even_parent);
|
1556
|
-
node_ptr odd = NodeTraits::get_right(even);
|
1557
|
-
|
1558
|
-
if(new_root == old_root)
|
1559
|
-
new_root = odd;
|
1560
|
-
|
1561
|
-
node_ptr even_right = NodeTraits::get_left(odd);
|
1562
|
-
NodeTraits::set_right(even, even_right);
|
1563
|
-
if (even_right)
|
1564
|
-
NodeTraits::set_parent(even_right, even);
|
1565
|
-
|
1566
|
-
NodeTraits::set_right(even_parent, odd);
|
1567
|
-
NodeTraits::set_parent(odd, even_parent);
|
1568
|
-
NodeTraits::set_left(odd, even);
|
1569
|
-
NodeTraits::set_parent(even, odd);
|
1570
|
-
even_parent = odd;
|
1571
|
-
}
|
1572
|
-
|
1573
|
-
if(super_root_is_header){
|
1574
|
-
NodeTraits::set_parent(super_root, new_root);
|
1575
|
-
NodeTraits::set_right(super_root, super_root_right_backup);
|
1576
|
-
}
|
1577
|
-
else if(old_root_is_right){
|
1578
|
-
NodeTraits::set_right(super_root, new_root);
|
1579
|
-
}
|
1580
|
-
else{
|
1581
|
-
NodeTraits::set_left(super_root, new_root);
|
1582
|
-
NodeTraits::set_right(super_root, super_root_right_backup);
|
1583
|
-
}
|
1584
|
-
return new_root;
|
1585
|
-
}
|
1586
|
-
|
1587
|
-
//! <b>Requires</b>: "n" must be a node inserted in a tree.
|
1588
|
-
//!
|
1589
|
-
//! <b>Effects</b>: Returns a pointer to the header node of the tree.
|
1590
|
-
//!
|
1591
|
-
//! <b>Complexity</b>: Logarithmic.
|
1592
|
-
//!
|
1593
|
-
//! <b>Throws</b>: Nothing.
|
1594
|
-
static node_ptr get_root(const node_ptr & node)
|
1595
|
-
{
|
1596
|
-
BOOST_INTRUSIVE_INVARIANT_ASSERT((!inited(node)));
|
1597
|
-
node_ptr x = NodeTraits::get_parent(node);
|
1598
|
-
if(x){
|
1599
|
-
while(!is_header(x)){
|
1600
|
-
x = NodeTraits::get_parent(x);
|
1601
|
-
}
|
1602
|
-
return x;
|
1603
|
-
}
|
1604
|
-
else{
|
1605
|
-
return node;
|
1606
|
-
}
|
1607
|
-
}
|
1608
|
-
|
1609
|
-
private:
|
1610
|
-
|
1611
1957
|
template<class KeyType, class KeyNodePtrCompare>
|
1612
1958
|
static node_ptr lower_bound_loop
|
1613
1959
|
(node_ptr x, node_ptr y, const KeyType &key, KeyNodePtrCompare comp)
|
@@ -1640,103 +1986,46 @@ class tree_algorithms
|
|
1640
1986
|
return y;
|
1641
1987
|
}
|
1642
1988
|
|
1643
|
-
|
1644
|
-
|
1645
|
-
static void insert_equal_check_impl
|
1646
|
-
(bool upper, const node_ptr & h, const node_ptr & new_node, NodePtrCompare comp, insert_commit_data & commit_data, std::size_t *pdepth = 0)
|
1989
|
+
template<class Checker>
|
1990
|
+
static void check_subtree(const const_node_ptr& node, Checker checker, typename Checker::return_type& check_return)
|
1647
1991
|
{
|
1648
|
-
|
1649
|
-
|
1650
|
-
|
1651
|
-
|
1652
|
-
|
1653
|
-
|
1654
|
-
|
1655
|
-
|
1656
|
-
y = x;
|
1657
|
-
x = comp(new_node, x) ?
|
1658
|
-
NodeTraits::get_left(x) : NodeTraits::get_right(x);
|
1659
|
-
}
|
1660
|
-
link_left = (y == h) || comp(new_node, y);
|
1992
|
+
const_node_ptr left = NodeTraits::get_left(node);
|
1993
|
+
const_node_ptr right = NodeTraits::get_right(node);
|
1994
|
+
typename Checker::return_type check_return_left;
|
1995
|
+
typename Checker::return_type check_return_right;
|
1996
|
+
if (left)
|
1997
|
+
{
|
1998
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_parent(left) == node);
|
1999
|
+
check_subtree(left, checker, check_return_left);
|
1661
2000
|
}
|
1662
|
-
|
1663
|
-
|
1664
|
-
|
1665
|
-
|
1666
|
-
x = !comp(x, new_node) ?
|
1667
|
-
NodeTraits::get_left(x) : NodeTraits::get_right(x);
|
1668
|
-
}
|
1669
|
-
link_left = (y == h) || !comp(y, new_node);
|
2001
|
+
if (right)
|
2002
|
+
{
|
2003
|
+
BOOST_INTRUSIVE_INVARIANT_ASSERT(NodeTraits::get_parent(right) == node);
|
2004
|
+
check_subtree(right, checker, check_return_right);
|
1670
2005
|
}
|
1671
|
-
|
1672
|
-
commit_data.link_left = link_left;
|
1673
|
-
commit_data.node = y;
|
1674
|
-
if(pdepth) *pdepth = depth;
|
2006
|
+
checker(node, check_return_left, check_return_right, check_return);
|
1675
2007
|
}
|
2008
|
+
};
|
1676
2009
|
|
1677
|
-
|
1678
|
-
{
|
1679
|
-
node_ptr y(z);
|
1680
|
-
node_ptr x;
|
1681
|
-
node_ptr x_parent = node_ptr();
|
1682
|
-
node_ptr z_left(NodeTraits::get_left(z));
|
1683
|
-
node_ptr z_right(NodeTraits::get_right(z));
|
1684
|
-
if(!z_left){
|
1685
|
-
x = z_right; // x might be null.
|
1686
|
-
}
|
1687
|
-
else if(!z_right){ // z has exactly one non-null child. y == z.
|
1688
|
-
x = z_left; // x is not null.
|
1689
|
-
}
|
1690
|
-
else{
|
1691
|
-
// find z's successor
|
1692
|
-
y = tree_algorithms::minimum (z_right);
|
1693
|
-
x = NodeTraits::get_right(y); // x might be null.
|
1694
|
-
}
|
2010
|
+
/// @cond
|
1695
2011
|
|
1696
|
-
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1701
|
-
x_parent = NodeTraits::get_parent(y);
|
1702
|
-
if(x)
|
1703
|
-
NodeTraits::set_parent(x, x_parent);
|
1704
|
-
NodeTraits::set_left(x_parent, x); // y must be a child of left_
|
1705
|
-
NodeTraits::set_right(y, NodeTraits::get_right(z));
|
1706
|
-
NodeTraits::set_parent(NodeTraits::get_right(z), y);
|
1707
|
-
}
|
1708
|
-
else
|
1709
|
-
x_parent = y;
|
1710
|
-
tree_algorithms::replace_own (z, y, header);
|
1711
|
-
NodeTraits::set_parent(y, NodeTraits::get_parent(z));
|
1712
|
-
}
|
1713
|
-
else { // y == z --> z has only one child, or none
|
1714
|
-
x_parent = NodeTraits::get_parent(z);
|
1715
|
-
if(x)
|
1716
|
-
NodeTraits::set_parent(x, x_parent);
|
1717
|
-
tree_algorithms::replace_own (z, x, header);
|
1718
|
-
if(NodeTraits::get_left(header) == z){
|
1719
|
-
NodeTraits::set_left(header, !NodeTraits::get_right(z) ? // z->get_left() must be null also
|
1720
|
-
NodeTraits::get_parent(z) : // makes leftmost == header if z == root
|
1721
|
-
tree_algorithms::minimum (x));
|
1722
|
-
}
|
1723
|
-
if(NodeTraits::get_right(header) == z){
|
1724
|
-
NodeTraits::set_right(header, !NodeTraits::get_left(z) ? // z->get_right() must be null also
|
1725
|
-
NodeTraits::get_parent(z) : // makes rightmost == header if z == root
|
1726
|
-
tree_algorithms::maximum(x));
|
1727
|
-
}
|
1728
|
-
}
|
2012
|
+
template<class NodeTraits>
|
2013
|
+
struct get_algo<BsTreeAlgorithms, NodeTraits>
|
2014
|
+
{
|
2015
|
+
typedef bstree_algorithms<NodeTraits> type;
|
2016
|
+
};
|
1729
2017
|
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
|
2018
|
+
template <class ValueTraits, class NodePtrCompare, class ExtraChecker>
|
2019
|
+
struct get_node_checker<BsTreeAlgorithms, ValueTraits, NodePtrCompare, ExtraChecker>
|
2020
|
+
{
|
2021
|
+
typedef detail::bstree_node_checker<ValueTraits, NodePtrCompare, ExtraChecker> type;
|
1734
2022
|
};
|
1735
2023
|
|
1736
|
-
|
2024
|
+
/// @endcond
|
2025
|
+
|
1737
2026
|
} //namespace intrusive
|
1738
2027
|
} //namespace boost
|
1739
2028
|
|
1740
2029
|
#include <boost/intrusive/detail/config_end.hpp>
|
1741
2030
|
|
1742
|
-
#endif //
|
2031
|
+
#endif //BOOST_INTRUSIVE_BSTREE_ALGORITHMS_HPP
|