passenger 6.1.0 → 6.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +32 -2
- data/Rakefile +6 -13
- data/bin/passenger-install-apache2-module +15 -19
- data/bin/passenger-install-nginx-module +42 -44
- data/bin/passenger-status +9 -10
- data/build/common_library.rb +4 -4
- data/build/support/vendor/cxxcodebuilder/lib/cxxcodebuilder/builder.rb +1 -1
- data/build/test_basics.rb +4 -3
- data/dev/copy_boost_headers +54 -40
- data/dev/ruby_server.rb +1 -1
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller/Config.h +1 -1
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/assert.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +94 -110
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic_ref.hpp +14 -14
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag_impl.hpp +52 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_impl.hpp +641 -285
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_ref_impl.hpp +593 -260
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +37 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/cas_based_exchange.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/chrono.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/classify.hpp +16 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +25 -34
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch32.hpp +204 -97
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +251 -122
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_alpha.hpp +56 -56
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_arm.hpp +129 -129
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_ppc.hpp +253 -125
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_sparc.hpp +25 -25
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_x86.hpp +193 -126
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +57 -57
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_x86.hpp +96 -97
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_operations_emulated.hpp +24 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_cas_based.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_atomic.hpp +27 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_gcc_sync.hpp +39 -37
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_ops_linux_arm.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extending_cas_based_arithmetic.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +21 -21
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +170 -98
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +209 -119
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +95 -95
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +148 -76
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +293 -123
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +87 -71
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +88 -88
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_operations.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch32.hpp +4 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_aarch64.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_alpha.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_arm.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_ppc.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_sparc.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_gcc_x86.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_arm.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_arch_ops_msvc_x86.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_operations_emulated.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_atomic.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_gcc_sync.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fence_ops_linux_arm.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/futex.hpp +110 -49
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/gcc_atomic_memory_order_utils.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/has_posix_clock_traits.hpp +51 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +26 -32
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_conversions.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +69 -30
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/intptr.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/lock_pool.hpp +51 -31
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/memory_order_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/once_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_traits.hpp +31 -31
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/alignment_of.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/has_unique_object_representations.hpp +2 -5
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_copyable.hpp +20 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_darwin_ulock.hpp +90 -16
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_dragonfly_umtx.hpp +80 -11
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_emulated.hpp +160 -15
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_freebsd_umtx.hpp +327 -38
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_futex.hpp +276 -33
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_ops_generic.hpp +260 -20
- data/src/cxx_supportlib/vendor-modified/boost/atomic/fences.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic.hpp +14 -18
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_flag.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/atomic/ipc_atomic_ref.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/atomic/posix_clock_traits_fwd.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/thread_pause.hpp +102 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/wait_result.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +108 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +1235 -1009
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_lib.h +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +23 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +88 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/operator_new_helpers.hpp +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +72 -13
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/std_fwd.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +8 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +31 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +37 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +23 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +72 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/new_allocator.hpp +3 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +54 -23
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +32 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +27 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +37 -17
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +23 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +41 -20
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +5 -8
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_is_avalanching.hpp +57 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +29 -29
- data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/core/data.hpp +15 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/default_allocator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/demangle.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/assert.hpp +18 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/sp_thread_sleep.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/static_assert.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -10
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +35 -27
- data/src/cxx_supportlib/vendor-modified/boost/core/scoped_enum.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/size.hpp +14 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/span.hpp +20 -9
- data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +0 -5
- data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_rebind.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +43 -64
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_def.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/config_undef.hpp +1 -5
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/eval_if_default.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/facade_iterator_category.hpp +103 -117
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/conjunction.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/disjunction.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/negation.hpp +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/type_traits/type_identity.hpp +54 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/distance.hpp +32 -38
- data/src/cxx_supportlib/vendor-modified/boost/iterator/enable_if_convertible.hpp +84 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/interoperable.hpp +22 -34
- data/src/cxx_supportlib/vendor-modified/boost/iterator/is_iterator.hpp +16 -16
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +162 -309
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +52 -161
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +3 -11
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +804 -977
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +24 -17
- data/src/cxx_supportlib/vendor-modified/boost/iterator/min_category.hpp +83 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/minimum_category.hpp +11 -73
- data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +56 -57
- data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +123 -156
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/buffer_view.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +36 -33
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +43 -50
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +23 -27
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +10 -11
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +6 -7
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/type_traits.hpp +81 -0
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +8 -9
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +1 -12
- data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +8 -26
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/launder.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/std_ns_begin.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/mp11/algorithm.hpp +11 -44
- data/src/cxx_supportlib/vendor-modified/boost/mp11/detail/mp_map_find.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/mp11/set.hpp +33 -1
- data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/and.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/na_assert.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/ptr_to_ref.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitand.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/bitor.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/mpl/or.hpp +2 -6
- data/src/cxx_supportlib/vendor-modified/boost/pool/pool.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/pool/simple_segregated_storage.hpp +0 -13
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +190 -190
- data/src/cxx_supportlib/vendor-modified/boost/random/beta_distribution.hpp +12 -2
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/config.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/size.hpp +41 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/xoshiro_base.hpp +472 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/random/gamma_distribution.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/generalized_inverse_gaussian_distribution.hpp +339 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +12 -14
- data/src/cxx_supportlib/vendor-modified/boost/random/inverse_gaussian_distribution.hpp +226 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +63 -63
- data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_constant_distribution.hpp +7 -10
- data/src/cxx_supportlib/vendor-modified/boost/random/piecewise_linear_distribution.hpp +8 -11
- data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -3
- data/src/cxx_supportlib/vendor-modified/boost/random/splitmix64.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/random/xoshiro.hpp +488 -0
- data/src/cxx_supportlib/vendor-modified/boost/random.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/has_member_size.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/detail/msvc_has_iterator_workaround.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/has_range_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/range/size_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +35 -18
- data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +18 -101
- data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +4 -10
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +63 -17
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +71 -16
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +22 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +11 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +40 -38
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +39 -37
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +46 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +57 -8
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +21 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +18 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +23 -18
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +11 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +12 -9
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +16 -11
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits_defaults.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +54 -49
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +64 -62
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +0 -4
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count.hpp +1 -43
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/deprecated_macros.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +2 -77
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base.hpp +1 -64
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +0 -77
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_cxx20_constexpr.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock.hpp +5 -28
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +41 -40
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +0 -18
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +31 -10
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +34 -8
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/core.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa/table.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/unordered/{unordered_printers.hpp → detail/unordered_printers.hpp} +34 -36
- data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +6 -49
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_map.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_node_set.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/nginx_module/ContentHandler.c +2 -0
- data/src/ruby_supportlib/phusion_passenger/config/download_agent_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/download_nginx_engine_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/install_agent_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/install_standalone_runtime_command.rb +3 -5
- data/src/ruby_supportlib/phusion_passenger/config/installation_utils.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +5 -3
- data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +6 -13
- data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +29 -30
- data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -3
- data/src/ruby_supportlib/phusion_passenger/standalone/config_utils.rb +2 -0
- data/src/ruby_supportlib/phusion_passenger/standalone/start_command/builtin_engine.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/json.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/utils/terminal_choice_menu.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/vendor/crash_watch/gdb_controller.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger.rb +8 -8
- metadata +26 -99
- data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +0 -47
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_posix.hpp +0 -41
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc_sunos.hpp +0 -34
- data/src/cxx_supportlib/vendor-modified/boost/align/detail/is_alignment.hpp +0 -28
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/pause.hpp +0 -68
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +0 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_enum.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_nothrow_default_constructible.hpp +0 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/remove_cv.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/wait_on_address.hpp +0 -64
- data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +0 -15
- data/src/cxx_supportlib/vendor-modified/boost/detail/indirect_traits.hpp +0 -195
- data/src/cxx_supportlib/vendor-modified/boost/detail/select_type.hpp +0 -36
- data/src/cxx_supportlib/vendor-modified/boost/iterator/detail/enable_if.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/internals.hpp +0 -35
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +0 -120
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_debug.cpp +0 -59
- data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/libs/system/src/error_code.cpp +0 -31
- data/src/cxx_supportlib/vendor-modified/boost/regex/config/borland.hpp +0 -72
- data/src/cxx_supportlib/vendor-modified/boost/regex/config/cwchar.hpp +0 -207
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/static_mutex.hpp +0 -182
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +0 -797
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +0 -1598
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +0 -3174
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +0 -511
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/char_regex_traits.hpp +0 -81
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +0 -1237
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -213
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/error_type.hpp +0 -59
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +0 -1516
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/indexed_bit_flag.hpp +0 -54
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_category.hpp +0 -91
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/iterator_traits.hpp +0 -135
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +0 -161
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +0 -716
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +0 -183
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +0 -171
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +0 -128
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +0 -645
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +0 -1030
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +0 -1947
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +0 -1131
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +0 -146
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +0 -83
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regbase.hpp +0 -180
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -166
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +0 -1158
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_fwd.hpp +0 -73
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_grep.hpp +0 -155
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_iterator.hpp +0 -195
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_match.hpp +0 -382
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_merge.hpp +0 -93
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +0 -241
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_replace.hpp +0 -99
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_search.hpp +0 -217
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_split.hpp +0 -174
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +0 -327
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits.hpp +0 -189
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +0 -997
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +0 -237
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +0 -321
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/sub_match.hpp +0 -516
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/syntax_type.hpp +0 -105
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_iterator.hpp +0 -185
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/u32regex_token_iterator.hpp +0 -360
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +0 -871
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +0 -1229
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +0 -79
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp +0 -63
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp +0 -88
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_pt.hpp +0 -104
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_spin.hpp +0 -69
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_sync.hpp +0 -72
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +0 -163
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +0 -152
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +0 -185
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_atomic.hpp +0 -148
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +0 -170
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +0 -200
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +0 -194
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +0 -179
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +0 -186
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +0 -147
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +0 -174
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +0 -141
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +0 -165
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +0 -163
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_gcc_intrinsics.hpp +0 -30
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_has_sync_intrinsics.hpp +0 -69
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +0 -128
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_nt.hpp +0 -96
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_pt.hpp +0 -86
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_sync.hpp +0 -94
|
@@ -1,871 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
*
|
|
3
|
-
* Copyright (c) 2004
|
|
4
|
-
* John Maddock
|
|
5
|
-
*
|
|
6
|
-
* Use, modification and distribution are subject to the
|
|
7
|
-
* Boost Software License, Version 1.0. (See accompanying file
|
|
8
|
-
* LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
9
|
-
*
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
/*
|
|
13
|
-
* LOCATION: see http://www.boost.org for most recent version.
|
|
14
|
-
* FILE unicode_iterator.hpp
|
|
15
|
-
* VERSION see <boost/version.hpp>
|
|
16
|
-
* DESCRIPTION: Iterator adapters for converting between different Unicode encodings.
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
/****************************************************************************
|
|
20
|
-
|
|
21
|
-
Contents:
|
|
22
|
-
~~~~~~~~~
|
|
23
|
-
|
|
24
|
-
1) Read Only, Input Adapters:
|
|
25
|
-
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
26
|
-
|
|
27
|
-
template <class BaseIterator, class U8Type = ::boost::uint8_t>
|
|
28
|
-
class u32_to_u8_iterator;
|
|
29
|
-
|
|
30
|
-
Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-8.
|
|
31
|
-
|
|
32
|
-
template <class BaseIterator, class U32Type = ::boost::uint32_t>
|
|
33
|
-
class u8_to_u32_iterator;
|
|
34
|
-
|
|
35
|
-
Adapts sequence of UTF-8 code points to "look like" a sequence of UTF-32.
|
|
36
|
-
|
|
37
|
-
template <class BaseIterator, class U16Type = ::boost::uint16_t>
|
|
38
|
-
class u32_to_u16_iterator;
|
|
39
|
-
|
|
40
|
-
Adapts sequence of UTF-32 code points to "look like" a sequence of UTF-16.
|
|
41
|
-
|
|
42
|
-
template <class BaseIterator, class U32Type = ::boost::uint32_t>
|
|
43
|
-
class u16_to_u32_iterator;
|
|
44
|
-
|
|
45
|
-
Adapts sequence of UTF-16 code points to "look like" a sequence of UTF-32.
|
|
46
|
-
|
|
47
|
-
2) Single pass output iterator adapters:
|
|
48
|
-
|
|
49
|
-
template <class BaseIterator>
|
|
50
|
-
class utf8_output_iterator;
|
|
51
|
-
|
|
52
|
-
Accepts UTF-32 code points and forwards them on as UTF-8 code points.
|
|
53
|
-
|
|
54
|
-
template <class BaseIterator>
|
|
55
|
-
class utf16_output_iterator;
|
|
56
|
-
|
|
57
|
-
Accepts UTF-32 code points and forwards them on as UTF-16 code points.
|
|
58
|
-
|
|
59
|
-
****************************************************************************/
|
|
60
|
-
|
|
61
|
-
#ifndef BOOST_REGEX_V4_UNICODE_ITERATOR_HPP
|
|
62
|
-
#define BOOST_REGEX_V4_UNICODE_ITERATOR_HPP
|
|
63
|
-
#include <boost/cstdint.hpp>
|
|
64
|
-
#include <boost/regex/config.hpp>
|
|
65
|
-
#include <boost/static_assert.hpp>
|
|
66
|
-
#include <boost/throw_exception.hpp>
|
|
67
|
-
#include <stdexcept>
|
|
68
|
-
#ifndef BOOST_NO_STD_LOCALE
|
|
69
|
-
#include <sstream>
|
|
70
|
-
#include <ios>
|
|
71
|
-
#endif
|
|
72
|
-
#include <limits.h> // CHAR_BIT
|
|
73
|
-
|
|
74
|
-
#ifdef BOOST_REGEX_CXX03
|
|
75
|
-
|
|
76
|
-
#else
|
|
77
|
-
#endif
|
|
78
|
-
|
|
79
|
-
namespace boost{
|
|
80
|
-
|
|
81
|
-
namespace detail{
|
|
82
|
-
|
|
83
|
-
static const ::boost::uint16_t high_surrogate_base = 0xD7C0u;
|
|
84
|
-
static const ::boost::uint16_t low_surrogate_base = 0xDC00u;
|
|
85
|
-
static const ::boost::uint32_t ten_bit_mask = 0x3FFu;
|
|
86
|
-
|
|
87
|
-
inline bool is_high_surrogate(::boost::uint16_t v)
|
|
88
|
-
{
|
|
89
|
-
return (v & 0xFFFFFC00u) == 0xd800u;
|
|
90
|
-
}
|
|
91
|
-
inline bool is_low_surrogate(::boost::uint16_t v)
|
|
92
|
-
{
|
|
93
|
-
return (v & 0xFFFFFC00u) == 0xdc00u;
|
|
94
|
-
}
|
|
95
|
-
template <class T>
|
|
96
|
-
inline bool is_surrogate(T v)
|
|
97
|
-
{
|
|
98
|
-
return (v & 0xFFFFF800u) == 0xd800;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
inline unsigned utf8_byte_count(boost::uint8_t c)
|
|
102
|
-
{
|
|
103
|
-
// if the most significant bit with a zero in it is in position
|
|
104
|
-
// 8-N then there are N bytes in this UTF-8 sequence:
|
|
105
|
-
boost::uint8_t mask = 0x80u;
|
|
106
|
-
unsigned result = 0;
|
|
107
|
-
while(c & mask)
|
|
108
|
-
{
|
|
109
|
-
++result;
|
|
110
|
-
mask >>= 1;
|
|
111
|
-
}
|
|
112
|
-
return (result == 0) ? 1 : ((result > 4) ? 4 : result);
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
inline unsigned utf8_trailing_byte_count(boost::uint8_t c)
|
|
116
|
-
{
|
|
117
|
-
return utf8_byte_count(c) - 1;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
#ifdef BOOST_MSVC
|
|
121
|
-
#pragma warning(push)
|
|
122
|
-
#pragma warning(disable:4100)
|
|
123
|
-
#endif
|
|
124
|
-
#ifndef BOOST_NO_EXCEPTIONS
|
|
125
|
-
BOOST_NORETURN
|
|
126
|
-
#endif
|
|
127
|
-
inline void invalid_utf32_code_point(::boost::uint32_t val)
|
|
128
|
-
{
|
|
129
|
-
#ifndef BOOST_NO_STD_LOCALE
|
|
130
|
-
std::stringstream ss;
|
|
131
|
-
ss << "Invalid UTF-32 code point U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-16 sequence";
|
|
132
|
-
std::out_of_range e(ss.str());
|
|
133
|
-
#else
|
|
134
|
-
std::out_of_range e("Invalid UTF-32 code point encountered while trying to encode UTF-16 sequence");
|
|
135
|
-
#endif
|
|
136
|
-
boost::throw_exception(e);
|
|
137
|
-
}
|
|
138
|
-
#ifdef BOOST_MSVC
|
|
139
|
-
#pragma warning(pop)
|
|
140
|
-
#endif
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
} // namespace detail
|
|
144
|
-
|
|
145
|
-
template <class BaseIterator, class U16Type = ::boost::uint16_t>
|
|
146
|
-
class u32_to_u16_iterator
|
|
147
|
-
{
|
|
148
|
-
#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
|
|
149
|
-
typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
|
|
150
|
-
|
|
151
|
-
BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32);
|
|
152
|
-
BOOST_STATIC_ASSERT(sizeof(U16Type)*CHAR_BIT == 16);
|
|
153
|
-
#endif
|
|
154
|
-
|
|
155
|
-
public:
|
|
156
|
-
typedef std::ptrdiff_t difference_type;
|
|
157
|
-
typedef U16Type value_type;
|
|
158
|
-
typedef value_type const* pointer;
|
|
159
|
-
typedef value_type const reference;
|
|
160
|
-
typedef std::bidirectional_iterator_tag iterator_category;
|
|
161
|
-
|
|
162
|
-
reference operator*()const
|
|
163
|
-
{
|
|
164
|
-
if(m_current == 2)
|
|
165
|
-
extract_current();
|
|
166
|
-
return m_values[m_current];
|
|
167
|
-
}
|
|
168
|
-
bool operator==(const u32_to_u16_iterator& that)const
|
|
169
|
-
{
|
|
170
|
-
if(m_position == that.m_position)
|
|
171
|
-
{
|
|
172
|
-
// Both m_currents must be equal, or both even
|
|
173
|
-
// this is the same as saying their sum must be even:
|
|
174
|
-
return (m_current + that.m_current) & 1u ? false : true;
|
|
175
|
-
}
|
|
176
|
-
return false;
|
|
177
|
-
}
|
|
178
|
-
bool operator!=(const u32_to_u16_iterator& that)const
|
|
179
|
-
{
|
|
180
|
-
return !(*this == that);
|
|
181
|
-
}
|
|
182
|
-
u32_to_u16_iterator& operator++()
|
|
183
|
-
{
|
|
184
|
-
// if we have a pending read then read now, so that we know whether
|
|
185
|
-
// to skip a position, or move to a low-surrogate:
|
|
186
|
-
if(m_current == 2)
|
|
187
|
-
{
|
|
188
|
-
// pending read:
|
|
189
|
-
extract_current();
|
|
190
|
-
}
|
|
191
|
-
// move to the next surrogate position:
|
|
192
|
-
++m_current;
|
|
193
|
-
// if we've reached the end skip a position:
|
|
194
|
-
if(m_values[m_current] == 0)
|
|
195
|
-
{
|
|
196
|
-
m_current = 2;
|
|
197
|
-
++m_position;
|
|
198
|
-
}
|
|
199
|
-
return *this;
|
|
200
|
-
}
|
|
201
|
-
u32_to_u16_iterator operator++(int)
|
|
202
|
-
{
|
|
203
|
-
u32_to_u16_iterator r(*this);
|
|
204
|
-
++(*this);
|
|
205
|
-
return r;
|
|
206
|
-
}
|
|
207
|
-
u32_to_u16_iterator& operator--()
|
|
208
|
-
{
|
|
209
|
-
if(m_current != 1)
|
|
210
|
-
{
|
|
211
|
-
// decrementing an iterator always leads to a valid position:
|
|
212
|
-
--m_position;
|
|
213
|
-
extract_current();
|
|
214
|
-
m_current = m_values[1] ? 1 : 0;
|
|
215
|
-
}
|
|
216
|
-
else
|
|
217
|
-
{
|
|
218
|
-
m_current = 0;
|
|
219
|
-
}
|
|
220
|
-
return *this;
|
|
221
|
-
}
|
|
222
|
-
u32_to_u16_iterator operator--(int)
|
|
223
|
-
{
|
|
224
|
-
u32_to_u16_iterator r(*this);
|
|
225
|
-
--(*this);
|
|
226
|
-
return r;
|
|
227
|
-
}
|
|
228
|
-
BaseIterator base()const
|
|
229
|
-
{
|
|
230
|
-
return m_position;
|
|
231
|
-
}
|
|
232
|
-
// construct:
|
|
233
|
-
u32_to_u16_iterator() : m_position(), m_current(0)
|
|
234
|
-
{
|
|
235
|
-
m_values[0] = 0;
|
|
236
|
-
m_values[1] = 0;
|
|
237
|
-
m_values[2] = 0;
|
|
238
|
-
}
|
|
239
|
-
u32_to_u16_iterator(BaseIterator b) : m_position(b), m_current(2)
|
|
240
|
-
{
|
|
241
|
-
m_values[0] = 0;
|
|
242
|
-
m_values[1] = 0;
|
|
243
|
-
m_values[2] = 0;
|
|
244
|
-
}
|
|
245
|
-
private:
|
|
246
|
-
|
|
247
|
-
void extract_current()const
|
|
248
|
-
{
|
|
249
|
-
// begin by checking for a code point out of range:
|
|
250
|
-
::boost::uint32_t v = *m_position;
|
|
251
|
-
if(v >= 0x10000u)
|
|
252
|
-
{
|
|
253
|
-
if(v > 0x10FFFFu)
|
|
254
|
-
detail::invalid_utf32_code_point(*m_position);
|
|
255
|
-
// split into two surrogates:
|
|
256
|
-
m_values[0] = static_cast<U16Type>(v >> 10) + detail::high_surrogate_base;
|
|
257
|
-
m_values[1] = static_cast<U16Type>(v & detail::ten_bit_mask) + detail::low_surrogate_base;
|
|
258
|
-
m_current = 0;
|
|
259
|
-
BOOST_REGEX_ASSERT(detail::is_high_surrogate(m_values[0]));
|
|
260
|
-
BOOST_REGEX_ASSERT(detail::is_low_surrogate(m_values[1]));
|
|
261
|
-
}
|
|
262
|
-
else
|
|
263
|
-
{
|
|
264
|
-
// 16-bit code point:
|
|
265
|
-
m_values[0] = static_cast<U16Type>(*m_position);
|
|
266
|
-
m_values[1] = 0;
|
|
267
|
-
m_current = 0;
|
|
268
|
-
// value must not be a surrogate:
|
|
269
|
-
if(detail::is_surrogate(m_values[0]))
|
|
270
|
-
detail::invalid_utf32_code_point(*m_position);
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
BaseIterator m_position;
|
|
274
|
-
mutable U16Type m_values[3];
|
|
275
|
-
mutable unsigned m_current;
|
|
276
|
-
};
|
|
277
|
-
|
|
278
|
-
template <class BaseIterator, class U32Type = ::boost::uint32_t>
|
|
279
|
-
class u16_to_u32_iterator
|
|
280
|
-
{
|
|
281
|
-
// special values for pending iterator reads:
|
|
282
|
-
BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu);
|
|
283
|
-
|
|
284
|
-
#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
|
|
285
|
-
typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
|
|
286
|
-
|
|
287
|
-
BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 16);
|
|
288
|
-
BOOST_STATIC_ASSERT(sizeof(U32Type)*CHAR_BIT == 32);
|
|
289
|
-
#endif
|
|
290
|
-
|
|
291
|
-
public:
|
|
292
|
-
typedef std::ptrdiff_t difference_type;
|
|
293
|
-
typedef U32Type value_type;
|
|
294
|
-
typedef value_type const* pointer;
|
|
295
|
-
typedef value_type const reference;
|
|
296
|
-
typedef std::bidirectional_iterator_tag iterator_category;
|
|
297
|
-
|
|
298
|
-
reference operator*()const
|
|
299
|
-
{
|
|
300
|
-
if(m_value == pending_read)
|
|
301
|
-
extract_current();
|
|
302
|
-
return m_value;
|
|
303
|
-
}
|
|
304
|
-
bool operator==(const u16_to_u32_iterator& that)const
|
|
305
|
-
{
|
|
306
|
-
return m_position == that.m_position;
|
|
307
|
-
}
|
|
308
|
-
bool operator!=(const u16_to_u32_iterator& that)const
|
|
309
|
-
{
|
|
310
|
-
return !(*this == that);
|
|
311
|
-
}
|
|
312
|
-
u16_to_u32_iterator& operator++()
|
|
313
|
-
{
|
|
314
|
-
// skip high surrogate first if there is one:
|
|
315
|
-
if(detail::is_high_surrogate(*m_position)) ++m_position;
|
|
316
|
-
++m_position;
|
|
317
|
-
m_value = pending_read;
|
|
318
|
-
return *this;
|
|
319
|
-
}
|
|
320
|
-
u16_to_u32_iterator operator++(int)
|
|
321
|
-
{
|
|
322
|
-
u16_to_u32_iterator r(*this);
|
|
323
|
-
++(*this);
|
|
324
|
-
return r;
|
|
325
|
-
}
|
|
326
|
-
u16_to_u32_iterator& operator--()
|
|
327
|
-
{
|
|
328
|
-
--m_position;
|
|
329
|
-
// if we have a low surrogate then go back one more:
|
|
330
|
-
if(detail::is_low_surrogate(*m_position))
|
|
331
|
-
--m_position;
|
|
332
|
-
m_value = pending_read;
|
|
333
|
-
return *this;
|
|
334
|
-
}
|
|
335
|
-
u16_to_u32_iterator operator--(int)
|
|
336
|
-
{
|
|
337
|
-
u16_to_u32_iterator r(*this);
|
|
338
|
-
--(*this);
|
|
339
|
-
return r;
|
|
340
|
-
}
|
|
341
|
-
BaseIterator base()const
|
|
342
|
-
{
|
|
343
|
-
return m_position;
|
|
344
|
-
}
|
|
345
|
-
// construct:
|
|
346
|
-
u16_to_u32_iterator() : m_position()
|
|
347
|
-
{
|
|
348
|
-
m_value = pending_read;
|
|
349
|
-
}
|
|
350
|
-
u16_to_u32_iterator(BaseIterator b) : m_position(b)
|
|
351
|
-
{
|
|
352
|
-
m_value = pending_read;
|
|
353
|
-
}
|
|
354
|
-
//
|
|
355
|
-
// Range checked version:
|
|
356
|
-
//
|
|
357
|
-
u16_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b)
|
|
358
|
-
{
|
|
359
|
-
m_value = pending_read;
|
|
360
|
-
//
|
|
361
|
-
// The range must not start with a low surrogate, or end in a high surrogate,
|
|
362
|
-
// otherwise we run the risk of running outside the underlying input range.
|
|
363
|
-
// Likewise b must not be located at a low surrogate.
|
|
364
|
-
//
|
|
365
|
-
boost::uint16_t val;
|
|
366
|
-
if(start != end)
|
|
367
|
-
{
|
|
368
|
-
if((b != start) && (b != end))
|
|
369
|
-
{
|
|
370
|
-
val = *b;
|
|
371
|
-
if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u))
|
|
372
|
-
invalid_code_point(val);
|
|
373
|
-
}
|
|
374
|
-
val = *start;
|
|
375
|
-
if(detail::is_surrogate(val) && ((val & 0xFC00u) == 0xDC00u))
|
|
376
|
-
invalid_code_point(val);
|
|
377
|
-
val = *--end;
|
|
378
|
-
if(detail::is_high_surrogate(val))
|
|
379
|
-
invalid_code_point(val);
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
private:
|
|
383
|
-
static void invalid_code_point(::boost::uint16_t val)
|
|
384
|
-
{
|
|
385
|
-
#ifndef BOOST_NO_STD_LOCALE
|
|
386
|
-
std::stringstream ss;
|
|
387
|
-
ss << "Misplaced UTF-16 surrogate U+" << std::showbase << std::hex << val << " encountered while trying to encode UTF-32 sequence";
|
|
388
|
-
std::out_of_range e(ss.str());
|
|
389
|
-
#else
|
|
390
|
-
std::out_of_range e("Misplaced UTF-16 surrogate encountered while trying to encode UTF-32 sequence");
|
|
391
|
-
#endif
|
|
392
|
-
boost::throw_exception(e);
|
|
393
|
-
}
|
|
394
|
-
void extract_current()const
|
|
395
|
-
{
|
|
396
|
-
m_value = static_cast<U32Type>(static_cast< ::boost::uint16_t>(*m_position));
|
|
397
|
-
// if the last value is a high surrogate then adjust m_position and m_value as needed:
|
|
398
|
-
if(detail::is_high_surrogate(*m_position))
|
|
399
|
-
{
|
|
400
|
-
// precondition; next value must have be a low-surrogate:
|
|
401
|
-
BaseIterator next(m_position);
|
|
402
|
-
::boost::uint16_t t = *++next;
|
|
403
|
-
if((t & 0xFC00u) != 0xDC00u)
|
|
404
|
-
invalid_code_point(t);
|
|
405
|
-
m_value = (m_value - detail::high_surrogate_base) << 10;
|
|
406
|
-
m_value |= (static_cast<U32Type>(static_cast< ::boost::uint16_t>(t)) & detail::ten_bit_mask);
|
|
407
|
-
}
|
|
408
|
-
// postcondition; result must not be a surrogate:
|
|
409
|
-
if(detail::is_surrogate(m_value))
|
|
410
|
-
invalid_code_point(static_cast< ::boost::uint16_t>(m_value));
|
|
411
|
-
}
|
|
412
|
-
BaseIterator m_position;
|
|
413
|
-
mutable U32Type m_value;
|
|
414
|
-
};
|
|
415
|
-
|
|
416
|
-
template <class BaseIterator, class U8Type = ::boost::uint8_t>
|
|
417
|
-
class u32_to_u8_iterator
|
|
418
|
-
{
|
|
419
|
-
#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
|
|
420
|
-
typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
|
|
421
|
-
|
|
422
|
-
BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 32);
|
|
423
|
-
BOOST_STATIC_ASSERT(sizeof(U8Type)*CHAR_BIT == 8);
|
|
424
|
-
#endif
|
|
425
|
-
|
|
426
|
-
public:
|
|
427
|
-
typedef std::ptrdiff_t difference_type;
|
|
428
|
-
typedef U8Type value_type;
|
|
429
|
-
typedef value_type const* pointer;
|
|
430
|
-
typedef value_type const reference;
|
|
431
|
-
typedef std::bidirectional_iterator_tag iterator_category;
|
|
432
|
-
|
|
433
|
-
reference operator*()const
|
|
434
|
-
{
|
|
435
|
-
if(m_current == 4)
|
|
436
|
-
extract_current();
|
|
437
|
-
return m_values[m_current];
|
|
438
|
-
}
|
|
439
|
-
bool operator==(const u32_to_u8_iterator& that)const
|
|
440
|
-
{
|
|
441
|
-
if(m_position == that.m_position)
|
|
442
|
-
{
|
|
443
|
-
// either the m_current's must be equal, or one must be 0 and
|
|
444
|
-
// the other 4: which means neither must have bits 1 or 2 set:
|
|
445
|
-
return (m_current == that.m_current)
|
|
446
|
-
|| (((m_current | that.m_current) & 3) == 0);
|
|
447
|
-
}
|
|
448
|
-
return false;
|
|
449
|
-
}
|
|
450
|
-
bool operator!=(const u32_to_u8_iterator& that)const
|
|
451
|
-
{
|
|
452
|
-
return !(*this == that);
|
|
453
|
-
}
|
|
454
|
-
u32_to_u8_iterator& operator++()
|
|
455
|
-
{
|
|
456
|
-
// if we have a pending read then read now, so that we know whether
|
|
457
|
-
// to skip a position, or move to a low-surrogate:
|
|
458
|
-
if(m_current == 4)
|
|
459
|
-
{
|
|
460
|
-
// pending read:
|
|
461
|
-
extract_current();
|
|
462
|
-
}
|
|
463
|
-
// move to the next surrogate position:
|
|
464
|
-
++m_current;
|
|
465
|
-
// if we've reached the end skip a position:
|
|
466
|
-
if(m_values[m_current] == 0)
|
|
467
|
-
{
|
|
468
|
-
m_current = 4;
|
|
469
|
-
++m_position;
|
|
470
|
-
}
|
|
471
|
-
return *this;
|
|
472
|
-
}
|
|
473
|
-
u32_to_u8_iterator operator++(int)
|
|
474
|
-
{
|
|
475
|
-
u32_to_u8_iterator r(*this);
|
|
476
|
-
++(*this);
|
|
477
|
-
return r;
|
|
478
|
-
}
|
|
479
|
-
u32_to_u8_iterator& operator--()
|
|
480
|
-
{
|
|
481
|
-
if((m_current & 3) == 0)
|
|
482
|
-
{
|
|
483
|
-
--m_position;
|
|
484
|
-
extract_current();
|
|
485
|
-
m_current = 3;
|
|
486
|
-
while(m_current && (m_values[m_current] == 0))
|
|
487
|
-
--m_current;
|
|
488
|
-
}
|
|
489
|
-
else
|
|
490
|
-
--m_current;
|
|
491
|
-
return *this;
|
|
492
|
-
}
|
|
493
|
-
u32_to_u8_iterator operator--(int)
|
|
494
|
-
{
|
|
495
|
-
u32_to_u8_iterator r(*this);
|
|
496
|
-
--(*this);
|
|
497
|
-
return r;
|
|
498
|
-
}
|
|
499
|
-
BaseIterator base()const
|
|
500
|
-
{
|
|
501
|
-
return m_position;
|
|
502
|
-
}
|
|
503
|
-
// construct:
|
|
504
|
-
u32_to_u8_iterator() : m_position(), m_current(0)
|
|
505
|
-
{
|
|
506
|
-
m_values[0] = 0;
|
|
507
|
-
m_values[1] = 0;
|
|
508
|
-
m_values[2] = 0;
|
|
509
|
-
m_values[3] = 0;
|
|
510
|
-
m_values[4] = 0;
|
|
511
|
-
}
|
|
512
|
-
u32_to_u8_iterator(BaseIterator b) : m_position(b), m_current(4)
|
|
513
|
-
{
|
|
514
|
-
m_values[0] = 0;
|
|
515
|
-
m_values[1] = 0;
|
|
516
|
-
m_values[2] = 0;
|
|
517
|
-
m_values[3] = 0;
|
|
518
|
-
m_values[4] = 0;
|
|
519
|
-
}
|
|
520
|
-
private:
|
|
521
|
-
|
|
522
|
-
void extract_current()const
|
|
523
|
-
{
|
|
524
|
-
boost::uint32_t c = *m_position;
|
|
525
|
-
if(c > 0x10FFFFu)
|
|
526
|
-
detail::invalid_utf32_code_point(c);
|
|
527
|
-
if(c < 0x80u)
|
|
528
|
-
{
|
|
529
|
-
m_values[0] = static_cast<unsigned char>(c);
|
|
530
|
-
m_values[1] = static_cast<unsigned char>(0u);
|
|
531
|
-
m_values[2] = static_cast<unsigned char>(0u);
|
|
532
|
-
m_values[3] = static_cast<unsigned char>(0u);
|
|
533
|
-
}
|
|
534
|
-
else if(c < 0x800u)
|
|
535
|
-
{
|
|
536
|
-
m_values[0] = static_cast<unsigned char>(0xC0u + (c >> 6));
|
|
537
|
-
m_values[1] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
|
|
538
|
-
m_values[2] = static_cast<unsigned char>(0u);
|
|
539
|
-
m_values[3] = static_cast<unsigned char>(0u);
|
|
540
|
-
}
|
|
541
|
-
else if(c < 0x10000u)
|
|
542
|
-
{
|
|
543
|
-
m_values[0] = static_cast<unsigned char>(0xE0u + (c >> 12));
|
|
544
|
-
m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
|
|
545
|
-
m_values[2] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
|
|
546
|
-
m_values[3] = static_cast<unsigned char>(0u);
|
|
547
|
-
}
|
|
548
|
-
else
|
|
549
|
-
{
|
|
550
|
-
m_values[0] = static_cast<unsigned char>(0xF0u + (c >> 18));
|
|
551
|
-
m_values[1] = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu));
|
|
552
|
-
m_values[2] = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
|
|
553
|
-
m_values[3] = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
|
|
554
|
-
}
|
|
555
|
-
m_current= 0;
|
|
556
|
-
}
|
|
557
|
-
BaseIterator m_position;
|
|
558
|
-
mutable U8Type m_values[5];
|
|
559
|
-
mutable unsigned m_current;
|
|
560
|
-
};
|
|
561
|
-
|
|
562
|
-
template <class BaseIterator, class U32Type = ::boost::uint32_t>
|
|
563
|
-
class u8_to_u32_iterator
|
|
564
|
-
{
|
|
565
|
-
// special values for pending iterator reads:
|
|
566
|
-
BOOST_STATIC_CONSTANT(U32Type, pending_read = 0xffffffffu);
|
|
567
|
-
|
|
568
|
-
#if !defined(BOOST_NO_STD_ITERATOR_TRAITS)
|
|
569
|
-
typedef typename std::iterator_traits<BaseIterator>::value_type base_value_type;
|
|
570
|
-
|
|
571
|
-
BOOST_STATIC_ASSERT(sizeof(base_value_type)*CHAR_BIT == 8);
|
|
572
|
-
BOOST_STATIC_ASSERT(sizeof(U32Type)*CHAR_BIT == 32);
|
|
573
|
-
#endif
|
|
574
|
-
|
|
575
|
-
public:
|
|
576
|
-
typedef std::ptrdiff_t difference_type;
|
|
577
|
-
typedef U32Type value_type;
|
|
578
|
-
typedef value_type const* pointer;
|
|
579
|
-
typedef value_type const reference;
|
|
580
|
-
typedef std::bidirectional_iterator_tag iterator_category;
|
|
581
|
-
|
|
582
|
-
reference operator*()const
|
|
583
|
-
{
|
|
584
|
-
if(m_value == pending_read)
|
|
585
|
-
extract_current();
|
|
586
|
-
return m_value;
|
|
587
|
-
}
|
|
588
|
-
bool operator==(const u8_to_u32_iterator& that)const
|
|
589
|
-
{
|
|
590
|
-
return m_position == that.m_position;
|
|
591
|
-
}
|
|
592
|
-
bool operator!=(const u8_to_u32_iterator& that)const
|
|
593
|
-
{
|
|
594
|
-
return !(*this == that);
|
|
595
|
-
}
|
|
596
|
-
u8_to_u32_iterator& operator++()
|
|
597
|
-
{
|
|
598
|
-
// We must not start with a continuation character:
|
|
599
|
-
if((static_cast<boost::uint8_t>(*m_position) & 0xC0) == 0x80)
|
|
600
|
-
invalid_sequence();
|
|
601
|
-
// skip high surrogate first if there is one:
|
|
602
|
-
unsigned c = detail::utf8_byte_count(*m_position);
|
|
603
|
-
if(m_value == pending_read)
|
|
604
|
-
{
|
|
605
|
-
// Since we haven't read in a value, we need to validate the code points:
|
|
606
|
-
for(unsigned i = 0; i < c; ++i)
|
|
607
|
-
{
|
|
608
|
-
++m_position;
|
|
609
|
-
// We must have a continuation byte:
|
|
610
|
-
if((i != c - 1) && ((static_cast<boost::uint8_t>(*m_position) & 0xC0) != 0x80))
|
|
611
|
-
invalid_sequence();
|
|
612
|
-
}
|
|
613
|
-
}
|
|
614
|
-
else
|
|
615
|
-
{
|
|
616
|
-
std::advance(m_position, c);
|
|
617
|
-
}
|
|
618
|
-
m_value = pending_read;
|
|
619
|
-
return *this;
|
|
620
|
-
}
|
|
621
|
-
u8_to_u32_iterator operator++(int)
|
|
622
|
-
{
|
|
623
|
-
u8_to_u32_iterator r(*this);
|
|
624
|
-
++(*this);
|
|
625
|
-
return r;
|
|
626
|
-
}
|
|
627
|
-
u8_to_u32_iterator& operator--()
|
|
628
|
-
{
|
|
629
|
-
// Keep backtracking until we don't have a trailing character:
|
|
630
|
-
unsigned count = 0;
|
|
631
|
-
while((*--m_position & 0xC0u) == 0x80u) ++count;
|
|
632
|
-
// now check that the sequence was valid:
|
|
633
|
-
if(count != detail::utf8_trailing_byte_count(*m_position))
|
|
634
|
-
invalid_sequence();
|
|
635
|
-
m_value = pending_read;
|
|
636
|
-
return *this;
|
|
637
|
-
}
|
|
638
|
-
u8_to_u32_iterator operator--(int)
|
|
639
|
-
{
|
|
640
|
-
u8_to_u32_iterator r(*this);
|
|
641
|
-
--(*this);
|
|
642
|
-
return r;
|
|
643
|
-
}
|
|
644
|
-
BaseIterator base()const
|
|
645
|
-
{
|
|
646
|
-
return m_position;
|
|
647
|
-
}
|
|
648
|
-
// construct:
|
|
649
|
-
u8_to_u32_iterator() : m_position()
|
|
650
|
-
{
|
|
651
|
-
m_value = pending_read;
|
|
652
|
-
}
|
|
653
|
-
u8_to_u32_iterator(BaseIterator b) : m_position(b)
|
|
654
|
-
{
|
|
655
|
-
m_value = pending_read;
|
|
656
|
-
}
|
|
657
|
-
//
|
|
658
|
-
// Checked constructor:
|
|
659
|
-
//
|
|
660
|
-
u8_to_u32_iterator(BaseIterator b, BaseIterator start, BaseIterator end) : m_position(b)
|
|
661
|
-
{
|
|
662
|
-
m_value = pending_read;
|
|
663
|
-
//
|
|
664
|
-
// We must not start with a continuation character, or end with a
|
|
665
|
-
// truncated UTF-8 sequence otherwise we run the risk of going past
|
|
666
|
-
// the start/end of the underlying sequence:
|
|
667
|
-
//
|
|
668
|
-
if(start != end)
|
|
669
|
-
{
|
|
670
|
-
unsigned char v = *start;
|
|
671
|
-
if((v & 0xC0u) == 0x80u)
|
|
672
|
-
invalid_sequence();
|
|
673
|
-
if((b != start) && (b != end) && ((*b & 0xC0u) == 0x80u))
|
|
674
|
-
invalid_sequence();
|
|
675
|
-
BaseIterator pos = end;
|
|
676
|
-
do
|
|
677
|
-
{
|
|
678
|
-
v = *--pos;
|
|
679
|
-
}
|
|
680
|
-
while((start != pos) && ((v & 0xC0u) == 0x80u));
|
|
681
|
-
std::ptrdiff_t extra = detail::utf8_byte_count(v);
|
|
682
|
-
if(std::distance(pos, end) < extra)
|
|
683
|
-
invalid_sequence();
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
private:
|
|
687
|
-
static void invalid_sequence()
|
|
688
|
-
{
|
|
689
|
-
std::out_of_range e("Invalid UTF-8 sequence encountered while trying to encode UTF-32 character");
|
|
690
|
-
boost::throw_exception(e);
|
|
691
|
-
}
|
|
692
|
-
void extract_current()const
|
|
693
|
-
{
|
|
694
|
-
m_value = static_cast<U32Type>(static_cast< ::boost::uint8_t>(*m_position));
|
|
695
|
-
// we must not have a continuation character:
|
|
696
|
-
if((m_value & 0xC0u) == 0x80u)
|
|
697
|
-
invalid_sequence();
|
|
698
|
-
// see how many extra bytes we have:
|
|
699
|
-
unsigned extra = detail::utf8_trailing_byte_count(*m_position);
|
|
700
|
-
// extract the extra bits, 6 from each extra byte:
|
|
701
|
-
BaseIterator next(m_position);
|
|
702
|
-
for(unsigned c = 0; c < extra; ++c)
|
|
703
|
-
{
|
|
704
|
-
++next;
|
|
705
|
-
m_value <<= 6;
|
|
706
|
-
// We must have a continuation byte:
|
|
707
|
-
if((static_cast<boost::uint8_t>(*next) & 0xC0) != 0x80)
|
|
708
|
-
invalid_sequence();
|
|
709
|
-
m_value += static_cast<boost::uint8_t>(*next) & 0x3Fu;
|
|
710
|
-
}
|
|
711
|
-
// we now need to remove a few of the leftmost bits, but how many depends
|
|
712
|
-
// upon how many extra bytes we've extracted:
|
|
713
|
-
static const boost::uint32_t masks[4] =
|
|
714
|
-
{
|
|
715
|
-
0x7Fu,
|
|
716
|
-
0x7FFu,
|
|
717
|
-
0xFFFFu,
|
|
718
|
-
0x1FFFFFu,
|
|
719
|
-
};
|
|
720
|
-
m_value &= masks[extra];
|
|
721
|
-
// check the result is in range:
|
|
722
|
-
if(m_value > static_cast<U32Type>(0x10FFFFu))
|
|
723
|
-
invalid_sequence();
|
|
724
|
-
// The result must not be a surrogate:
|
|
725
|
-
if((m_value >= static_cast<U32Type>(0xD800)) && (m_value <= static_cast<U32Type>(0xDFFF)))
|
|
726
|
-
invalid_sequence();
|
|
727
|
-
// We should not have had an invalidly encoded UTF8 sequence:
|
|
728
|
-
if((extra > 0) && (m_value <= static_cast<U32Type>(masks[extra - 1])))
|
|
729
|
-
invalid_sequence();
|
|
730
|
-
}
|
|
731
|
-
BaseIterator m_position;
|
|
732
|
-
mutable U32Type m_value;
|
|
733
|
-
};
|
|
734
|
-
|
|
735
|
-
template <class BaseIterator>
|
|
736
|
-
class utf16_output_iterator
|
|
737
|
-
{
|
|
738
|
-
public:
|
|
739
|
-
typedef void difference_type;
|
|
740
|
-
typedef void value_type;
|
|
741
|
-
typedef boost::uint32_t* pointer;
|
|
742
|
-
typedef boost::uint32_t& reference;
|
|
743
|
-
typedef std::output_iterator_tag iterator_category;
|
|
744
|
-
|
|
745
|
-
utf16_output_iterator(const BaseIterator& b)
|
|
746
|
-
: m_position(b){}
|
|
747
|
-
utf16_output_iterator(const utf16_output_iterator& that)
|
|
748
|
-
: m_position(that.m_position){}
|
|
749
|
-
utf16_output_iterator& operator=(const utf16_output_iterator& that)
|
|
750
|
-
{
|
|
751
|
-
m_position = that.m_position;
|
|
752
|
-
return *this;
|
|
753
|
-
}
|
|
754
|
-
const utf16_output_iterator& operator*()const
|
|
755
|
-
{
|
|
756
|
-
return *this;
|
|
757
|
-
}
|
|
758
|
-
void operator=(boost::uint32_t val)const
|
|
759
|
-
{
|
|
760
|
-
push(val);
|
|
761
|
-
}
|
|
762
|
-
utf16_output_iterator& operator++()
|
|
763
|
-
{
|
|
764
|
-
return *this;
|
|
765
|
-
}
|
|
766
|
-
utf16_output_iterator& operator++(int)
|
|
767
|
-
{
|
|
768
|
-
return *this;
|
|
769
|
-
}
|
|
770
|
-
BaseIterator base()const
|
|
771
|
-
{
|
|
772
|
-
return m_position;
|
|
773
|
-
}
|
|
774
|
-
private:
|
|
775
|
-
void push(boost::uint32_t v)const
|
|
776
|
-
{
|
|
777
|
-
if(v >= 0x10000u)
|
|
778
|
-
{
|
|
779
|
-
// begin by checking for a code point out of range:
|
|
780
|
-
if(v > 0x10FFFFu)
|
|
781
|
-
detail::invalid_utf32_code_point(v);
|
|
782
|
-
// split into two surrogates:
|
|
783
|
-
*m_position++ = static_cast<boost::uint16_t>(v >> 10) + detail::high_surrogate_base;
|
|
784
|
-
*m_position++ = static_cast<boost::uint16_t>(v & detail::ten_bit_mask) + detail::low_surrogate_base;
|
|
785
|
-
}
|
|
786
|
-
else
|
|
787
|
-
{
|
|
788
|
-
// 16-bit code point:
|
|
789
|
-
// value must not be a surrogate:
|
|
790
|
-
if(detail::is_surrogate(v))
|
|
791
|
-
detail::invalid_utf32_code_point(v);
|
|
792
|
-
*m_position++ = static_cast<boost::uint16_t>(v);
|
|
793
|
-
}
|
|
794
|
-
}
|
|
795
|
-
mutable BaseIterator m_position;
|
|
796
|
-
};
|
|
797
|
-
|
|
798
|
-
template <class BaseIterator>
|
|
799
|
-
class utf8_output_iterator
|
|
800
|
-
{
|
|
801
|
-
public:
|
|
802
|
-
typedef void difference_type;
|
|
803
|
-
typedef void value_type;
|
|
804
|
-
typedef boost::uint32_t* pointer;
|
|
805
|
-
typedef boost::uint32_t& reference;
|
|
806
|
-
typedef std::output_iterator_tag iterator_category;
|
|
807
|
-
|
|
808
|
-
utf8_output_iterator(const BaseIterator& b)
|
|
809
|
-
: m_position(b){}
|
|
810
|
-
utf8_output_iterator(const utf8_output_iterator& that)
|
|
811
|
-
: m_position(that.m_position){}
|
|
812
|
-
utf8_output_iterator& operator=(const utf8_output_iterator& that)
|
|
813
|
-
{
|
|
814
|
-
m_position = that.m_position;
|
|
815
|
-
return *this;
|
|
816
|
-
}
|
|
817
|
-
const utf8_output_iterator& operator*()const
|
|
818
|
-
{
|
|
819
|
-
return *this;
|
|
820
|
-
}
|
|
821
|
-
void operator=(boost::uint32_t val)const
|
|
822
|
-
{
|
|
823
|
-
push(val);
|
|
824
|
-
}
|
|
825
|
-
utf8_output_iterator& operator++()
|
|
826
|
-
{
|
|
827
|
-
return *this;
|
|
828
|
-
}
|
|
829
|
-
utf8_output_iterator& operator++(int)
|
|
830
|
-
{
|
|
831
|
-
return *this;
|
|
832
|
-
}
|
|
833
|
-
BaseIterator base()const
|
|
834
|
-
{
|
|
835
|
-
return m_position;
|
|
836
|
-
}
|
|
837
|
-
private:
|
|
838
|
-
void push(boost::uint32_t c)const
|
|
839
|
-
{
|
|
840
|
-
if(c > 0x10FFFFu)
|
|
841
|
-
detail::invalid_utf32_code_point(c);
|
|
842
|
-
if(c < 0x80u)
|
|
843
|
-
{
|
|
844
|
-
*m_position++ = static_cast<unsigned char>(c);
|
|
845
|
-
}
|
|
846
|
-
else if(c < 0x800u)
|
|
847
|
-
{
|
|
848
|
-
*m_position++ = static_cast<unsigned char>(0xC0u + (c >> 6));
|
|
849
|
-
*m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
|
|
850
|
-
}
|
|
851
|
-
else if(c < 0x10000u)
|
|
852
|
-
{
|
|
853
|
-
*m_position++ = static_cast<unsigned char>(0xE0u + (c >> 12));
|
|
854
|
-
*m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
|
|
855
|
-
*m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
|
|
856
|
-
}
|
|
857
|
-
else
|
|
858
|
-
{
|
|
859
|
-
*m_position++ = static_cast<unsigned char>(0xF0u + (c >> 18));
|
|
860
|
-
*m_position++ = static_cast<unsigned char>(0x80u + ((c >> 12) & 0x3Fu));
|
|
861
|
-
*m_position++ = static_cast<unsigned char>(0x80u + ((c >> 6) & 0x3Fu));
|
|
862
|
-
*m_position++ = static_cast<unsigned char>(0x80u + (c & 0x3Fu));
|
|
863
|
-
}
|
|
864
|
-
}
|
|
865
|
-
mutable BaseIterator m_position;
|
|
866
|
-
};
|
|
867
|
-
|
|
868
|
-
} // namespace boost
|
|
869
|
-
|
|
870
|
-
#endif // BOOST_REGEX_UNICODE_ITERATOR_HPP
|
|
871
|
-
|