From 310b07b3e3ba739d17e18bee0021fdb953c318c3 Mon Sep 17 00:00:00 2001 From: Daniel Arndt Date: Sun, 14 Jul 2019 23:35:08 -0400 Subject: [PATCH] Update boost to version 1.70.0 --- .../include/boost/algorithm/algorithm.hpp | 8 +- .../include/boost/algorithm/clamp.hpp | 22 +- .../include/boost/algorithm/cxx11/all_of.hpp | 8 +- .../include/boost/algorithm/cxx11/any_of.hpp | 8 +- .../include/boost/algorithm/cxx11/copy_if.hpp | 12 +- .../include/boost/algorithm/cxx11/copy_n.hpp | 2 +- .../boost/algorithm/cxx11/find_if_not.hpp | 4 +- .../include/boost/algorithm/cxx11/iota.hpp | 6 +- .../boost/algorithm/cxx11/is_partitioned.hpp | 10 +- .../boost/algorithm/cxx11/is_sorted.hpp | 32 +- .../include/boost/algorithm/cxx11/none_of.hpp | 8 +- .../include/boost/algorithm/cxx11/one_of.hpp | 29 +- .../boost/algorithm/cxx11/partition_copy.hpp | 5 +- .../include/boost/algorithm/cxx14/equal.hpp | 15 +- .../boost/algorithm/cxx14/mismatch.hpp | 7 +- .../include/boost/algorithm/hex.hpp | 2 +- .../include/boost/algorithm/is_palindrome.hpp | 29 +- .../boost/algorithm/searching/boyer_moore.hpp | 16 +- .../searching/knuth_morris_pratt.hpp | 6 +- .../algorithm/string/detail/find_iterator.hpp | 2 +- .../include/boost/algorithm/string/finder.hpp | 4 - bundled/boost-1.62.0/include/boost/align.hpp | 9 +- .../include/boost/align/align.hpp | 9 +- .../include/boost/align/align_down.hpp | 18 +- .../boost/align/align_down_forward.hpp | 24 - .../include/boost/align/align_up.hpp | 18 +- .../include/boost/align/align_up_forward.hpp | 24 - .../include/boost/align/aligned_alloc.hpp | 9 +- .../include/boost/align/aligned_allocator.hpp | 56 +- .../boost/align/aligned_allocator_adaptor.hpp | 102 +- .../aligned_allocator_adaptor_forward.hpp | 13 +- .../boost/align/aligned_allocator_forward.hpp | 13 +- .../include/boost/align/aligned_delete.hpp | 13 +- .../boost/align/aligned_delete_forward.hpp | 13 +- .../include/boost/align/alignment_of.hpp | 16 +- .../boost/align/alignment_of_forward.hpp | 13 +- .../include/boost/align/assume_aligned.hpp | 13 +- .../include/boost/align/detail/address.hpp | 27 - .../include/boost/align/detail/addressof.hpp | 15 +- .../include/boost/align/detail/align.hpp | 22 +- .../boost/align/detail/align_cxx11.hpp | 13 +- .../include/boost/align/detail/align_down.hpp | 20 +- .../include/boost/align/detail/align_up.hpp | 20 +- .../boost/align/detail/aligned_alloc.hpp | 36 +- .../align/detail/aligned_alloc_android.hpp | 20 +- .../align/detail/aligned_alloc_macos.hpp | 20 +- .../boost/align/detail/aligned_alloc_msvc.hpp | 20 +- .../align/detail/aligned_alloc_posix.hpp | 20 +- .../align/detail/aligned_alloc_sunos.hpp | 20 +- .../boost/align/detail/alignment_of.hpp | 19 +- .../boost/align/detail/alignment_of_clang.hpp | 15 +- .../align/detail/alignment_of_codegear.hpp | 15 +- .../boost/align/detail/alignment_of_cxx11.hpp | 15 +- .../boost/align/detail/alignment_of_gcc.hpp | 15 +- .../boost/align/detail/alignment_of_msvc.hpp | 20 +- .../boost/align/detail/assume_aligned.hpp | 15 +- .../align/detail/assume_aligned_clang.hpp | 11 +- .../boost/align/detail/assume_aligned_gcc.hpp | 15 +- .../align/detail/assume_aligned_intel.hpp | 17 +- .../align/detail/assume_aligned_msvc.hpp | 17 +- .../boost/align/detail/element_type.hpp | 44 +- .../boost/align/detail/integral_constant.hpp | 18 +- .../include/boost/align/detail/is_aligned.hpp | 26 +- .../boost/align/detail/is_alignment.hpp | 19 +- .../boost/align/detail/is_alignment_const.hpp | 27 - .../align/detail/is_alignment_constant.hpp | 15 +- .../include/boost/align/detail/max_align.hpp | 15 +- .../boost/align/detail/max_count_of.hpp | 27 - .../boost/align/detail/max_objects.hpp | 15 +- .../include/boost/align/detail/max_size.hpp | 15 +- .../include/boost/align/detail/min_size.hpp | 15 +- .../include/boost/align/detail/padded.hpp | 24 - .../boost/align/detail/type_traits.hpp | 90 - .../include/boost/align/is_aligned.hpp | 19 +- .../boost/align/is_aligned_forward.hpp | 24 - bundled/boost-1.62.0/include/boost/any.hpp | 39 +- .../include/boost/archive/add_facet.hpp | 55 - .../boost/archive/archive_exception.hpp | 4 +- .../include/boost/archive/basic_archive.hpp | 13 +- .../boost/archive/basic_binary_iarchive.hpp | 26 +- .../boost/archive/basic_binary_iprimitive.hpp | 2 +- .../boost/archive/basic_binary_oprimitive.hpp | 2 +- .../boost/archive/basic_text_iarchive.hpp | 4 +- .../boost/archive/basic_text_oarchive.hpp | 2 +- .../boost/archive/basic_text_oprimitive.hpp | 2 - .../boost/archive/basic_xml_iarchive.hpp | 5 +- .../boost/archive/basic_xml_oarchive.hpp | 2 +- .../include/boost/archive/codecvt_null.hpp | 24 +- .../archive/detail/basic_archive_impl.hpp | 48 - .../boost/archive/detail/basic_config.hpp | 45 - .../boost/archive/detail/common_iarchive.hpp | 15 +- .../boost/archive/detail/common_oarchive.hpp | 17 +- .../boost/archive/detail/iserializer.hpp | 53 +- .../boost/archive/detail/oserializer.hpp | 43 +- .../archive/detail/utf8_codecvt_facet.hpp | 33 +- .../archive/impl/archive_serializer_map.ipp | 4 + .../archive/impl/basic_binary_iprimitive.ipp | 6 +- .../archive/impl/basic_binary_oprimitive.ipp | 2 + .../boost/archive/impl/basic_xml_grammar.hpp | 2 +- .../archive/impl/text_wiarchive_impl.ipp | 2 +- .../boost/archive/impl/xml_wiarchive_impl.ipp | 4 +- .../boost/archive/impl/xml_woarchive_impl.ipp | 9 +- .../archive/iterators/base64_from_binary.hpp | 2 +- .../archive/iterators/binary_from_base64.hpp | 2 +- .../archive/iterators/dataflow_exception.hpp | 2 +- .../boost/archive/iterators/escape.hpp | 3 +- .../boost/archive/iterators/head_iterator.hpp | 80 - .../archive/iterators/istream_iterator.hpp | 8 +- .../boost/archive/iterators/mb_from_wchar.hpp | 17 +- .../archive/iterators/transform_width.hpp | 10 + .../boost/archive/iterators/wchar_from_mb.hpp | 2 + .../boost/archive/iterators/xml_unescape.hpp | 8 +- .../archive/polymorphic_binary_iarchive.hpp | 2 +- .../archive/polymorphic_binary_oarchive.hpp | 16 +- .../boost/archive/polymorphic_iarchive.hpp | 2 +- .../boost/archive/polymorphic_oarchive.hpp | 2 +- .../archive/polymorphic_text_iarchive.hpp | 2 +- .../archive/polymorphic_text_oarchive.hpp | 12 +- .../archive/polymorphic_text_wiarchive.hpp | 2 +- .../archive/polymorphic_text_woarchive.hpp | 12 +- .../archive/polymorphic_xml_iarchive.hpp | 2 +- .../archive/polymorphic_xml_oarchive.hpp | 13 +- .../archive/polymorphic_xml_wiarchive.hpp | 2 +- .../archive/polymorphic_xml_woarchive.hpp | 14 +- .../boost/archive/shared_ptr_helper.hpp | 219 - .../include/boost/archive/text_iarchive.hpp | 4 +- .../include/boost/archive/text_oarchive.hpp | 4 +- .../include/boost/archive/text_wiarchive.hpp | 4 +- .../include/boost/archive/text_woarchive.hpp | 2 +- .../include/boost/archive/wcslen.hpp | 2 + .../boost/archive/xml_archive_exception.hpp | 2 +- .../include/boost/archive/xml_iarchive.hpp | 4 +- .../include/boost/archive/xml_oarchive.hpp | 4 +- .../include/boost/archive/xml_wiarchive.hpp | 5 +- .../include/boost/archive/xml_woarchive.hpp | 4 +- bundled/boost-1.62.0/include/boost/array.hpp | 95 +- bundled/boost-1.62.0/include/boost/asio.hpp | 59 +- .../include/boost/atomic/atomic.hpp | 11 + .../include/boost/atomic/capabilities.hpp | 51 +- .../boost/atomic/detail/atomic_flag.hpp | 1 + .../boost/atomic/detail/atomic_template.hpp | 920 +- .../boost/atomic/detail/bitwise_cast.hpp | 43 +- .../boost/atomic/detail/caps_gcc_arm.hpp | 19 +- .../boost/atomic/detail/caps_gcc_atomic.hpp | 19 +- .../boost/atomic/detail/caps_gcc_ppc.hpp | 3 +- .../boost/atomic/detail/caps_gcc_sync.hpp | 15 +- .../boost/atomic/detail/caps_gcc_x86.hpp | 37 +- .../include/boost/atomic/detail/casts.hpp | 64 - .../include/boost/atomic/detail/config.hpp | 141 +- .../include/boost/atomic/detail/int_sizes.hpp | 6 +- .../boost/atomic/detail/interlocked.hpp | 45 +- .../atomic/detail/operations_lockfree.hpp | 2 +- .../boost/atomic/detail/ops_cas_based.hpp | 2 + .../boost/atomic/detail/ops_emulated.hpp | 19 +- .../atomic/detail/ops_extending_cas_based.hpp | 15 +- .../boost/atomic/detail/ops_gcc_alpha.hpp | 32 +- .../boost/atomic/detail/ops_gcc_arm.hpp | 672 +- .../boost/atomic/detail/ops_gcc_atomic.hpp | 83 +- .../boost/atomic/detail/ops_gcc_ppc.hpp | 618 +- .../boost/atomic/detail/ops_gcc_sparc.hpp | 32 +- .../boost/atomic/detail/ops_gcc_sync.hpp | 88 +- .../boost/atomic/detail/ops_gcc_x86.hpp | 163 +- .../boost/atomic/detail/ops_gcc_x86_dcas.hpp | 622 +- .../boost/atomic/detail/ops_linux_arm.hpp | 20 +- .../boost/atomic/detail/ops_msvc_arm.hpp | 48 +- .../boost/atomic/detail/ops_msvc_x86.hpp | 143 +- .../boost/atomic/detail/ops_windows.hpp | 26 +- .../include/boost/atomic/detail/platform.hpp | 134 +- .../boost/atomic/detail/storage_type.hpp | 133 +- .../boost-1.62.0/include/boost/bind/arg.hpp | 13 +- .../boost-1.62.0/include/boost/bind/bind.hpp | 37 + .../include/boost/bind/bind_cc.hpp | 60 +- .../include/boost/bind/bind_mf_cc.hpp | 72 +- bundled/boost-1.62.0/include/boost/blank.hpp | 8 +- bundled/boost-1.62.0/include/boost/cerrno.hpp | 4 +- .../chrono/detail/inlined/mac/chrono.hpp | 20 +- .../detail/inlined/mac/process_cpu_clocks.hpp | 68 +- .../detail/inlined/mac/thread_clock.hpp | 8 +- .../chrono/detail/inlined/posix/chrono.hpp | 48 +- .../inlined/posix/process_cpu_clocks.hpp | 54 +- .../detail/inlined/posix/thread_clock.hpp | 8 +- .../chrono/detail/inlined/win/chrono.hpp | 40 +- .../detail/inlined/win/process_cpu_clocks.hpp | 28 +- .../detail/inlined/win/thread_clock.hpp | 8 +- .../include/boost/chrono/detail/system.hpp | 19 +- .../include/boost/chrono/duration.hpp | 58 +- .../include/boost/chrono/io/duration_get.hpp | 6 +- .../include/boost/chrono/io/duration_io.hpp | 2 +- .../include/boost/chrono/io/time_point_io.hpp | 24 +- .../boost/chrono/io/time_point_units.hpp | 2 +- .../include/boost/chrono/io_v1/chrono_io.hpp | 6 +- .../boost/chrono/process_cpu_clocks.hpp | 4 +- .../include/boost/chrono/system_clocks.hpp | 4 +- .../include/boost/chrono/time_point.hpp | 1 - .../include/boost/circular_buffer.hpp | 6 +- .../include/boost/concept/assert.hpp | 2 +- .../include/boost/concept/detail/general.hpp | 6 +- .../boost/concept/detail/has_constraints.hpp | 6 +- .../include/boost/concept/detail/msvc.hpp | 4 +- .../include/boost/concept/usage.hpp | 2 +- .../include/boost/concept_archetype.hpp | 5 +- .../include/boost/concept_check.hpp | 38 +- .../include/boost/concept_check/general.hpp | 4 +- .../include/boost/concept_check/msvc.hpp | 4 +- bundled/boost-1.62.0/include/boost/config.hpp | 8 +- .../include/boost/config/auto_link.hpp | 58 +- .../include/boost/config/compiler/borland.hpp | 20 +- .../include/boost/config/compiler/clang.hpp | 50 +- .../boost/config/compiler/codegear.hpp | 22 +- .../include/boost/config/compiler/comeau.hpp | 2 +- .../boost/config/compiler/common_edg.hpp | 16 + .../include/boost/config/compiler/cray.hpp | 441 +- .../boost/config/compiler/digitalmars.hpp | 17 +- .../include/boost/config/compiler/gcc.hpp | 49 +- .../include/boost/config/compiler/gcc_xml.hpp | 15 + .../boost/config/compiler/greenhills.hpp | 2 +- .../include/boost/config/compiler/hp_acc.hpp | 3 +- .../include/boost/config/compiler/intel.hpp | 40 +- .../include/boost/config/compiler/kai.hpp | 2 +- .../boost/config/compiler/metrowerks.hpp | 17 +- .../include/boost/config/compiler/mpw.hpp | 17 +- .../include/boost/config/compiler/nvcc.hpp | 7 +- .../boost/config/compiler/pathscale.hpp | 22 +- .../include/boost/config/compiler/pgi.hpp | 149 +- .../boost/config/compiler/sunpro_cc.hpp | 23 +- .../include/boost/config/compiler/vacpp.hpp | 22 +- .../include/boost/config/compiler/visualc.hpp | 91 +- .../include/boost/config/compiler/xlcpp.hpp | 23 + .../config/{ => detail}/posix_features.hpp | 0 .../{ => detail}/select_compiler_config.hpp | 23 +- .../{ => detail}/select_platform_config.hpp | 11 +- .../{ => detail}/select_stdlib_config.hpp | 5 + .../boost/config/{ => detail}/suffix.hpp | 88 +- .../include/boost/config/helper_macros.hpp | 37 + .../include/boost/config/platform/aix.hpp | 2 +- .../include/boost/config/platform/beos.hpp | 2 +- .../include/boost/config/platform/bsd.hpp | 2 +- .../include/boost/config/platform/cray.hpp | 2 +- .../include/boost/config/platform/cygwin.hpp | 19 +- .../include/boost/config/platform/haiku.hpp | 2 +- .../include/boost/config/platform/hpux.hpp | 2 +- .../include/boost/config/platform/irix.hpp | 2 +- .../include/boost/config/platform/linux.hpp | 7 +- .../include/boost/config/platform/macos.hpp | 2 +- .../include/boost/config/platform/qnxnto.hpp | 2 +- .../include/boost/config/platform/solaris.hpp | 2 +- .../include/boost/config/platform/symbian.hpp | 2 +- .../include/boost/config/platform/vxworks.hpp | 246 +- .../boost/config/stdlib/dinkumware.hpp | 68 +- .../include/boost/config/stdlib/libcomo.hpp | 9 + .../include/boost/config/stdlib/libcpp.hpp | 51 +- .../boost/config/stdlib/libstdcpp3.hpp | 62 +- .../include/boost/config/stdlib/modena.hpp | 9 + .../include/boost/config/stdlib/msl.hpp | 11 +- .../include/boost/config/stdlib/roguewave.hpp | 9 + .../include/boost/config/stdlib/sgi.hpp | 11 +- .../include/boost/config/stdlib/stlport.hpp | 9 + .../include/boost/config/stdlib/vacpp.hpp | 9 + .../include/boost/config/workaround.hpp | 279 + .../include/boost/container/adaptive_pool.hpp | 302 +- .../include/boost/container/allocator.hpp | 31 +- .../boost/container/allocator_traits.hpp | 158 +- .../include/boost/container/container_fwd.hpp | 79 +- .../include/boost/container/deque.hpp | 372 +- .../container/detail/adaptive_node_pool.hpp | 45 +- .../detail/adaptive_node_pool_impl.hpp | 1304 +- .../boost/container/detail/addressof.hpp | 4 +- .../container/detail/advanced_insert_int.hpp | 66 +- .../boost/container/detail/algorithm.hpp | 122 + .../boost/container/detail/algorithms.hpp | 90 - .../boost/container/detail/alloc_helpers.hpp | 16 +- .../container/detail/alloc_lib_auto_link.hpp | 16 - .../detail/allocator_version_traits.hpp | 17 +- .../boost/container/detail/block_list.hpp | 3 +- .../boost/container/detail/block_slist.hpp | 3 +- .../container/detail/compare_functors.hpp | 70 +- .../container/detail/construct_in_place.hpp | 2 +- .../detail/container_or_allocator_rebind.hpp | 53 + .../container/detail/container_rebind.hpp | 258 + .../boost/container/detail/copy_move_algo.hpp | 357 +- .../boost/container/detail/destroyers.hpp | 30 +- .../detail/dispatch_uses_allocator.hpp | 148 +- .../boost/container/detail/flat_tree.hpp | 1149 +- .../boost/container/detail/hash_table.hpp | 383 - .../boost/container/detail/is_container.hpp | 62 + .../detail/is_contiguous_container.hpp | 47 + .../boost/container/detail/is_sorted.hpp | 4 +- .../boost/container/detail/iterator.hpp | 46 + .../detail/iterator_to_raw_pointer.hpp | 33 +- .../boost/container/detail/iterators.hpp | 269 +- .../boost/container/detail/math_functions.hpp | 58 +- .../boost/container/detail/memory_util.hpp | 86 - .../boost/container/detail/min_max.hpp | 4 +- .../include/boost/container/detail/mpl.hpp | 62 +- .../detail/multiallocation_chain.hpp | 67 +- .../include/boost/container/detail/mutex.hpp | 17 +- .../boost/container/detail/next_capacity.hpp | 72 +- .../container/detail/node_alloc_holder.hpp | 322 +- .../boost/container/detail/node_pool.hpp | 8 +- .../boost/container/detail/node_pool_impl.hpp | 8 +- .../include/boost/container/detail/pair.hpp | 285 +- .../detail/pair_key_mapped_of_value.hpp | 55 + .../boost/container/detail/pool_common.hpp | 4 +- .../container/detail/pool_common_alloc.hpp | 14 +- .../boost/container/detail/preprocessor.hpp | 232 - .../boost/container/detail/singleton.hpp | 4 +- .../boost/container/detail/std_fwd.hpp | 3 + .../boost/container/detail/thread_mutex.hpp | 181 + .../boost/container/detail/to_raw_pointer.hpp | 33 - .../container/detail/transform_iterator.hpp | 2 +- .../include/boost/container/detail/tree.hpp | 586 +- .../boost/container/detail/type_traits.hpp | 6 +- .../boost/container/detail/utilities.hpp | 1266 - .../boost/container/detail/value_functors.hpp | 36 + .../boost/container/detail/value_init.hpp | 4 +- .../detail/variadic_templates_tools.hpp | 32 +- .../boost/container/detail/version_type.hpp | 30 +- .../boost/container/detail/workaround.hpp | 31 +- .../include/boost/container/flat_map.hpp | 1838 +- .../include/boost/container/flat_set.hpp | 1007 +- .../include/boost/container/list.hpp | 181 +- .../include/boost/container/map.hpp | 1015 +- .../include/boost/container/new_allocator.hpp | 6 +- .../boost/container/node_allocator.hpp | 38 +- .../include/boost/container/node_handle.hpp | 197 +- .../include/boost/container/options.hpp | 165 + .../include/boost/container/pmr/flat_map.hpp | 12 +- .../include/boost/container/pmr/flat_set.hpp | 12 +- .../boost/container/pmr/global_resource.hpp | 5 +- .../include/boost/container/pmr/map.hpp | 8 +- .../boost/container/pmr/memory_resource.hpp | 3 +- .../pmr/monotonic_buffer_resource.hpp | 7 +- .../container/pmr/polymorphic_allocator.hpp | 12 +- .../boost/container/pmr/resource_adaptor.hpp | 4 +- .../include/boost/container/pmr/set.hpp | 8 +- .../pmr/synchronized_pool_resource.hpp | 5 +- .../boost/container/scoped_allocator.hpp | 38 +- .../include/boost/container/set.hpp | 759 +- .../include/boost/container/slist.hpp | 182 +- .../include/boost/container/small_vector.hpp | 217 +- .../include/boost/container/stable_vector.hpp | 384 +- .../include/boost/container/static_vector.hpp | 36 +- .../include/boost/container/string.hpp | 995 +- .../boost/container/throw_exception.hpp | 40 +- .../boost/container/uses_allocator.hpp | 10 +- .../boost/container/uses_allocator_fwd.hpp | 4 +- .../include/boost/container/vector.hpp | 1124 +- .../detail/float_functions.hpp | 0 .../detail/hash_float.hpp | 10 +- .../hash => container_hash}/detail/limits.hpp | 0 .../boost/container_hash/extensions.hpp | 414 + .../include/boost/container_hash/hash.hpp | 761 + .../include/boost/container_hash/hash_fwd.hpp | 36 + .../boost-1.62.0/include/boost/convert.hpp | 13 +- .../include/boost/core/addressof.hpp | 310 +- .../include/boost/core/checked_delete.hpp | 10 +- .../include/boost/core/demangle.hpp | 13 +- .../include/boost/core/empty_value.hpp | 136 + .../include/boost/core/exchange.hpp | 49 + .../boost/core/explicit_operator_bool.hpp | 9 + .../include/boost/core/lightweight_test.hpp | 347 +- .../boost/core/lightweight_test_trait.hpp | 33 +- .../boost/core/no_exceptions_support.hpp | 2 +- .../include/boost/core/noncopyable.hpp | 17 +- .../include/boost/core/pointer_traits.hpp | 233 + .../include/boost/core/quick_exit.hpp | 59 + .../boost-1.62.0/include/boost/core/ref.hpp | 7 +- .../boost-1.62.0/include/boost/core/swap.hpp | 11 +- .../include/boost/core/typeinfo.hpp | 36 +- .../boost/core/uncaught_exceptions.hpp | 131 + .../include/boost/core/use_default.hpp | 17 + bundled/boost-1.62.0/include/boost/crc.hpp | 2212 +- .../boost-1.62.0/include/boost/cstdint.hpp | 42 +- .../include/boost/current_function.hpp | 10 +- .../include/boost/cxx11_char_types.hpp | 4 +- .../boost/date_time/adjust_functors.hpp | 54 +- .../boost/date_time/c_local_time_adjustor.hpp | 13 +- .../include/boost/date_time/c_time.hpp | 26 +- .../boost/date_time/compiler_config.hpp | 5 + .../boost/date_time/constrained_value.hpp | 6 +- .../include/boost/date_time/date.hpp | 3 +- .../include/boost/date_time/date_duration.hpp | 11 +- .../boost/date_time/date_duration_types.hpp | 11 +- .../include/boost/date_time/date_facet.hpp | 4 +- .../boost/date_time/date_formatting.hpp | 2 + .../date_time/date_formatting_locales.hpp | 13 +- .../boost/date_time/date_generators.hpp | 4 +- .../boost/date_time/date_names_put.hpp | 15 +- .../include/boost/date_time/dst_rules.hpp | 16 +- .../date_time/dst_transition_generators.hpp | 2 +- .../boost/date_time/filetime_functions.hpp | 102 +- .../boost/date_time/format_date_parser.hpp | 9 +- .../date_time/gregorian/greg_calendar.hpp | 3 +- .../boost/date_time/gregorian/greg_date.hpp | 3 +- .../boost/date_time/gregorian/greg_day.hpp | 13 +- .../date_time/gregorian/greg_day_of_year.hpp | 5 +- .../date_time/gregorian/greg_duration.hpp | 3 +- .../gregorian/greg_duration_types.hpp | 7 +- .../boost/date_time/gregorian/greg_facet.hpp | 38 +- .../boost/date_time/gregorian/greg_month.hpp | 16 +- .../date_time/gregorian/greg_serialize.hpp | 5 + .../date_time/gregorian/greg_weekday.hpp | 12 +- .../boost/date_time/gregorian/greg_year.hpp | 21 +- .../date_time/gregorian/gregorian_io.hpp | 104 +- .../boost/date_time/gregorian_calendar.hpp | 7 +- .../include/boost/date_time/int_adapter.hpp | 41 +- .../date_time/local_time/custom_time_zone.hpp | 1 - .../date_time/local_time/local_date_time.hpp | 9 +- .../date_time/local_time/posix_time_zone.hpp | 7 +- .../include/boost/date_time/locale_config.hpp | 4 +- .../boost/date_time/microsec_time_clock.hpp | 41 +- .../include/boost/date_time/period.hpp | 5 +- .../boost/date_time/period_formatter.hpp | 19 +- .../boost/date_time/posix_time/conversion.hpp | 22 +- .../posix_time/date_duration_operators.hpp | 2 +- .../posix_time/posix_time_config.hpp | 4 +- .../posix_time/posix_time_duration.hpp | 37 +- .../date_time/posix_time/posix_time_io.hpp | 24 +- .../boost/date_time/posix_time/ptime.hpp | 11 +- .../date_time/posix_time/time_serialize.hpp | 85 +- .../boost/date_time/special_values_parser.hpp | 55 +- .../boost/date_time/string_parse_tree.hpp | 11 +- .../include/boost/date_time/time_duration.hpp | 25 +- .../include/boost/date_time/time_facet.hpp | 15 +- .../include/boost/date_time/time_parsing.hpp | 20 + .../date_time/time_resolution_traits.hpp | 39 +- .../boost/date_time/time_system_split.hpp | 14 +- .../boost/date_time/time_zone_base.hpp | 5 +- .../boost/date_time/time_zone_names.hpp | 2 +- .../include/boost/date_time/tz_db_base.hpp | 4 +- .../boost/date_time/year_month_day.hpp | 4 +- .../boost/detail/allocator_utilities.hpp | 22 +- .../boost/detail/atomic_redef_macros.hpp | 19 - .../boost/detail/atomic_undef_macros.hpp | 39 - .../include/boost/detail/basic_pointerbuf.hpp | 2 +- .../include/boost/detail/bitmask.hpp | 29 +- .../include/boost/detail/compressed_pair.hpp | 25 +- .../include/boost/detail/dynamic_bitset.hpp | 241 - .../include/boost/detail/indirect_traits.hpp | 85 +- .../include/boost/detail/interlocked.hpp | 78 +- .../include/boost/detail/is_incrementable.hpp | 4 - .../include/boost/detail/is_xxx.hpp | 6 +- .../include/boost/detail/lcast_precision.hpp | 11 +- .../boost/detail/lightweight_thread.hpp | 67 +- .../include/boost/detail/numeric_traits.hpp | 128 +- .../boost/detail/reference_content.hpp | 14 +- .../boost/detail/utf8_codecvt_facet.hpp | 38 +- .../boost/detail/utf8_codecvt_facet.ipp | 19 +- .../boost/detail/winapi/GetCurrentProcess.hpp | 25 - .../boost/detail/winapi/GetCurrentThread.hpp | 25 - .../boost/detail/winapi/GetLastError.hpp | 25 - .../boost/detail/winapi/GetProcessTimes.hpp | 24 - .../boost/detail/winapi/GetThreadTimes.hpp | 25 - .../include/boost/detail/winapi/LocalFree.hpp | 33 - .../boost/detail/winapi/access_rights.hpp | 84 +- .../include/boost/detail/winapi/apc.hpp | 47 +- .../boost/detail/winapi/basic_types.hpp | 233 +- .../winapi/character_code_conversion.hpp | 108 +- .../detail/winapi/condition_variable.hpp | 124 +- .../include/boost/detail/winapi/config.hpp | 72 +- .../boost/detail/winapi/critical_section.hpp | 184 +- .../include/boost/detail/winapi/crypt.hpp | 193 +- .../include/boost/detail/winapi/dbghelp.hpp | 171 +- .../boost/detail/winapi/detail/cast_ptr.hpp | 40 - .../detail/winapi/directory_management.hpp | 94 +- .../include/boost/detail/winapi/dll.hpp | 221 +- .../boost/detail/winapi/environment.hpp | 118 +- .../boost/detail/winapi/error_codes.hpp | 2959 +- .../boost/detail/winapi/error_handling.hpp | 143 +- .../include/boost/detail/winapi/event.hpp | 196 +- .../boost/detail/winapi/file_management.hpp | 511 +- .../boost/detail/winapi/file_mapping.hpp | 238 +- .../detail/winapi/get_current_process.hpp | 34 +- .../detail/winapi/get_current_process_id.hpp | 33 +- .../detail/winapi/get_current_thread.hpp | 34 +- .../detail/winapi/get_current_thread_id.hpp | 34 +- .../boost/detail/winapi/get_last_error.hpp | 33 +- .../boost/detail/winapi/get_process_times.hpp | 60 +- .../detail/winapi/get_system_directory.hpp | 63 +- .../boost/detail/winapi/get_thread_times.hpp | 55 +- .../boost/detail/winapi/handle_info.hpp | 62 +- .../include/boost/detail/winapi/handles.hpp | 73 +- .../boost/detail/winapi/heap_memory.hpp | 78 +- .../include/boost/detail/winapi/init_once.hpp | 123 +- .../include/boost/detail/winapi/jobs.hpp | 119 +- .../include/boost/detail/winapi/limits.hpp | 51 +- .../boost/detail/winapi/local_memory.hpp | 51 +- .../include/boost/detail/winapi/memory.hpp | 20 +- .../include/boost/detail/winapi/mutex.hpp | 190 +- .../boost/detail/winapi/overlapped.hpp | 51 +- .../detail/winapi/page_protection_flags.hpp | 56 +- .../include/boost/detail/winapi/pipes.hpp | 317 +- .../boost/detail/winapi/priority_class.hpp | 78 +- .../include/boost/detail/winapi/process.hpp | 421 +- .../include/boost/detail/winapi/security.hpp | 80 +- .../include/boost/detail/winapi/semaphore.hpp | 183 +- .../include/boost/detail/winapi/shell.hpp | 145 +- .../boost/detail/winapi/show_window.hpp | 105 +- .../include/boost/detail/winapi/srw_lock.hpp | 117 +- .../boost/detail/winapi/synchronization.hpp | 28 +- .../include/boost/detail/winapi/system.hpp | 73 +- .../include/boost/detail/winapi/thread.hpp | 42 +- .../boost/detail/winapi/thread_pool.hpp | 126 +- .../include/boost/detail/winapi/time.hpp | 145 +- .../include/boost/detail/winapi/timers.hpp | 48 +- .../include/boost/detail/winapi/tls.hpp | 60 +- .../include/boost/detail/winapi/wait.hpp | 84 +- .../boost/detail/winapi/waitable_timer.hpp | 145 +- .../include/boost/detail/workaround.hpp | 261 +- .../include/boost/enable_shared_from_this.hpp | 2 +- .../include/boost/exception/N3757.hpp | 46 - .../include/boost/exception/all.hpp | 11 +- .../exception/detail/error_info_impl.hpp | 63 +- .../boost/exception/detail/exception_ptr.hpp | 19 +- .../exception/detail/is_output_streamable.hpp | 5 +- .../exception/detail/object_hex_dump.hpp | 13 +- .../boost/exception/detail/type_info.hpp | 13 +- .../exception/diagnostic_information.hpp | 17 +- .../exception/enable_current_exception.hpp | 5 + .../boost/exception/enable_error_info.hpp | 5 + .../boost/exception/errinfo_api_function.hpp | 2 +- .../include/boost/exception/errinfo_errno.hpp | 9 +- .../include/boost/exception/exception.hpp | 119 +- .../boost/exception/get_error_info.hpp | 13 +- .../include/boost/exception/info.hpp | 196 +- .../include/boost/exception/info_tuple.hpp | 7 +- .../include/boost/exception/to_string.hpp | 9 +- .../boost/exception/to_string_stub.hpp | 9 +- .../boost-1.62.0/include/boost/filesystem.hpp | 4 +- .../include/boost/format/alt_sstream.hpp | 9 +- .../include/boost/format/alt_sstream_impl.hpp | 4 +- .../include/boost/format/exceptions.hpp | 10 +- .../include/boost/format/feed_args.hpp | 16 +- .../include/boost/format/format_class.hpp | 12 + .../include/boost/format/internals.hpp | 3 +- .../include/boost/format/parsing.hpp | 423 +- .../boost-1.62.0/include/boost/function.hpp | 18 +- .../function/detail/gen_maybe_include.pl | 37 - .../boost/function/detail/maybe_include.hpp | 102 + .../include/boost/function/function_base.hpp | 78 +- .../boost/function/function_template.hpp | 87 +- .../include/boost/function/gen_function_N.pl | 26 - .../boost/function_output_iterator.hpp | 56 +- .../boost-1.62.0/include/boost/functional.hpp | 11 +- .../include/boost/functional/factory.hpp | 51 +- .../boost/functional/forward_adapter.hpp | 2 +- .../include/boost/functional/hash.hpp | 3 +- .../boost/functional/hash/extensions.hpp | 319 +- .../include/boost/functional/hash/hash.hpp | 563 +- .../boost/functional/hash/hash_fwd.hpp | 32 +- .../include/boost/functional/hash_fwd.hpp | 7 +- .../lightweight_forward_adapter.hpp | 2 +- .../boost/fusion/adapted/adt/adapt_adt.hpp | 4 - .../fusion/adapted/adt/adapt_assoc_adt.hpp | 3 - .../fusion/adapted/adt/detail/adapt_base.hpp | 18 +- .../adapted/struct/adapt_assoc_struct.hpp | 4 - .../fusion/adapted/struct/adapt_struct.hpp | 4 - .../adapted/struct/detail/adapt_base.hpp | 2 + .../adapted/struct/detail/define_struct.hpp | 162 +- .../algorithm/iteration/detail/for_each.hpp | 16 +- .../iteration/detail/segmented_for_each.hpp | 6 +- .../fusion/algorithm/iteration/for_each.hpp | 19 +- .../algorithm/iteration/for_each_fwd.hpp | 19 +- .../fusion/algorithm/query/detail/find_if.hpp | 29 +- .../algorithm/transformation/remove_if.hpp | 4 +- .../fusion/container/deque/deque_fwd.hpp | 3 +- .../container/deque/detail/cpp03/as_deque.hpp | 8 +- .../container/deque/detail/cpp03/deque.hpp | 23 +- .../detail/cpp03/preprocessed/deque10.hpp | 20 +- .../detail/cpp03/preprocessed/deque20.hpp | 20 +- .../detail/cpp03/preprocessed/deque30.hpp | 20 +- .../detail/cpp03/preprocessed/deque40.hpp | 20 +- .../detail/cpp03/preprocessed/deque50.hpp | 20 +- .../container/deque/detail/keyed_element.hpp | 22 +- .../boost/fusion/container/list/cons.hpp | 4 + .../list/detail/list_forward_ctor.hpp | 48 - .../list/detail/list_to_cons_call.hpp | 44 - .../list/detail/preprocessed/list.hpp | 22 - .../list/detail/preprocessed/list10.hpp | 99 - .../list/detail/preprocessed/list10_fwd.hpp | 16 - .../list/detail/preprocessed/list20.hpp | 139 - .../list/detail/preprocessed/list20_fwd.hpp | 16 - .../list/detail/preprocessed/list30.hpp | 179 - .../list/detail/preprocessed/list30_fwd.hpp | 16 - .../list/detail/preprocessed/list40.hpp | 219 - .../list/detail/preprocessed/list40_fwd.hpp | 16 - .../list/detail/preprocessed/list50.hpp | 259 - .../list/detail/preprocessed/list50_fwd.hpp | 16 - .../list/detail/preprocessed/list_fwd.hpp | 22 - .../list/detail/preprocessed/list_to_cons.hpp | 22 - .../detail/preprocessed/list_to_cons10.hpp | 96 - .../detail/preprocessed/list_to_cons20.hpp | 166 - .../detail/preprocessed/list_to_cons30.hpp | 236 - .../detail/preprocessed/list_to_cons40.hpp | 306 - .../detail/preprocessed/list_to_cons50.hpp | 376 - .../boost/fusion/container/list/limits.hpp | 23 - .../container/map/detail/cpp03/as_map.hpp | 8 +- .../fusion/container/map/detail/map_impl.hpp | 6 +- .../map/detail/value_at_key_impl.hpp | 15 +- .../boost/fusion/container/map/map.hpp | 15 +- .../boost/fusion/container/map/map_fwd.hpp | 5 +- .../container/set/detail/cpp03/as_set.hpp | 8 +- .../set/detail/preprocessed/as_set.hpp | 22 - .../set/detail/preprocessed/as_set10.hpp | 221 - .../set/detail/preprocessed/as_set20.hpp | 431 - .../set/detail/preprocessed/as_set30.hpp | 641 - .../set/detail/preprocessed/as_set40.hpp | 851 - .../set/detail/preprocessed/as_set50.hpp | 1061 - .../container/set/detail/preprocessed/set.hpp | 22 - .../set/detail/preprocessed/set10.hpp | 77 - .../set/detail/preprocessed/set10_fwd.hpp | 18 - .../set/detail/preprocessed/set20.hpp | 107 - .../set/detail/preprocessed/set20_fwd.hpp | 18 - .../set/detail/preprocessed/set30.hpp | 137 - .../set/detail/preprocessed/set30_fwd.hpp | 18 - .../set/detail/preprocessed/set40.hpp | 167 - .../set/detail/preprocessed/set40_fwd.hpp | 18 - .../set/detail/preprocessed/set50.hpp | 197 - .../set/detail/preprocessed/set50_fwd.hpp | 18 - .../set/detail/preprocessed/set_fwd.hpp | 22 - .../container/set/detail/set_forward_ctor.hpp | 40 - .../set/detail/value_of_data_impl.hpp | 1 - .../boost/fusion/container/set/limits.hpp | 28 - .../fusion/container/vector/detail/config.hpp | 5 +- .../vector/detail/cpp03/as_vector.hpp | 8 +- .../detail/cpp03/preprocessed/vvector10.hpp | 36 +- .../detail/cpp03/preprocessed/vvector20.hpp | 66 +- .../detail/cpp03/preprocessed/vvector30.hpp | 96 +- .../detail/cpp03/preprocessed/vvector40.hpp | 126 +- .../detail/cpp03/preprocessed/vvector50.hpp | 156 +- .../container/vector/detail/cpp03/vector.hpp | 7 +- .../detail/cpp03/vector_forward_ctor.hpp | 6 +- .../vector/detail/preprocessed/as_vector.hpp | 22 - .../detail/preprocessed/as_vector10.hpp | 221 - .../detail/preprocessed/as_vector20.hpp | 431 - .../detail/preprocessed/as_vector30.hpp | 641 - .../detail/preprocessed/as_vector40.hpp | 851 - .../detail/preprocessed/as_vector50.hpp | 1061 - .../vector/detail/preprocessed/vector.hpp | 22 - .../vector/detail/preprocessed/vector10.hpp | 1530 - .../detail/preprocessed/vector10_fwd.hpp | 33 - .../vector/detail/preprocessed/vector20.hpp | 1524 - .../detail/preprocessed/vector20_fwd.hpp | 33 - .../vector/detail/preprocessed/vector30.hpp | 1524 - .../detail/preprocessed/vector30_fwd.hpp | 33 - .../vector/detail/preprocessed/vector40.hpp | 1524 - .../detail/preprocessed/vector40_fwd.hpp | 33 - .../vector/detail/preprocessed/vector50.hpp | 1524 - .../detail/preprocessed/vector50_fwd.hpp | 33 - .../detail/preprocessed/vector_chooser.hpp | 21 - .../detail/preprocessed/vector_chooser10.hpp | 84 - .../detail/preprocessed/vector_chooser20.hpp | 154 - .../detail/preprocessed/vector_chooser30.hpp | 224 - .../detail/preprocessed/vector_chooser40.hpp | 294 - .../detail/preprocessed/vector_chooser50.hpp | 364 - .../vector/detail/preprocessed/vector_fwd.hpp | 22 - .../vector/detail/preprocessed/vvector10.hpp | 230 - .../detail/preprocessed/vvector10_fwd.hpp | 16 - .../vector/detail/preprocessed/vvector20.hpp | 320 - .../detail/preprocessed/vvector20_fwd.hpp | 16 - .../vector/detail/preprocessed/vvector30.hpp | 410 - .../detail/preprocessed/vvector30_fwd.hpp | 16 - .../vector/detail/preprocessed/vvector40.hpp | 500 - .../detail/preprocessed/vvector40_fwd.hpp | 16 - .../vector/detail/preprocessed/vvector50.hpp | 590 - .../detail/preprocessed/vvector50_fwd.hpp | 16 - .../container/vector/detail/value_at_impl.hpp | 22 +- .../vector/detail/vector_forward_ctor.hpp | 55 - .../container/vector/detail/vector_n.hpp | 267 - .../vector/detail/vector_n_chooser.hpp | 107 - .../boost/fusion/container/vector/limits.hpp | 24 - .../boost/fusion/container/vector/vector.hpp | 225 +- .../fusion/container/vector/vector10_fwd.hpp | 64 - .../fusion/container/vector/vector20_fwd.hpp | 59 - .../fusion/container/vector/vector30_fwd.hpp | 59 - .../fusion/container/vector/vector40_fwd.hpp | 59 - .../fusion/container/vector/vector50_fwd.hpp | 59 - .../boost/fusion/include/adapt_adt_named.cpp | 13 - .../fusion/include/adapt_assoc_class.hpp | 14 - .../include/adapt_assoc_class_named.hpp | 14 - .../boost/fusion/sequence/io/detail/manip.hpp | 1 + .../boost/fusion/support/category_of.hpp | 6 +- .../include/boost/fusion/support/config.hpp | 33 +- .../fusion/support/detail/category_of.hpp | 19 - .../fusion/support/detail/is_mpl_sequence.hpp | 5 +- .../fusion/support/detail/is_same_size.hpp | 13 +- .../boost/fusion/support/detail/is_view.hpp | 19 - .../fusion/support/detail/unknown_key.hpp | 16 - .../boost/fusion/support/is_sequence.hpp | 10 +- .../include/boost/fusion/support/is_view.hpp | 14 +- .../include/boost/fusion/support/unused.hpp | 34 +- .../include/boost/fusion/tuple/tuple.hpp | 65 +- .../view/filter_view/detail/next_impl.hpp | 26 +- .../view/filter_view/filter_view_iterator.hpp | 2 +- .../detail/apply_transform_result.hpp | 38 - .../view/transform_view/detail/at_impl.hpp | 16 +- .../view/transform_view/detail/deref_impl.hpp | 15 +- .../transform_view/detail/value_at_impl.hpp | 16 +- .../transform_view/detail/value_of_impl.hpp | 12 +- .../boost/fusion/view/zip_view/zip_view.hpp | 2 +- .../boost/geometry/algorithms/append.hpp | 748 +- .../boost/geometry/algorithms/area.hpp | 693 +- .../boost/geometry/algorithms/assign.hpp | 758 +- .../boost/geometry/algorithms/buffer.hpp | 554 +- .../boost/geometry/algorithms/centroid.hpp | 1361 +- .../boost/geometry/algorithms/clear.hpp | 394 +- .../algorithms/comparable_distance.hpp | 50 +- .../boost/geometry/algorithms/convert.hpp | 1140 +- .../boost/geometry/algorithms/convex_hull.hpp | 750 +- .../boost/geometry/algorithms/correct.hpp | 698 +- .../geometry/algorithms/correct_closure.hpp | 235 + .../boost/geometry/algorithms/covered_by.hpp | 500 +- .../boost/geometry/algorithms/crosses.hpp | 459 +- .../boost/geometry/algorithms/densify.hpp | 432 + .../algorithms/detail/andoyer_inverse.hpp | 205 - .../geometry/algorithms/detail/as_range.hpp | 210 +- .../algorithms/detail/assign_box_corners.hpp | 214 +- .../detail/assign_indexed_point.hpp | 188 +- .../algorithms/detail/assign_values.hpp | 679 +- .../geometry/algorithms/detail/azimuth.hpp | 310 +- .../algorithms/detail/buffer/buffer_box.hpp | 62 + .../detail/buffer/buffer_inserter.hpp | 2037 +- .../detail/buffer/buffer_policies.hpp | 471 +- .../buffer/buffered_piece_collection.hpp | 3085 +- .../detail/buffer/buffered_ring.hpp | 564 +- .../detail/buffer/get_piece_turns.hpp | 631 +- .../detail/buffer/line_line_intersection.hpp | 176 +- .../detail/buffer/parallel_continue.hpp | 66 +- .../buffer/turn_in_original_visitor.hpp | 556 +- .../detail/buffer/turn_in_piece_visitor.hpp | 1734 +- .../algorithms/detail/calculate_null.hpp | 76 +- .../algorithms/detail/calculate_sum.hpp | 120 +- .../centroid/translating_transformer.hpp | 238 +- .../detail/check_iterator_range.hpp | 142 +- .../closest_feature/geometry_to_range.hpp | 290 +- .../detail/closest_feature/point_to_range.hpp | 500 +- .../detail/closest_feature/range_to_range.hpp | 392 +- .../comparable_distance/implementation.hpp | 48 +- .../detail/comparable_distance/interface.hpp | 726 +- .../detail/convert_indexed_to_indexed.hpp | 160 +- .../detail/convert_point_to_point.hpp | 136 +- .../geometry/algorithms/detail/counting.hpp | 214 +- .../geometry/algorithms/detail/course.hpp | 80 +- .../detail/covered_by/implementation.hpp | 279 + .../detail/covered_by/interface.hpp | 255 + .../algorithms/detail/direction_code.hpp | 334 +- .../detail/disjoint/areal_areal.hpp | 347 +- .../algorithms/detail/disjoint/box_box.hpp | 243 +- .../detail/disjoint/implementation.hpp | 74 +- .../algorithms/detail/disjoint/interface.hpp | 433 +- .../detail/disjoint/linear_areal.hpp | 574 +- .../detail/disjoint/linear_linear.hpp | 366 +- .../detail/disjoint/linear_segment_or_box.hpp | 339 +- .../detail/disjoint/multipoint_geometry.hpp | 840 +- .../detail/disjoint/multirange_geometry.hpp | 179 +- .../algorithms/detail/disjoint/point_box.hpp | 165 +- .../detail/disjoint/point_geometry.hpp | 177 +- .../detail/disjoint/point_point.hpp | 318 +- .../detail/disjoint/segment_box.hpp | 574 +- .../distance/backward_compatibility.hpp | 666 +- .../algorithms/detail/distance/box_to_box.hpp | 120 +- .../detail/distance/default_strategies.hpp | 294 +- .../distance/geometry_to_segment_or_box.hpp | 928 +- .../detail/distance/implementation.hpp | 72 +- .../algorithms/detail/distance/interface.hpp | 815 +- .../detail/distance/is_comparable.hpp | 90 +- .../detail/distance/iterator_selector.hpp | 140 +- .../distance/linear_or_areal_to_areal.hpp | 291 +- .../detail/distance/linear_to_box.hpp | 123 + .../detail/distance/linear_to_linear.hpp | 246 +- .../distance/multipoint_to_geometry.hpp | 479 +- .../detail/distance/point_to_geometry.hpp | 1040 +- .../distance/range_to_geometry_rtree.hpp | 260 +- .../detail/distance/segment_to_box.hpp | 1781 +- .../detail/distance/segment_to_segment.hpp | 304 +- .../algorithms/detail/envelope/areal.hpp | 90 + .../algorithms/detail/envelope/box.hpp | 221 +- .../detail/envelope/implementation.hpp | 145 +- .../algorithms/detail/envelope/initialize.hpp | 172 +- .../algorithms/detail/envelope/interface.hpp | 357 +- .../envelope/intersects_antimeridian.hpp | 156 +- .../algorithms/detail/envelope/linear.hpp | 158 +- .../algorithms/detail/envelope/multipoint.hpp | 427 +- .../algorithms/detail/envelope/point.hpp | 194 +- .../algorithms/detail/envelope/range.hpp | 306 +- .../detail/envelope/range_of_boxes.hpp | 664 +- .../algorithms/detail/envelope/segment.hpp | 503 +- .../detail/envelope/transform_units.hpp | 206 +- .../detail/equals/collect_vectors.hpp | 1113 +- .../detail/equals/implementation.hpp | 401 + .../algorithms/detail/equals/interface.hpp | 317 + .../algorithms/detail/equals/point_point.hpp | 100 +- .../geometry/algorithms/detail/expand/box.hpp | 193 +- .../detail/expand/implementation.hpp | 54 +- .../algorithms/detail/expand/indexed.hpp | 265 +- .../algorithms/detail/expand/interface.hpp | 326 +- .../algorithms/detail/expand/point.hpp | 373 +- .../algorithms/detail/expand/segment.hpp | 184 +- .../algorithms/detail/expand_by_epsilon.hpp | 226 +- .../algorithms/detail/extreme_points.hpp | 1082 +- .../algorithms/detail/for_each_range.hpp | 402 +- .../algorithms/detail/get_left_turns.hpp | 639 +- .../algorithms/detail/get_max_size.hpp | 133 +- .../detail/has_self_intersections.hpp | 319 +- .../algorithms/detail/interior_iterator.hpp | 142 +- .../detail/intersection/box_box.hpp | 108 +- .../detail/intersection/implementation.hpp | 44 +- .../detail/intersection/interface.hpp | 705 +- .../algorithms/detail/intersection/multi.hpp | 842 +- .../detail/intersects/implementation.hpp | 89 + .../detail/intersects/interface.hpp | 115 + .../detail/is_simple/always_simple.hpp | 168 +- .../algorithms/detail/is_simple/areal.hpp | 300 +- .../is_simple/debug_print_boundary_points.hpp | 226 +- .../detail/is_simple/failure_policy.hpp | 106 +- .../detail/is_simple/implementation.hpp | 36 +- .../algorithms/detail/is_simple/interface.hpp | 221 +- .../algorithms/detail/is_simple/linear.hpp | 684 +- .../detail/is_simple/multipoint.hpp | 180 +- .../algorithms/detail/is_valid/box.hpp | 230 +- .../detail/is_valid/complement_graph.hpp | 482 +- .../is_valid/debug_complement_graph.hpp | 143 +- .../detail/is_valid/debug_print_turns.hpp | 156 +- .../detail/is_valid/debug_validity_phase.hpp | 136 +- .../detail/is_valid/has_duplicates.hpp | 160 +- .../is_valid/has_invalid_coordinate.hpp | 304 +- .../algorithms/detail/is_valid/has_spikes.hpp | 350 +- .../detail/is_valid/has_valid_self_turns.hpp | 239 +- .../detail/is_valid/implementation.hpp | 42 +- .../algorithms/detail/is_valid/interface.hpp | 431 +- .../detail/is_valid/is_acceptable_turn.hpp | 315 +- .../algorithms/detail/is_valid/linear.hpp | 359 +- .../detail/is_valid/multipolygon.hpp | 759 +- .../algorithms/detail/is_valid/pointlike.hpp | 183 +- .../algorithms/detail/is_valid/polygon.hpp | 943 +- .../algorithms/detail/is_valid/ring.hpp | 474 +- .../algorithms/detail/is_valid/segment.hpp | 166 +- .../algorithms/detail/max_interval_gap.hpp | 556 +- .../algorithms/detail/multi_modify.hpp | 122 +- .../detail/multi_modify_with_predicate.hpp | 104 +- .../geometry/algorithms/detail/multi_sum.hpp | 104 +- .../geometry/algorithms/detail/normalize.hpp | 342 +- .../boost/geometry/algorithms/detail/not.hpp | 123 +- .../num_distinct_consecutive_points.hpp | 186 +- .../algorithms/detail/occupation_info.hpp | 427 +- .../detail/overlaps/implementation.hpp | 156 + .../algorithms/detail/overlaps/interface.hpp | 124 + .../algorithms/detail/overlay/add_rings.hpp | 356 +- .../detail/overlay/append_no_duplicates.hpp | 123 +- .../overlay/append_no_dups_or_spikes.hpp | 377 +- .../detail/overlay/assign_parents.hpp | 761 +- .../detail/overlay/backtrack_check_si.hpp | 418 +- .../detail/overlay/check_enrich.hpp | 348 +- .../detail/overlay/clip_linestring.hpp | 513 +- .../detail/overlay/cluster_info.hpp | 95 +- .../detail/overlay/convert_ring.hpp | 223 +- .../detail/overlay/copy_segment_point.hpp | 799 +- .../detail/overlay/copy_segments.hpp | 752 +- .../detail/overlay/debug_turn_info.hpp | 132 +- .../algorithms/detail/overlay/do_reverse.hpp | 94 +- .../overlay/enrich_intersection_points.hpp | 899 +- .../detail/overlay/enrichment_info.hpp | 155 +- .../algorithms/detail/overlay/follow.hpp | 1046 +- .../detail/overlay/follow_linear_linear.hpp | 1100 +- .../overlay/get_intersection_points.hpp | 327 +- .../detail/overlay/get_relative_order.hpp | 204 +- .../algorithms/detail/overlay/get_ring.hpp | 246 +- .../detail/overlay/get_turn_info.hpp | 2242 +- .../overlay/get_turn_info_for_endpoint.hpp | 1308 +- .../detail/overlay/get_turn_info_helpers.hpp | 890 +- .../detail/overlay/get_turn_info_la.hpp | 1759 +- .../detail/overlay/get_turn_info_ll.hpp | 1468 +- .../algorithms/detail/overlay/get_turns.hpp | 2224 +- .../detail/overlay/handle_colocations.hpp | 1581 +- .../detail/overlay/handle_self_turns.hpp | 219 + .../overlay/inconsistent_turns_exception.hpp | 76 +- .../detail/overlay/intersection_box_box.hpp | 192 +- .../detail/overlay/intersection_insert.hpp | 2419 +- .../detail/overlay/is_self_turn.hpp | 68 + .../detail/overlay/less_by_segment_ratio.hpp | 407 +- .../detail/overlay/linear_linear.hpp | 671 +- .../detail/overlay/needs_self_turns.hpp | 83 + .../algorithms/detail/overlay/overlay.hpp | 765 +- .../detail/overlay/overlay_type.hpp | 152 +- .../detail/overlay/pointlike_linear.hpp | 736 +- .../detail/overlay/pointlike_pointlike.hpp | 875 +- .../detail/overlay/range_in_geometry.hpp | 178 + .../detail/overlay/ring_properties.hpp | 163 +- .../detail/overlay/segment_identifier.hpp | 201 +- .../detail/overlay/select_rings.hpp | 713 +- .../detail/overlay/self_turn_points.hpp | 673 +- .../detail/overlay/sort_by_side.hpp | 1188 +- .../algorithms/detail/overlay/stream_info.hpp | 153 +- .../algorithms/detail/overlay/traversal.hpp | 1884 +- .../detail/overlay/traversal_info.hpp | 106 +- .../detail/overlay/traversal_ring_creator.hpp | 773 +- .../overlay/traversal_switch_detector.hpp | 965 +- .../algorithms/detail/overlay/traverse.hpp | 226 +- .../algorithms/detail/overlay/turn_info.hpp | 313 +- .../algorithms/detail/overlay/visit_info.hpp | 196 +- .../geometry/algorithms/detail/partition.hpp | 1485 +- .../detail/point_is_spike_or_equal.hpp | 334 +- .../algorithms/detail/point_on_border.hpp | 521 +- .../algorithms/detail/recalculate.hpp | 468 +- .../algorithms/detail/relate/areal_areal.hpp | 1711 +- .../detail/relate/boundary_checker.hpp | 334 +- .../algorithms/detail/relate/de9im.hpp | 878 +- .../detail/relate/follow_helpers.hpp | 819 +- .../detail/relate/implementation.hpp | 234 +- .../algorithms/detail/relate/interface.hpp | 769 +- .../algorithms/detail/relate/less.hpp | 83 - .../algorithms/detail/relate/linear_areal.hpp | 2952 +- .../detail/relate/linear_linear.hpp | 1612 +- .../detail/relate/multi_point_geometry.hpp | 615 + .../detail/relate/point_geometry.hpp | 418 +- .../algorithms/detail/relate/point_point.hpp | 515 +- .../algorithms/detail/relate/relate_impl.hpp | 161 +- .../algorithms/detail/relate/result.hpp | 2592 +- .../detail/relate/topology_check.hpp | 611 +- .../algorithms/detail/relate/turns.hpp | 610 +- .../detail/relation/implementation.hpp | 36 +- .../algorithms/detail/relation/interface.hpp | 405 +- .../algorithms/detail/result_inverse.hpp | 44 - .../algorithms/detail/ring_identifier.hpp | 170 +- .../detail/sections/range_by_section.hpp | 386 +- .../detail/sections/section_box_policies.hpp | 106 +- .../detail/sections/section_functions.hpp | 233 +- .../detail/sections/sectionalize.hpp | 1909 +- .../algorithms/detail/signed_size_type.hpp | 56 +- .../algorithms/detail/single_geometry.hpp | 188 +- .../geometry/algorithms/detail/sub_range.hpp | 266 +- .../geometry/algorithms/detail/sweep.hpp | 174 +- .../algorithms/detail/thomas_inverse.hpp | 191 - .../detail/throw_on_empty_input.hpp | 133 +- .../detail/touches/implementation.hpp | 461 + .../algorithms/detail/touches/interface.hpp | 321 + .../algorithms/detail/turns/compare_turns.hpp | 234 +- .../algorithms/detail/turns/debug_turn.hpp | 130 +- .../detail/turns/filter_continue_turns.hpp | 156 +- .../algorithms/detail/turns/print_turns.hpp | 210 +- .../detail/turns/remove_duplicate_turns.hpp | 124 +- .../detail/within/implementation.hpp | 306 + .../algorithms/detail/within/interface.hpp | 298 + .../algorithms/detail/within/multi_point.hpp | 269 + .../detail/within/point_in_geometry.hpp | 883 +- .../detail/within/within_no_turns.hpp | 442 +- .../boost/geometry/algorithms/difference.hpp | 575 +- .../algorithms/discrete_frechet_distance.hpp | 249 + .../discrete_hausdorff_distance.hpp | 353 + .../boost/geometry/algorithms/disjoint.hpp | 54 +- .../geometry/algorithms/dispatch/disjoint.hpp | 164 +- .../geometry/algorithms/dispatch/distance.hpp | 166 +- .../geometry/algorithms/dispatch/envelope.hpp | 98 +- .../geometry/algorithms/dispatch/expand.hpp | 113 +- .../algorithms/dispatch/is_simple.hpp | 76 +- .../geometry/algorithms/dispatch/is_valid.hpp | 88 +- .../boost/geometry/algorithms/distance.hpp | 52 +- .../boost/geometry/algorithms/envelope.hpp | 50 +- .../boost/geometry/algorithms/equals.hpp | 516 +- .../boost/geometry/algorithms/expand.hpp | 52 +- .../boost/geometry/algorithms/for_each.hpp | 746 +- .../geometry/algorithms/intersection.hpp | 44 +- .../boost/geometry/algorithms/intersects.hpp | 134 +- .../boost/geometry/algorithms/is_convex.hpp | 388 +- .../boost/geometry/algorithms/is_empty.hpp | 414 +- .../boost/geometry/algorithms/is_simple.hpp | 32 +- .../boost/geometry/algorithms/is_valid.hpp | 32 +- .../boost/geometry/algorithms/length.hpp | 614 +- .../geometry/algorithms/line_interpolate.hpp | 411 + .../boost/geometry/algorithms/make.hpp | 400 +- .../geometry/algorithms/not_implemented.hpp | 262 +- .../geometry/algorithms/num_geometries.hpp | 282 +- .../algorithms/num_interior_rings.hpp | 284 +- .../boost/geometry/algorithms/num_points.hpp | 422 +- .../geometry/algorithms/num_segments.hpp | 408 +- .../boost/geometry/algorithms/overlaps.hpp | 226 +- .../boost/geometry/algorithms/perimeter.hpp | 458 +- .../geometry/algorithms/point_on_surface.hpp | 692 +- .../boost/geometry/algorithms/relate.hpp | 34 +- .../boost/geometry/algorithms/relation.hpp | 34 +- .../geometry/algorithms/remove_spikes.hpp | 609 +- .../boost/geometry/algorithms/reverse.hpp | 372 +- .../boost/geometry/algorithms/simplify.hpp | 1259 +- .../geometry/algorithms/sym_difference.hpp | 924 +- .../boost/geometry/algorithms/touches.hpp | 615 +- .../boost/geometry/algorithms/transform.hpp | 960 +- .../boost/geometry/algorithms/union.hpp | 819 +- .../boost/geometry/algorithms/unique.hpp | 368 +- .../algorithms/validity_failure_type.hpp | 180 +- .../boost/geometry/algorithms/within.hpp | 559 +- .../boost/geometry/arithmetic/arithmetic.hpp | 670 +- .../geometry/arithmetic/cross_product.hpp | 256 +- .../boost/geometry/arithmetic/determinant.hpp | 156 +- .../boost/geometry/arithmetic/dot_product.hpp | 168 +- .../boost/geometry/arithmetic/normalize.hpp | 71 + .../include/boost/geometry/core/access.hpp | 798 +- .../include/boost/geometry/core/assert.hpp | 86 +- .../include/boost/geometry/core/closure.hpp | 404 +- .../include/boost/geometry/core/config.hpp | 26 + .../geometry/core/coordinate_dimension.hpp | 254 +- .../boost/geometry/core/coordinate_system.hpp | 200 +- .../boost/geometry/core/coordinate_type.hpp | 216 +- .../include/boost/geometry/core/cs.hpp | 611 +- .../include/boost/geometry/core/exception.hpp | 197 +- .../boost/geometry/core/exterior_ring.hpp | 290 +- .../boost/geometry/core/geometry_id.hpp | 206 +- .../boost/geometry/core/interior_rings.hpp | 300 +- .../boost/geometry/core/interior_type.hpp | 328 +- .../include/boost/geometry/core/is_areal.hpp | 118 +- .../boost/geometry/core/mutable_range.hpp | 196 +- .../boost/geometry/core/point_order.hpp | 374 +- .../boost/geometry/core/point_type.hpp | 324 +- .../boost/geometry/core/radian_access.hpp | 421 +- .../include/boost/geometry/core/radius.hpp | 502 +- .../boost/geometry/core/reverse_dispatch.hpp | 132 +- .../include/boost/geometry/core/ring_type.hpp | 452 +- .../include/boost/geometry/core/tag.hpp | 138 +- .../include/boost/geometry/core/tag_cast.hpp | 168 +- .../include/boost/geometry/core/tags.hpp | 303 +- .../geometry/core/topological_dimension.hpp | 202 +- .../extensions/algorithms/inverse.hpp | 59 - .../geometry/formulas/andoyer_inverse.hpp | 282 + .../boost/geometry/formulas/area_formulas.hpp | 578 + .../geometry/formulas/authalic_radius_sqr.hpp | 96 + .../formulas/differential_quantities.hpp | 304 + .../geometry/formulas/eccentricity_sqr.hpp | 72 + .../detail => formulas}/flattening.hpp | 139 +- .../boost/geometry/formulas/geographic.hpp | 458 + .../formulas/gnomonic_intersection.hpp | 148 + .../geometry/formulas/gnomonic_spheroid.hpp | 125 + .../formulas/interpolate_point_spherical.hpp | 107 + .../boost/geometry/formulas/karney_direct.hpp | 263 + .../boost/geometry/formulas/mean_radius.hpp | 71 + .../geometry/formulas/meridian_direct.hpp | 170 + .../geometry/formulas/meridian_inverse.hpp | 176 + .../geometry/formulas/meridian_segment.hpp | 72 + .../geometry/formulas/quarter_meridian.hpp | 112 + .../boost/geometry/formulas/result_direct.hpp | 39 + .../geometry/formulas/result_inverse.hpp | 39 + .../formulas/sjoberg_intersection.hpp | 1268 + .../boost/geometry/formulas/spherical.hpp | 381 +- .../boost/geometry/formulas/thomas_direct.hpp | 261 + .../geometry/formulas/thomas_inverse.hpp | 220 + .../boost/geometry/formulas/unit_spheroid.hpp | 43 + .../geometry/formulas/vertex_latitude.hpp | 150 + .../geometry/formulas/vertex_longitude.hpp | 354 + .../detail => formulas}/vincenty_direct.hpp | 353 +- .../detail => formulas}/vincenty_inverse.hpp | 425 +- .../geometries/adapted/boost_array.hpp | 240 +- .../geometries/adapted/boost_fusion.hpp | 356 +- .../geometries/adapted/boost_polygon.hpp | 36 +- .../geometries/adapted/boost_polygon/box.hpp | 282 +- .../adapted/boost_polygon/hole_iterator.hpp | 167 +- .../adapted/boost_polygon/holes_proxy.hpp | 408 +- .../adapted/boost_polygon/point.hpp | 204 +- .../adapted/boost_polygon/polygon.hpp | 222 +- .../geometries/adapted/boost_polygon/ring.hpp | 364 +- .../adapted/boost_polygon/ring_proxy.hpp | 609 +- .../adapted/boost_range/adjacent_filtered.hpp | 80 +- .../adapted/boost_range/filtered.hpp | 80 +- .../adapted/boost_range/reversed.hpp | 80 +- .../geometries/adapted/boost_range/sliced.hpp | 72 +- .../adapted/boost_range/strided.hpp | 72 +- .../adapted/boost_range/uniqued.hpp | 80 +- .../geometries/adapted/boost_tuple.hpp | 224 +- .../geometry/geometries/adapted/c_array.hpp | 222 +- .../geometry/geometries/adapted/std_array.hpp | 130 + .../adapted/std_pair_as_segment.hpp | 196 +- .../include/boost/geometry/geometries/box.hpp | 382 +- .../geometries/concepts/box_concept.hpp | 271 +- .../geometry/geometries/concepts/check.hpp | 487 +- .../concepts/linestring_concept.hpp | 250 +- .../concepts/multi_linestring_concept.hpp | 182 +- .../concepts/multi_point_concept.hpp | 181 +- .../concepts/multi_polygon_concept.hpp | 182 +- .../geometries/concepts/point_concept.hpp | 384 +- .../geometries/concepts/polygon_concept.hpp | 265 +- .../geometries/concepts/ring_concept.hpp | 198 +- .../geometries/concepts/segment_concept.hpp | 270 +- .../boost/geometry/geometries/geometries.hpp | 58 +- .../geometry/geometries/helper_geometry.hpp | 278 +- .../boost/geometry/geometries/linestring.hpp | 246 +- .../geometry/geometries/multi_linestring.hpp | 238 +- .../boost/geometry/geometries/multi_point.hpp | 246 +- .../geometry/geometries/multi_polygon.hpp | 234 +- .../boost/geometry/geometries/point.hpp | 606 +- .../boost/geometry/geometries/point_xy.hpp | 268 +- .../geometry/geometries/pointing_segment.hpp | 284 +- .../boost/geometry/geometries/polygon.hpp | 734 +- .../geometry/geometries/register/box.hpp | 358 +- .../geometries/register/linestring.hpp | 120 +- .../geometries/register/multi_linestring.hpp | 118 +- .../geometries/register/multi_point.hpp | 118 +- .../geometries/register/multi_polygon.hpp | 118 +- .../geometry/geometries/register/point.hpp | 346 +- .../geometry/geometries/register/ring.hpp | 120 +- .../geometry/geometries/register/segment.hpp | 258 +- .../boost/geometry/geometries/ring.hpp | 362 +- .../boost/geometry/geometries/segment.hpp | 448 +- .../boost/geometry/geometries/variant.hpp | 85 +- .../include/boost/geometry/geometry.hpp | 239 +- .../boost/geometry/index/adaptors/query.hpp | 176 +- .../index/detail/algorithms/bounds.hpp | 180 +- .../comparable_distance_centroid.hpp | 154 +- .../algorithms/comparable_distance_far.hpp | 132 +- .../algorithms/comparable_distance_near.hpp | 154 +- .../index/detail/algorithms/content.hpp | 174 +- .../index/detail/algorithms/diff_abs.hpp | 78 +- .../algorithms/intersection_content.hpp | 88 +- .../index/detail/algorithms/is_valid.hpp | 182 +- .../index/detail/algorithms/margin.hpp | 338 +- .../index/detail/algorithms/minmaxdist.hpp | 238 +- .../index/detail/algorithms/nth_element.hpp | 62 + .../detail/algorithms/path_intersection.hpp | 242 +- .../algorithms/segment_intersection.hpp | 292 +- .../algorithms/smallest_for_indexable.hpp | 160 +- .../detail/algorithms/sum_for_indexable.hpp | 152 +- .../index/detail/algorithms/union_content.hpp | 66 +- .../boost/geometry/index/detail/assert.hpp | 38 +- .../geometry/index/detail/bounded_view.hpp | 430 +- .../geometry/index/detail/config_begin.hpp | 42 +- .../geometry/index/detail/config_end.hpp | 24 +- .../index/detail/distance_predicates.hpp | 322 +- .../boost/geometry/index/detail/exception.hpp | 174 +- .../index/detail/is_bounding_geometry.hpp | 70 +- .../geometry/index/detail/is_indexable.hpp | 94 +- .../boost/geometry/index/detail/meta.hpp | 147 +- .../geometry/index/detail/predicates.hpp | 1658 +- .../geometry/index/detail/rtree/adaptors.hpp | 108 +- .../geometry/index/detail/rtree/iterators.hpp | 244 +- .../index/detail/rtree/kmeans/kmeans.hpp | 32 +- .../index/detail/rtree/kmeans/split.hpp | 174 +- .../index/detail/rtree/linear/linear.hpp | 32 +- .../rtree/linear/redistribute_elements.hpp | 893 +- .../index/detail/rtree/node/concept.hpp | 170 +- .../geometry/index/detail/rtree/node/node.hpp | 424 +- .../index/detail/rtree/node/node_elements.hpp | 220 +- .../index/detail/rtree/node/pairs.hpp | 142 +- .../detail/rtree/node/scoped_deallocator.hpp | 99 +- .../detail/rtree/node/subtree_destroyer.hpp | 158 +- .../detail/rtree/node/variant_dynamic.hpp | 572 +- .../detail/rtree/node/variant_static.hpp | 321 +- .../detail/rtree/node/variant_visitor.hpp | 136 +- .../index/detail/rtree/node/weak_dynamic.hpp | 616 +- .../index/detail/rtree/node/weak_static.hpp | 347 +- .../index/detail/rtree/node/weak_visitor.hpp | 134 +- .../geometry/index/detail/rtree/options.hpp | 310 +- .../index/detail/rtree/pack_create.hpp | 931 +- .../detail/rtree/quadratic/quadratic.hpp | 32 +- .../rtree/quadratic/redistribute_elements.hpp | 592 +- .../index/detail/rtree/query_iterators.hpp | 774 +- .../detail/rtree/rstar/choose_next_node.hpp | 482 +- .../index/detail/rtree/rstar/insert.hpp | 1184 +- .../rtree/rstar/redistribute_elements.hpp | 940 +- .../index/detail/rtree/rstar/rstar.hpp | 36 +- .../detail/rtree/utilities/are_boxes_ok.hpp | 256 +- .../detail/rtree/utilities/are_counts_ok.hpp | 220 +- .../detail/rtree/utilities/are_levels_ok.hpp | 218 +- .../index/detail/rtree/utilities/gl_draw.hpp | 486 +- .../index/detail/rtree/utilities/print.hpp | 438 +- .../detail/rtree/utilities/statistics.hpp | 210 +- .../index/detail/rtree/utilities/view.hpp | 122 +- .../detail/rtree/visitors/children_box.hpp | 110 +- .../index/detail/rtree/visitors/copy.hpp | 184 +- .../index/detail/rtree/visitors/count.hpp | 214 +- .../index/detail/rtree/visitors/destroy.hpp | 142 +- .../detail/rtree/visitors/distance_query.hpp | 1176 +- .../index/detail/rtree/visitors/insert.hpp | 1146 +- .../index/detail/rtree/visitors/is_leaf.hpp | 90 +- .../index/detail/rtree/visitors/iterator.hpp | 268 +- .../index/detail/rtree/visitors/remove.hpp | 688 +- .../detail/rtree/visitors/spatial_query.hpp | 428 +- .../geometry/index/detail/serialization.hpp | 1170 +- .../boost/geometry/index/detail/tags.hpp | 50 +- .../geometry/index/detail/translator.hpp | 120 +- .../boost/geometry/index/detail/tuples.hpp | 408 +- .../boost/geometry/index/detail/utilities.hpp | 92 +- .../boost/geometry/index/detail/varray.hpp | 4394 ++- .../geometry/index/detail/varray_detail.hpp | 1520 +- .../geometry/index/distance_predicates.hpp | 408 +- .../include/boost/geometry/index/equal_to.hpp | 525 +- .../boost/geometry/index/indexable.hpp | 580 +- .../include/boost/geometry/index/inserter.hpp | 161 +- .../boost/geometry/index/parameters.hpp | 510 +- .../boost/geometry/index/predicates.hpp | 854 +- .../include/boost/geometry/index/rtree.hpp | 4443 ++- .../include/boost/geometry/io/dsv/write.hpp | 867 +- .../include/boost/geometry/io/io.hpp | 116 +- .../boost/geometry/io/svg/svg_mapper.hpp | 900 +- .../include/boost/geometry/io/svg/write.hpp | 836 +- .../boost/geometry/io/svg/write_svg.hpp | 56 +- .../boost/geometry/io/svg/write_svg_multi.hpp | 54 +- .../boost/geometry/io/wkt/detail/prefix.hpp | 132 +- .../geometry/io/wkt/detail/wkt_multi.hpp | 112 +- .../include/boost/geometry/io/wkt/read.hpp | 1821 +- .../include/boost/geometry/io/wkt/stream.hpp | 76 +- .../include/boost/geometry/io/wkt/wkt.hpp | 50 +- .../include/boost/geometry/io/wkt/write.hpp | 1072 +- .../include/boost/geometry/iterators/base.hpp | 139 +- .../geometry/iterators/closing_iterator.hpp | 309 +- .../iterators/concatenate_iterator.hpp | 305 +- .../point_iterator/inner_range_type.hpp | 132 +- .../detail/point_iterator/iterator_type.hpp | 274 +- .../detail/point_iterator/value_type.hpp | 94 +- .../detail/segment_iterator/iterator_type.hpp | 306 +- .../range_segment_iterator.hpp | 429 +- .../detail/segment_iterator/value_type.hpp | 142 +- .../iterators/dispatch/point_iterator.hpp | 94 +- .../iterators/dispatch/segment_iterator.hpp | 94 +- .../iterators/ever_circling_iterator.hpp | 419 +- .../geometry/iterators/flatten_iterator.hpp | 457 +- .../geometry/iterators/has_one_element.hpp | 58 +- .../geometry/iterators/point_iterator.hpp | 616 +- .../iterators/point_reverse_iterator.hpp | 178 +- .../geometry/iterators/segment_iterator.hpp | 706 +- .../geometry/multi/algorithms/append.hpp | 54 +- .../boost/geometry/multi/algorithms/area.hpp | 42 +- .../geometry/multi/algorithms/centroid.hpp | 44 +- .../boost/geometry/multi/algorithms/clear.hpp | 42 +- .../geometry/multi/algorithms/convert.hpp | 42 +- .../geometry/multi/algorithms/correct.hpp | 42 +- .../geometry/multi/algorithms/covered_by.hpp | 54 +- .../algorithms/detail/extreme_points.hpp | 38 +- .../algorithms/detail/for_each_range.hpp | 42 +- .../multi/algorithms/detail/modify.hpp | 42 +- .../detail/modify_with_predicate.hpp | 42 +- .../multi/algorithms/detail/multi_sum.hpp | 42 +- .../detail/overlay/copy_segment_point.hpp | 38 +- .../detail/overlay/copy_segments.hpp | 32 +- .../algorithms/detail/overlay/get_ring.hpp | 32 +- .../algorithms/detail/overlay/get_turns.hpp | 32 +- .../detail/overlay/self_turn_points.hpp | 32 +- .../algorithms/detail/point_on_border.hpp | 48 +- .../detail/sections/range_by_section.hpp | 52 +- .../detail/sections/sectionalize.hpp | 48 +- .../geometry/multi/algorithms/disjoint.hpp | 42 +- .../geometry/multi/algorithms/distance.hpp | 54 +- .../geometry/multi/algorithms/envelope.hpp | 42 +- .../geometry/multi/algorithms/equals.hpp | 44 +- .../geometry/multi/algorithms/for_each.hpp | 42 +- .../multi/algorithms/intersection.hpp | 44 +- .../geometry/multi/algorithms/length.hpp | 42 +- .../multi/algorithms/num_geometries.hpp | 44 +- .../multi/algorithms/num_interior_rings.hpp | 52 +- .../geometry/multi/algorithms/num_points.hpp | 54 +- .../geometry/multi/algorithms/perimeter.hpp | 42 +- .../multi/algorithms/remove_spikes.hpp | 38 +- .../geometry/multi/algorithms/reverse.hpp | 42 +- .../geometry/multi/algorithms/simplify.hpp | 42 +- .../geometry/multi/algorithms/transform.hpp | 42 +- .../geometry/multi/algorithms/unique.hpp | 42 +- .../geometry/multi/algorithms/within.hpp | 50 +- .../boost/geometry/multi/core/closure.hpp | 38 +- .../boost/geometry/multi/core/geometry_id.hpp | 40 +- .../geometry/multi/core/interior_rings.hpp | 44 +- .../boost/geometry/multi/core/is_areal.hpp | 44 +- .../boost/geometry/multi/core/point_order.hpp | 42 +- .../boost/geometry/multi/core/point_type.hpp | 44 +- .../boost/geometry/multi/core/ring_type.hpp | 50 +- .../boost/geometry/multi/core/tags.hpp | 44 +- .../multi/core/topological_dimension.hpp | 44 +- .../multi/geometries/concepts/check.hpp | 44 +- .../concepts/multi_linestring_concept.hpp | 44 +- .../concepts/multi_point_concept.hpp | 44 +- .../concepts/multi_polygon_concept.hpp | 44 +- .../multi/geometries/multi_geometries.hpp | 42 +- .../multi/geometries/multi_linestring.hpp | 42 +- .../geometry/multi/geometries/multi_point.hpp | 42 +- .../multi/geometries/multi_polygon.hpp | 42 +- .../geometries/register/multi_linestring.hpp | 44 +- .../multi/geometries/register/multi_point.hpp | 44 +- .../geometries/register/multi_polygon.hpp | 44 +- .../boost/geometry/multi/io/dsv/write.hpp | 42 +- .../geometry/multi/io/wkt/detail/prefix.hpp | 42 +- .../boost/geometry/multi/io/wkt/read.hpp | 42 +- .../boost/geometry/multi/io/wkt/wkt.hpp | 40 +- .../boost/geometry/multi/io/wkt/write.hpp | 42 +- .../include/boost/geometry/multi/multi.hpp | 48 +- .../strategies/cartesian/centroid_average.hpp | 42 +- .../multi/views/detail/range_type.hpp | 42 +- .../boost/geometry/policies/compare.hpp | 424 +- .../policies/disjoint_interrupt_policy.hpp | 134 +- .../policies/is_valid/default_policy.hpp | 118 +- .../is_valid/failing_reason_policy.hpp | 448 +- .../policies/is_valid/failure_type_policy.hpp | 166 +- .../predicate_based_interrupt_policy.hpp | 202 +- .../geometry/policies/relate/direction.hpp | 782 +- .../policies/relate/intersection_points.hpp | 419 +- .../policies/relate/intersection_ratios.hpp | 254 +- .../boost/geometry/policies/relate/tupled.hpp | 232 +- .../robustness/get_rescale_policy.hpp | 683 +- .../policies/robustness/no_rescale_policy.hpp | 132 +- .../policies/robustness/rescale_policy.hpp | 179 +- .../policies/robustness/robust_point_type.hpp | 60 +- .../policies/robustness/robust_type.hpp | 134 +- .../policies/robustness/segment_ratio.hpp | 528 +- .../robustness/segment_ratio_type.hpp | 56 +- .../include/boost/geometry/srs/epsg.hpp | 68 + .../include/boost/geometry/srs/esri.hpp | 70 + .../include/boost/geometry/srs/iau2000.hpp | 68 + .../include/boost/geometry/srs/projection.hpp | 550 + .../boost/geometry/srs/projections/code.hpp | 57 + .../geometry/srs/projections/constants.hpp | 62 + .../boost/geometry/srs/projections/dpar.hpp | 855 + .../boost/geometry/srs/projections/epsg.hpp | 4411 +++ .../geometry/srs/projections/epsg_params.hpp | 48 + .../geometry/srs/projections/epsg_traits.hpp | 4418 +++ .../boost/geometry/srs/projections/esri.hpp | 493 + .../geometry/srs/projections/esri_params.hpp | 48 + .../geometry/srs/projections/esri_traits.hpp | 500 + .../geometry/srs/projections/exception.hpp | 113 + .../geometry/srs/projections/factory.hpp | 295 + .../geometry/srs/projections/factory_key.hpp | 83 + .../boost/geometry/srs/projections/grids.hpp | 188 + .../geometry/srs/projections/iau2000.hpp | 2426 ++ .../srs/projections/iau2000_params.hpp | 48 + .../srs/projections/iau2000_traits.hpp | 2433 ++ .../srs/projections/impl/aasincos.hpp | 120 + .../geometry/srs/projections/impl/adjlon.hpp | 70 + .../srs/projections/impl/base_dynamic.hpp | 162 + .../srs/projections/impl/base_static.hpp | 139 + .../srs/projections/impl/dms_parser.hpp | 268 + .../srs/projections/impl/factory_entry.hpp | 86 + .../projections/impl/function_overloads.hpp | 40 + .../geometry/srs/projections/impl/geocent.hpp | 487 + .../projections/impl/pj_apply_gridshift.hpp | 433 + .../impl/pj_apply_gridshift_shared.hpp | 157 + .../geometry/srs/projections/impl/pj_auth.hpp | 102 + .../srs/projections/impl/pj_datum_set.hpp | 455 + .../srs/projections/impl/pj_datums.hpp | 175 + .../srs/projections/impl/pj_ell_set.hpp | 597 + .../srs/projections/impl/pj_ellps.hpp | 130 + .../geometry/srs/projections/impl/pj_fwd.hpp | 101 + .../srs/projections/impl/pj_gauss.hpp | 145 + .../srs/projections/impl/pj_gridinfo.hpp | 961 + .../srs/projections/impl/pj_gridlist.hpp | 174 + .../projections/impl/pj_gridlist_shared.hpp | 122 + .../geometry/srs/projections/impl/pj_init.hpp | 525 + .../geometry/srs/projections/impl/pj_inv.hpp | 82 + .../geometry/srs/projections/impl/pj_mlfn.hpp | 135 + .../geometry/srs/projections/impl/pj_msfn.hpp | 59 + .../srs/projections/impl/pj_param.hpp | 653 + .../geometry/srs/projections/impl/pj_phi2.hpp | 75 + .../geometry/srs/projections/impl/pj_qsfn.hpp | 95 + .../srs/projections/impl/pj_strerrno.hpp | 219 + .../srs/projections/impl/pj_transform.hpp | 1030 + .../geometry/srs/projections/impl/pj_tsfn.hpp | 58 + .../srs/projections/impl/pj_units.hpp | 89 + .../srs/projections/impl/pj_zpoly1.hpp | 106 + .../srs/projections/impl/proj_mdist.hpp | 151 + .../srs/projections/impl/projects.hpp | 194 + .../srs/projections/invalid_point.hpp | 38 + .../geometry/srs/projections/par_data.hpp | 197 + .../geometry/srs/projections/proj/aea.hpp | 344 + .../geometry/srs/projections/proj/aeqd.hpp | 631 + .../geometry/srs/projections/proj/airy.hpp | 242 + .../geometry/srs/projections/proj/aitoff.hpp | 314 + .../geometry/srs/projections/proj/august.hpp | 149 + .../geometry/srs/projections/proj/bacon.hpp | 238 + .../geometry/srs/projections/proj/bipc.hpp | 284 + .../geometry/srs/projections/proj/boggs.hpp | 165 + .../geometry/srs/projections/proj/bonne.hpp | 279 + .../geometry/srs/projections/proj/cass.hpp | 269 + .../geometry/srs/projections/proj/cc.hpp | 154 + .../geometry/srs/projections/proj/cea.hpp | 249 + .../geometry/srs/projections/proj/chamb.hpp | 296 + .../geometry/srs/projections/proj/collg.hpp | 168 + .../geometry/srs/projections/proj/crast.hpp | 156 + .../geometry/srs/projections/proj/denoy.hpp | 155 + .../geometry/srs/projections/proj/eck1.hpp | 148 + .../geometry/srs/projections/proj/eck2.hpp | 165 + .../geometry/srs/projections/proj/eck3.hpp | 290 + .../geometry/srs/projections/proj/eck4.hpp | 176 + .../geometry/srs/projections/proj/eck5.hpp | 149 + .../geometry/srs/projections/proj/eqc.hpp | 159 + .../geometry/srs/projections/proj/eqdc.hpp | 225 + .../geometry/srs/projections/proj/etmerc.hpp | 453 + .../geometry/srs/projections/proj/fahey.hpp | 151 + .../geometry/srs/projections/proj/fouc_s.hpp | 187 + .../geometry/srs/projections/proj/gall.hpp | 150 + .../geometry/srs/projections/proj/geocent.hpp | 150 + .../geometry/srs/projections/proj/geos.hpp | 384 + .../geometry/srs/projections/proj/gins8.hpp | 151 + .../geometry/srs/projections/proj/gn_sinu.hpp | 385 + .../geometry/srs/projections/proj/gnom.hpp | 256 + .../geometry/srs/projections/proj/goode.hpp | 190 + .../geometry/srs/projections/proj/gstmerc.hpp | 183 + .../geometry/srs/projections/proj/hammer.hpp | 188 + .../geometry/srs/projections/proj/hatano.hpp | 194 + .../geometry/srs/projections/proj/healpix.hpp | 873 + .../geometry/srs/projections/proj/igh.hpp | 371 + .../geometry/srs/projections/proj/imw_p.hpp | 322 + .../geometry/srs/projections/proj/isea.hpp | 1327 + .../geometry/srs/projections/proj/krovak.hpp | 285 + .../geometry/srs/projections/proj/labrd.hpp | 252 + .../geometry/srs/projections/proj/laea.hpp | 439 + .../geometry/srs/projections/proj/lagrng.hpp | 194 + .../geometry/srs/projections/proj/larr.hpp | 140 + .../geometry/srs/projections/proj/lask.hpp | 154 + .../geometry/srs/projections/proj/latlong.hpp | 163 + .../geometry/srs/projections/proj/lcc.hpp | 272 + .../geometry/srs/projections/proj/lcca.hpp | 256 + .../geometry/srs/projections/proj/loxim.hpp | 192 + .../geometry/srs/projections/proj/lsat.hpp | 340 + .../geometry/srs/projections/proj/mbt_fps.hpp | 175 + .../geometry/srs/projections/proj/mbtfpp.hpp | 178 + .../geometry/srs/projections/proj/mbtfpq.hpp | 189 + .../geometry/srs/projections/proj/merc.hpp | 246 + .../geometry/srs/projections/proj/mill.hpp | 148 + .../srs/projections/proj/mod_ster.hpp | 490 + .../geometry/srs/projections/proj/moll.hpp | 267 + .../srs/projections/proj/natearth.hpp | 214 + .../geometry/srs/projections/proj/nell.hpp | 161 + .../geometry/srs/projections/proj/nell_h.hpp | 165 + .../geometry/srs/projections/proj/nocol.hpp | 171 + .../geometry/srs/projections/proj/nsper.hpp | 338 + .../geometry/srs/projections/proj/nzmg.hpp | 237 + .../geometry/srs/projections/proj/ob_tran.hpp | 627 + .../geometry/srs/projections/proj/ocea.hpp | 222 + .../geometry/srs/projections/proj/oea.hpp | 197 + .../geometry/srs/projections/proj/omerc.hpp | 334 + .../geometry/srs/projections/proj/ortho.hpp | 246 + .../geometry/srs/projections/proj/poly.hpp | 292 + .../geometry/srs/projections/proj/putp2.hpp | 175 + .../geometry/srs/projections/proj/putp3.hpp | 194 + .../geometry/srs/projections/proj/putp4p.hpp | 200 + .../geometry/srs/projections/proj/putp5.hpp | 196 + .../geometry/srs/projections/proj/putp6.hpp | 222 + .../geometry/srs/projections/proj/qsc.hpp | 537 + .../geometry/srs/projections/proj/robin.hpp | 284 + .../geometry/srs/projections/proj/rouss.hpp | 224 + .../geometry/srs/projections/proj/rpoly.hpp | 172 + .../geometry/srs/projections/proj/sconics.hpp | 507 + .../geometry/srs/projections/proj/somerc.hpp | 210 + .../geometry/srs/projections/proj/stere.hpp | 533 + .../geometry/srs/projections/proj/sterea.hpp | 189 + .../geometry/srs/projections/proj/sts.hpp | 283 + .../geometry/srs/projections/proj/tcc.hpp | 146 + .../geometry/srs/projections/proj/tcea.hpp | 149 + .../geometry/srs/projections/proj/tmerc.hpp | 368 + .../geometry/srs/projections/proj/tpeqd.hpp | 223 + .../geometry/srs/projections/proj/urm5.hpp | 169 + .../geometry/srs/projections/proj/urmfps.hpp | 210 + .../geometry/srs/projections/proj/vandg.hpp | 234 + .../geometry/srs/projections/proj/vandg2.hpp | 209 + .../geometry/srs/projections/proj/vandg4.hpp | 174 + .../geometry/srs/projections/proj/wag2.hpp | 153 + .../geometry/srs/projections/proj/wag3.hpp | 161 + .../geometry/srs/projections/proj/wag7.hpp | 142 + .../geometry/srs/projections/proj/wink1.hpp | 157 + .../geometry/srs/projections/proj/wink2.hpp | 176 + .../boost/geometry/srs/projections/proj4.hpp | 129 + .../geometry/srs/projections/shared_grids.hpp | 84 + .../boost/geometry/srs/projections/spar.hpp | 1183 + .../geometry/srs/projections/srid_traits.hpp | 33 + .../geometry/srs/projections/str_cast.hpp | 160 + .../boost/geometry/srs/shared_grids.hpp | 26 + .../include/boost/geometry/srs/sphere.hpp | 117 + .../{core/srs.hpp => srs/spheroid.hpp} | 316 +- .../include/boost/geometry/srs/srs.hpp | 29 + .../boost/geometry/srs/transformation.hpp | 726 + .../agnostic/buffer_distance_asymmetric.hpp | 228 +- .../agnostic/buffer_distance_symmetric.hpp | 214 +- .../agnostic/hull_graham_andrew.hpp | 776 +- .../agnostic/point_in_box_by_side.hpp | 213 +- .../strategies/agnostic/point_in_point.hpp | 196 +- .../point_in_poly_oriented_winding.hpp | 414 +- .../agnostic/point_in_poly_winding.hpp | 664 +- .../geometry/strategies/agnostic/relate.hpp | 122 - .../agnostic/simplify_douglas_peucker.hpp | 642 +- .../boost/geometry/strategies/area.hpp | 142 +- .../boost/geometry/strategies/area_result.hpp | 116 + .../boost/geometry/strategies/azimuth.hpp | 44 + .../boost/geometry/strategies/buffer.hpp | 206 +- .../geometry/strategies/cartesian/area.hpp | 147 + .../strategies/cartesian/area_surveyor.hpp | 180 +- .../geometry/strategies/cartesian/azimuth.hpp | 51 + .../strategies/cartesian/box_in_box.hpp | 605 +- .../strategies/cartesian/buffer_end_flat.hpp | 226 +- .../strategies/cartesian/buffer_end_round.hpp | 356 +- .../cartesian/buffer_join_miter.hpp | 284 +- .../cartesian/buffer_join_round.hpp | 374 +- .../cartesian/buffer_join_round_by_divide.hpp | 308 +- .../cartesian/buffer_point_circle.hpp | 235 +- .../cartesian/buffer_point_square.hpp | 225 +- .../cartesian/buffer_side_straight.hpp | 272 +- .../strategies/cartesian/centroid_average.hpp | 254 +- .../cartesian/centroid_bashein_detmer.hpp | 517 +- .../cartesian/centroid_weighted_length.hpp | 348 +- .../geometry/strategies/cartesian/densify.hpp | 134 + .../strategies/cartesian/disjoint_box_box.hpp | 112 + .../cartesian/disjoint_segment_box.hpp | 319 + .../cartesian/distance_projected_point.hpp | 566 +- .../cartesian/distance_projected_point_ax.hpp | 629 +- .../cartesian/distance_pythagoras.hpp | 583 +- .../cartesian/distance_pythagoras_box_box.hpp | 679 +- .../distance_pythagoras_point_box.hpp | 702 +- .../cartesian/distance_segment_box.hpp | 203 + .../strategies/cartesian/envelope.hpp | 153 + .../strategies/cartesian/envelope_box.hpp | 119 + .../cartesian/envelope_multipoint.hpp | 59 + .../strategies/cartesian/envelope_point.hpp | 111 + .../strategies/cartesian/envelope_segment.hpp | 93 + .../strategies/cartesian/expand_box.hpp | 69 + .../strategies/cartesian/expand_point.hpp | 125 + .../strategies/cartesian/expand_segment.hpp | 71 + .../{cart_intersect.hpp => intersection.hpp} | 1357 +- .../strategies/cartesian/line_interpolate.hpp | 129 + .../strategies/cartesian/point_in_box.hpp | 611 +- .../strategies/cartesian/point_in_point.hpp | 124 + .../point_in_poly_crossings_multiply.hpp | 254 +- .../cartesian/point_in_poly_franklin.hpp | 242 +- .../cartesian/point_in_poly_winding.hpp | 310 + .../strategies/cartesian/side_by_triangle.hpp | 560 +- .../cartesian/side_of_intersection.hpp | 700 +- .../boost/geometry/strategies/centroid.hpp | 144 +- .../strategies/comparable_distance_result.hpp | 392 +- .../boost/geometry/strategies/compare.hpp | 398 +- .../strategies/concepts/area_concept.hpp | 154 +- .../strategies/concepts/centroid_concept.hpp | 155 +- .../concepts/convex_hull_concept.hpp | 160 +- .../strategies/concepts/distance_concept.hpp | 426 +- .../concepts/segment_intersect_concept.hpp | 156 +- .../strategies/concepts/simplify_concept.hpp | 192 +- .../strategies/concepts/within_concept.hpp | 608 +- .../boost/geometry/strategies/convex_hull.hpp | 100 +- .../boost/geometry/strategies/covered_by.hpp | 171 +- .../strategies/default_area_result.hpp | 92 +- .../default_comparable_distance_result.hpp | 86 +- .../strategies/default_distance_result.hpp | 86 +- .../strategies/default_length_result.hpp | 178 +- .../geometry/strategies/default_strategy.hpp | 68 +- .../boost/geometry/strategies/densify.hpp | 42 + .../boost/geometry/strategies/disjoint.hpp | 86 + .../boost/geometry/strategies/distance.hpp | 220 +- .../geometry/strategies/distance_result.hpp | 426 +- .../boost/geometry/strategies/envelope.hpp | 46 + .../boost/geometry/strategies/expand.hpp | 45 + .../geometry/strategies/geographic/area.hpp | 232 + .../strategies/geographic/azimuth.hpp | 150 + .../geographic/buffer_point_circle.hpp | 127 + .../strategies/geographic/densify.hpp | 136 + .../geographic/disjoint_segment_box.hpp | 141 + .../strategies/geographic/distance.hpp | 237 + .../geographic/distance_andoyer.hpp | 307 +- .../geographic/distance_cross_track.hpp | 738 + .../distance_cross_track_box_box.hpp | 234 + .../distance_cross_track_point_box.hpp | 228 + .../geographic/distance_segment_box.hpp | 336 + .../strategies/geographic/distance_thomas.hpp | 277 +- .../geographic/distance_vincenty.hpp | 289 +- .../strategies/geographic/envelope.hpp | 116 + .../geographic/envelope_segment.hpp | 123 + .../strategies/geographic/expand_segment.hpp | 102 + .../strategies/geographic/intersection.hpp | 1011 + .../geographic/intersection_elliptic.hpp | 243 + .../geographic/line_interpolate.hpp | 129 + .../strategies/geographic/mapping_ssf.hpp | 370 +- .../strategies/geographic/parameters.hpp | 168 + .../geographic/point_in_poly_winding.hpp | 80 + .../geometry/strategies/geographic/side.hpp | 152 + .../strategies/geographic/side_andoyer.hpp | 115 +- .../strategies/geographic/side_detail.hpp | 139 - .../strategies/geographic/side_thomas.hpp | 115 +- .../strategies/geographic/side_vincenty.hpp | 115 +- .../geometry/strategies/intersection.hpp | 103 +- .../strategies/intersection_result.hpp | 156 +- .../strategies/intersection_strategies.hpp | 201 +- .../geometry/strategies/line_interpolate.hpp | 42 + .../boost/geometry/strategies/normalize.hpp | 268 + .../boost/geometry/strategies/relate.hpp | 177 + .../boost/geometry/strategies/side.hpp | 117 +- .../boost/geometry/strategies/side_info.hpp | 354 +- .../geometry/strategies/spherical/area.hpp | 195 + .../strategies/spherical/area_huiller.hpp | 214 - .../geometry/strategies/spherical/azimuth.hpp | 130 + .../geometry/strategies/spherical/compare.hpp | 322 + .../strategies/spherical/compare_circular.hpp | 152 - .../geometry/strategies/spherical/densify.hpp | 144 + .../strategies/spherical/disjoint_box_box.hpp | 134 + .../spherical/disjoint_segment_box.hpp | 116 + .../spherical/distance_cross_track.hpp | 1583 +- .../distance_cross_track_box_box.hpp | 474 + .../distance_cross_track_point_box.hpp | 781 +- .../spherical/distance_haversine.hpp | 640 +- .../spherical/distance_segment_box.hpp | 371 + .../strategies/spherical/envelope.hpp | 146 + .../strategies/spherical/envelope_box.hpp | 145 + .../spherical/envelope_multipoint.hpp | 379 + .../strategies/spherical/envelope_point.hpp | 111 + .../strategies/spherical/envelope_segment.hpp | 445 + .../strategies/spherical/expand_box.hpp | 98 + .../strategies/spherical/expand_point.hpp | 233 + .../strategies/spherical/expand_segment.hpp | 118 + .../strategies/spherical/get_radius.hpp | 81 + .../strategies/spherical/intersection.hpp | 1790 +- .../strategies/spherical/line_interpolate.hpp | 123 + .../strategies/spherical/point_in_point.hpp | 172 + .../spherical/point_in_poly_winding.hpp | 596 + .../spherical/side_by_cross_track.hpp | 165 +- .../geometry/strategies/spherical/ssf.hpp | 305 +- .../boost/geometry/strategies/strategies.hpp | 222 +- .../strategies/strategy_transform.hpp | 1054 +- .../boost/geometry/strategies/tags.hpp | 92 +- .../boost/geometry/strategies/transform.hpp | 126 +- .../transform/inverse_transformer.hpp | 139 +- .../strategies/transform/map_transformer.hpp | 343 +- .../transform/matrix_transformers.hpp | 818 +- .../strategies/transform/srs_transformer.hpp | 102 + .../boost/geometry/strategies/within.hpp | 169 +- .../boost/geometry/util/add_const_if_c.hpp | 112 +- .../include/boost/geometry/util/bare_type.hpp | 104 +- .../boost/geometry/util/calculation_type.hpp | 362 +- .../boost/geometry/util/closure_as_bool.hpp | 92 +- .../boost/geometry/util/combine_if.hpp | 185 +- .../boost/geometry/util/compress_variant.hpp | 212 +- .../include/boost/geometry/util/condition.hpp | 88 +- .../boost/geometry/util/coordinate_cast.hpp | 110 +- .../geometry/util/for_each_coordinate.hpp | 188 +- .../geometry/util/has_infinite_coordinate.hpp | 110 +- .../geometry/util/has_nan_coordinate.hpp | 198 +- .../util/has_non_finite_coordinate.hpp | 110 +- .../is_inverse_spheroidal_coordinates.hpp | 48 + .../include/boost/geometry/util/math.hpp | 1658 +- .../normalize_spheroidal_box_coordinates.hpp | 352 +- .../util/normalize_spheroidal_coordinates.hpp | 775 +- .../geometry/util/order_as_direction.hpp | 92 +- .../boost/geometry/util/parameter_type_of.hpp | 150 +- .../geometry/util/promote_floating_point.hpp | 100 +- .../boost/geometry/util/promote_integral.hpp | 636 +- .../include/boost/geometry/util/range.hpp | 841 +- .../include/boost/geometry/util/rational.hpp | 358 +- .../include/boost/geometry/util/readme.txt | 17 - .../geometry/util/select_calculation_type.hpp | 168 +- .../geometry/util/select_coordinate_type.hpp | 138 +- .../geometry/util/select_most_precise.hpp | 364 +- .../geometry/util/select_sequence_element.hpp | 78 + .../boost/geometry/util/series_expansion.hpp | 747 + .../boost/geometry/util/transform_variant.hpp | 168 +- .../include/boost/geometry/views/box_view.hpp | 236 +- .../boost/geometry/views/closeable_view.hpp | 218 +- .../geometry/views/detail/boundary_view.hpp | 32 +- .../detail/boundary_view/implementation.hpp | 932 +- .../views/detail/boundary_view/interface.hpp | 140 +- .../views/detail/indexed_point_view.hpp | 246 +- .../geometry/views/detail/normalized_view.hpp | 234 +- .../geometry/views/detail/points_view.hpp | 283 +- .../geometry/views/detail/range_type.hpp | 268 +- .../views/detail/two_dimensional_view.hpp | 392 +- .../boost/geometry/views/identity_view.hpp | 122 +- .../boost/geometry/views/reversible_view.hpp | 148 +- .../boost/geometry/views/segment_view.hpp | 200 +- .../boost/graph/adjacency_iterator.hpp | 1 + .../include/boost/graph/adjacency_list.hpp | 25 +- .../include/boost/graph/astar_search.hpp | 2 +- .../boost/graph/detail/adjacency_list.hpp | 6 +- .../boost/graph/detail/array_binary_tree.hpp | 1 + .../detail/compressed_sparse_row_struct.hpp | 4 +- .../include/boost/graph/detail/geodesic.hpp | 2 +- .../boost/graph/detail/read_graphviz_new.hpp | 2 +- .../graph/detail/read_graphviz_spirit.hpp | 2 +- .../crauser_et_al_shortest_paths.hpp | 10 +- .../distributed/detail/mpi_process_group.ipp | 2 +- .../graph/distributed/mpi_process_group.hpp | 1 + .../include/boost/graph/graph_utility.hpp | 58 +- .../boost/graph/gursoy_atun_layout.hpp | 7 +- .../boost/graph/parallel/algorithm.hpp | 15 +- .../include/boost/graph/properties.hpp | 7 - .../include/boost/graph/random.hpp | 1 + .../include/boost/graph/reverse_graph.hpp | 7 + .../include/boost/graph/stanford_graph.hpp | 8 + .../boost/graph/transitive_closure.hpp | 4 +- .../include/boost/graph/vf2_sub_graph_iso.hpp | 15 +- .../boost/integer/common_factor_rt.hpp | 896 +- .../include/boost/integer/integer_mask.hpp | 10 +- .../include/boost/integer_fwd.hpp | 3 + .../include/boost/intrusive/avl_set.hpp | 44 +- .../include/boost/intrusive/avltree.hpp | 22 +- .../boost/intrusive/avltree_algorithms.hpp | 88 +- .../include/boost/intrusive/bs_set.hpp | 44 +- .../include/boost/intrusive/bstree.hpp | 38 +- .../boost/intrusive/bstree_algorithms.hpp | 85 +- .../intrusive/circular_list_algorithms.hpp | 32 +- .../intrusive/circular_slist_algorithms.hpp | 14 +- .../intrusive/derivation_value_traits.hpp | 2 +- .../detail/any_node_and_algorithms.hpp | 28 +- .../boost/intrusive/detail/avltree_node.hpp | 18 +- .../detail/common_slist_algorithms.hpp | 14 +- .../boost/intrusive/detail/config_begin.hpp | 27 +- .../detail/default_header_holder.hpp | 4 +- .../intrusive/detail/ebo_functor_holder.hpp | 8 +- .../boost/intrusive/detail/generic_hook.hpp | 18 +- .../boost/intrusive/detail/hashtable_node.hpp | 54 +- .../boost/intrusive/detail/hook_traits.hpp | 26 +- .../boost/intrusive/detail/iterator.hpp | 120 +- .../intrusive/detail/key_nodeptr_comp.hpp | 16 +- .../boost/intrusive/detail/list_iterator.hpp | 20 +- .../boost/intrusive/detail/list_node.hpp | 4 +- .../include/boost/intrusive/detail/math.hpp | 4 +- .../boost/intrusive/detail/memory_util.hpp | 284 - .../include/boost/intrusive/detail/mpl.hpp | 21 +- .../intrusive/detail/node_cloner_disposer.hpp | 4 +- .../boost/intrusive/detail/node_to_value.hpp | 2 +- .../boost/intrusive/detail/preprocessor.hpp | 52 - .../boost/intrusive/detail/rbtree_node.hpp | 12 +- .../intrusive/detail/simple_disposers.hpp | 2 +- .../boost/intrusive/detail/slist_iterator.hpp | 16 +- .../boost/intrusive/detail/slist_node.hpp | 2 +- .../boost/intrusive/detail/to_raw_pointer.hpp | 47 - .../boost/intrusive/detail/tree_iterator.hpp | 34 +- .../boost/intrusive/detail/tree_node.hpp | 6 +- .../intrusive/detail/tree_value_compare.hpp | 59 +- .../boost/intrusive/detail/utilities.hpp | 1279 - .../boost/intrusive/detail/workaround.hpp | 5 +- .../include/boost/intrusive/hashtable.hpp | 265 +- .../include/boost/intrusive/intrusive_fwd.hpp | 3 + .../intrusive/linear_slist_algorithms.hpp | 8 +- .../include/boost/intrusive/list.hpp | 29 +- .../boost/intrusive/member_value_traits.hpp | 5 +- .../include/boost/intrusive/options.hpp | 10 +- .../boost/intrusive/pointer_plus_bits.hpp | 18 + .../boost/intrusive/pointer_traits.hpp | 32 +- .../boost/intrusive/priority_compare.hpp | 4 +- .../include/boost/intrusive/rbtree.hpp | 22 +- .../boost/intrusive/rbtree_algorithms.hpp | 78 +- .../include/boost/intrusive/set.hpp | 44 +- .../include/boost/intrusive/sg_set.hpp | 44 +- .../include/boost/intrusive/sgtree.hpp | 22 +- .../boost/intrusive/sgtree_algorithms.hpp | 122 +- .../include/boost/intrusive/slist.hpp | 43 +- .../include/boost/intrusive/splay_set.hpp | 44 +- .../include/boost/intrusive/splaytree.hpp | 22 +- .../boost/intrusive/splaytree_algorithms.hpp | 132 +- .../include/boost/intrusive/treap.hpp | 159 +- .../boost/intrusive/treap_algorithms.hpp | 131 +- .../include/boost/intrusive/treap_set.hpp | 123 +- .../include/boost/intrusive/unordered_set.hpp | 58 +- .../boost/intrusive/unordered_set_hook.hpp | 20 +- .../include/boost/intrusive_ptr.hpp | 2 +- .../include/boost/iostreams/chain.hpp | 22 +- .../boost/iostreams/code_converter.hpp | 8 +- .../detail/adapter/direct_adapter.hpp | 1 + .../detail/adapter/non_blocking_adapter.hpp | 5 +- .../include/boost/iostreams/detail/buffer.hpp | 30 +- .../boost/iostreams/detail/config/codecvt.hpp | 5 +- .../iostreams/detail/config/dyn_link.hpp | 11 +- .../boost/iostreams/detail/config/fpos.hpp | 21 +- .../detail/config/unreachable_return.hpp | 1 - .../iostreams/detail/config/wide_streams.hpp | 3 +- .../boost/iostreams/detail/restrict_impl.hpp | 2 + .../detail/streambuf/direct_streambuf.hpp | 4 +- .../detail/streambuf/indirect_streambuf.hpp | 69 +- .../detail/streambuf/linked_streambuf.hpp | 4 +- .../boost/iostreams/detail/vc6/close.hpp | 129 - .../boost/iostreams/detail/vc6/read.hpp | 238 - .../boost/iostreams/detail/vc6/write.hpp | 159 - .../boost/iostreams/device/mapped_file.hpp | 5 +- .../include/boost/iostreams/device/null.hpp | 2 +- .../include/boost/iostreams/filter/bzip2.hpp | 33 +- .../include/boost/iostreams/filter/gzip.hpp | 26 +- .../boost/iostreams/filter/symmetric.hpp | 7 +- .../include/boost/iostreams/filter/zlib.hpp | 42 +- .../boost/iostreams/filtering_stream.hpp | 23 +- .../include/boost/iostreams/invert.hpp | 4 +- .../include/boost/iostreams/positioning.hpp | 6 +- .../include/boost/iostreams/stream.hpp | 20 + .../include/boost/iostreams/stream_buffer.hpp | 2 +- .../include/boost/iterator/advance.hpp | 84 + .../detail/facade_iterator_category.hpp | 5 +- .../detail/operator_brackets_dispatch.hpp | 88 - .../include/boost/iterator/distance.hpp | 65 + .../boost/iterator/filter_iterator.hpp | 1 - .../iterator/function_input_iterator.hpp | 55 +- .../iterator/function_output_iterator.hpp | 62 + .../boost/iterator/indirect_iterator.hpp | 6 +- .../boost/iterator/is_lvalue_iterator.hpp | 9 +- .../boost/iterator/is_readable_iterator.hpp | 5 +- .../boost/iterator/iterator_adaptor.hpp | 8 +- .../boost/iterator/iterator_archetypes.hpp | 18 +- .../boost/iterator/iterator_categories.hpp | 5 +- .../boost/iterator/iterator_concepts.hpp | 18 +- .../boost/iterator/iterator_facade.hpp | 5 +- .../boost/iterator/iterator_traits.hpp | 13 +- .../boost/iterator/new_iterator_tests.hpp | 25 +- .../boost/iterator/permutation_iterator.hpp | 8 +- .../boost/iterator/reverse_iterator.hpp | 11 +- .../boost/iterator/transform_iterator.hpp | 8 +- .../include/boost/iterator/zip_iterator.hpp | 3 +- .../include/boost/lambda/algorithm.hpp | 3 + .../include/boost/lambda/core.hpp | 8 +- .../boost-1.62.0/include/boost/last_value.hpp | 54 - .../include/boost/lexical_cast.hpp | 2 +- .../boost/lexical_cast/bad_lexical_cast.hpp | 6 +- .../lexical_cast/detail/converter_lexical.hpp | 46 +- .../detail/converter_lexical_streams.hpp | 85 +- .../lexical_cast/detail/converter_numeric.hpp | 58 +- .../boost/lexical_cast/detail/inf_nan.hpp | 2 +- .../lexical_cast/detail/is_character.hpp | 9 +- .../detail/lcast_char_constants.hpp | 2 +- .../detail/lcast_unsigned_converters.hpp | 10 +- .../boost/lexical_cast/detail/widest_char.hpp | 7 +- .../boost/lexical_cast/lexical_cast_old.hpp | 3 +- .../lexical_cast/try_lexical_convert.hpp | 31 +- .../include/boost/make_shared.hpp | 3 +- .../include/boost/make_unique.hpp | 9 +- .../include/boost/math/common_factor.hpp | 5 +- .../include/boost/math/common_factor_ct.hpp | 84 +- .../include/boost/math/common_factor_rt.hpp | 422 +- .../boost/math/concepts/real_concept.hpp | 20 + .../boost/math/concepts/std_real_concept.hpp | 37 +- .../math/constants/calculate_constants.hpp | 19 +- .../boost/math/constants/constants.hpp | 14 +- .../boost/math/cstdfloat/cstdfloat_cmath.hpp | 6 +- .../boost/math/cstdfloat/cstdfloat_limits.hpp | 19 +- .../boost/math/cstdfloat/cstdfloat_types.hpp | 2 + .../differentiation/finite_difference.hpp | 266 + .../differentiation/lanczos_smoothing.hpp | 580 + .../detail/common_error_handling.hpp | 29 + .../math/distributions/extreme_value.hpp | 4 +- .../boost/math/distributions/students_t.hpp | 49 +- .../interpolators/barycentric_rational.hpp | 98 + .../boost/math/interpolators/catmull_rom.hpp | 284 + .../math/interpolators/cubic_b_spline.hpp | 78 + .../detail/barycentric_rational_detail.hpp | 215 + .../detail/cubic_b_spline_detail.hpp | 287 + .../include/boost/math/octonion.hpp | 1 + .../quadrature/detail/exp_sinh_detail.hpp | 515 + .../quadrature/detail/sinh_sinh_detail.hpp | 480 + .../quadrature/detail/tanh_sinh_constants.hpp | 228 + .../quadrature/detail/tanh_sinh_detail.hpp | 719 + .../boost/math/quadrature/exp_sinh.hpp | 94 + .../include/boost/math/quadrature/gauss.hpp | 1293 + .../boost/math/quadrature/gauss_kronrod.hpp | 1950 ++ .../math/quadrature/naive_monte_carlo.hpp | 456 + .../boost/math/quadrature/sinh_sinh.hpp | 43 + .../boost/math/quadrature/tanh_sinh.hpp | 268 + .../boost/math/quadrature/trapezoidal.hpp | 125 + .../include/boost/math/quaternion.hpp | 1460 +- .../include/boost/math/special_functions.hpp | 2 + .../boost/math/special_functions/acosh.hpp | 2 +- .../boost/math/special_functions/asinh.hpp | 6 + .../boost/math/special_functions/atanh.hpp | 6 + .../boost/math/special_functions/bessel.hpp | 4 +- .../boost/math/special_functions/cbrt.hpp | 5 +- .../math/special_functions/chebyshev.hpp | 169 + .../special_functions/chebyshev_transform.hpp | 237 + .../detail/airy_ai_bi_zero.hpp | 4 +- .../detail/bernoulli_details.hpp | 67 +- .../special_functions/detail/bessel_i0.hpp | 595 +- .../special_functions/detail/bessel_i1.hpp | 621 +- .../special_functions/detail/bessel_j0.hpp | 10 + .../special_functions/detail/bessel_j1.hpp | 10 + .../special_functions/detail/bessel_k0.hpp | 567 +- .../special_functions/detail/bessel_k1.hpp | 627 +- .../special_functions/detail/bessel_kn.hpp | 8 +- .../special_functions/detail/bessel_y0.hpp | 10 + .../special_functions/detail/bessel_y1.hpp | 10 + .../special_functions/detail/fp_traits.hpp | 27 +- .../special_functions/detail/igamma_large.hpp | 10 + .../detail/lambert_w_lookup_table.ipp | 134 + .../special_functions/detail/lgamma_small.hpp | 10 + .../detail/unchecked_bernoulli.hpp | 37 +- .../detail/unchecked_factorial.hpp | 39 +- .../boost/math/special_functions/digamma.hpp | 10 + .../boost/math/special_functions/ellint_d.hpp | 5 + .../math/special_functions/ellint_rd.hpp | 5 + .../boost/math/special_functions/erf.hpp | 165 +- .../boost/math/special_functions/expint.hpp | 10 + .../boost/math/special_functions/expm1.hpp | 14 + .../boost/math/special_functions/gamma.hpp | 83 +- .../math/special_functions/lambert_w.hpp | 2186 ++ .../boost/math/special_functions/lanczos.hpp | 12 +- .../boost/math/special_functions/legendre.hpp | 191 +- .../special_functions/legendre_stieltjes.hpp | 235 + .../boost/math/special_functions/log1p.hpp | 12 +- .../boost/math/special_functions/math_fwd.hpp | 98 +- .../boost/math/special_functions/next.hpp | 406 +- .../boost/math/special_functions/owens_t.hpp | 10 + .../boost/math/special_functions/prime.hpp | 25 +- .../special_functions/relative_difference.hpp | 2 +- .../boost/math/special_functions/round.hpp | 2 +- .../boost/math/special_functions/sign.hpp | 2 +- .../boost/math/special_functions/sinc.hpp | 26 +- .../boost/math/special_functions/trigamma.hpp | 10 + .../boost/math/special_functions/trunc.hpp | 2 +- .../boost/math/special_functions/ulp.hpp | 38 +- .../boost/math/special_functions/zeta.hpp | 10 + .../include/boost/math/tools/atomic.hpp | 93 + .../include/boost/math/tools/big_constant.hpp | 6 +- .../boost/math/tools/bivariate_statistics.hpp | 97 + .../include/boost/math/tools/complex.hpp | 57 + .../boost/math/tools/condition_numbers.hpp | 139 + .../include/boost/math/tools/config.hpp | 15 +- .../math/tools/detail/is_const_iterable.hpp | 40 + .../include/boost/math/tools/fraction.hpp | 51 +- .../include/boost/math/tools/norms.hpp | 640 + .../math/tools/numerical_differentiation.hpp | 12 + .../include/boost/math/tools/polynomial.hpp | 363 +- .../boost/math/tools/polynomial_gcd.hpp | 209 + .../include/boost/math/tools/precision.hpp | 2 +- .../include/boost/math/tools/roots.hpp | 288 +- .../include/boost/math/tools/series.hpp | 2 +- .../boost/math/tools/signal_statistics.hpp | 346 + .../include/boost/math/tools/test_value.hpp | 118 + .../boost/math/tools/toms748_solve.hpp | 8 + .../include/boost/math/tools/tuple.hpp | 1 + .../math/tools/univariate_statistics.hpp | 393 + .../boost-1.62.0/include/boost/math/tr1.hpp | 2 +- .../boost-1.62.0/include/boost/math_fwd.hpp | 55 - .../include/boost/memory_order.hpp | 49 +- .../include/boost/move/adl_move_swap.hpp | 6 + .../boost/move/algo/adaptive_merge.hpp | 289 +- .../include/boost/move/algo/adaptive_sort.hpp | 576 +- .../move/algo/detail/adaptive_sort_merge.hpp | 2711 +- .../boost/move/algo/detail/basic_op.hpp | 56 +- .../algo/detail/bufferless_merge_sort.hpp | 120 - .../boost/move/algo/detail/heap_sort.hpp | 111 + .../boost/move/algo/detail/insertion_sort.hpp | 23 +- .../boost/move/algo/detail/is_sorted.hpp | 55 + .../include/boost/move/algo/detail/merge.hpp | 683 +- .../boost/move/algo/detail/merge_sort.hpp | 80 +- .../boost/move/algo/detail/pdqsort.hpp | 334 + .../boost/move/algo/detail/set_difference.hpp | 207 + .../include/boost/move/algo/move.hpp | 5 +- .../include/boost/move/algo/predicate.hpp | 101 + .../include/boost/move/algo/unique.hpp | 55 + .../include/boost/move/algorithm.hpp | 2 +- .../boost-1.62.0/include/boost/move/core.hpp | 20 +- .../include/boost/move/default_delete.hpp | 18 +- .../include/boost/move/detail/destruct_n.hpp | 7 +- .../include/boost/move/detail/fwd_macros.hpp | 25 + .../move/detail/iterator_to_raw_pointer.hpp | 59 + .../include/boost/move/detail/meta_utils.hpp | 2 + .../boost/move/detail/meta_utils_core.hpp | 17 +- .../boost/move/detail/move_helpers.hpp | 50 +- .../detail/pointer_element.hpp | 24 +- .../boost/move/detail/to_raw_pointer.hpp | 45 + .../include/boost/move/detail/type_traits.hpp | 24 +- .../move/detail/unique_ptr_meta_utils.hpp | 4 +- .../include/boost/move/detail/workaround.hpp | 5 +- .../include/boost/move/make_unique.hpp | 3 +- .../boost-1.62.0/include/boost/mpl/assert.hpp | 34 +- .../include/boost/multi_array.hpp | 175 +- .../include/boost/multi_array/algorithm.hpp | 2 +- .../include/boost/multi_array/base.hpp | 1 + .../boost/multi_array/concept_checks.hpp | 4 - .../include/boost/multi_array/index_range.hpp | 6 + .../include/boost/multi_array/iterator.hpp | 2 +- .../multi_index/detail/allocator_traits.hpp | 143 + .../detail/archive_constructed.hpp | 6 +- .../boost/multi_index/detail/auto_space.hpp | 31 +- .../detail/bidir_node_iterator.hpp | 4 +- .../boost/multi_index/detail/bucket_array.hpp | 14 +- .../boost/multi_index/detail/copy_map.hpp | 53 +- .../detail/duplicates_iterator.hpp | 5 +- .../detail/hash_index_iterator.hpp | 4 +- .../multi_index/detail/hash_index_node.hpp | 50 +- .../detail/ignore_wstrict_aliasing.hpp | 18 + .../boost/multi_index/detail/index_base.hpp | 38 +- .../multi_index/detail/index_node_base.hpp | 6 +- .../multi_index/detail/ord_index_impl.hpp | 39 +- .../multi_index/detail/ord_index_node.hpp | 68 +- .../boost/multi_index/detail/promotes_arg.hpp | 10 +- .../detail/restore_wstrict_aliasing.hpp | 11 + .../multi_index/detail/rnd_index_loader.hpp | 22 +- .../multi_index/detail/rnd_index_node.hpp | 47 +- .../detail/rnd_index_ptr_array.hpp | 34 +- .../multi_index/detail/rnd_node_iterator.hpp | 10 +- .../multi_index/detail/rnk_index_ops.hpp | 83 +- .../multi_index/detail/seq_index_node.hpp | 30 +- .../multi_index/detail/seq_index_ops.hpp | 6 +- .../boost/multi_index/hashed_index.hpp | 98 +- .../include/boost/multi_index/key.hpp | 147 + .../boost/multi_index/random_access_index.hpp | 62 +- .../boost/multi_index/ranked_index.hpp | 61 +- .../boost/multi_index/sequenced_index.hpp | 61 +- .../include/boost/multi_index_container.hpp | 153 +- .../boost/multiprecision/complex128.hpp | 27 + .../boost/multiprecision/complex_adaptor.hpp | 860 + .../concepts/mp_number_archetypes.hpp | 243 + .../boost/multiprecision/cpp_bin_float.hpp | 2047 ++ .../boost/multiprecision/cpp_bin_float/io.hpp | 700 + .../cpp_bin_float/transcendental.hpp | 156 + .../boost/multiprecision/cpp_complex.hpp | 48 + .../boost/multiprecision/cpp_dec_float.hpp | 3162 ++ .../include/boost/multiprecision/cpp_int.hpp | 1986 ++ .../boost/multiprecision/cpp_int/add.hpp | 554 + .../boost/multiprecision/cpp_int/bitwise.hpp | 842 + .../boost/multiprecision/cpp_int/checked.hpp | 149 + .../multiprecision/cpp_int/comparison.hpp | 399 + .../multiprecision/cpp_int/cpp_int_config.hpp | 163 + .../boost/multiprecision/cpp_int/divide.hpp | 655 + .../multiprecision/cpp_int/import_export.hpp | 251 + .../boost/multiprecision/cpp_int/limits.hpp | 224 + .../boost/multiprecision/cpp_int/literals.hpp | 206 + .../boost/multiprecision/cpp_int/misc.hpp | 713 + .../boost/multiprecision/cpp_int/multiply.hpp | 498 + .../multiprecision/cpp_int/serialize.hpp | 203 + .../multiprecision/cpp_int/value_pack.hpp | 36 + .../boost/multiprecision/debug_adaptor.hpp | 525 + .../multiprecision/detail/big_lanczos.hpp | 39 + .../boost/multiprecision/detail/bitscan.hpp | 265 + .../multiprecision/detail/default_ops.hpp | 3823 +++ .../boost/multiprecision/detail/digits.hpp | 23 + .../multiprecision/detail/dynamic_array.hpp | 29 + .../boost/multiprecision/detail/et_ops.hpp | 819 + .../detail/float_string_cvt.hpp | 318 + .../detail/functions/constants.hpp | 333 + .../multiprecision/detail/functions/pow.hpp | 910 + .../multiprecision/detail/functions/trig.hpp | 844 + .../detail/generic_interconvert.hpp | 598 + .../multiprecision/detail/integer_ops.hpp | 495 + .../boost/multiprecision/detail/min_max.hpp | 114 + .../boost/multiprecision/detail/no_et_ops.hpp | 660 + .../multiprecision/detail/number_base.hpp | 1650 ++ .../multiprecision/detail/number_compare.hpp | 664 + .../boost/multiprecision/detail/precision.hpp | 190 + .../boost/multiprecision/detail/rebind.hpp | 24 + .../multiprecision/detail/ublas_interop.hpp | 77 + .../multiprecision/detail/utype_helper.hpp | 110 + .../include/boost/multiprecision/eigen.hpp | 173 + .../include/boost/multiprecision/float128.hpp | 810 + .../include/boost/multiprecision/gmp.hpp | 2965 ++ .../include/boost/multiprecision/integer.hpp | 251 + .../boost/multiprecision/logged_adaptor.hpp | 621 + .../boost/multiprecision/miller_rabin.hpp | 226 + .../include/boost/multiprecision/mpc.hpp | 1523 + .../include/boost/multiprecision/mpfi.hpp | 1846 ++ .../include/boost/multiprecision/mpfr.hpp | 2618 ++ .../include/boost/multiprecision/number.hpp | 2252 ++ .../include/boost/multiprecision/random.hpp | 18 + .../boost/multiprecision/rational_adaptor.hpp | 367 + .../include/boost/multiprecision/tommath.hpp | 781 + .../traits/explicit_conversion.hpp | 99 + .../traits/extract_exponent_type.hpp | 28 + .../multiprecision/traits/is_backend.hpp | 63 + .../traits/is_byte_container.hpp | 36 + .../traits/is_restricted_conversion.hpp | 48 + .../traits/is_variable_precision.hpp | 24 + .../boost-1.62.0/include/boost/next_prior.hpp | 140 +- .../include/boost/numeric/conversion/cast.hpp | 2 +- .../numeric/conversion/conversion_traits.hpp | 7 - .../numeric/conversion/converter_policies.hpp | 6 +- .../numeric/conversion/detail/converter.hpp | 2 +- .../conversion/detail/old_numeric_cast.hpp | 37 +- .../include/boost/numeric/interval.hpp | 2 +- .../include/boost/numeric/interval/arith.hpp | 2 +- .../include/boost/numeric/interval/arith2.hpp | 2 +- .../boost/numeric/interval/checking.hpp | 2 +- .../boost/numeric/interval/compare.hpp | 2 +- .../numeric/interval/compare/explicit.hpp | 2 +- .../boost/numeric/interval/constants.hpp | 2 +- .../detail/alpha_rounding_control.hpp | 2 +- .../interval/detail/bcc_rounding_control.hpp | 2 +- .../boost/numeric/interval/detail/bugs.hpp | 2 +- .../interval/detail/c99_rounding_control.hpp | 2 +- .../detail/c99sub_rounding_control.hpp | 2 +- .../interval/detail/interval_prototype.hpp | 2 +- .../interval/detail/msvc_rounding_control.hpp | 4 +- .../interval/detail/ppc_rounding_control.hpp | 2 +- .../detail/sparc_rounding_control.hpp | 2 +- .../numeric/interval/detail/test_input.hpp | 2 +- .../interval/detail/x86_rounding_control.hpp | 2 +- .../detail/x86gcc_rounding_control.hpp | 2 +- .../ext/x86_fast_rounding_control.hpp | 2 +- .../boost/numeric/interval/hw_rounding.hpp | 4 +- .../boost/numeric/interval/interval.hpp | 2 +- .../include/boost/numeric/interval/limits.hpp | 16 +- .../boost/numeric/interval/rounded_arith.hpp | 2 +- .../boost/numeric/interval/rounded_transc.hpp | 2 +- .../boost/numeric/interval/rounding.hpp | 2 +- .../include/boost/numeric/interval/transc.hpp | 2 +- .../boost/numeric/interval/utility.hpp | 6 +- .../odeint/integrate/integrate_n_steps.hpp | 1 + .../odeint/integrate/max_step_checker.hpp | 6 +- .../stepper/adams_bashforth_moulton.hpp | 13 +- .../numeric/odeint/stepper/bulirsch_stoer.hpp | 23 +- .../stepper/bulirsch_stoer_dense_out.hpp | 10 +- .../odeint/stepper/controlled_runge_kutta.hpp | 2 +- .../odeint/stepper/rosenbrock4_controller.hpp | 2 + .../odeint/util/ublas_matrix_expression.patch | 6 - .../boost/numeric/ublas/assignment.hpp | 59 +- .../boost/numeric/ublas/detail/concepts.hpp | 114 +- .../numeric/ublas/detail/matrix_assign.hpp | 161 +- .../ublas/detail/returntype_deduction.hpp | 4 +- .../numeric/ublas/detail/vector_assign.hpp | 47 +- .../boost/numeric/ublas/functional.hpp | 74 +- .../include/boost/numeric/ublas/matrix.hpp | 43 +- .../boost/numeric/ublas/matrix_expression.hpp | 10262 +++---- .../boost/numeric/ublas/matrix_sparse.hpp | 6 +- .../boost/numeric/ublas/matrix_vector.hpp | 128 +- .../boost/numeric/ublas/operation/begin.hpp | 566 +- .../include/boost/numeric/ublas/storage.hpp | 43 + .../boost/numeric/ublas/storage_sparse.hpp | 7 +- .../include/boost/numeric/ublas/traits.hpp | 28 +- .../include/boost/numeric/ublas/vector.hpp | 17 +- .../boost/numeric/ublas/vector_expression.hpp | 26 +- .../boost/numeric/ublas/vector_of_vector.hpp | 4 +- .../boost/numeric/ublas/vector_sparse.hpp | 33 +- .../boost-1.62.0/include/boost/operators.hpp | 33 +- .../detail/old_optional_implementation.hpp | 41 +- .../detail/optional_aligned_storage.hpp | 38 +- .../boost/optional/detail/optional_config.hpp | 48 +- .../detail/optional_reference_spec.hpp | 117 +- .../boost/optional/detail/optional_relops.hpp | 2 +- .../optional_trivially_copyable_base.hpp | 499 + .../include/boost/optional/optional.hpp | 648 +- .../include/boost/parameter/aux_/arg_list.hpp | 1 + .../boost/parameter/aux_/python/invoker.hpp | 0 .../parameter/aux_/python/invoker_iterate.hpp | 0 .../include/boost/parameter/python.hpp | 11 +- .../boost/pending/container_traits.hpp | 29 - .../boost/pending/detail/int_iterator.hpp | 3 +- .../include/boost/pending/integer_log2.hpp | 6 +- .../include/boost/pending/iterator_tests.hpp | 118 +- .../include/boost/pending/lowest_bit.hpp | 39 - .../include/boost/pending/relaxed_heap.hpp | 1 - .../boost-1.62.0/include/boost/pointee.hpp | 4 +- .../include/boost/pointer_cast.hpp | 85 +- .../include/boost/pointer_to_other.hpp | 2 +- .../boost/polymorphic_pointer_cast.hpp | 2 +- bundled/boost-1.62.0/include/boost/predef.h | 7 +- .../include/boost/predef/architecture.h | 1 + .../include/boost/predef/architecture/arm.h | 83 +- .../boost/predef/architecture/parisc.h | 2 +- .../include/boost/predef/architecture/ptx.h | 44 + .../include/boost/predef/compiler.h | 1 + .../include/boost/predef/compiler/compaq.h | 2 +- .../include/boost/predef/compiler/intel.h | 20 +- .../include/boost/predef/compiler/nvcc.h | 73 + .../include/boost/predef/compiler/visualc.h | 16 +- .../boost/predef/detail/endian_compat.h | 4 +- .../include/boost/predef/hardware/simd/arm.h | 4 +- .../include/boost/predef/language.h | 1 + .../include/boost/predef/language/cuda.h | 52 + .../include/boost/predef/library/c.h | 1 + .../include/boost/predef/library/c/cloudabi.h | 53 + .../boost-1.62.0/include/boost/predef/make.h | 8 + .../boost-1.62.0/include/boost/predef/os.h | 3 +- .../include/boost/predef/os/android.h | 7 +- .../include/boost/predef/os/bsd.h | 4 +- .../include/boost/predef/os/bsd/free.h | 13 +- .../include/boost/predef/os/bsd/net.h | 2 +- .../include/boost/predef/os/bsd/open.h | 80 + .../include/boost/predef/os/cygwin.h | 7 +- .../include/boost/predef/os/linux.h | 5 +- .../include/boost/predef/other/endian.h | 3 +- .../include/boost/predef/other/workaround.h | 87 + .../include/boost/predef/platform.h | 12 +- .../include/boost/predef/platform/android.h | 43 + .../include/boost/predef/platform/cloudabi.h | 43 + .../include/boost/predef/platform/ios.h | 62 + .../include/boost/predef/platform/mingw.h | 8 +- .../include/boost/predef/platform/mingw32.h | 63 + .../include/boost/predef/platform/mingw64.h | 63 + .../boost/predef/platform/windows_desktop.h | 12 +- .../boost/predef/platform/windows_phone.h | 9 +- .../boost/predef/platform/windows_runtime.h | 18 +- .../boost/predef/platform/windows_server.h | 47 + .../boost/predef/platform/windows_store.h | 15 +- .../boost/predef/platform/windows_system.h | 47 + .../boost/predef/platform/windows_uwp.h | 60 + .../include/boost/predef/version.h | 2 +- .../include/boost/predef/version_number.h | 21 +- .../include/boost/preprocessor/cat.hpp | 2 +- .../boost/preprocessor/config/config.hpp | 41 +- .../seq/detail/binary_transform.hpp | 11 +- .../boost/preprocessor/seq/to_list.hpp | 12 + .../include/boost/preprocessor/stringize.hpp | 4 + .../include/boost/preprocessor/wstringize.hpp | 4 + .../boost-1.62.0/include/boost/progress.hpp | 3 + .../parallel/parallel_property_maps.hpp | 1 - .../boost/property_map/property_map.hpp | 32 +- .../detail/file_parser_error.hpp | 2 +- .../detail/json_parser_error.hpp | 33 - .../property_tree/detail/json_parser_read.hpp | 332 - .../detail/json_parser_write.hpp | 178 - .../boost/property_tree/detail/rapidxml.hpp | 2 +- .../boost/property_tree/exceptions.hpp | 6 +- .../property_tree/ptree_serialization.hpp | 4 +- bundled/boost-1.62.0/include/boost/python.hpp | 1 - .../boost-1.62.0/include/boost/qvm/all.hpp | 32 + .../boost-1.62.0/include/boost/qvm/assert.hpp | 9 + .../include/boost/qvm/deduce_mat.hpp | 90 + .../include/boost/qvm/deduce_quat.hpp | 63 + .../include/boost/qvm/deduce_scalar.hpp | 131 + .../include/boost/qvm/deduce_vec.hpp | 85 + .../boost/qvm/detail/cofactor_impl.hpp | 64 + .../boost/qvm/detail/determinant_impl.hpp | 79 + .../include/boost/qvm/detail/mat_assign.hpp | 75 + .../include/boost/qvm/detail/quat_assign.hpp | 35 + .../include/boost/qvm/detail/remove_const.hpp | 35 + .../boost/qvm/detail/swizzle_traits.hpp | 338 + .../include/boost/qvm/detail/transp_impl.hpp | 128 + .../include/boost/qvm/detail/vec_assign.hpp | 71 + .../boost/qvm/detail/vec_register_impl.hpp | 138 + .../include/boost/qvm/enable_if.hpp | 24 + .../boost-1.62.0/include/boost/qvm/error.hpp | 40 + .../include/boost/qvm/gen/mat_assign2.hpp | 125 + .../include/boost/qvm/gen/mat_assign3.hpp | 132 + .../include/boost/qvm/gen/mat_assign4.hpp | 141 + .../include/boost/qvm/gen/mat_operations2.hpp | 1720 ++ .../include/boost/qvm/gen/mat_operations3.hpp | 1915 ++ .../include/boost/qvm/gen/mat_operations4.hpp | 2129 ++ .../include/boost/qvm/gen/swizzle2.hpp | 714 + .../include/boost/qvm/gen/swizzle3.hpp | 4158 +++ .../include/boost/qvm/gen/swizzle4.hpp | 24330 ++++++++++++++++ .../include/boost/qvm/gen/vec_assign2.hpp | 56 + .../include/boost/qvm/gen/vec_assign3.hpp | 57 + .../include/boost/qvm/gen/vec_assign4.hpp | 58 + .../boost/qvm/gen/vec_mat_operations2.hpp | 114 + .../boost/qvm/gen/vec_mat_operations3.hpp | 128 + .../boost/qvm/gen/vec_mat_operations4.hpp | 146 + .../include/boost/qvm/gen/vec_operations2.hpp | 632 + .../include/boost/qvm/gen/vec_operations3.hpp | 653 + .../include/boost/qvm/gen/vec_operations4.hpp | 674 + .../boost-1.62.0/include/boost/qvm/inline.hpp | 34 + .../boost-1.62.0/include/boost/qvm/map.hpp | 13 + .../include/boost/qvm/map_mat_mat.hpp | 895 + .../include/boost/qvm/map_mat_vec.hpp | 537 + .../include/boost/qvm/map_vec_mat.hpp | 591 + .../boost-1.62.0/include/boost/qvm/mat.hpp | 98 + .../include/boost/qvm/mat_access.hpp | 258 + .../include/boost/qvm/mat_operations.hpp | 2470 ++ .../include/boost/qvm/mat_operations2.hpp | 6 + .../include/boost/qvm/mat_operations3.hpp | 6 + .../include/boost/qvm/mat_operations4.hpp | 6 + .../include/boost/qvm/mat_traits.hpp | 33 + .../include/boost/qvm/mat_traits_array.hpp | 118 + .../include/boost/qvm/mat_traits_defaults.hpp | 95 + .../boost-1.62.0/include/boost/qvm/math.hpp | 87 + .../include/boost/qvm/operations.hpp | 15 + .../boost-1.62.0/include/boost/qvm/quat.hpp | 68 + .../include/boost/qvm/quat_access.hpp | 128 + .../include/boost/qvm/quat_operations.hpp | 1493 + .../include/boost/qvm/quat_traits.hpp | 49 + .../include/boost/qvm/quat_traits_array.hpp | 130 + .../boost/qvm/quat_traits_defaults.hpp | 40 + .../include/boost/qvm/quat_vec_operations.hpp | 62 + .../include/boost/qvm/scalar_traits.hpp | 92 + .../include/boost/qvm/static_assert.hpp | 9 + .../include/boost/qvm/swizzle.hpp | 13 + .../include/boost/qvm/swizzle2.hpp | 6 + .../include/boost/qvm/swizzle3.hpp | 6 + .../include/boost/qvm/swizzle4.hpp | 6 + .../include/boost/qvm/throw_exception.hpp | 9 + .../include/boost/qvm/to_string.hpp | 31 + .../boost-1.62.0/include/boost/qvm/vec.hpp | 89 + .../include/boost/qvm/vec_access.hpp | 82 + .../include/boost/qvm/vec_mat_operations.hpp | 168 + .../include/boost/qvm/vec_mat_operations2.hpp | 6 + .../include/boost/qvm/vec_mat_operations3.hpp | 6 + .../include/boost/qvm/vec_mat_operations4.hpp | 6 + .../include/boost/qvm/vec_operations.hpp | 963 + .../include/boost/qvm/vec_operations2.hpp | 6 + .../include/boost/qvm/vec_operations3.hpp | 6 + .../include/boost/qvm/vec_operations4.hpp | 6 + .../include/boost/qvm/vec_register.hpp | 14 + .../include/boost/qvm/vec_register2.hpp | 25 + .../include/boost/qvm/vec_register3.hpp | 27 + .../include/boost/qvm/vec_register4.hpp | 29 + .../include/boost/qvm/vec_traits.hpp | 32 + .../include/boost/qvm/vec_traits_array.hpp | 108 + .../include/boost/qvm/vec_traits_defaults.hpp | 94 + .../boost/random/detail/gray_coded_qrng.hpp | 166 + .../boost/random/detail/int_float_pair.hpp | 121 + .../boost/random/detail/integer_log2.hpp | 2 +- .../detail/niederreiter_base2_table.hpp | 513 + .../include/boost/random/detail/qrng_base.hpp | 291 + .../boost/random/detail/sobol_table.hpp | 4106 +++ .../include/boost/random/detail/vector_io.hpp | 3 + .../boost/random/discrete_distribution.hpp | 4 + .../boost/random/exponential_distribution.hpp | 210 +- .../include/boost/random/faure.hpp | 367 + .../random/hyperexponential_distribution.hpp | 11 - .../include/boost/random/independent_bits.hpp | 12 + .../boost/random/linear_congruential.hpp | 6 +- .../boost/random/niederreiter_base2.hpp | 360 + .../boost/random/normal_distribution.hpp | 163 +- .../include/boost/random/seed_seq.hpp | 2 +- .../include/boost/random/sobol.hpp | 237 + .../boost/random/uniform_on_sphere.hpp | 2 +- .../boost/range/adaptor/adjacent_filtered.hpp | 2 +- .../include/boost/range/adaptor/replaced.hpp | 26 +- .../boost/range/adaptor/replaced_if.hpp | 28 +- .../include/boost/range/adaptor/sliced.hpp | 1 + .../boost/range/algorithm/max_element.hpp | 18 +- .../boost/range/algorithm/min_element.hpp | 18 +- .../boost/range/algorithm/random_shuffle.hpp | 81 +- .../boost/range/algorithm_ext/insert.hpp | 1 + .../include/boost/range/as_literal.hpp | 43 + .../include/boost/range/begin.hpp | 18 +- .../include/boost/range/concepts.hpp | 12 +- .../include/boost/range/detail/begin.hpp | 8 +- .../include/boost/range/detail/common.hpp | 4 +- .../detail/default_constructible_unary_fn.hpp | 17 + .../include/boost/range/detail/end.hpp | 8 +- .../range/detail/implementation_help.hpp | 4 +- .../boost/range/detail/join_iterator.hpp | 8 +- .../include/boost/range/detail/microsoft.hpp | 1 + .../boost/range/detail/range_return.hpp | 1 + .../include/boost/range/distance.hpp | 16 +- .../boost-1.62.0/include/boost/range/end.hpp | 20 +- .../boost/range/has_range_iterator.hpp | 6 +- .../include/boost/range/irange.hpp | 11 +- .../boost/range/iterator_range_core.hpp | 1 + .../include/boost/range/size_type.hpp | 5 - .../include/boost/ratio/config.hpp | 8 +- .../boost-1.62.0/include/boost/rational.hpp | 557 +- .../boost-1.62.0/include/boost/scope_exit.hpp | 31 +- .../include/boost/scoped_array.hpp | 3 +- .../boost-1.62.0/include/boost/scoped_ptr.hpp | 3 +- .../archive_input_unordered_map.hpp | 16 +- .../archive_input_unordered_set.hpp | 17 +- .../include/boost/serialization/array.hpp | 152 +- .../serialization/array_optimization.hpp | 37 + .../boost/serialization/array_wrapper.hpp | 121 + .../boost/serialization/binary_object.hpp | 4 +- .../serialization/collections_load_imp.hpp | 5 +- .../serialization/collections_save_imp.hpp | 3 +- .../include/boost/serialization/deque.hpp | 1 - .../boost/serialization/detail/get_data.hpp | 59 - .../detail/is_default_constructible.hpp | 14 +- .../detail/stack_constructor.hpp | 4 +- .../include/boost/serialization/ephemeral.hpp | 1 - .../include/boost/serialization/export.hpp | 2 - .../extended_type_info_no_rtti.hpp | 14 +- .../extended_type_info_typeid.hpp | 14 +- .../include/boost/serialization/factory.hpp | 46 +- .../boost/serialization/forward_list.hpp | 12 +- .../include/boost/serialization/hash_map.hpp | 5 +- .../include/boost/serialization/hash_set.hpp | 5 +- .../include/boost/serialization/list.hpp | 1 - .../include/boost/serialization/map.hpp | 7 +- .../include/boost/serialization/nvp.hpp | 4 +- .../include/boost/serialization/optional.hpp | 55 +- .../include/boost/serialization/pfto.hpp | 78 - .../boost/serialization/priority_queue.hpp | 2 + .../include/boost/serialization/queue.hpp | 2 + .../include/boost/serialization/set.hpp | 10 +- .../boost/serialization/shared_ptr_helper.hpp | 7 +- .../include/boost/serialization/singleton.hpp | 130 +- .../include/boost/serialization/slist.hpp | 9 +- .../include/boost/serialization/stack.hpp | 2 + .../boost/serialization/strong_typedef.hpp | 38 +- .../unordered_collections_load_imp.hpp | 1 - .../include/boost/serialization/valarray.hpp | 25 +- .../include/boost/serialization/variant.hpp | 26 +- .../include/boost/serialization/vector.hpp | 16 +- .../include/boost/serialization/void_cast.hpp | 25 +- .../include/boost/shared_array.hpp | 2 +- .../boost-1.62.0/include/boost/shared_ptr.hpp | 2 +- bundled/boost-1.62.0/include/boost/signal.hpp | 366 - .../boost-1.62.0/include/boost/signals.hpp | 10 - .../include/boost/signals2/connection.hpp | 10 +- .../include/boost/signals2/deconstruct.hpp | 2 +- .../boost/signals2/deconstruct_ptr.hpp | 6 +- .../boost/signals2/detail/auto_buffer.hpp | 28 +- .../boost/signals2/detail/foreign_ptr.hpp | 8 +- .../boost/signals2/detail/lwm_win32_cs.hpp | 60 +- .../boost/signals2/detail/signal_template.hpp | 4 +- .../signals2/detail/slot_call_iterator.hpp | 4 +- .../signals2/detail/variadic_arg_type.hpp | 2 +- .../signals2/detail/variadic_slot_invoker.hpp | 1 - .../include/boost/signals2/expired_slot.hpp | 2 +- .../include/boost/signals2/last_value.hpp | 4 +- .../include/boost/signals2/slot_base.hpp | 5 +- .../boost-1.62.0/include/boost/smart_ptr.hpp | 15 +- .../boost/smart_ptr/allocate_shared_array.hpp | 717 +- .../include/boost/smart_ptr/bad_weak_ptr.hpp | 13 +- .../smart_ptr/detail/array_allocator.hpp | 318 - .../smart_ptr/detail/array_count_impl.hpp | 67 - .../boost/smart_ptr/detail/array_traits.hpp | 60 - .../boost/smart_ptr/detail/array_utility.hpp | 214 - .../boost/smart_ptr/detail/atomic_count.hpp | 3 + .../smart_ptr/detail/atomic_count_gcc.hpp | 2 +- .../smart_ptr/detail/local_counted_base.hpp | 148 + .../smart_ptr/detail/local_sp_deleter.hpp | 91 + .../boost/smart_ptr/detail/lwm_win32_cs.hpp | 43 +- .../boost/smart_ptr/detail/operator_bool.hpp | 12 +- .../boost/smart_ptr/detail/shared_count.hpp | 133 +- .../smart_ptr/detail/sp_counted_base.hpp | 7 +- .../detail/sp_counted_base_acc_ia64.hpp | 4 +- .../smart_ptr/detail/sp_counted_base_aix.hpp | 4 +- .../detail/sp_counted_base_clang.hpp | 48 +- .../detail/sp_counted_base_cw_ppc.hpp | 4 +- .../detail/sp_counted_base_cw_x86.hpp | 4 +- .../detail/sp_counted_base_gcc_ia64.hpp | 4 +- .../detail/sp_counted_base_gcc_mips.hpp | 10 +- .../detail/sp_counted_base_gcc_ppc.hpp | 4 +- .../detail/sp_counted_base_gcc_sparc.hpp | 4 +- .../detail/sp_counted_base_gcc_x86.hpp | 4 +- .../smart_ptr/detail/sp_counted_base_nt.hpp | 34 +- .../smart_ptr/detail/sp_counted_base_pt.hpp | 15 +- .../detail/sp_counted_base_snc_ps3.hpp | 4 +- .../detail/sp_counted_base_solaris.hpp | 4 +- .../smart_ptr/detail/sp_counted_base_spin.hpp | 4 +- .../detail/sp_counted_base_std_atomic.hpp | 39 +- .../smart_ptr/detail/sp_counted_base_sync.hpp | 4 +- .../detail/sp_counted_base_vacpp_ppc.hpp | 4 +- .../smart_ptr/detail/sp_counted_base_w32.hpp | 4 +- .../smart_ptr/detail/sp_counted_impl.hpp | 64 +- .../boost/smart_ptr/detail/sp_has_sync.hpp | 6 +- .../boost/smart_ptr/detail/sp_if_array.hpp | 34 - .../boost/smart_ptr/detail/sp_interlocked.hpp | 10 + .../boost/smart_ptr/detail/sp_noexcept.hpp | 48 + .../boost/smart_ptr/detail/spinlock.hpp | 3 + .../smart_ptr/detail/spinlock_std_atomic.hpp | 11 +- .../boost/smart_ptr/detail/up_if_array.hpp | 26 - .../smart_ptr/detail/up_if_not_array.hpp | 31 - .../boost/smart_ptr/detail/yield_k.hpp | 28 +- .../smart_ptr/enable_shared_from_this.hpp | 17 +- .../include/boost/smart_ptr/intrusive_ptr.hpp | 59 +- .../boost/smart_ptr/intrusive_ref_counter.hpp | 33 +- .../include/boost/smart_ptr/make_shared.hpp | 3 +- .../boost/smart_ptr/make_shared_array.hpp | 195 +- .../boost/smart_ptr/make_shared_object.hpp | 608 +- .../include/boost/smart_ptr/make_unique.hpp | 88 +- .../boost/smart_ptr/make_unique_array.hpp | 31 - .../boost/smart_ptr/make_unique_object.hpp | 45 - .../include/boost/smart_ptr/owner_less.hpp | 2 +- .../include/boost/smart_ptr/scoped_array.hpp | 26 +- .../include/boost/smart_ptr/scoped_ptr.hpp | 32 +- .../include/boost/smart_ptr/shared_array.hpp | 57 +- .../include/boost/smart_ptr/shared_ptr.hpp | 272 +- .../include/boost/smart_ptr/weak_ptr.hpp | 55 +- .../home/classic/core/composite/actions.hpp | 3 +- .../home/classic/core/composite/epsilon.hpp | 9 + .../classic/core/composite/no_actions.hpp | 8 +- .../boost/spirit/home/classic/core/match.hpp | 14 +- .../core/non_terminal/impl/grammar.ipp | 11 +- .../classic/core/non_terminal/impl/rule.ipp | 6 +- .../core/primitives/impl/primitives.ipp | 6 + .../classic/core/primitives/primitives.hpp | 19 +- .../classic/core/scanner/impl/skipper.ipp | 16 +- .../home/classic/core/scanner/scanner.hpp | 5 +- .../home/classic/debug/impl/parser_names.ipp | 10 +- .../boost/spirit/home/classic/dynamic/for.hpp | 4 +- .../home/classic/dynamic/impl/switch.ipp | 7 +- .../spirit/home/classic/dynamic/while.hpp | 2 +- .../classic/error_handling/exceptions.hpp | 9 +- .../classic/iterator/impl/file_iterator.ipp | 6 +- .../iterator/impl/position_iterator.ipp | 18 +- .../home/classic/iterator/multi_pass.hpp | 41 +- .../iterator/position_iterator_fwd.hpp | 6 +- .../home/classic/meta/impl/refactoring.ipp | 2 +- .../spirit/home/classic/phoenix/actor.hpp | 3 +- .../spirit/home/classic/phoenix/composite.hpp | 12 +- .../home/classic/phoenix/special_ops.hpp | 13 +- .../spirit/home/classic/phoenix/tuples.hpp | 2 +- .../spirit/home/classic/symbols/impl/tst.ipp | 14 +- .../boost/spirit/home/classic/tree/ast.hpp | 12 +- .../boost/spirit/home/classic/tree/common.hpp | 5 +- .../spirit/home/classic/tree/parse_tree.hpp | 12 +- .../spirit/home/classic/tree/parsetree.dtd | 21 - .../boost/spirit/home/classic/utility.hpp | 2 + .../home/classic/utility/impl/escape_char.ipp | 2 +- .../spirit/home/classic/utility/loops.hpp | 2 + .../spirit/home/classic/utility/regex.hpp | 4 +- .../boost/spirit/home/classic/version.hpp | 13 +- .../boost/spirit/home/karma/action/action.hpp | 6 +- .../spirit/home/karma/auxiliary/attr_cast.hpp | 2 - .../spirit/home/karma/auxiliary/lazy.hpp | 2 +- .../boost/spirit/home/karma/binary/binary.hpp | 28 +- .../boost/spirit/home/karma/char/char.hpp | 2 +- .../karma/detail/alternative_function.hpp | 2 +- .../spirit/home/karma/detail/attributes.hpp | 34 +- .../spirit/home/karma/detail/extract_from.hpp | 45 +- .../home/karma/detail/indirect_iterator.hpp | 9 +- .../home/karma/detail/output_iterator.hpp | 4 +- .../home/karma/directive/center_alignment.hpp | 1 - .../home/karma/directive/left_alignment.hpp | 1 - .../spirit/home/karma/directive/maxwidth.hpp | 1 - .../home/karma/directive/right_alignment.hpp | 1 - .../spirit/home/karma/nonterminal/rule.hpp | 18 +- .../karma/numeric/detail/numeric_utils.hpp | 18 +- .../home/karma/numeric/detail/real_utils.hpp | 8 +- .../home/karma/stream/ostream_iterator.hpp | 6 +- .../boost/spirit/home/lex/lexer/lexer.hpp | 16 +- .../spirit/home/lex/lexer/lexertl/functor.hpp | 10 +- .../home/lex/lexer/lexertl/functor_data.hpp | 3 +- .../lex/lexer/lexertl/generate_static.hpp | 16 +- .../lex/lexer/lexertl/iterator_tokenizer.hpp | 9 +- .../spirit/home/lex/lexer/lexertl/lexer.hpp | 5 +- .../home/lex/lexer/lexertl/position_token.hpp | 1 - .../lex/lexer/lexertl/static_functor_data.hpp | 3 +- .../home/lex/lexer/lexertl/static_lexer.hpp | 4 +- .../spirit/home/lex/lexer/lexertl/token.hpp | 8 +- .../boost/spirit/home/lex/lexer/token_def.hpp | 4 +- .../spirit/home/lex/qi/plain_raw_token.hpp | 3 +- .../boost/spirit/home/lex/qi/plain_token.hpp | 7 +- .../spirit/home/lex/qi/plain_tokenid.hpp | 5 +- .../spirit/home/lex/qi/plain_tokenid_mask.hpp | 3 +- .../boost/spirit/home/qi/action/action.hpp | 15 +- .../spirit/home/qi/auxiliary/attr_cast.hpp | 2 +- .../boost/spirit/home/qi/binary/binary.hpp | 28 +- .../home/qi/detail/alternative_function.hpp | 6 +- .../spirit/home/qi/detail/attributes.hpp | 52 +- .../boost/spirit/home/qi/detail/construct.hpp | 8 +- .../home/qi/detail/permute_function.hpp | 16 - .../boost/spirit/home/qi/directive.hpp | 1 + .../home/qi/nonterminal/debug_handler.hpp | 2 +- .../boost/spirit/home/qi/nonterminal/rule.hpp | 40 +- .../home/qi/numeric/detail/numeric_utils.hpp | 113 +- .../home/qi/numeric/detail/real_impl.hpp | 55 +- .../spirit/home/qi/numeric/numeric_utils.hpp | 3 +- .../spirit/home/qi/numeric/real_policies.hpp | 19 +- .../boost/spirit/home/qi/operator/expect.hpp | 32 +- .../spirit/home/qi/operator/permutation.hpp | 6 +- .../spirit/home/qi/operator/sequential_or.hpp | 9 +- .../include/boost/spirit/home/qi/parse.hpp | 46 +- .../boost/spirit/home/qi/skip_over.hpp | 2 +- .../home/qi/stream/detail/iterator_source.hpp | 62 +- .../boost/spirit/home/qi/stream/stream.hpp | 5 +- .../spirit/home/qi/string/detail/tst.hpp | 10 +- .../boost/spirit/home/qi/string/symbols.hpp | 5 +- .../boost/spirit/home/qi/string/tst_map.hpp | 1 + .../home/support/adapt_adt_attributes.hpp | 15 +- .../home/support/algorithm/any_if_ns.hpp | 5 +- .../boost/spirit/home/support/attributes.hpp | 143 +- .../spirit/home/support/attributes_fwd.hpp | 3 - .../unicode/DerivedCoreProperties.txt | 9247 ------ .../char_encoding/unicode/PropList.txt | 1303 - .../support/char_encoding/unicode/Scripts.txt | 1976 -- .../char_encoding/unicode/UnicodeData.txt | 19336 ------------ .../char_encoding/unicode/create_tables.cpp | 584 - .../spirit/home/support/common_terminals.hpp | 1 + .../boost/spirit/home/support/container.hpp | 4 +- .../home/support/detail/endian/endian.hpp | 67 +- .../spirit/home/support/detail/hold_any.hpp | 39 +- .../support/detail/lexer/generate_cpp.hpp | 1 - .../home/support/detail/lexer/generator.hpp | 60 +- .../home/support/detail/lexer/input.hpp | 4 +- .../support/detail/lexer/runtime_error.hpp | 3 +- .../home/support/detail/lexer/serialise.hpp | 35 - .../support/detail/math/detail/fp_traits.hpp | 583 - .../home/support/detail/math/fpclassify.hpp | 235 - .../home/support/detail/math/signbit.hpp | 92 - .../spirit/home/support/detail/pow10.hpp | 1 + .../boost/spirit/home/support/detail/sign.hpp | 39 +- .../iterators/detail/buf_id_check_policy.hpp | 8 +- .../buffering_input_iterator_policy.hpp | 12 +- .../detail/input_iterator_policy.hpp | 12 +- .../support/iterators/detail/multi_pass.hpp | 1 - .../support/iterators/line_pos_iterator.hpp | 34 +- .../home/support/iterators/multi_pass.hpp | 8 +- .../spirit/home/support/numeric_traits.hpp | 11 +- .../boost/spirit/home/support/utf8.hpp | 38 + .../support/utree/detail/utree_detail2.hpp | 16 +- .../spirit/home/support/utree/operators.hpp | 7 + .../boost/spirit/home/support/utree/utree.hpp | 11 +- .../home/support/utree/utree_traits.hpp | 16 +- .../boost/spirit/home/x3/auxiliary/attr.hpp | 8 +- .../boost/spirit/home/x3/auxiliary/eps.hpp | 2 +- .../boost/spirit/home/x3/binary/binary.hpp | 5 +- .../boost/spirit/home/x3/char/char.hpp | 6 + .../boost/spirit/home/x3/char/char_class.hpp | 2 + .../boost/spirit/home/x3/char/char_set.hpp | 4 +- .../boost/spirit/home/x3/core/action.hpp | 12 +- .../boost/spirit/home/x3/core/call.hpp | 6 +- .../x3/core/detail/parse_into_container.hpp | 34 +- .../boost/spirit/home/x3/core/parse.hpp | 24 +- .../boost/spirit/home/x3/core/parser.hpp | 37 +- .../boost/spirit/home/x3/core/skip_over.hpp | 2 +- .../boost/spirit/home/x3/directive/confix.hpp | 2 +- .../boost/spirit/home/x3/directive/expect.hpp | 9 +- .../boost/spirit/home/x3/directive/lexeme.hpp | 4 +- .../spirit/home/x3/directive/no_case.hpp | 4 +- .../spirit/home/x3/directive/no_skip.hpp | 4 +- .../boost/spirit/home/x3/directive/omit.hpp | 4 +- .../boost/spirit/home/x3/directive/repeat.hpp | 7 +- .../boost/spirit/home/x3/directive/skip.hpp | 4 +- .../boost/spirit/home/x3/directive/with.hpp | 43 +- .../boost/spirit/home/x3/extensions.hpp | 18 - .../boost/spirit/home/x3/extensions/seek.hpp | 70 - .../home/x3/nonterminal/detail/rule.hpp | 27 +- .../detail/transform_attribute.hpp | 32 +- .../boost/spirit/home/x3/nonterminal/rule.hpp | 68 +- .../home/x3/nonterminal/simple_trace.hpp | 6 - .../include/boost/spirit/home/x3/numeric.hpp | 2 + .../boost/spirit/home/x3/numeric/bool.hpp | 6 +- .../spirit/home/x3/numeric/bool_policies.hpp | 4 +- .../boost/spirit/home/x3/numeric/real.hpp | 4 +- .../spirit/home/x3/numeric/real_policies.hpp | 25 +- .../spirit/home/x3/operator/alternative.hpp | 4 +- .../spirit/home/x3/operator/and_predicate.hpp | 4 +- .../home/x3/operator/detail/alternative.hpp | 6 +- .../home/x3/operator/detail/sequence.hpp | 133 +- .../spirit/home/x3/operator/difference.hpp | 4 +- .../boost/spirit/home/x3/operator/kleene.hpp | 4 +- .../boost/spirit/home/x3/operator/list.hpp | 13 +- .../spirit/home/x3/operator/not_predicate.hpp | 4 +- .../spirit/home/x3/operator/optional.hpp | 6 +- .../boost/spirit/home/x3/operator/plus.hpp | 4 +- .../spirit/home/x3/operator/sequence.hpp | 4 +- .../spirit/home/x3/string/detail/tst.hpp | 9 +- .../spirit/home/x3/string/literal_string.hpp | 6 + .../boost/spirit/home/x3/string/symbols.hpp | 86 +- .../home/x3/support/ast/position_tagged.hpp | 12 +- .../spirit/home/x3/support/ast/variant.hpp | 68 +- .../boost/spirit/home/x3/support/context.hpp | 6 +- .../numeric_utils/detail/extract_int.hpp | 78 +- .../x3/support/numeric_utils/extract_int.hpp | 3 +- .../x3/support/numeric_utils/extract_real.hpp | 33 +- .../home/x3/support/numeric_utils/sign.hpp | 20 +- .../spirit/home/x3/support/subcontext.hpp | 1 - .../x3/support/traits/attribute_category.hpp | 43 +- .../x3/support/traits/container_traits.hpp | 22 +- .../home/x3/support/traits/make_attribute.hpp | 82 - .../spirit/home/x3/support/traits/move_to.hpp | 20 +- .../home/x3/support/traits/numeric_traits.hpp | 11 +- .../x3/support/traits/transform_attribute.hpp | 15 - .../home/x3/support/traits/tuple_traits.hpp | 9 + .../home/x3/support/traits/value_traits.hpp | 4 +- .../traits/variant_find_substitute.hpp | 5 +- .../support/traits/variant_has_substitute.hpp | 5 +- .../boost/spirit/home/x3/support/unused.hpp | 4 +- .../x3/support/utility/detail/testing.hpp | 16 - .../x3/support/utility/error_reporting.hpp | 7 +- .../x3/support/utility/integer_sequence.hpp | 94 - .../home/x3/support/utility/testing.hpp | 2 +- .../spirit/home/x3/support/utility/utf8.hpp | 38 + .../include/boost/spirit/home/x3/version.hpp | 2 +- .../boost/spirit/include/qi_expect.hpp | 1 + .../include/boost/spirit/include/version.hpp | 2 +- .../home/karma/directive/confix.hpp | 4 +- .../home/karma/nonterminal/subrule.hpp | 196 +- .../repository/home/qi/directive/confix.hpp | 4 +- .../repository/home/qi/directive/distinct.hpp | 4 +- .../repository/home/qi/directive/kwd.hpp | 18 +- .../repository/home/qi/directive/seek.hpp | 4 +- .../home/qi/nonterminal/subrule.hpp | 192 +- .../home/qi/operator/detail/keywords.hpp | 46 +- .../repository/home/qi/operator/keywords.hpp | 1 + .../repository/home/qi/primitive/advance.hpp | 3 +- .../home/qi/primitive/flush_multi_pass.hpp | 4 +- .../repository/home/qi/primitive/iter_pos.hpp | 2 +- .../spirit/repository/home/support/seek.hpp | 4 +- .../spirit/repository/include/qi_seek.hpp | 4 +- .../include/boost/static_assert.hpp | 4 +- .../include/boost/strong_typedef.hpp | 66 - .../include/boost/system/config.hpp | 28 +- .../include/boost/system/cygwin_error.hpp | 6 +- .../boost/system/detail/error_code.ipp | 467 - .../detail/local_free_on_destruction.hpp | 40 - .../include/boost/system/error_code.hpp | 1306 +- .../include/boost/system/linux_error.hpp | 8 +- .../include/boost/system/system_error.hpp | 18 +- .../include/boost/system/windows_error.hpp | 124 +- .../detail/sync_deque_base.hpp | 60 +- .../detail/sync_queue_base.hpp | 60 +- .../concurrent_queues/queue_op_status.hpp | 4 +- .../concurrent_queues/sync_bounded_queue.hpp | 6 +- .../thread/concurrent_queues/sync_deque.hpp | 12 +- .../concurrent_queues/sync_priority_queue.hpp | 38 +- .../thread/concurrent_queues/sync_queue.hpp | 20 +- .../concurrent_queues/sync_timed_queue.hpp | 301 +- .../include/boost/thread/csbl/queue.hpp | 3 +- .../include/boost/thread/detail/config.hpp | 83 +- .../include/boost/thread/detail/log.hpp | 15 + .../include/boost/thread/detail/move.hpp | 21 +- .../boost/thread/detail/nullary_function.hpp | 11 +- .../include/boost/thread/detail/platform.hpp | 2 + .../include/boost/thread/detail/thread.hpp | 144 +- .../include/boost/thread/detail/tss_hooks.hpp | 4 +- .../include/boost/thread/detail/work.hpp | 23 - .../include/boost/thread/exceptions.hpp | 22 +- .../thread/executors/basic_thread_pool.hpp | 42 +- .../detail/priority_executor_base.hpp | 14 +- .../boost/thread/executors/executor.hpp | 4 +- .../thread/executors/executor_adaptor.hpp | 2 + .../thread/executors/generic_executor_ref.hpp | 4 +- .../thread/executors/inline_executor.hpp | 8 + .../boost/thread/executors/loop_executor.hpp | 44 +- .../executors/scheduled_thread_pool.hpp | 5 + .../boost/thread/executors/scheduler.hpp | 12 + .../thread/executors/scheduling_adaptor.hpp | 22 +- .../thread/executors/serial_executor.hpp | 13 + .../thread/executors/serial_executor_cont.hpp | 11 +- .../thread/executors/thread_executor.hpp | 6 + .../include/boost/thread/executors/work.hpp | 4 +- .../boost/thread/externally_locked.hpp | 1 + .../include/boost/thread/future.hpp | 428 +- .../boost/thread/future_error_code.hpp | 61 - .../boost/thread/futures/wait_for_all.hpp | 2 +- .../boost/thread/futures/wait_for_any.hpp | 1 + .../include/boost/thread/lock_guard.hpp | 8 +- .../include/boost/thread/lockable_traits.hpp | 31 + .../include/boost/thread/once.hpp | 10 + .../include/boost/thread/poly_lockable.hpp | 9 +- .../boost/thread/poly_shared_lockable.hpp | 28 +- .../thread/poly_shared_lockable_adapter.hpp | 7 +- .../thread/pthread/condition_variable.hpp | 315 +- .../thread/pthread/condition_variable_fwd.hpp | 293 +- .../include/boost/thread/pthread/mutex.hpp | 165 +- .../pthread/pthread_mutex_scoped_lock.hpp | 101 +- .../boost/thread/pthread/recursive_mutex.hpp | 110 +- .../boost/thread/pthread/shared_mutex.hpp | 242 +- .../thread/pthread/shared_mutex_assert.hpp | 724 - .../boost/thread/pthread/thread_data.hpp | 212 +- .../thread/pthread/thread_heap_alloc.hpp | 34 +- .../include/boost/thread/pthread/timespec.hpp | 120 - .../include/boost/thread/scoped_thread.hpp | 38 +- .../include/boost/thread/shared_mutex.hpp | 9 +- .../boost/thread/synchronized_value.hpp | 12 +- .../include/boost/thread/thread_functors.hpp | 21 +- .../include/boost/thread/thread_guard.hpp | 6 +- .../include/boost/thread/thread_only.hpp | 2 +- .../boost-1.62.0/include/boost/thread/tss.hpp | 64 +- .../include/boost/thread/user_scheduler.hpp | 5 +- .../include/boost/thread/v2/shared_mutex.hpp | 1168 +- .../include/boost/thread/v2/thread.hpp | 155 - .../thread/win32/basic_recursive_mutex.hpp | 44 +- .../boost/thread/win32/basic_timed_mutex.hpp | 156 +- .../boost/thread/win32/condition_variable.hpp | 408 +- .../boost/thread/win32/interlocked_read.hpp | 151 +- .../boost/thread/win32/mfc_thread_init.hpp | 6 +- .../include/boost/thread/win32/once.hpp | 54 +- .../boost/thread/win32/shared_mutex.hpp | 507 +- .../boost/thread/win32/thread_data.hpp | 222 +- .../boost/thread/win32/thread_heap_alloc.hpp | 144 +- .../boost/thread/win32/thread_primitives.hpp | 336 +- .../include/boost/thread/xtime.hpp | 12 +- .../include/boost/throw_exception.hpp | 17 +- bundled/boost-1.62.0/include/boost/timer.hpp | 3 + .../include/boost/token_functions.hpp | 4 +- .../include/boost/token_iterator.hpp | 7 +- .../boost/tuple/detail/tuple_basic.hpp | 16 +- .../include/boost/tuple/tuple.hpp | 16 +- .../include/boost/tuple/tuple_comparison.hpp | 16 +- .../include/boost/tuple/tuple_io.hpp | 122 +- .../boost-1.62.0/include/boost/type_index.hpp | 2 +- .../boost/type_index/ctti_type_index.hpp | 3 +- .../detail/compile_time_type_info.hpp | 122 +- .../type_index/detail/ctti_register_class.hpp | 2 +- .../type_index/detail/stl_register_class.hpp | 2 +- .../boost/type_index/stl_type_index.hpp | 40 +- .../boost/type_index/type_index_facade.hpp | 13 +- .../include/boost/type_traits.hpp | 7 + .../include/boost/type_traits/add_const.hpp | 6 + .../include/boost/type_traits/add_cv.hpp | 6 + .../type_traits/add_lvalue_reference.hpp | 6 + .../include/boost/type_traits/add_pointer.hpp | 6 + .../boost/type_traits/add_reference.hpp | 7 + .../type_traits/add_rvalue_reference.hpp | 6 + .../boost/type_traits/add_volatile.hpp | 6 + .../include/boost/type_traits/common_type.hpp | 7 + .../include/boost/type_traits/conditional.hpp | 8 + .../include/boost/type_traits/copy_cv.hpp | 6 + .../include/boost/type_traits/copy_cv_ref.hpp | 31 + .../boost/type_traits/copy_reference.hpp | 35 + .../include/boost/type_traits/decay.hpp | 6 + .../detail/common_arithmetic_type.hpp | 10 +- .../type_traits/detail/common_type_imp.hpp | 333 - .../boost/type_traits/detail/config.hpp | 29 +- .../type_traits/detail/cv_traits_impl.hpp | 140 - .../boost/type_traits/detail/false_result.hpp | 28 - .../detail/has_binary_operator.hpp | 85 +- .../detail/has_postfix_operator.hpp | 57 +- .../detail/has_prefix_operator.hpp | 77 +- .../type_traits/detail/is_function_cxx_11.hpp | 573 + .../detail/is_function_ptr_helper.hpp | 472 +- .../detail/is_function_ptr_tester.hpp | 670 +- .../detail/is_mem_fun_pointer_impl.hpp | 1749 +- .../detail/is_mem_fun_pointer_tester.hpp | 2891 +- .../is_member_function_pointer_cxx_11.hpp | 672 + .../type_traits/detail/size_t_trait_def.hpp | 51 - .../type_traits/detail/size_t_trait_undef.hpp | 16 - .../type_traits/detail/type_trait_def.hpp | 67 - .../type_traits/detail/type_trait_undef.hpp | 19 - .../include/boost/type_traits/detail/wrap.hpp | 18 - .../include/boost/type_traits/enable_if.hpp | 37 + .../type_traits/floating_point_promotion.hpp | 8 + .../boost/type_traits/has_dereference.hpp | 344 + .../boost/type_traits/has_equal_to.hpp | 3 + .../include/boost/type_traits/has_greater.hpp | 3 + .../boost/type_traits/has_greater_equal.hpp | 3 + .../include/boost/type_traits/has_less.hpp | 3 + .../boost/type_traits/has_less_equal.hpp | 3 + .../include/boost/type_traits/has_minus.hpp | 98 + .../boost/type_traits/has_minus_assign.hpp | 102 +- .../boost/type_traits/has_not_equal_to.hpp | 3 + .../type_traits/has_nothrow_destructor.hpp | 13 +- .../boost/type_traits/has_plus_assign.hpp | 95 + .../boost/type_traits/has_post_decrement.hpp | 21 + .../boost/type_traits/has_post_increment.hpp | 21 + .../boost/type_traits/has_pre_decrement.hpp | 21 + .../boost/type_traits/has_pre_increment.hpp | 22 + .../type_traits/has_trivial_move_assign.hpp | 2 +- .../has_trivial_move_constructor.hpp | 3 +- .../boost/type_traits/integral_constant.hpp | 23 +- .../boost/type_traits/integral_promotion.hpp | 6 + .../include/boost/type_traits/intrinsics.hpp | 25 +- .../boost/type_traits/is_assignable.hpp | 12 +- .../boost/type_traits/is_bounded_array.hpp | 42 + .../include/boost/type_traits/is_complete.hpp | 92 + .../include/boost/type_traits/is_complex.hpp | 1 + .../boost/type_traits/is_constructible.hpp | 14 +- .../boost/type_traits/is_convertible.hpp | 22 +- .../boost/type_traits/is_copy_assignable.hpp | 7 +- .../type_traits/is_copy_constructible.hpp | 10 +- .../type_traits/is_default_constructible.hpp | 18 +- .../boost/type_traits/is_destructible.hpp | 12 +- .../include/boost/type_traits/is_final.hpp | 2 +- .../include/boost/type_traits/is_function.hpp | 83 +- .../type_traits/is_list_constructible.hpp | 48 + .../is_member_function_pointer.hpp | 100 +- .../boost/type_traits/is_noncopyable.hpp | 39 + .../is_nothrow_move_assignable.hpp | 21 +- .../is_nothrow_move_constructible.hpp | 22 +- .../type_traits/is_nothrow_swappable.hpp | 67 + .../boost/type_traits/is_rvalue_reference.hpp | 6 +- .../boost/type_traits/is_unbounded_array.hpp | 41 + .../boost/type_traits/is_virtual_base_of.hpp | 167 +- .../include/boost/type_traits/make_signed.hpp | 6 + .../boost/type_traits/make_unsigned.hpp | 6 + .../include/boost/type_traits/make_void.hpp | 52 + .../include/boost/type_traits/promote.hpp | 6 + .../boost/type_traits/remove_all_extents.hpp | 6 + .../boost/type_traits/remove_bounds.hpp | 7 + .../boost/type_traits/remove_const.hpp | 6 + .../include/boost/type_traits/remove_cv.hpp | 5 + .../boost/type_traits/remove_cv_ref.hpp | 30 + .../boost/type_traits/remove_extent.hpp | 6 + .../boost/type_traits/remove_pointer.hpp | 7 + .../boost/type_traits/remove_reference.hpp | 5 + .../boost/type_traits/remove_volatile.hpp | 5 + .../type_traits/transform_traits_spec.hpp | 14 - .../boost/type_traits/type_identity.hpp | 9 + .../boost/type_traits/type_with_alignment.hpp | 5 +- .../include/boost/typeof/constant.hpp | 26 + .../include/boost/typeof/decltype.hpp | 34 + .../include/boost/typeof/dmc/typeof_impl.hpp | 8 +- .../include/boost/typeof/encode_decode.hpp | 3 - .../boost/typeof/encode_decode_params.hpp | 2 +- .../include/boost/typeof/int_encoding.hpp | 9 +- .../include/boost/typeof/modifiers.hpp | 10 +- .../include/boost/typeof/msvc/typeof_impl.hpp | 108 +- .../include/boost/typeof/native.hpp | 6 +- .../boost/typeof/pointers_data_members.hpp | 4 +- .../typeof/register_functions_iterate.hpp | 12 +- .../boost/typeof/register_fundamental.hpp | 3 +- .../boost/typeof/register_mem_functions.hpp | 2 +- .../include/boost/typeof/std/functional.hpp | 4 + .../include/boost/typeof/std/memory.hpp | 2 + .../boost/typeof/template_encoding.hpp | 8 +- .../boost/typeof/template_template_param.hpp | 4 +- .../include/boost/typeof/type_encoding.hpp | 4 +- .../include/boost/typeof/typeof.hpp | 38 +- .../include/boost/typeof/typeof_impl.hpp | 32 +- .../include/boost/typeof/vector.hpp | 10 +- .../include/boost/typeof/vector100.hpp | 402 +- .../include/boost/typeof/vector150.hpp | 602 +- .../include/boost/typeof/vector200.hpp | 802 +- .../include/boost/typeof/vector50.hpp | 202 +- .../include/boost/units/absolute.hpp | 30 +- .../include/boost/units/base_dimension.hpp | 10 +- .../include/boost/units/base_unit.hpp | 10 +- .../units/base_units/angle/arcminute.hpp | 4 +- .../units/base_units/angle/arcsecond.hpp | 4 +- .../units/base_units/angle/revolution.hpp | 4 +- .../base_units/astronomical/light_day.hpp | 4 +- .../base_units/astronomical/light_hour.hpp | 4 +- .../base_units/astronomical/light_minute.hpp | 4 +- .../base_units/astronomical/light_year.hpp | 4 +- .../boost/units/base_units/cgs/biot.hpp | 2 +- .../units/base_units/imperial/drachm.hpp | 4 +- .../units/base_units/imperial/fluid_ounce.hpp | 4 +- .../boost/units/base_units/imperial/foot.hpp | 4 +- .../units/base_units/imperial/furlong.hpp | 4 +- .../units/base_units/imperial/gallon.hpp | 4 +- .../boost/units/base_units/imperial/gill.hpp | 4 +- .../boost/units/base_units/imperial/grain.hpp | 4 +- .../base_units/imperial/hundredweight.hpp | 4 +- .../boost/units/base_units/imperial/inch.hpp | 4 +- .../units/base_units/imperial/league.hpp | 4 +- .../boost/units/base_units/imperial/mile.hpp | 4 +- .../boost/units/base_units/imperial/ounce.hpp | 4 +- .../boost/units/base_units/imperial/quart.hpp | 4 +- .../units/base_units/imperial/quarter.hpp | 4 +- .../boost/units/base_units/imperial/stone.hpp | 4 +- .../boost/units/base_units/imperial/thou.hpp | 4 +- .../boost/units/base_units/imperial/ton.hpp | 4 +- .../units/base_units/information/byte.hpp | 4 +- .../units/base_units/information/shannon.hpp | 4 +- .../units/base_units/metric/angstrom.hpp | 4 +- .../boost/units/base_units/metric/day.hpp | 4 +- .../boost/units/base_units/metric/fermi.hpp | 4 +- .../boost/units/base_units/metric/hour.hpp | 4 +- .../boost/units/base_units/metric/micron.hpp | 4 +- .../boost/units/base_units/metric/minute.hpp | 4 +- .../units/base_units/metric/nautical_mile.hpp | 4 +- .../boost/units/base_units/metric/ton.hpp | 4 +- .../boost/units/base_units/metric/year.hpp | 4 +- .../include/boost/units/base_units/us/cup.hpp | 4 +- .../boost/units/base_units/us/dram.hpp | 4 +- .../boost/units/base_units/us/fluid_dram.hpp | 4 +- .../boost/units/base_units/us/fluid_ounce.hpp | 4 +- .../boost/units/base_units/us/foot.hpp | 4 +- .../boost/units/base_units/us/gallon.hpp | 4 +- .../boost/units/base_units/us/gill.hpp | 4 +- .../boost/units/base_units/us/grain.hpp | 4 +- .../units/base_units/us/hundredweight.hpp | 4 +- .../boost/units/base_units/us/inch.hpp | 4 +- .../include/boost/units/base_units/us/mil.hpp | 4 +- .../boost/units/base_units/us/mile.hpp | 4 +- .../boost/units/base_units/us/minim.hpp | 4 +- .../boost/units/base_units/us/ounce.hpp | 4 +- .../boost/units/base_units/us/quart.hpp | 4 +- .../boost/units/base_units/us/tablespoon.hpp | 4 +- .../boost/units/base_units/us/teaspoon.hpp | 4 +- .../include/boost/units/base_units/us/ton.hpp | 4 +- .../include/boost/units/cmath.hpp | 53 + .../include/boost/units/config.hpp | 2 +- .../include/boost/units/conversion.hpp | 19 +- .../boost/units/detail/absolute_impl.hpp | 8 +- .../boost/units/detail/conversion_impl.hpp | 50 +- .../boost/units/detail/linear_algebra.hpp | 10 +- .../include/boost/units/detail/one.hpp | 31 +- .../include/boost/units/detail/ordinal.hpp | 4 +- .../units/detail/prevent_redefinition.hpp | 8 +- .../units/detail/static_rational_power.hpp | 39 +- .../include/boost/units/detail/unscale.hpp | 23 +- .../boost-1.62.0/include/boost/units/io.hpp | 95 +- .../include/boost/units/limits.hpp | 68 +- .../include/boost/units/operators.hpp | 4 +- .../boost-1.62.0/include/boost/units/pow.hpp | 11 +- .../include/boost/units/quantity.hpp | 128 +- .../include/boost/units/scale.hpp | 16 +- .../include/boost/units/static_constant.hpp | 7 +- .../include/boost/units/static_rational.hpp | 22 +- .../boost/units/systems/detail/constants.hpp | 49 +- .../si/codata/physico-chemical_constants.hpp | 24 +- .../boost-1.62.0/include/boost/units/unit.hpp | 18 +- .../boost/unordered/detail/allocate.hpp | 1256 - .../boost/unordered/detail/buckets.hpp | 811 - .../boost/unordered/detail/equivalent.hpp | 669 - .../boost/unordered/detail/extract_key.hpp | 188 - .../include/boost/unordered/detail/fwd.hpp | 54 +- .../boost/unordered/detail/implementation.hpp | 4952 ++++ .../include/boost/unordered/detail/map.hpp | 82 +- .../include/boost/unordered/detail/set.hpp | 75 +- .../include/boost/unordered/detail/table.hpp | 797 - .../include/boost/unordered/detail/unique.hpp | 606 - .../include/boost/unordered/detail/util.hpp | 249 - .../include/boost/unordered/unordered_map.hpp | 3034 +- .../boost/unordered/unordered_map_fwd.hpp | 83 +- .../include/boost/unordered/unordered_set.hpp | 2522 +- .../boost/unordered/unordered_set_fwd.hpp | 87 +- .../boost-1.62.0/include/boost/utility.hpp | 13 +- .../boost/utility/compare_pointees.hpp | 1 + .../utility/detail/result_of_iterate.hpp | 31 +- .../include/boost/utility/empty_deleter.hpp | 43 - .../include/boost/utility/result_of.hpp | 64 +- .../include/boost/utility/string_ref.hpp | 13 +- .../include/boost/utility/string_view.hpp | 121 +- .../include/boost/variant/bad_visit.hpp | 4 +- .../variant/detail/apply_visitor_binary.hpp | 187 +- .../variant/detail/apply_visitor_delayed.hpp | 11 +- .../variant/detail/apply_visitor_unary.hpp | 118 +- .../boost/variant/detail/bool_trait_def.hpp | 30 - .../boost/variant/detail/bool_trait_undef.hpp | 21 - .../include/boost/variant/detail/config.hpp | 2 +- .../boost/variant/detail/element_index.hpp | 2 +- .../boost/variant/detail/forced_return.hpp | 8 +- .../variant/detail/generic_result_type.hpp | 88 - .../boost/variant/detail/has_result_type.hpp | 2 +- .../boost/variant/detail/hash_variant.hpp | 3 +- .../variant/detail/make_variant_list.hpp | 2 +- .../include/boost/variant/detail/move.hpp | 2 +- .../detail/multivisitors_cpp11_based.hpp | 90 +- .../detail/multivisitors_cpp14_based.hpp | 42 +- .../multivisitors_preprocessor_based.hpp | 4 +- .../boost/variant/detail/substitute.hpp | 28 +- .../boost/variant/detail/visitation_impl.hpp | 19 +- .../include/boost/variant/get.hpp | 74 +- .../include/boost/variant/multivisitors.hpp | 2 +- .../include/boost/variant/polymorphic_get.hpp | 15 +- .../boost/variant/recursive_variant.hpp | 2 +- .../boost/variant/recursive_wrapper_fwd.hpp | 6 +- .../include/boost/variant/static_visitor.hpp | 2 - .../include/boost/variant/variant.hpp | 233 +- .../include/boost/variant/variant_fwd.hpp | 4 +- .../include/boost/variant/visitor_ptr.hpp | 29 - .../boost-1.62.0/include/boost/version.hpp | 4 +- .../boost-1.62.0/include/boost/weak_ptr.hpp | 2 +- .../boost-1.62.0/libs/iostreams/src/bzip2.cpp | 24 +- .../libs/iostreams/src/file_descriptor.cpp | 129 +- .../libs/iostreams/src/mapped_file.cpp | 5 +- .../boost-1.62.0/libs/iostreams/src/zlib.cpp | 17 +- .../libs/serialization/src/CMakeLists.txt | 1 - .../serialization/src/archive_exception.cpp | 16 + .../libs/serialization/src/basic_archive.cpp | 6 +- .../libs/serialization/src/basic_iarchive.cpp | 8 +- .../libs/serialization/src/basic_oarchive.cpp | 7 +- .../serialization/src/basic_xml_grammar.ipp | 35 +- .../libs/serialization/src/codecvt_null.cpp | 4 +- .../serialization/src/extended_type_info.cpp | 8 +- .../src/extended_type_info_typeid.cpp | 29 +- .../libs/serialization/src/singleton.cpp | 36 - .../serialization/src/utf8_codecvt_facet.cpp | 29 +- .../libs/serialization/src/void_cast.cpp | 12 +- .../libs/system/src/error_code.cpp | 21 +- .../boost-1.62.0/libs/thread/src/future.cpp | 2 +- .../libs/thread/src/pthread/once_atomic.cpp | 2 +- .../libs/thread/src/pthread/thread.cpp | 155 +- .../libs/thread/src/pthread/timeconv.inl | 151 - .../boost-1.62.0/libs/thread/src/tss_null.cpp | 4 +- .../libs/thread/src/win32/thread.cpp | 217 +- .../libs/thread/src/win32/timeconv.inl | 130 - .../libs/thread/src/win32/tss_dll.cpp | 8 +- .../libs/thread/src/win32/tss_pe.cpp | 76 +- 3012 files changed, 385779 insertions(+), 241101 deletions(-) delete mode 100644 bundled/boost-1.62.0/include/boost/align/align_down_forward.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/align/align_up_forward.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/align/detail/address.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/align/detail/is_alignment_const.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/align/detail/max_count_of.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/align/detail/padded.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/align/detail/type_traits.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/align/is_aligned_forward.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/archive/add_facet.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/archive/detail/basic_archive_impl.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/archive/detail/basic_config.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/archive/iterators/head_iterator.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/archive/shared_ptr_helper.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/atomic/detail/casts.hpp rename bundled/boost-1.62.0/include/boost/config/{ => detail}/posix_features.hpp (100%) rename bundled/boost-1.62.0/include/boost/config/{ => detail}/select_compiler_config.hpp (91%) rename bundled/boost-1.62.0/include/boost/config/{ => detail}/select_platform_config.hpp (94%) rename bundled/boost-1.62.0/include/boost/config/{ => detail}/select_stdlib_config.hpp (94%) rename bundled/boost-1.62.0/include/boost/config/{ => detail}/suffix.hpp (94%) create mode 100644 bundled/boost-1.62.0/include/boost/config/helper_macros.hpp create mode 100644 bundled/boost-1.62.0/include/boost/config/workaround.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/container/detail/algorithms.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/container/detail/alloc_lib_auto_link.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container/detail/container_or_allocator_rebind.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container/detail/container_rebind.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/container/detail/hash_table.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container/detail/is_container.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container/detail/is_contiguous_container.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/container/detail/memory_util.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container/detail/pair_key_mapped_of_value.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/container/detail/preprocessor.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container/detail/thread_mutex.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/container/detail/to_raw_pointer.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/container/detail/utilities.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container/detail/value_functors.hpp rename bundled/boost-1.62.0/include/boost/{functional/hash => container_hash}/detail/float_functions.hpp (100%) rename bundled/boost-1.62.0/include/boost/{functional/hash => container_hash}/detail/hash_float.hpp (96%) rename bundled/boost-1.62.0/include/boost/{functional/hash => container_hash}/detail/limits.hpp (100%) create mode 100644 bundled/boost-1.62.0/include/boost/container_hash/extensions.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container_hash/hash.hpp create mode 100644 bundled/boost-1.62.0/include/boost/container_hash/hash_fwd.hpp create mode 100644 bundled/boost-1.62.0/include/boost/core/empty_value.hpp create mode 100644 bundled/boost-1.62.0/include/boost/core/exchange.hpp create mode 100644 bundled/boost-1.62.0/include/boost/core/pointer_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/core/quick_exit.hpp create mode 100644 bundled/boost-1.62.0/include/boost/core/uncaught_exceptions.hpp create mode 100644 bundled/boost-1.62.0/include/boost/core/use_default.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/atomic_redef_macros.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/atomic_undef_macros.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/dynamic_bitset.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/winapi/GetCurrentProcess.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/winapi/GetCurrentThread.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/winapi/GetLastError.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/winapi/GetProcessTimes.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/winapi/GetThreadTimes.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/winapi/LocalFree.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/detail/winapi/detail/cast_ptr.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/exception/N3757.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/function/detail/gen_maybe_include.pl delete mode 100644 bundled/boost-1.62.0/include/boost/function/gen_function_N.pl delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/list_forward_ctor.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/list_to_cons_call.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list10.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list10_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list20.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list20_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list30.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list30_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list40.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list40_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list50.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list50_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list_to_cons.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list_to_cons10.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list_to_cons20.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list_to_cons30.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list_to_cons40.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/detail/preprocessed/list_to_cons50.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/list/limits.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/as_set.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/as_set10.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/as_set20.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/as_set30.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/as_set40.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/as_set50.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set10.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set10_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set20.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set20_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set30.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set30_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set40.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set40_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set50.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set50_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/preprocessed/set_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/detail/set_forward_ctor.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/set/limits.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/as_vector.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/as_vector10.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/as_vector20.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/as_vector30.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/as_vector40.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/as_vector50.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector10.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector10_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector20.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector20_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector30.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector30_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector40.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector40_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector50.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector50_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector_chooser.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector_chooser10.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector_chooser20.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector_chooser30.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector_chooser40.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector_chooser50.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vector_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector10.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector10_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector20.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector20_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector30.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector30_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector40.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector40_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector50.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/preprocessed/vvector50_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/vector_forward_ctor.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/vector_n.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/detail/vector_n_chooser.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/limits.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/vector10_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/vector20_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/vector30_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/vector40_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/container/vector/vector50_fwd.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/include/adapt_adt_named.cpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/include/adapt_assoc_class.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/include/adapt_assoc_class_named.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/support/detail/category_of.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/support/detail/is_view.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/support/detail/unknown_key.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/fusion/view/transform_view/detail/apply_transform_result.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/append.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/area.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/assign.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/buffer.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/centroid.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/clear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/comparable_distance.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/convert.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/convex_hull.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/correct.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/correct_closure.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/covered_by.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/crosses.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/densify.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/andoyer_inverse.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/as_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/assign_box_corners.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/assign_indexed_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/assign_values.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/azimuth.hpp create mode 100755 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/buffer_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/buffer_inserter.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/buffer_policies.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/buffered_piece_collection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/buffered_ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/get_piece_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/line_line_intersection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/parallel_continue.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/turn_in_original_visitor.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/buffer/turn_in_piece_visitor.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/calculate_null.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/calculate_sum.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/centroid/translating_transformer.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/check_iterator_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/closest_feature/geometry_to_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/closest_feature/point_to_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/closest_feature/range_to_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/comparable_distance/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/comparable_distance/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/convert_indexed_to_indexed.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/convert_point_to_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/counting.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/course.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/covered_by/implementation.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/covered_by/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/direction_code.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/areal_areal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/box_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/linear_areal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/linear_linear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/linear_segment_or_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/multipoint_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/multirange_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/point_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/point_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/point_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/disjoint/segment_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/backward_compatibility.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/box_to_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/default_strategies.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/geometry_to_segment_or_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/is_comparable.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/iterator_selector.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/linear_or_areal_to_areal.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/linear_to_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/linear_to_linear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/multipoint_to_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/point_to_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/range_to_geometry_rtree.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/segment_to_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/distance/segment_to_segment.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/areal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/initialize.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/intersects_antimeridian.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/linear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/multipoint.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/range_of_boxes.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/segment.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/envelope/transform_units.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/equals/collect_vectors.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/equals/implementation.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/equals/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/equals/point_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/expand/box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/expand/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/expand/indexed.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/expand/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/expand/point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/expand/segment.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/expand_by_epsilon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/extreme_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/for_each_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/get_left_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/get_max_size.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/has_self_intersections.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/interior_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/intersection/box_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/intersection/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/intersection/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/intersection/multi.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/intersects/implementation.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/intersects/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_simple/always_simple.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_simple/areal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_simple/debug_print_boundary_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_simple/failure_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_simple/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_simple/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_simple/linear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_simple/multipoint.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/complement_graph.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/debug_complement_graph.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/debug_print_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/debug_validity_phase.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/has_duplicates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/has_invalid_coordinate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/has_spikes.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/has_valid_self_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/is_acceptable_turn.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/linear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/multipolygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/pointlike.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/polygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/is_valid/segment.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/max_interval_gap.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/multi_modify.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/multi_modify_with_predicate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/multi_sum.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/normalize.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/not.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/num_distinct_consecutive_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/occupation_info.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlaps/implementation.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlaps/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/add_rings.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/append_no_duplicates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/append_no_dups_or_spikes.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/assign_parents.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/backtrack_check_si.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/check_enrich.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/clip_linestring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/cluster_info.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/convert_ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/copy_segment_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/copy_segments.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/debug_turn_info.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/do_reverse.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/enrichment_info.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/follow.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/follow_linear_linear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_intersection_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_relative_order.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_turn_info.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_turn_info_for_endpoint.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_turn_info_helpers.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_turn_info_la.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_turn_info_ll.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/get_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/handle_colocations.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/handle_self_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/inconsistent_turns_exception.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/intersection_box_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/intersection_insert.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/is_self_turn.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/less_by_segment_ratio.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/linear_linear.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/needs_self_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/overlay.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/overlay_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/pointlike_linear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/pointlike_pointlike.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/range_in_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/ring_properties.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/segment_identifier.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/select_rings.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/self_turn_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/sort_by_side.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/stream_info.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/traversal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/traversal_info.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/traversal_ring_creator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/traversal_switch_detector.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/traverse.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/turn_info.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/overlay/visit_info.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/partition.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/point_is_spike_or_equal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/point_on_border.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/recalculate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/areal_areal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/boundary_checker.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/de9im.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/follow_helpers.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/interface.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/less.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/linear_areal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/linear_linear.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/multi_point_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/point_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/point_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/relate_impl.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/result.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/topology_check.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relate/turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relation/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/relation/interface.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/result_inverse.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/ring_identifier.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/sections/range_by_section.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/sections/section_box_policies.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/sections/section_functions.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/sections/sectionalize.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/signed_size_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/single_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/sub_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/sweep.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/thomas_inverse.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/throw_on_empty_input.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/touches/implementation.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/touches/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/turns/compare_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/turns/debug_turn.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/turns/filter_continue_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/turns/print_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/turns/remove_duplicate_turns.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/within/implementation.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/within/interface.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/within/multi_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/within/point_in_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/detail/within/within_no_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/difference.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/discrete_frechet_distance.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/discrete_hausdorff_distance.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/disjoint.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/dispatch/disjoint.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/dispatch/distance.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/dispatch/envelope.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/dispatch/expand.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/dispatch/is_simple.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/dispatch/is_valid.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/distance.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/envelope.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/equals.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/expand.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/for_each.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/intersection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/intersects.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/is_convex.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/is_empty.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/is_simple.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/is_valid.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/length.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/line_interpolate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/make.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/not_implemented.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/num_geometries.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/num_interior_rings.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/num_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/num_segments.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/overlaps.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/perimeter.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/point_on_surface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/relate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/relation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/remove_spikes.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/reverse.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/simplify.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/sym_difference.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/touches.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/transform.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/union.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/unique.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/validity_failure_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/algorithms/within.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/arithmetic/arithmetic.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/arithmetic/cross_product.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/arithmetic/determinant.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/arithmetic/dot_product.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/arithmetic/normalize.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/access.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/assert.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/closure.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/core/config.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/coordinate_dimension.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/coordinate_system.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/coordinate_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/cs.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/exception.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/exterior_ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/geometry_id.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/interior_rings.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/interior_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/is_areal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/mutable_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/point_order.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/point_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/radian_access.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/radius.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/reverse_dispatch.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/ring_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/tag.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/tag_cast.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/tags.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/core/topological_dimension.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/extensions/algorithms/inverse.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/andoyer_inverse.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/area_formulas.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/authalic_radius_sqr.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/differential_quantities.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/eccentricity_sqr.hpp rename bundled/boost-1.62.0/include/boost/geometry/{algorithms/detail => formulas}/flattening.hpp (75%) mode change 100755 => 100644 create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/geographic.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/gnomonic_intersection.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/gnomonic_spheroid.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/interpolate_point_spherical.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/karney_direct.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/mean_radius.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/meridian_direct.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/meridian_inverse.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/meridian_segment.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/quarter_meridian.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/result_direct.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/result_inverse.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/sjoberg_intersection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/spherical.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/thomas_direct.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/thomas_inverse.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/unit_spheroid.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/vertex_latitude.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/formulas/vertex_longitude.hpp rename bundled/boost-1.62.0/include/boost/geometry/{algorithms/detail => formulas}/vincenty_direct.hpp (73%) mode change 100755 => 100644 rename bundled/boost-1.62.0/include/boost/geometry/{algorithms/detail => formulas}/vincenty_inverse.hpp (62%) mode change 100755 => 100644 mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_array.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_fusion.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_polygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_polygon/box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_polygon/hole_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_polygon/holes_proxy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_polygon/point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_polygon/polygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_polygon/ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_polygon/ring_proxy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_range/adjacent_filtered.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_range/filtered.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_range/reversed.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_range/sliced.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_range/strided.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_range/uniqued.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/boost_tuple.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/c_array.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/std_array.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/adapted/std_pair_as_segment.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/box_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/check.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/linestring_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/multi_linestring_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/multi_point_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/multi_polygon_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/point_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/polygon_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/ring_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/concepts/segment_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/geometries.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/helper_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/linestring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/multi_linestring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/multi_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/multi_polygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/point_xy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/pointing_segment.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/polygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/register/box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/register/linestring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/register/multi_linestring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/register/multi_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/register/multi_polygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/register/point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/register/ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/register/segment.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/segment.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometries/variant.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/adaptors/query.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/bounds.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/comparable_distance_centroid.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/comparable_distance_far.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/comparable_distance_near.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/content.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/diff_abs.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/intersection_content.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/is_valid.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/margin.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/minmaxdist.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/nth_element.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/path_intersection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/segment_intersection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/smallest_for_indexable.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/sum_for_indexable.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/algorithms/union_content.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/assert.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/bounded_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/config_begin.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/config_end.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/distance_predicates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/exception.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/is_bounding_geometry.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/is_indexable.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/meta.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/predicates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/adaptors.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/iterators.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/kmeans/kmeans.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/kmeans/split.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/linear/linear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/linear/redistribute_elements.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/node.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/node_elements.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/pairs.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/scoped_deallocator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/subtree_destroyer.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/variant_dynamic.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/variant_static.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/variant_visitor.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/weak_dynamic.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/weak_static.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/node/weak_visitor.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/options.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/pack_create.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/quadratic/quadratic.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/quadratic/redistribute_elements.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/query_iterators.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/rstar/choose_next_node.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/rstar/insert.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/rstar/redistribute_elements.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/rstar/rstar.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/utilities/are_boxes_ok.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/utilities/are_counts_ok.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/utilities/are_levels_ok.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/utilities/gl_draw.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/utilities/print.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/utilities/statistics.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/utilities/view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/children_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/copy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/count.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/destroy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/distance_query.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/insert.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/is_leaf.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/remove.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/rtree/visitors/spatial_query.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/serialization.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/tags.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/translator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/tuples.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/utilities.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/varray.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/detail/varray_detail.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/distance_predicates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/equal_to.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/indexable.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/inserter.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/parameters.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/predicates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/index/rtree.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/dsv/write.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/io.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/svg/svg_mapper.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/svg/write.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/svg/write_svg.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/svg/write_svg_multi.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/wkt/detail/prefix.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/wkt/detail/wkt_multi.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/wkt/read.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/wkt/stream.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/wkt/wkt.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/io/wkt/write.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/base.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/closing_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/concatenate_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/detail/point_iterator/inner_range_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/detail/point_iterator/iterator_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/detail/point_iterator/value_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/detail/segment_iterator/iterator_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/detail/segment_iterator/range_segment_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/detail/segment_iterator/value_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/dispatch/point_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/dispatch/segment_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/ever_circling_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/flatten_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/has_one_element.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/point_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/point_reverse_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/iterators/segment_iterator.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/append.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/area.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/centroid.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/clear.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/convert.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/correct.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/covered_by.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/extreme_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/for_each_range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/modify.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/modify_with_predicate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/multi_sum.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/overlay/copy_segment_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/overlay/copy_segments.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/overlay/get_ring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/overlay/get_turns.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/overlay/self_turn_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/point_on_border.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/sections/range_by_section.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/detail/sections/sectionalize.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/disjoint.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/distance.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/envelope.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/equals.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/for_each.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/intersection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/length.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/num_geometries.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/num_interior_rings.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/num_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/perimeter.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/remove_spikes.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/reverse.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/simplify.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/transform.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/unique.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/algorithms/within.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/closure.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/geometry_id.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/interior_rings.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/is_areal.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/point_order.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/point_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/ring_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/tags.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/core/topological_dimension.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/concepts/check.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/concepts/multi_linestring_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/concepts/multi_point_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/concepts/multi_polygon_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/multi_geometries.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/multi_linestring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/multi_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/multi_polygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/register/multi_linestring.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/register/multi_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/geometries/register/multi_polygon.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/io/dsv/write.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/io/wkt/detail/prefix.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/io/wkt/read.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/io/wkt/wkt.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/io/wkt/write.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/multi.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/strategies/cartesian/centroid_average.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/multi/views/detail/range_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/compare.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/disjoint_interrupt_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/is_valid/default_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/is_valid/failing_reason_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/is_valid/failure_type_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/predicate_based_interrupt_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/relate/direction.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/relate/intersection_points.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/relate/intersection_ratios.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/relate/tupled.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/robustness/get_rescale_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/robustness/no_rescale_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/robustness/rescale_policy.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/robustness/robust_point_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/robustness/robust_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/robustness/segment_ratio.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/policies/robustness/segment_ratio_type.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/epsg.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/esri.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/iau2000.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projection.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/code.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/constants.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/dpar.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/epsg.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/epsg_params.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/epsg_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/esri.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/esri_params.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/esri_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/exception.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/factory.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/factory_key.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/grids.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/iau2000.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/iau2000_params.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/iau2000_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/aasincos.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/adjlon.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/base_dynamic.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/base_static.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/dms_parser.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/factory_entry.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/function_overloads.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/geocent.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_apply_gridshift.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_apply_gridshift_shared.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_auth.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_datum_set.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_datums.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_ell_set.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_ellps.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_fwd.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_gauss.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_gridinfo.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_gridlist.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_gridlist_shared.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_init.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_inv.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_mlfn.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_msfn.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_param.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_phi2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_qsfn.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_strerrno.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_transform.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_tsfn.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_units.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/pj_zpoly1.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/proj_mdist.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/impl/projects.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/invalid_point.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/par_data.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/aea.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/aeqd.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/airy.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/aitoff.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/august.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/bacon.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/bipc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/boggs.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/bonne.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/cass.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/cc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/cea.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/chamb.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/collg.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/crast.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/denoy.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/eck1.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/eck2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/eck3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/eck4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/eck5.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/eqc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/eqdc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/etmerc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/fahey.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/fouc_s.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/gall.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/geocent.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/geos.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/gins8.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/gn_sinu.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/gnom.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/goode.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/gstmerc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/hammer.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/hatano.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/healpix.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/igh.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/imw_p.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/isea.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/krovak.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/labrd.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/laea.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/lagrng.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/larr.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/lask.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/latlong.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/lcc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/lcca.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/loxim.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/lsat.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/mbt_fps.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/mbtfpp.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/mbtfpq.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/merc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/mill.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/mod_ster.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/moll.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/natearth.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/nell.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/nell_h.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/nocol.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/nsper.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/nzmg.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/ob_tran.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/ocea.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/oea.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/omerc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/ortho.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/poly.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/putp2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/putp3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/putp4p.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/putp5.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/putp6.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/qsc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/robin.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/rouss.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/rpoly.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/sconics.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/somerc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/stere.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/sterea.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/sts.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/tcc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/tcea.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/tmerc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/tpeqd.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/urm5.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/urmfps.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/vandg.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/vandg2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/vandg4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/wag2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/wag3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/wag7.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/wink1.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj/wink2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/proj4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/shared_grids.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/spar.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/srid_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/projections/str_cast.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/shared_grids.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/sphere.hpp rename bundled/boost-1.62.0/include/boost/geometry/{core/srs.hpp => srs/spheroid.hpp} (57%) mode change 100755 => 100644 create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/srs.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/srs/transformation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/buffer_distance_asymmetric.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/buffer_distance_symmetric.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/hull_graham_andrew.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/point_in_box_by_side.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/point_in_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/point_in_poly_oriented_winding.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/point_in_poly_winding.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/relate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/agnostic/simplify_douglas_peucker.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/area.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/area_result.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/azimuth.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/buffer.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/area.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/area_surveyor.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/azimuth.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/box_in_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/buffer_end_flat.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/buffer_end_round.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/buffer_join_miter.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/buffer_join_round.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/buffer_join_round_by_divide.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/buffer_point_circle.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/buffer_point_square.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/buffer_side_straight.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/centroid_average.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/centroid_bashein_detmer.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/centroid_weighted_length.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/densify.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/disjoint_box_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/disjoint_segment_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/distance_projected_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/distance_projected_point_ax.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/distance_pythagoras.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/distance_pythagoras_box_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/distance_pythagoras_point_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/distance_segment_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/envelope.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/envelope_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/envelope_multipoint.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/envelope_point.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/envelope_segment.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/expand_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/expand_point.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/expand_segment.hpp rename bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/{cart_intersect.hpp => intersection.hpp} (62%) mode change 100755 => 100644 create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/line_interpolate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/point_in_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/point_in_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/point_in_poly_crossings_multiply.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/point_in_poly_franklin.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/point_in_poly_winding.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/side_by_triangle.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/cartesian/side_of_intersection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/centroid.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/comparable_distance_result.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/compare.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/concepts/area_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/concepts/centroid_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/concepts/convex_hull_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/concepts/distance_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/concepts/segment_intersect_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/concepts/simplify_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/concepts/within_concept.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/convex_hull.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/covered_by.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/default_area_result.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/default_comparable_distance_result.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/default_distance_result.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/default_length_result.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/default_strategy.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/densify.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/disjoint.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/distance.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/distance_result.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/envelope.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/expand.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/area.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/azimuth.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/buffer_point_circle.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/densify.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/disjoint_segment_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/distance.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/distance_andoyer.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/distance_cross_track.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/distance_cross_track_box_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/distance_cross_track_point_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/distance_segment_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/distance_thomas.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/distance_vincenty.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/envelope.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/envelope_segment.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/expand_segment.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/intersection.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/intersection_elliptic.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/line_interpolate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/mapping_ssf.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/parameters.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/point_in_poly_winding.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/side.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/side_andoyer.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/side_detail.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/side_thomas.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/geographic/side_vincenty.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/intersection.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/intersection_result.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/intersection_strategies.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/line_interpolate.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/normalize.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/relate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/side.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/side_info.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/area.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/area_huiller.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/azimuth.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/compare.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/compare_circular.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/densify.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/disjoint_box_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/disjoint_segment_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/distance_cross_track.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/distance_cross_track_box_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/distance_cross_track_point_box.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/distance_haversine.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/distance_segment_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/envelope.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/envelope_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/envelope_multipoint.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/envelope_point.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/envelope_segment.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/expand_box.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/expand_point.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/expand_segment.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/get_radius.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/intersection.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/line_interpolate.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/point_in_point.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/point_in_poly_winding.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/side_by_cross_track.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/spherical/ssf.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/strategies.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/strategy_transform.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/tags.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/transform.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/transform/inverse_transformer.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/transform/map_transformer.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/transform/matrix_transformers.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/transform/srs_transformer.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/strategies/within.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/add_const_if_c.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/bare_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/calculation_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/closure_as_bool.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/combine_if.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/compress_variant.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/condition.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/coordinate_cast.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/for_each_coordinate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/has_infinite_coordinate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/has_nan_coordinate.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/has_non_finite_coordinate.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/util/is_inverse_spheroidal_coordinates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/math.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/normalize_spheroidal_box_coordinates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/normalize_spheroidal_coordinates.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/order_as_direction.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/parameter_type_of.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/promote_floating_point.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/promote_integral.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/range.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/rational.hpp delete mode 100755 bundled/boost-1.62.0/include/boost/geometry/util/readme.txt mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/select_calculation_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/select_coordinate_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/select_most_precise.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/util/select_sequence_element.hpp create mode 100644 bundled/boost-1.62.0/include/boost/geometry/util/series_expansion.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/util/transform_variant.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/box_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/closeable_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/detail/boundary_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/detail/boundary_view/implementation.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/detail/boundary_view/interface.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/detail/indexed_point_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/detail/normalized_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/detail/points_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/detail/range_type.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/detail/two_dimensional_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/identity_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/reversible_view.hpp mode change 100755 => 100644 bundled/boost-1.62.0/include/boost/geometry/views/segment_view.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/intrusive/detail/memory_util.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/intrusive/detail/preprocessor.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/intrusive/detail/to_raw_pointer.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/intrusive/detail/utilities.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/iostreams/detail/vc6/close.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/iostreams/detail/vc6/read.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/iostreams/detail/vc6/write.hpp create mode 100644 bundled/boost-1.62.0/include/boost/iterator/advance.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/iterator/detail/operator_brackets_dispatch.hpp create mode 100644 bundled/boost-1.62.0/include/boost/iterator/distance.hpp create mode 100644 bundled/boost-1.62.0/include/boost/iterator/function_output_iterator.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/last_value.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/differentiation/finite_difference.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/differentiation/lanczos_smoothing.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/interpolators/barycentric_rational.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/interpolators/catmull_rom.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/interpolators/cubic_b_spline.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/interpolators/detail/barycentric_rational_detail.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/interpolators/detail/cubic_b_spline_detail.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/detail/exp_sinh_detail.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/detail/sinh_sinh_detail.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/detail/tanh_sinh_constants.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/detail/tanh_sinh_detail.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/exp_sinh.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/gauss.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/gauss_kronrod.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/naive_monte_carlo.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/sinh_sinh.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/tanh_sinh.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/quadrature/trapezoidal.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/special_functions/chebyshev.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/special_functions/chebyshev_transform.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/special_functions/detail/lambert_w_lookup_table.ipp create mode 100644 bundled/boost-1.62.0/include/boost/math/special_functions/lambert_w.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/special_functions/legendre_stieltjes.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/atomic.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/bivariate_statistics.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/complex.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/condition_numbers.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/detail/is_const_iterable.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/norms.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/numerical_differentiation.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/polynomial_gcd.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/signal_statistics.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/test_value.hpp create mode 100644 bundled/boost-1.62.0/include/boost/math/tools/univariate_statistics.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/move/algo/detail/bufferless_merge_sort.hpp create mode 100644 bundled/boost-1.62.0/include/boost/move/algo/detail/heap_sort.hpp create mode 100644 bundled/boost-1.62.0/include/boost/move/algo/detail/is_sorted.hpp create mode 100644 bundled/boost-1.62.0/include/boost/move/algo/detail/pdqsort.hpp create mode 100644 bundled/boost-1.62.0/include/boost/move/algo/detail/set_difference.hpp create mode 100644 bundled/boost-1.62.0/include/boost/move/algo/predicate.hpp create mode 100644 bundled/boost-1.62.0/include/boost/move/algo/unique.hpp create mode 100644 bundled/boost-1.62.0/include/boost/move/detail/iterator_to_raw_pointer.hpp rename bundled/boost-1.62.0/include/boost/{intrusive => move}/detail/pointer_element.hpp (87%) create mode 100644 bundled/boost-1.62.0/include/boost/move/detail/to_raw_pointer.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multi_index/detail/allocator_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multi_index/detail/ignore_wstrict_aliasing.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multi_index/detail/restore_wstrict_aliasing.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multi_index/key.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/complex128.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/complex_adaptor.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/concepts/mp_number_archetypes.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_bin_float.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_bin_float/io.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_bin_float/transcendental.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_complex.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_dec_float.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/add.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/bitwise.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/checked.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/comparison.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/cpp_int_config.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/divide.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/import_export.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/limits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/literals.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/misc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/multiply.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/serialize.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/cpp_int/value_pack.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/debug_adaptor.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/big_lanczos.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/bitscan.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/default_ops.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/digits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/dynamic_array.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/et_ops.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/float_string_cvt.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/functions/constants.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/functions/pow.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/functions/trig.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/generic_interconvert.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/integer_ops.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/min_max.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/no_et_ops.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/number_base.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/number_compare.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/precision.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/rebind.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/ublas_interop.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/detail/utype_helper.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/eigen.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/float128.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/gmp.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/integer.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/logged_adaptor.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/miller_rabin.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/mpc.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/mpfi.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/mpfr.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/number.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/random.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/rational_adaptor.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/tommath.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/traits/explicit_conversion.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/traits/extract_exponent_type.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/traits/is_backend.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/traits/is_byte_container.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/traits/is_restricted_conversion.hpp create mode 100644 bundled/boost-1.62.0/include/boost/multiprecision/traits/is_variable_precision.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/numeric/odeint/util/ublas_matrix_expression.patch create mode 100644 bundled/boost-1.62.0/include/boost/optional/detail/optional_trivially_copyable_base.hpp mode change 100644 => 100755 bundled/boost-1.62.0/include/boost/parameter/aux_/python/invoker.hpp mode change 100644 => 100755 bundled/boost-1.62.0/include/boost/parameter/aux_/python/invoker_iterate.hpp mode change 100644 => 100755 bundled/boost-1.62.0/include/boost/parameter/python.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/pending/lowest_bit.hpp create mode 100644 bundled/boost-1.62.0/include/boost/predef/architecture/ptx.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/compiler/nvcc.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/language/cuda.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/library/c/cloudabi.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/other/workaround.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/platform/android.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/platform/cloudabi.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/platform/ios.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/platform/mingw32.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/platform/mingw64.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/platform/windows_server.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/platform/windows_system.h create mode 100644 bundled/boost-1.62.0/include/boost/predef/platform/windows_uwp.h delete mode 100644 bundled/boost-1.62.0/include/boost/property_tree/detail/json_parser_error.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/property_tree/detail/json_parser_read.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/property_tree/detail/json_parser_write.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/all.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/assert.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/deduce_mat.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/deduce_quat.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/deduce_scalar.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/deduce_vec.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/cofactor_impl.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/determinant_impl.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/mat_assign.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/quat_assign.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/remove_const.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/swizzle_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/transp_impl.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/vec_assign.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/detail/vec_register_impl.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/enable_if.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/error.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/mat_assign2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/mat_assign3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/mat_assign4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/mat_operations2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/mat_operations3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/mat_operations4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/swizzle2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/swizzle3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/swizzle4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_assign2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_assign3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_assign4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_mat_operations2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_mat_operations3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_mat_operations4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_operations2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_operations3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/gen/vec_operations4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/inline.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/map.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/map_mat_mat.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/map_mat_vec.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/map_vec_mat.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat_access.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat_operations.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat_operations2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat_operations3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat_operations4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat_traits_array.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/mat_traits_defaults.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/math.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/operations.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/quat.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/quat_access.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/quat_operations.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/quat_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/quat_traits_array.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/quat_traits_defaults.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/quat_vec_operations.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/scalar_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/static_assert.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/swizzle.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/swizzle2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/swizzle3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/swizzle4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/throw_exception.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/to_string.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_access.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_mat_operations.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_mat_operations2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_mat_operations3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_mat_operations4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_operations.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_operations2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_operations3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_operations4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_register.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_register2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_register3.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_register4.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_traits.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_traits_array.hpp create mode 100644 bundled/boost-1.62.0/include/boost/qvm/vec_traits_defaults.hpp create mode 100644 bundled/boost-1.62.0/include/boost/random/detail/gray_coded_qrng.hpp create mode 100644 bundled/boost-1.62.0/include/boost/random/detail/int_float_pair.hpp create mode 100644 bundled/boost-1.62.0/include/boost/random/detail/niederreiter_base2_table.hpp create mode 100644 bundled/boost-1.62.0/include/boost/random/detail/qrng_base.hpp create mode 100644 bundled/boost-1.62.0/include/boost/random/detail/sobol_table.hpp create mode 100644 bundled/boost-1.62.0/include/boost/random/faure.hpp create mode 100644 bundled/boost-1.62.0/include/boost/random/niederreiter_base2.hpp create mode 100644 bundled/boost-1.62.0/include/boost/random/sobol.hpp create mode 100644 bundled/boost-1.62.0/include/boost/serialization/array_optimization.hpp create mode 100644 bundled/boost-1.62.0/include/boost/serialization/array_wrapper.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/serialization/detail/get_data.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/serialization/pfto.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/signal.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/signals.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/array_allocator.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/array_count_impl.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/array_traits.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/array_utility.hpp create mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/local_counted_base.hpp create mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/local_sp_deleter.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/sp_if_array.hpp create mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/sp_noexcept.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/up_if_array.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/detail/up_if_not_array.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/make_unique_array.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/smart_ptr/make_unique_object.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/classic/tree/parsetree.dtd delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/char_encoding/unicode/DerivedCoreProperties.txt delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/char_encoding/unicode/PropList.txt delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/char_encoding/unicode/Scripts.txt delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/char_encoding/unicode/UnicodeData.txt delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/char_encoding/unicode/create_tables.cpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/detail/lexer/serialise.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/detail/math/detail/fp_traits.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/detail/math/fpclassify.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/support/detail/math/signbit.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/x3/extensions.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/x3/extensions/seek.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/x3/support/traits/make_attribute.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/x3/support/utility/detail/testing.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/spirit/home/x3/support/utility/integer_sequence.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/strong_typedef.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/system/detail/error_code.ipp delete mode 100644 bundled/boost-1.62.0/include/boost/system/detail/local_free_on_destruction.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/thread/detail/work.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/thread/future_error_code.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/thread/pthread/shared_mutex_assert.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/thread/pthread/timespec.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/thread/v2/thread.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/copy_cv_ref.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/copy_reference.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/common_type_imp.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/cv_traits_impl.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/false_result.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/is_function_cxx_11.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/size_t_trait_def.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/size_t_trait_undef.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/type_trait_def.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/type_trait_undef.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/detail/wrap.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/enable_if.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/is_bounded_array.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/is_complete.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/is_list_constructible.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/is_noncopyable.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/is_nothrow_swappable.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/is_unbounded_array.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/make_void.hpp create mode 100644 bundled/boost-1.62.0/include/boost/type_traits/remove_cv_ref.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/type_traits/transform_traits_spec.hpp create mode 100644 bundled/boost-1.62.0/include/boost/typeof/constant.hpp create mode 100644 bundled/boost-1.62.0/include/boost/typeof/decltype.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/unordered/detail/allocate.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/unordered/detail/buckets.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/unordered/detail/equivalent.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/unordered/detail/extract_key.hpp create mode 100644 bundled/boost-1.62.0/include/boost/unordered/detail/implementation.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/unordered/detail/table.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/unordered/detail/unique.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/unordered/detail/util.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/utility/empty_deleter.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/variant/detail/bool_trait_def.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/variant/detail/bool_trait_undef.hpp delete mode 100644 bundled/boost-1.62.0/include/boost/variant/detail/generic_result_type.hpp delete mode 100644 bundled/boost-1.62.0/libs/serialization/src/singleton.cpp delete mode 100644 bundled/boost-1.62.0/libs/thread/src/pthread/timeconv.inl delete mode 100644 bundled/boost-1.62.0/libs/thread/src/win32/timeconv.inl diff --git a/bundled/boost-1.62.0/include/boost/algorithm/algorithm.hpp b/bundled/boost-1.62.0/include/boost/algorithm/algorithm.hpp index ab0d4aff58..2bbee1d2d4 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/algorithm.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/algorithm.hpp @@ -25,10 +25,10 @@ namespace boost { namespace algorithm { template -T identity_operation ( std::multiplies ) { return T(1); } +BOOST_CXX14_CONSTEXPR T identity_operation ( std::multiplies ) { return T(1); } template -T identity_operation ( std::plus ) { return T(0); } +BOOST_CXX14_CONSTEXPR T identity_operation ( std::plus ) { return T(0); } /// \fn power ( T x, Integer n ) @@ -40,7 +40,7 @@ T identity_operation ( std::plus ) { return T(0); } // \remark Taken from Knuth, The Art of Computer Programming, Volume 2: // Seminumerical Algorithms, Section 4.6.3 template -typename boost::enable_if, T>::type +BOOST_CXX14_CONSTEXPR typename boost::enable_if, T>::type power (T x, Integer n) { T y = 1; // Should be "T y{1};" if (n == 0) return y; @@ -67,7 +67,7 @@ power (T x, Integer n) { // \remark Taken from Knuth, The Art of Computer Programming, Volume 2: // Seminumerical Algorithms, Section 4.6.3 template -typename boost::enable_if, T>::type +BOOST_CXX14_CONSTEXPR typename boost::enable_if, T>::type power (T x, Integer n, Operation op) { T y = identity_operation(op); if (n == 0) return y; diff --git a/bundled/boost-1.62.0/include/boost/algorithm/clamp.hpp b/bundled/boost-1.62.0/include/boost/algorithm/clamp.hpp index 7bfa47ec9b..d027acdf26 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/clamp.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/clamp.hpp @@ -46,7 +46,7 @@ namespace boost { namespace algorithm { /// p ( a, b ) returns a boolean. /// template - T const & clamp ( T const& val, + BOOST_CXX14_CONSTEXPR T const & clamp ( T const& val, typename boost::mpl::identity::type const & lo, typename boost::mpl::identity::type const & hi, Pred p ) { @@ -68,11 +68,11 @@ namespace boost { namespace algorithm { /// \param hi The upper bound of the range to be clamped to /// template - T const& clamp ( const T& val, + BOOST_CXX14_CONSTEXPR T const& clamp ( const T& val, typename boost::mpl::identity::type const & lo, typename boost::mpl::identity::type const & hi ) { - return (clamp) ( val, lo, hi, std::less()); + return boost::algorithm::clamp ( val, lo, hi, std::less()); } /// \fn clamp_range ( InputIterator first, InputIterator last, OutputIterator out, @@ -87,13 +87,13 @@ namespace boost { namespace algorithm { /// \param hi The upper bound of the range to be clamped to /// template - OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out, + BOOST_CXX14_CONSTEXPR OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out, typename std::iterator_traits::value_type const & lo, typename std::iterator_traits::value_type const & hi ) { // this could also be written with bind and std::transform while ( first != last ) - *out++ = clamp ( *first++, lo, hi ); + *out++ = boost::algorithm::clamp ( *first++, lo, hi ); return out; } @@ -108,12 +108,12 @@ namespace boost { namespace algorithm { /// \param hi The upper bound of the range to be clamped to /// template - typename boost::disable_if_c::value, OutputIterator>::type + BOOST_CXX14_CONSTEXPR typename boost::disable_if_c::value, OutputIterator>::type clamp_range ( const Range &r, OutputIterator out, typename std::iterator_traits::type>::value_type const & lo, typename std::iterator_traits::type>::value_type const & hi ) { - return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi ); + return boost::algorithm::clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi ); } @@ -133,13 +133,13 @@ namespace boost { namespace algorithm { /// template - OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out, + BOOST_CXX14_CONSTEXPR OutputIterator clamp_range ( InputIterator first, InputIterator last, OutputIterator out, typename std::iterator_traits::value_type const & lo, typename std::iterator_traits::value_type const & hi, Pred p ) { // this could also be written with bind and std::transform while ( first != last ) - *out++ = clamp ( *first++, lo, hi, p ); + *out++ = boost::algorithm::clamp ( *first++, lo, hi, p ); return out; } @@ -160,13 +160,13 @@ namespace boost { namespace algorithm { // Disable this template if the first two parameters are the same type; // In that case, the user will get the two iterator version. template - typename boost::disable_if_c::value, OutputIterator>::type + BOOST_CXX14_CONSTEXPR typename boost::disable_if_c::value, OutputIterator>::type clamp_range ( const Range &r, OutputIterator out, typename std::iterator_traits::type>::value_type const & lo, typename std::iterator_traits::type>::value_type const & hi, Pred p ) { - return clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi, p ); + return boost::algorithm::clamp_range ( boost::begin ( r ), boost::end ( r ), out, lo, hi, p ); } diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/all_of.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/all_of.hpp index 8280b18d62..527bbd50fa 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/all_of.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/all_of.hpp @@ -27,7 +27,7 @@ namespace boost { namespace algorithm { /// /// \note This function is part of the C++2011 standard library. template -bool all_of ( InputIterator first, InputIterator last, Predicate p ) +BOOST_CXX14_CONSTEXPR bool all_of ( InputIterator first, InputIterator last, Predicate p ) { for ( ; first != last; ++first ) if ( !p(*first)) @@ -43,7 +43,7 @@ bool all_of ( InputIterator first, InputIterator last, Predicate p ) /// \param p A predicate for testing the elements of the range /// template -bool all_of ( const Range &r, Predicate p ) +BOOST_CXX14_CONSTEXPR bool all_of ( const Range &r, Predicate p ) { return boost::algorithm::all_of ( boost::begin (r), boost::end (r), p ); } @@ -57,7 +57,7 @@ bool all_of ( const Range &r, Predicate p ) /// \param val A value to compare against /// template -bool all_of_equal ( InputIterator first, InputIterator last, const T &val ) +BOOST_CXX14_CONSTEXPR bool all_of_equal ( InputIterator first, InputIterator last, const T &val ) { for ( ; first != last; ++first ) if ( val != *first ) @@ -73,7 +73,7 @@ bool all_of_equal ( InputIterator first, InputIterator last, const T &val ) /// \param val A value to compare against /// template -bool all_of_equal ( const Range &r, const T &val ) +BOOST_CXX14_CONSTEXPR bool all_of_equal ( const Range &r, const T &val ) { return boost::algorithm::all_of_equal ( boost::begin (r), boost::end (r), val ); } diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/any_of.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/any_of.hpp index e68135a2b3..d9e2414139 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/any_of.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/any_of.hpp @@ -28,7 +28,7 @@ namespace boost { namespace algorithm { /// \param p A predicate for testing the elements of the sequence /// template -bool any_of ( InputIterator first, InputIterator last, Predicate p ) +BOOST_CXX14_CONSTEXPR bool any_of ( InputIterator first, InputIterator last, Predicate p ) { for ( ; first != last; ++first ) if ( p(*first)) @@ -44,7 +44,7 @@ bool any_of ( InputIterator first, InputIterator last, Predicate p ) /// \param p A predicate for testing the elements of the range /// template -bool any_of ( const Range &r, Predicate p ) +BOOST_CXX14_CONSTEXPR bool any_of ( const Range &r, Predicate p ) { return boost::algorithm::any_of (boost::begin (r), boost::end (r), p); } @@ -58,7 +58,7 @@ bool any_of ( const Range &r, Predicate p ) /// \param val A value to compare against /// template -bool any_of_equal ( InputIterator first, InputIterator last, const V &val ) +BOOST_CXX14_CONSTEXPR bool any_of_equal ( InputIterator first, InputIterator last, const V &val ) { for ( ; first != last; ++first ) if ( val == *first ) @@ -74,7 +74,7 @@ bool any_of_equal ( InputIterator first, InputIterator last, const V &val ) /// \param val A value to compare against /// template -bool any_of_equal ( const Range &r, const V &val ) +BOOST_CXX14_CONSTEXPR bool any_of_equal ( const Range &r, const V &val ) { return boost::algorithm::any_of_equal (boost::begin (r), boost::end (r), val); } diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/copy_if.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/copy_if.hpp index 73e85d99c6..dc1fdeff3e 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/copy_if.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/copy_if.hpp @@ -29,7 +29,7 @@ namespace boost { namespace algorithm { /// \param p A predicate for testing the elements of the range /// \note This function is part of the C++2011 standard library. template -OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) +BOOST_CXX14_CONSTEXPR OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) { for ( ; first != last; ++first ) if (p(*first)) @@ -47,7 +47,7 @@ OutputIterator copy_if ( InputIterator first, InputIterator last, OutputIterator /// \param p A predicate for testing the elements of the range /// template -OutputIterator copy_if ( const Range &r, OutputIterator result, Predicate p ) +BOOST_CXX14_CONSTEXPR OutputIterator copy_if ( const Range &r, OutputIterator result, Predicate p ) { return boost::algorithm::copy_if (boost::begin (r), boost::end(r), result, p); } @@ -64,7 +64,7 @@ OutputIterator copy_if ( const Range &r, OutputIterator result, Predicate p ) /// \param p A predicate for testing the elements of the range /// template -std::pair +BOOST_CXX14_CONSTEXPR std::pair copy_while ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) { for ( ; first != last && p(*first); ++first ) @@ -82,7 +82,7 @@ copy_while ( InputIterator first, InputIterator last, OutputIterator result, Pre /// \param p A predicate for testing the elements of the range /// template -std::pair::type, OutputIterator> +BOOST_CXX14_CONSTEXPR std::pair::type, OutputIterator> copy_while ( const Range &r, OutputIterator result, Predicate p ) { return boost::algorithm::copy_while (boost::begin (r), boost::end(r), result, p); @@ -100,7 +100,7 @@ copy_while ( const Range &r, OutputIterator result, Predicate p ) /// \param p A predicate for testing the elements of the range /// template -std::pair +BOOST_CXX14_CONSTEXPR std::pair copy_until ( InputIterator first, InputIterator last, OutputIterator result, Predicate p ) { for ( ; first != last && !p(*first); ++first ) @@ -118,7 +118,7 @@ copy_until ( InputIterator first, InputIterator last, OutputIterator result, Pre /// \param p A predicate for testing the elements of the range /// template -std::pair::type, OutputIterator> +BOOST_CXX14_CONSTEXPR std::pair::type, OutputIterator> copy_until ( const Range &r, OutputIterator result, Predicate p ) { return boost::algorithm::copy_until (boost::begin (r), boost::end(r), result, p); diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/copy_n.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/copy_n.hpp index ac880856db..e4bebd076d 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/copy_n.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/copy_n.hpp @@ -24,7 +24,7 @@ namespace boost { namespace algorithm { /// \param result An output iterator to write the results into /// \note This function is part of the C++2011 standard library. template -OutputIterator copy_n ( InputIterator first, Size n, OutputIterator result ) +BOOST_CXX14_CONSTEXPR OutputIterator copy_n ( InputIterator first, Size n, OutputIterator result ) { for ( ; n > 0; --n, ++first, ++result ) *result = *first; diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/find_if_not.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/find_if_not.hpp index 02ff4dce7b..6f5799a339 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/find_if_not.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/find_if_not.hpp @@ -26,7 +26,7 @@ namespace boost { namespace algorithm { /// \param p A predicate for testing the elements of the range /// \note This function is part of the C++2011 standard library. template -InputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p ) +BOOST_CXX14_CONSTEXPR InputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p ) { for ( ; first != last; ++first ) if ( !p(*first)) @@ -42,7 +42,7 @@ InputIterator find_if_not ( InputIterator first, InputIterator last, Predicate p /// \param p A predicate for testing the elements of the range /// template -typename boost::range_iterator::type find_if_not ( const Range &r, Predicate p ) +BOOST_CXX14_CONSTEXPR typename boost::range_iterator::type find_if_not ( const Range &r, Predicate p ) { return boost::algorithm::find_if_not (boost::begin (r), boost::end(r), p); } diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/iota.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/iota.hpp index 675093f02d..6efc4d8dc9 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/iota.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/iota.hpp @@ -25,7 +25,7 @@ namespace boost { namespace algorithm { /// \param value The initial value of the sequence to be generated /// \note This function is part of the C++2011 standard library. template -void iota ( ForwardIterator first, ForwardIterator last, T value ) +BOOST_CXX14_CONSTEXPR void iota ( ForwardIterator first, ForwardIterator last, T value ) { for ( ; first != last; ++first, ++value ) *first = value; @@ -38,7 +38,7 @@ void iota ( ForwardIterator first, ForwardIterator last, T value ) /// \param value The initial value of the sequence to be generated /// template -void iota ( Range &r, T value ) +BOOST_CXX14_CONSTEXPR void iota ( Range &r, T value ) { boost::algorithm::iota (boost::begin(r), boost::end(r), value); } @@ -52,7 +52,7 @@ void iota ( Range &r, T value ) /// \param n The number of items to write /// template -OutputIterator iota_n ( OutputIterator out, T value, std::size_t n ) +BOOST_CXX14_CONSTEXPR OutputIterator iota_n ( OutputIterator out, T value, std::size_t n ) { for ( ; n > 0; --n, ++value ) *out++ = value; diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/is_partitioned.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/is_partitioned.hpp index cb6c71e33b..fb2c5a17a5 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/is_partitioned.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/is_partitioned.hpp @@ -18,14 +18,15 @@ namespace boost { namespace algorithm { /// \fn is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p ) -/// \brief Tests to see if a sequence is partitioned according to a predicate +/// \brief Tests to see if a sequence is partitioned according to a predicate. +/// In other words, all the items in the sequence that satisfy the predicate are at the beginning of the sequence. /// /// \param first The start of the input sequence /// \param last One past the end of the input sequence /// \param p The predicate to test the values with /// \note This function is part of the C++2011 standard library. template -bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p ) +BOOST_CXX14_CONSTEXPR bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p ) { // Run through the part that satisfy the predicate for ( ; first != last; ++first ) @@ -39,13 +40,14 @@ bool is_partitioned ( InputIterator first, InputIterator last, UnaryPredicate p } /// \fn is_partitioned ( const Range &r, UnaryPredicate p ) -/// \brief Generates an increasing sequence of values, and stores them in the input Range. +/// \brief Tests to see if a sequence is partitioned according to a predicate. +/// In other words, all the items in the sequence that satisfy the predicate are at the beginning of the sequence. /// /// \param r The input range /// \param p The predicate to test the values with /// template -bool is_partitioned ( const Range &r, UnaryPredicate p ) +BOOST_CXX14_CONSTEXPR bool is_partitioned ( const Range &r, UnaryPredicate p ) { return boost::algorithm::is_partitioned (boost::begin(r), boost::end(r), p); } diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/is_sorted.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/is_sorted.hpp index f4dbb38c08..2766211611 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/is_sorted.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/is_sorted.hpp @@ -34,7 +34,7 @@ namespace boost { namespace algorithm { /// \param p A binary predicate that returns true if two elements are ordered. /// template - ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last, Pred p ) + BOOST_CXX14_CONSTEXPR ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last, Pred p ) { if ( first == last ) return last; // the empty sequence is ordered ForwardIterator next = first; @@ -54,7 +54,7 @@ namespace boost { namespace algorithm { /// \param last One past the end of the sequence /// template - ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last ) + BOOST_CXX14_CONSTEXPR ForwardIterator is_sorted_until ( ForwardIterator first, ForwardIterator last ) { typedef typename std::iterator_traits::value_type value_type; return boost::algorithm::is_sorted_until ( first, last, std::less()); @@ -69,7 +69,7 @@ namespace boost { namespace algorithm { /// \param p A binary predicate that returns true if two elements are ordered. /// template - bool is_sorted ( ForwardIterator first, ForwardIterator last, Pred p ) + BOOST_CXX14_CONSTEXPR bool is_sorted ( ForwardIterator first, ForwardIterator last, Pred p ) { return boost::algorithm::is_sorted_until (first, last, p) == last; } @@ -81,7 +81,7 @@ namespace boost { namespace algorithm { /// \param last One past the end of the sequence /// template - bool is_sorted ( ForwardIterator first, ForwardIterator last ) + BOOST_CXX14_CONSTEXPR bool is_sorted ( ForwardIterator first, ForwardIterator last ) { return boost::algorithm::is_sorted_until (first, last) == last; } @@ -98,7 +98,7 @@ namespace boost { namespace algorithm { /// \param p A binary predicate that returns true if two elements are ordered. /// template - typename boost::lazy_disable_if_c< + BOOST_CXX14_CONSTEXPR typename boost::lazy_disable_if_c< boost::is_same::value, typename boost::range_iterator >::type is_sorted_until ( const R &range, Pred p ) @@ -113,7 +113,7 @@ namespace boost { namespace algorithm { /// \param range The range to be tested. /// template - typename boost::range_iterator::type is_sorted_until ( const R &range ) + BOOST_CXX14_CONSTEXPR typename boost::range_iterator::type is_sorted_until ( const R &range ) { return boost::algorithm::is_sorted_until ( boost::begin ( range ), boost::end ( range )); } @@ -126,7 +126,7 @@ namespace boost { namespace algorithm { /// \param p A binary predicate that returns true if two elements are ordered. /// template - typename boost::lazy_disable_if_c< boost::is_same::value, boost::mpl::identity >::type + BOOST_CXX14_CONSTEXPR typename boost::lazy_disable_if_c< boost::is_same::value, boost::mpl::identity >::type is_sorted ( const R &range, Pred p ) { return boost::algorithm::is_sorted ( boost::begin ( range ), boost::end ( range ), p ); @@ -139,7 +139,7 @@ namespace boost { namespace algorithm { /// \param range The range to be tested. /// template - bool is_sorted ( const R &range ) + BOOST_CXX14_CONSTEXPR bool is_sorted ( const R &range ) { return boost::algorithm::is_sorted ( boost::begin ( range ), boost::end ( range )); } @@ -159,7 +159,7 @@ namespace boost { namespace algorithm { /// \note This function will return true for sequences that contain items that compare /// equal. If that is not what you intended, you should use is_strictly_increasing instead. template - bool is_increasing ( ForwardIterator first, ForwardIterator last ) + BOOST_CXX14_CONSTEXPR bool is_increasing ( ForwardIterator first, ForwardIterator last ) { typedef typename std::iterator_traits::value_type value_type; return boost::algorithm::is_sorted (first, last, std::less()); @@ -175,7 +175,7 @@ namespace boost { namespace algorithm { /// \note This function will return true for sequences that contain items that compare /// equal. If that is not what you intended, you should use is_strictly_increasing instead. template - bool is_increasing ( const R &range ) + BOOST_CXX14_CONSTEXPR bool is_increasing ( const R &range ) { return is_increasing ( boost::begin ( range ), boost::end ( range )); } @@ -192,7 +192,7 @@ namespace boost { namespace algorithm { /// \note This function will return true for sequences that contain items that compare /// equal. If that is not what you intended, you should use is_strictly_decreasing instead. template - bool is_decreasing ( ForwardIterator first, ForwardIterator last ) + BOOST_CXX14_CONSTEXPR bool is_decreasing ( ForwardIterator first, ForwardIterator last ) { typedef typename std::iterator_traits::value_type value_type; return boost::algorithm::is_sorted (first, last, std::greater()); @@ -207,7 +207,7 @@ namespace boost { namespace algorithm { /// \note This function will return true for sequences that contain items that compare /// equal. If that is not what you intended, you should use is_strictly_decreasing instead. template - bool is_decreasing ( const R &range ) + BOOST_CXX14_CONSTEXPR bool is_decreasing ( const R &range ) { return is_decreasing ( boost::begin ( range ), boost::end ( range )); } @@ -224,7 +224,7 @@ namespace boost { namespace algorithm { /// \note This function will return false for sequences that contain items that compare /// equal. If that is not what you intended, you should use is_increasing instead. template - bool is_strictly_increasing ( ForwardIterator first, ForwardIterator last ) + BOOST_CXX14_CONSTEXPR bool is_strictly_increasing ( ForwardIterator first, ForwardIterator last ) { typedef typename std::iterator_traits::value_type value_type; return boost::algorithm::is_sorted (first, last, std::less_equal()); @@ -239,7 +239,7 @@ namespace boost { namespace algorithm { /// \note This function will return false for sequences that contain items that compare /// equal. If that is not what you intended, you should use is_increasing instead. template - bool is_strictly_increasing ( const R &range ) + BOOST_CXX14_CONSTEXPR bool is_strictly_increasing ( const R &range ) { return is_strictly_increasing ( boost::begin ( range ), boost::end ( range )); } @@ -255,7 +255,7 @@ namespace boost { namespace algorithm { /// \note This function will return false for sequences that contain items that compare /// equal. If that is not what you intended, you should use is_decreasing instead. template - bool is_strictly_decreasing ( ForwardIterator first, ForwardIterator last ) + BOOST_CXX14_CONSTEXPR bool is_strictly_decreasing ( ForwardIterator first, ForwardIterator last ) { typedef typename std::iterator_traits::value_type value_type; return boost::algorithm::is_sorted (first, last, std::greater_equal()); @@ -270,7 +270,7 @@ namespace boost { namespace algorithm { /// \note This function will return false for sequences that contain items that compare /// equal. If that is not what you intended, you should use is_decreasing instead. template - bool is_strictly_decreasing ( const R &range ) + BOOST_CXX14_CONSTEXPR bool is_strictly_decreasing ( const R &range ) { return is_strictly_decreasing ( boost::begin ( range ), boost::end ( range )); } diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/none_of.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/none_of.hpp index ba13144fb8..e537c26737 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/none_of.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/none_of.hpp @@ -26,7 +26,7 @@ namespace boost { namespace algorithm { /// \param p A predicate for testing the elements of the sequence /// template -bool none_of ( InputIterator first, InputIterator last, Predicate p ) +BOOST_CXX14_CONSTEXPR bool none_of ( InputIterator first, InputIterator last, Predicate p ) { for ( ; first != last; ++first ) if ( p(*first)) @@ -42,7 +42,7 @@ bool none_of ( InputIterator first, InputIterator last, Predicate p ) /// \param p A predicate for testing the elements of the range /// template -bool none_of ( const Range &r, Predicate p ) +BOOST_CXX14_CONSTEXPR bool none_of ( const Range &r, Predicate p ) { return boost::algorithm::none_of (boost::begin (r), boost::end (r), p ); } @@ -56,7 +56,7 @@ bool none_of ( const Range &r, Predicate p ) /// \param val A value to compare against /// template -bool none_of_equal ( InputIterator first, InputIterator last, const V &val ) +BOOST_CXX14_CONSTEXPR bool none_of_equal ( InputIterator first, InputIterator last, const V &val ) { for ( ; first != last; ++first ) if ( val == *first ) @@ -72,7 +72,7 @@ bool none_of_equal ( InputIterator first, InputIterator last, const V &val ) /// \param val A value to compare against /// template -bool none_of_equal ( const Range &r, const V & val ) +BOOST_CXX14_CONSTEXPR bool none_of_equal ( const Range &r, const V & val ) { return boost::algorithm::none_of_equal (boost::begin (r), boost::end (r), val); } diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/one_of.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/one_of.hpp index b6e8c77194..3b95180dcf 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/one_of.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/one_of.hpp @@ -12,7 +12,6 @@ #ifndef BOOST_ALGORITHM_ONE_OF_HPP #define BOOST_ALGORITHM_ONE_OF_HPP -#include // for std::find and std::find_if #include #include @@ -28,12 +27,16 @@ namespace boost { namespace algorithm { /// \param p A predicate for testing the elements of the sequence /// template -bool one_of ( InputIterator first, InputIterator last, Predicate p ) +BOOST_CXX14_CONSTEXPR bool one_of ( InputIterator first, InputIterator last, Predicate p ) { - InputIterator i = std::find_if (first, last, p); - if (i == last) +// find_if + for (; first != last; ++first) + if (p(*first)) + break; + + if (first == last) return false; // Didn't occur at all - return boost::algorithm::none_of (++i, last, p); + return boost::algorithm::none_of (++first, last, p); } /// \fn one_of ( const Range &r, Predicate p ) @@ -43,7 +46,7 @@ bool one_of ( InputIterator first, InputIterator last, Predicate p ) /// \param p A predicate for testing the elements of the range /// template -bool one_of ( const Range &r, Predicate p ) +BOOST_CXX14_CONSTEXPR bool one_of ( const Range &r, Predicate p ) { return boost::algorithm::one_of ( boost::begin (r), boost::end (r), p ); } @@ -57,12 +60,16 @@ bool one_of ( const Range &r, Predicate p ) /// \param val A value to compare against /// template -bool one_of_equal ( InputIterator first, InputIterator last, const V &val ) +BOOST_CXX14_CONSTEXPR bool one_of_equal ( InputIterator first, InputIterator last, const V &val ) { - InputIterator i = std::find (first, last, val); // find first occurrence of 'val' - if (i == last) +// find + for (; first != last; ++first) + if (*first == val) + break; + + if (first == last) return false; // Didn't occur at all - return boost::algorithm::none_of_equal (++i, last, val); + return boost::algorithm::none_of_equal (++first, last, val); } /// \fn one_of_equal ( const Range &r, const V &val ) @@ -72,7 +79,7 @@ bool one_of_equal ( InputIterator first, InputIterator last, const V &val ) /// \param val A value to compare against /// template -bool one_of_equal ( const Range &r, const V &val ) +BOOST_CXX14_CONSTEXPR bool one_of_equal ( const Range &r, const V &val ) { return boost::algorithm::one_of_equal ( boost::begin (r), boost::end (r), val ); } diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/partition_copy.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/partition_copy.hpp index f347f2128f..635b1e7390 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx11/partition_copy.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx11/partition_copy.hpp @@ -14,6 +14,7 @@ #include // for std::pair +#include #include #include @@ -35,7 +36,7 @@ namespace boost { namespace algorithm { /// \note This function is part of the C++2011 standard library. template -std::pair +BOOST_CXX14_CONSTEXPR std::pair partition_copy ( InputIterator first, InputIterator last, OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p ) { @@ -57,7 +58,7 @@ partition_copy ( InputIterator first, InputIterator last, /// template -std::pair +BOOST_CXX14_CONSTEXPR std::pair partition_copy ( const Range &r, OutputIterator1 out_true, OutputIterator2 out_false, UnaryPredicate p ) { diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx14/equal.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx14/equal.hpp index 9f97be1d62..526aae9965 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx14/equal.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx14/equal.hpp @@ -12,7 +12,6 @@ #ifndef BOOST_ALGORITHM_EQUAL_HPP #define BOOST_ALGORITHM_EQUAL_HPP -#include // for std::equal #include namespace boost { namespace algorithm { @@ -21,10 +20,11 @@ namespace detail { template struct eq { - bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;} + BOOST_CONSTEXPR bool operator () ( const T1& v1, const T2& v2 ) const { return v1 == v2 ;} }; template + BOOST_CXX14_CONSTEXPR bool equal ( RandomAccessIterator1 first1, RandomAccessIterator1 last1, RandomAccessIterator2 first2, RandomAccessIterator2 last2, BinaryPredicate pred, std::random_access_iterator_tag, std::random_access_iterator_tag ) @@ -32,11 +32,16 @@ namespace detail { // Random-access iterators let is check the sizes in constant time if ( std::distance ( first1, last1 ) != std::distance ( first2, last2 )) return false; - // If we know that the sequences are the same size, the original version is fine - return std::equal ( first1, last1, first2, pred ); + + // std::equal + for (; first1 != last1; ++first1, ++first2) + if (!pred(*first1, *first2)) + return false; + return true; } template + BOOST_CXX14_CONSTEXPR bool equal ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred, std::input_iterator_tag, std::input_iterator_tag ) @@ -60,6 +65,7 @@ namespace detail { /// \param last2 One past the end of the second range. /// \param pred A predicate for comparing the elements of the ranges template +BOOST_CXX14_CONSTEXPR bool equal ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred ) { @@ -78,6 +84,7 @@ bool equal ( InputIterator1 first1, InputIterator1 last1, /// \param first2 The start of the second range. /// \param last2 One past the end of the second range. template +BOOST_CXX14_CONSTEXPR bool equal ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2 ) { diff --git a/bundled/boost-1.62.0/include/boost/algorithm/cxx14/mismatch.hpp b/bundled/boost-1.62.0/include/boost/algorithm/cxx14/mismatch.hpp index c3de418222..46017190d4 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/cxx14/mismatch.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/cxx14/mismatch.hpp @@ -2,7 +2,7 @@ Copyright (c) Marshall Clow 2008-2012. Distributed under the Boost Software License, Version 1.0. (See accompanying - file LICENSE10.txt or copy at http://www.boost.org/LICENSE10.txt) + file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) */ /// \file mismatch.hpp @@ -13,6 +13,7 @@ #define BOOST_ALGORITHM_MISMATCH_HPP #include // for std::pair +#include namespace boost { namespace algorithm { @@ -27,7 +28,7 @@ namespace boost { namespace algorithm { /// \param last2 One past the end of the second range. /// \param pred A predicate for comparing the elements of the ranges template -std::pair mismatch ( +BOOST_CXX14_CONSTEXPR std::pair mismatch ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, BinaryPredicate pred ) @@ -47,7 +48,7 @@ std::pair mismatch ( /// \param first2 The start of the second range. /// \param last2 One past the end of the second range. template -std::pair mismatch ( +BOOST_CXX14_CONSTEXPR std::pair mismatch ( InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2 ) { diff --git a/bundled/boost-1.62.0/include/boost/algorithm/hex.hpp b/bundled/boost-1.62.0/include/boost/algorithm/hex.hpp index 739e89f2f0..b8335843a8 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/hex.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/hex.hpp @@ -73,7 +73,7 @@ namespace detail { else if ( c >= 'A' && c <= 'F' ) retval = c - 'A' + 10; else if ( c >= 'a' && c <= 'f' ) retval = c - 'a' + 10; else BOOST_THROW_EXCEPTION (non_hex_input() << bad_char (c)); - return retval; + return static_cast(retval); } // My own iterator_traits class. diff --git a/bundled/boost-1.62.0/include/boost/algorithm/is_palindrome.hpp b/bundled/boost-1.62.0/include/boost/algorithm/is_palindrome.hpp index cc63e18075..09881109a3 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/is_palindrome.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/is_palindrome.hpp @@ -35,7 +35,7 @@ namespace boost { namespace algorithm { /// For other sequences function will return false. /// Complexity: O(N). template -bool is_palindrome(BidirectionalIterator begin, BidirectionalIterator end, Predicate p ) +bool is_palindrome(BidirectionalIterator begin, BidirectionalIterator end, Predicate p) { if(begin == end) { @@ -63,7 +63,7 @@ bool is_palindrome(BidirectionalIterator begin, BidirectionalIterator end, Predi /// \return true if the entire sequence is palindrome /// /// \param begin The start of the input sequence -/// \param end One past the end of the input sequence +/// \param end One past the end of the input sequence /// /// \note This function will return true for empty sequences and for palindromes. /// For other sequences function will return false. @@ -71,26 +71,8 @@ bool is_palindrome(BidirectionalIterator begin, BidirectionalIterator end, Predi template bool is_palindrome(BidirectionalIterator begin, BidirectionalIterator end) { - if(begin == end) - { - return true; - } - - --end; - while(begin != end) - { - if(!(*begin == *end)) - { - return false; - } - ++begin; - if(begin == end) - { - break; - } - --end; - } - return true; + return is_palindrome(begin, end, + std::equal_to::value_type> ()); } /// \fn is_palindrome ( const R& range ) @@ -122,7 +104,6 @@ bool is_palindrome(const R& range, Predicate p) return is_palindrome(boost::begin(range), boost::end(range), p); } - /// \fn is_palindrome ( const char* str ) /// \return true if the entire sequence is palindrome /// @@ -138,7 +119,6 @@ bool is_palindrome(const char* str) return is_palindrome(str, str + strlen(str)); } - /// \fn is_palindrome ( const char* str, Predicate p ) /// \return true if the entire sequence is palindrome /// @@ -155,7 +135,6 @@ bool is_palindrome(const char* str, Predicate p) return true; return is_palindrome(str, str + strlen(str), p); } - }} #endif // BOOST_ALGORITHM_IS_PALINDROME_HPP diff --git a/bundled/boost-1.62.0/include/boost/algorithm/searching/boyer_moore.hpp b/bundled/boost-1.62.0/include/boost/algorithm/searching/boyer_moore.hpp index 65a809dd4f..192d4dec25 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/searching/boyer_moore.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/searching/boyer_moore.hpp @@ -152,8 +152,8 @@ Requirements: template - void compute_bm_prefix ( Iter pat_first, Iter pat_last, Container &prefix ) { - const std::size_t count = std::distance ( pat_first, pat_last ); + void compute_bm_prefix ( Iter first, Iter last, Container &prefix ) { + const std::size_t count = std::distance ( first, last ); BOOST_ASSERT ( count > 0 ); BOOST_ASSERT ( prefix.size () == count ); @@ -161,26 +161,26 @@ Requirements: std::size_t k = 0; for ( std::size_t i = 1; i < count; ++i ) { BOOST_ASSERT ( k < count ); - while ( k > 0 && ( pat_first[k] != pat_first[i] )) { + while ( k > 0 && ( first[k] != first[i] )) { BOOST_ASSERT ( k < count ); k = prefix [ k - 1 ]; } - if ( pat_first[k] == pat_first[i] ) + if ( first[k] == first[i] ) k++; prefix [ i ] = k; } } - void build_suffix_table ( patIter pat_first, patIter pat_last ) { - const std::size_t count = (std::size_t) std::distance ( pat_first, pat_last ); + void build_suffix_table ( patIter first, patIter last ) { + const std::size_t count = (std::size_t) std::distance ( first, last ); if ( count > 0 ) { // empty pattern std::vector::value_type> reversed(count); - (void) std::reverse_copy ( pat_first, pat_last, reversed.begin ()); + (void) std::reverse_copy ( first, last, reversed.begin ()); std::vector prefix (count); - compute_bm_prefix ( pat_first, pat_last, prefix ); + compute_bm_prefix ( first, last, prefix ); std::vector prefix_reversed (count); compute_bm_prefix ( reversed.begin (), reversed.end (), prefix_reversed ); diff --git a/bundled/boost-1.62.0/include/boost/algorithm/searching/knuth_morris_pratt.hpp b/bundled/boost-1.62.0/include/boost/algorithm/searching/knuth_morris_pratt.hpp index c890c9cac0..5b5b64a729 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/searching/knuth_morris_pratt.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/searching/knuth_morris_pratt.hpp @@ -155,9 +155,9 @@ namespace boost { namespace algorithm { void preKmp ( patIter first, patIter last ) { - const /*std::size_t*/ int count = std::distance ( first, last ); + const difference_type count = std::distance ( first, last ); - int i, j; + difference_type i, j; i = 0; j = skip_[0] = -1; @@ -177,7 +177,7 @@ namespace boost { namespace algorithm { void init_skip_table ( patIter first, patIter last ) { const difference_type count = std::distance ( first, last ); - int j; + difference_type j; skip_ [ 0 ] = -1; for ( int i = 1; i <= count; ++i ) { j = skip_ [ i - 1 ]; diff --git a/bundled/boost-1.62.0/include/boost/algorithm/string/detail/find_iterator.hpp b/bundled/boost-1.62.0/include/boost/algorithm/string/detail/find_iterator.hpp index 9b78a0f7e1..4f90a98fc0 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/string/detail/find_iterator.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/string/detail/find_iterator.hpp @@ -40,7 +40,7 @@ namespace boost { // Protected construction/destruction // Default constructor - find_iterator_base() {}; + find_iterator_base() {} // Copy construction find_iterator_base( const find_iterator_base& Other ) : m_Finder(Other.m_Finder) {} diff --git a/bundled/boost-1.62.0/include/boost/algorithm/string/finder.hpp b/bundled/boost-1.62.0/include/boost/algorithm/string/finder.hpp index 93f7ec304a..61f6e4155b 100644 --- a/bundled/boost-1.62.0/include/boost/algorithm/string/finder.hpp +++ b/bundled/boost-1.62.0/include/boost/algorithm/string/finder.hpp @@ -43,7 +43,6 @@ namespace boost { The result is given as an \c iterator_range delimiting the match. \param Search A substring to be searched for. - \param Comp An element comparison predicate \return An instance of the \c first_finder object */ template @@ -84,7 +83,6 @@ namespace boost { The result is given as an \c iterator_range delimiting the match. \param Search A substring to be searched for. - \param Comp An element comparison predicate \return An instance of the \c last_finder object */ template @@ -124,7 +122,6 @@ namespace boost { \param Search A substring to be searched for. \param Nth An index of the match to be find - \param Comp An element comparison predicate \return An instance of the \c nth_finder object */ template @@ -230,7 +227,6 @@ namespace boost { \param Begin Beginning of the range \param End End of the range - \param Range The range. \return An instance of the \c range_finger object */ template< typename ForwardIteratorT > diff --git a/bundled/boost-1.62.0/include/boost/align.hpp b/bundled/boost-1.62.0/include/boost/align.hpp index 89eebe1a77..45fe36bbcc 100644 --- a/bundled/boost-1.62.0/include/boost/align.hpp +++ b/bundled/boost-1.62.0/include/boost/align.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_HPP #define BOOST_ALIGN_HPP diff --git a/bundled/boost-1.62.0/include/boost/align/align.hpp b/bundled/boost-1.62.0/include/boost/align/align.hpp index 3582dcc051..ee4371091c 100644 --- a/bundled/boost-1.62.0/include/boost/align/align.hpp +++ b/bundled/boost-1.62.0/include/boost/align/align.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGN_HPP #define BOOST_ALIGN_ALIGN_HPP diff --git a/bundled/boost-1.62.0/include/boost/align/align_down.hpp b/bundled/boost-1.62.0/include/boost/align/align_down.hpp index f437f8e5b3..355844f8aa 100644 --- a/bundled/boost-1.62.0/include/boost/align/align_down.hpp +++ b/bundled/boost-1.62.0/include/boost/align/align_down.hpp @@ -1,27 +1,25 @@ /* -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGN_DOWN_HPP #define BOOST_ALIGN_ALIGN_DOWN_HPP #include -#include namespace boost { namespace alignment { -BOOST_CONSTEXPR inline std::size_t align_down(std::size_t value, - std::size_t alignment) BOOST_NOEXCEPT +BOOST_CONSTEXPR inline std::size_t +align_down(std::size_t value, std::size_t alignment) BOOST_NOEXCEPT { return value & ~(alignment - 1); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/align_down_forward.hpp b/bundled/boost-1.62.0/include/boost/align/align_down_forward.hpp deleted file mode 100644 index 6d124e8901..0000000000 --- a/bundled/boost-1.62.0/include/boost/align/align_down_forward.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/* -(c) 2015 Glen Joseph Fernandes - - -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt -*/ -#ifndef BOOST_ALIGN_ALIGN_DOWN_FORWARD_HPP -#define BOOST_ALIGN_ALIGN_DOWN_FORWARD_HPP - -#include -#include - -namespace boost { -namespace alignment { - -BOOST_CONSTEXPR std::size_t align_down(std::size_t value, - std::size_t alignment) BOOST_NOEXCEPT; - -} /* .alignment */ -} /* .boost */ - -#endif diff --git a/bundled/boost-1.62.0/include/boost/align/align_up.hpp b/bundled/boost-1.62.0/include/boost/align/align_up.hpp index b1cec1911e..6401ea848a 100644 --- a/bundled/boost-1.62.0/include/boost/align/align_up.hpp +++ b/bundled/boost-1.62.0/include/boost/align/align_up.hpp @@ -1,27 +1,25 @@ /* -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGN_UP_HPP #define BOOST_ALIGN_ALIGN_UP_HPP #include -#include namespace boost { namespace alignment { -BOOST_CONSTEXPR inline std::size_t align_up(std::size_t value, - std::size_t alignment) BOOST_NOEXCEPT +BOOST_CONSTEXPR inline std::size_t +align_up(std::size_t value, std::size_t alignment) BOOST_NOEXCEPT { return (value + alignment - 1) & ~(alignment - 1); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/align_up_forward.hpp b/bundled/boost-1.62.0/include/boost/align/align_up_forward.hpp deleted file mode 100644 index 47fdfcd0ba..0000000000 --- a/bundled/boost-1.62.0/include/boost/align/align_up_forward.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/* -(c) 2015 Glen Joseph Fernandes - - -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt -*/ -#ifndef BOOST_ALIGN_ALIGN_UP_FORWARD_HPP -#define BOOST_ALIGN_ALIGN_UP_FORWARD_HPP - -#include -#include - -namespace boost { -namespace alignment { - -BOOST_CONSTEXPR std::size_t align_up(std::size_t value, - std::size_t alignment) BOOST_NOEXCEPT; - -} /* .alignment */ -} /* .boost */ - -#endif diff --git a/bundled/boost-1.62.0/include/boost/align/aligned_alloc.hpp b/bundled/boost-1.62.0/include/boost/align/aligned_alloc.hpp index 7f2c0bb363..42128f1b24 100644 --- a/bundled/boost-1.62.0/include/boost/align/aligned_alloc.hpp +++ b/bundled/boost-1.62.0/include/boost/align/aligned_alloc.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNED_ALLOC_HPP #define BOOST_ALIGN_ALIGNED_ALLOC_HPP diff --git a/bundled/boost-1.62.0/include/boost/align/aligned_allocator.hpp b/bundled/boost-1.62.0/include/boost/align/aligned_allocator.hpp index b70ed54230..4ec6b50c2f 100644 --- a/bundled/boost-1.62.0/include/boost/align/aligned_allocator.hpp +++ b/bundled/boost-1.62.0/include/boost/align/aligned_allocator.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_HPP #define BOOST_ALIGN_ALIGNED_ALLOCATOR_HPP @@ -29,8 +28,7 @@ namespace alignment { template class aligned_allocator { - BOOST_STATIC_ASSERT(detail:: - is_alignment_constant::value); + BOOST_STATIC_ASSERT(detail::is_alignment_constant::value); public: typedef T value_type; @@ -43,13 +41,6 @@ public: typedef T& reference; typedef const T& const_reference; -private: - enum { - min_align = detail::max_size::value>::value - }; - -public: template struct rebind { typedef aligned_allocator other; @@ -74,12 +65,16 @@ public: } pointer allocate(size_type size, const_void_pointer = 0) { - void* p = 0; - if (size > 0) { - p = aligned_alloc(min_align, sizeof(T) * size); - if (!p) { - boost::throw_exception(std::bad_alloc()); - } + enum { + m = detail::max_size::value>::value + }; + if (size == 0) { + return 0; + } + void* p = boost::alignment::aligned_alloc(m, sizeof(T) * size); + if (!p) { + boost::throw_exception(std::bad_alloc()); } return static_cast(p); } @@ -125,8 +120,7 @@ public: template class aligned_allocator { - BOOST_STATIC_ASSERT(detail:: - is_alignment_constant::value); + BOOST_STATIC_ASSERT(detail::is_alignment_constant::value); public: typedef void value_type; @@ -139,21 +133,23 @@ public: }; }; -template -inline bool operator==(const aligned_allocator&, - const aligned_allocator&) BOOST_NOEXCEPT +template +inline bool +operator==(const aligned_allocator&, + const aligned_allocator&) BOOST_NOEXCEPT { return true; } -template -inline bool operator!=(const aligned_allocator&, - const aligned_allocator&) BOOST_NOEXCEPT +template +inline bool +operator!=(const aligned_allocator&, + const aligned_allocator&) BOOST_NOEXCEPT { return false; } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/aligned_allocator_adaptor.hpp b/bundled/boost-1.62.0/include/boost/align/aligned_allocator_adaptor.hpp index b6ddd9c369..912651687a 100644 --- a/bundled/boost-1.62.0/include/boost/align/aligned_allocator_adaptor.hpp +++ b/bundled/boost-1.62.0/include/boost/align/aligned_allocator_adaptor.hpp @@ -1,21 +1,20 @@ /* -(c) 2014-2016 Glen Joseph Fernandes - +Copyright 2014-2016 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_HPP #define BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_HPP -#include #include #include #include #include #include #include +#include #include #include @@ -33,56 +32,45 @@ namespace alignment { template class aligned_allocator_adaptor : public Allocator { - BOOST_STATIC_ASSERT(detail:: - is_alignment_constant::value); + BOOST_STATIC_ASSERT(detail::is_alignment_constant::value); #if !defined(BOOST_NO_CXX11_ALLOCATOR) typedef std::allocator_traits traits; - - typedef typename traits:: - template rebind_alloc char_alloc; - - typedef typename traits:: - template rebind_traits char_traits; - + typedef typename traits::template rebind_alloc char_alloc; + typedef typename traits::template rebind_traits char_traits; typedef typename char_traits::pointer char_ptr; #else - typedef typename Allocator:: - template rebind::other char_alloc; - + typedef typename Allocator::template rebind::other char_alloc; typedef typename char_alloc::pointer char_ptr; #endif public: -#if !defined(BOOST_NO_CXX11_ALLOCATOR) - typedef typename traits::value_type value_type; - typedef typename traits::size_type size_type; -#else typedef typename Allocator::value_type value_type; - typedef typename Allocator::size_type size_type; -#endif - typedef value_type* pointer; typedef const value_type* const_pointer; typedef void* void_pointer; typedef const void* const_void_pointer; + typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; private: - enum { - min_align = detail::max_size::value>::value + template + struct min_align { + enum { + value = detail::max_size::value>::value + }; }; public: template struct rebind { #if !defined(BOOST_NO_CXX11_ALLOCATOR) - typedef aligned_allocator_adaptor, Alignment> other; + typedef aligned_allocator_adaptor, Alignment> other; #else - typedef aligned_allocator_adaptor::other, Alignment> other; + typedef aligned_allocator_adaptor::other, Alignment> other; #endif }; @@ -117,19 +105,25 @@ public: } pointer allocate(size_type size) { + enum { + m = min_align::value + }; std::size_t s = size * sizeof(value_type); - std::size_t n = s + min_align - 1; + std::size_t n = s + m - 1; char_alloc a(base()); char_ptr p = a.allocate(sizeof p + n); - void* r = detail::addressof(*p) + sizeof p; - (void)align(min_align, s, r, n); - ::new((void*)(static_cast(r) - 1)) char_ptr(p); + void* r = boost::to_address(p) + sizeof p; + (void)boost::alignment::align(m, s, r, n); + ::new(static_cast(static_cast(r) - 1)) char_ptr(p); return static_cast(r); } pointer allocate(size_type size, const_void_pointer hint) { + enum { + m = min_align::value + }; std::size_t s = size * sizeof(value_type); - std::size_t n = s + min_align - 1; + std::size_t n = s + m - 1; char_ptr h = char_ptr(); if (hint) { h = *(static_cast(hint) - 1); @@ -140,39 +134,41 @@ public: #else char_ptr p = a.allocate(sizeof p + n, h); #endif - void* r = detail::addressof(*p) + sizeof p; - (void)align(min_align, s, r, n); - ::new((void*)(static_cast(r) - 1)) char_ptr(p); + void* r = boost::to_address(p) + sizeof p; + (void)boost::alignment::align(m, s, r, n); + ::new(static_cast(static_cast(r) - 1)) char_ptr(p); return static_cast(r); } void deallocate(pointer ptr, size_type size) { - char_ptr* p = (char_ptr*)ptr - 1; + enum { + m = min_align::value + }; + char_ptr* p = reinterpret_cast(ptr) - 1; char_ptr r = *p; p->~char_ptr(); char_alloc a(base()); - a.deallocate(r, sizeof r + size * sizeof(value_type) + - min_align - 1); + a.deallocate(r, sizeof r + size * sizeof(value_type) + m - 1); } }; -template -inline bool operator==(const aligned_allocator_adaptor& a, const aligned_allocator_adaptor& b) BOOST_NOEXCEPT +template +inline bool +operator==(const aligned_allocator_adaptor& a, + const aligned_allocator_adaptor& b) BOOST_NOEXCEPT { return a.base() == b.base(); } -template -inline bool operator!=(const aligned_allocator_adaptor& a, const aligned_allocator_adaptor& b) BOOST_NOEXCEPT +template +inline bool +operator!=(const aligned_allocator_adaptor& a, + const aligned_allocator_adaptor& b) BOOST_NOEXCEPT { return !(a == b); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/aligned_allocator_adaptor_forward.hpp b/bundled/boost-1.62.0/include/boost/align/aligned_allocator_adaptor_forward.hpp index d606f09920..f762cd1c3a 100644 --- a/bundled/boost-1.62.0/include/boost/align/aligned_allocator_adaptor_forward.hpp +++ b/bundled/boost-1.62.0/include/boost/align/aligned_allocator_adaptor_forward.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_FORWARD_HPP #define BOOST_ALIGN_ALIGNED_ALLOCATOR_ADAPTOR_FORWARD_HPP @@ -17,7 +16,7 @@ namespace alignment { template class aligned_allocator_adaptor; -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/aligned_allocator_forward.hpp b/bundled/boost-1.62.0/include/boost/align/aligned_allocator_forward.hpp index 41f917f38c..23add71aaa 100644 --- a/bundled/boost-1.62.0/include/boost/align/aligned_allocator_forward.hpp +++ b/bundled/boost-1.62.0/include/boost/align/aligned_allocator_forward.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNED_ALLOCATOR_FORWARD_HPP #define BOOST_ALIGN_ALIGNED_ALLOCATOR_FORWARD_HPP @@ -17,7 +16,7 @@ namespace alignment { template class aligned_allocator; -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/aligned_delete.hpp b/bundled/boost-1.62.0/include/boost/align/aligned_delete.hpp index 97b1c4b6ad..385bd557af 100644 --- a/bundled/boost-1.62.0/include/boost/align/aligned_delete.hpp +++ b/bundled/boost-1.62.0/include/boost/align/aligned_delete.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNED_DELETE_HPP #define BOOST_ALIGN_ALIGNED_DELETE_HPP @@ -26,7 +25,7 @@ struct aligned_delete { } }; -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/aligned_delete_forward.hpp b/bundled/boost-1.62.0/include/boost/align/aligned_delete_forward.hpp index 7334bebdef..d5b766d7f0 100644 --- a/bundled/boost-1.62.0/include/boost/align/aligned_delete_forward.hpp +++ b/bundled/boost-1.62.0/include/boost/align/aligned_delete_forward.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNED_DELETE_FORWARD_HPP #define BOOST_ALIGN_ALIGNED_DELETE_FORWARD_HPP @@ -14,7 +13,7 @@ namespace alignment { struct aligned_delete; -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/alignment_of.hpp b/bundled/boost-1.62.0/include/boost/align/alignment_of.hpp index 3dd2eb5b41..488df0b9e0 100644 --- a/bundled/boost-1.62.0/include/boost/align/alignment_of.hpp +++ b/bundled/boost-1.62.0/include/boost/align/alignment_of.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2016 Glen Joseph Fernandes - +Copyright 2014-2016 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNMENT_OF_HPP #define BOOST_ALIGN_ALIGNMENT_OF_HPP @@ -39,14 +38,15 @@ namespace alignment { template struct alignment_of - : detail::alignment_of::type> { }; + : detail::alignment_of::type>::type { }; #if !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES) template constexpr std::size_t alignment_of_v = alignment_of::value; #endif -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/alignment_of_forward.hpp b/bundled/boost-1.62.0/include/boost/align/alignment_of_forward.hpp index 7ab227528b..31db15f23c 100644 --- a/bundled/boost-1.62.0/include/boost/align/alignment_of_forward.hpp +++ b/bundled/boost-1.62.0/include/boost/align/alignment_of_forward.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ALIGNMENT_OF_FORWARD_HPP #define BOOST_ALIGN_ALIGNMENT_OF_FORWARD_HPP @@ -15,7 +14,7 @@ namespace alignment { template struct alignment_of; -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/assume_aligned.hpp b/bundled/boost-1.62.0/include/boost/align/assume_aligned.hpp index 8d9f6ccf43..22e5103654 100644 --- a/bundled/boost-1.62.0/include/boost/align/assume_aligned.hpp +++ b/bundled/boost-1.62.0/include/boost/align/assume_aligned.hpp @@ -1,13 +1,12 @@ /* -(c) 2015 NumScale SAS -(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI +Copyright 2015 NumScale SAS +Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_ASSUME_ALIGNED_HPP #define BOOST_ALIGN_ASSUME_ALIGNED_HPP diff --git a/bundled/boost-1.62.0/include/boost/align/detail/address.hpp b/bundled/boost-1.62.0/include/boost/align/detail/address.hpp deleted file mode 100644 index a205cbd171..0000000000 --- a/bundled/boost-1.62.0/include/boost/align/detail/address.hpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - Copyright (c) 2014 Glen Joseph Fernandes - glenfe at live dot com - - Distributed under the Boost Software License, - Version 1.0. (See accompanying file LICENSE_1_0.txt - or copy at http://boost.org/LICENSE_1_0.txt) -*/ -#ifndef BOOST_ALIGN_DETAIL_ADDRESS_HPP -#define BOOST_ALIGN_DETAIL_ADDRESS_HPP - -#include -#include - -namespace boost { - namespace alignment { - namespace detail { -#if defined(BOOST_HAS_INTPTR_T) - typedef boost::uintptr_t address_t; -#else - typedef std::size_t address_t; -#endif - } - } -} - -#endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/addressof.hpp b/bundled/boost-1.62.0/include/boost/align/detail/addressof.hpp index 50731a70d0..a314830bed 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/addressof.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/addressof.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ADDRESSOF_HPP #define BOOST_ALIGN_DETAIL_ADDRESSOF_HPP @@ -27,8 +26,8 @@ using std::addressof; using boost::addressof; #endif -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/align.hpp b/bundled/boost-1.62.0/include/boost/align/detail/align.hpp index 77055e0328..905940ad77 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/align.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/align.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2016 Glen Joseph Fernandes - +Copyright 2014-2016 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGN_HPP #define BOOST_ALIGN_DETAIL_ALIGN_HPP @@ -15,13 +14,14 @@ http://boost.org/LICENSE_1_0.txt namespace boost { namespace alignment { -inline void* align(std::size_t alignment, std::size_t size, - void*& ptr, std::size_t& space) +inline void* +align(std::size_t alignment, std::size_t size, void*& ptr, + std::size_t& space) { BOOST_ASSERT(detail::is_alignment(alignment)); if (size <= space) { - char* p = (char*)(((std::size_t)ptr + alignment - 1) & - ~(alignment - 1)); + char* p = reinterpret_cast(~(alignment - 1) & + (reinterpret_cast(ptr) + alignment - 1)); std::size_t n = space - (p - static_cast(ptr)); if (size <= n) { ptr = p; @@ -32,7 +32,7 @@ inline void* align(std::size_t alignment, std::size_t size, return 0; } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/align_cxx11.hpp b/bundled/boost-1.62.0/include/boost/align/detail/align_cxx11.hpp index a95b84c70f..637541ab40 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/align_cxx11.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/align_cxx11.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGN_CXX11_HPP #define BOOST_ALIGN_DETAIL_ALIGN_CXX11_HPP @@ -16,7 +15,7 @@ namespace alignment { using std::align; -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/align_down.hpp b/bundled/boost-1.62.0/include/boost/align/detail/align_down.hpp index 97e1c1d3eb..de3c80d06d 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/align_down.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/align_down.hpp @@ -1,28 +1,28 @@ /* -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGN_DOWN_HPP #define BOOST_ALIGN_DETAIL_ALIGN_DOWN_HPP #include -#include #include namespace boost { namespace alignment { -inline void* align_down(void* ptr, std::size_t alignment) BOOST_NOEXCEPT +inline void* +align_down(void* ptr, std::size_t alignment) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); - return (void*)(align_down((std::size_t)ptr, alignment)); + return reinterpret_cast(~(alignment - 1) & + reinterpret_cast(ptr)); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/align_up.hpp b/bundled/boost-1.62.0/include/boost/align/detail/align_up.hpp index e956f7a046..ac11f8964f 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/align_up.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/align_up.hpp @@ -1,28 +1,28 @@ /* -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGN_UP_HPP #define BOOST_ALIGN_DETAIL_ALIGN_UP_HPP #include -#include #include namespace boost { namespace alignment { -inline void* align_up(void* ptr, std::size_t alignment) BOOST_NOEXCEPT +inline void* +align_up(void* ptr, std::size_t alignment) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); - return (void*)(align_up((std::size_t)ptr, alignment)); + return reinterpret_cast(~(alignment - 1) & + (reinterpret_cast(ptr) + alignment - 1)); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc.hpp b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc.hpp index 0488847bbd..d27a549909 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP #define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_HPP @@ -18,35 +17,36 @@ http://boost.org/LICENSE_1_0.txt namespace boost { namespace alignment { -inline void* aligned_alloc(std::size_t alignment, std::size_t size) - BOOST_NOEXCEPT +inline void* +aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); enum { - min_align = alignment_of::value + N = alignment_of::value }; - if (alignment < min_align) { - alignment = min_align; + if (alignment < N) { + alignment = N; } - std::size_t n = size + alignment - min_align; - void* r = 0; + std::size_t n = size + alignment - N; void* p = std::malloc(sizeof(void*) + n); if (p) { - r = static_cast(p) + sizeof p; - (void)align(alignment, size, r, n); + void* r = static_cast(p) + sizeof(void*); + (void)boost::alignment::align(alignment, size, r, n); *(static_cast(r) - 1) = p; + p = r; } - return r; + return p; } -inline void aligned_free(void* ptr) BOOST_NOEXCEPT +inline void +aligned_free(void* ptr) BOOST_NOEXCEPT { if (ptr) { std::free(*(static_cast(ptr) - 1)); } } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_android.hpp b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_android.hpp index 0ed28a45eb..4119fbd9bc 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_android.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_android.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_ANDROID_HPP #define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_ANDROID_HPP @@ -16,19 +15,20 @@ http://boost.org/LICENSE_1_0.txt namespace boost { namespace alignment { -inline void* aligned_alloc(std::size_t alignment, std::size_t size) - BOOST_NOEXCEPT +inline void* +aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); return ::memalign(alignment, size); } -inline void aligned_free(void* ptr) BOOST_NOEXCEPT +inline void +aligned_free(void* ptr) BOOST_NOEXCEPT { ::free(ptr); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_macos.hpp b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_macos.hpp index 0bdb7c2eb1..76366fa5c1 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_macos.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_macos.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MACOS_HPP #define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MACOS_HPP @@ -16,8 +15,8 @@ http://boost.org/LICENSE_1_0.txt namespace boost { namespace alignment { -inline void* aligned_alloc(std::size_t alignment, std::size_t size) - BOOST_NOEXCEPT +inline void* +aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); if (size == 0) { @@ -33,12 +32,13 @@ inline void* aligned_alloc(std::size_t alignment, std::size_t size) return p; } -inline void aligned_free(void* ptr) BOOST_NOEXCEPT +inline void +aligned_free(void* ptr) BOOST_NOEXCEPT { ::free(ptr); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_msvc.hpp b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_msvc.hpp index abeccfc4e4..45c57c9915 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_msvc.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_msvc.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MSVC_HPP #define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_MSVC_HPP @@ -16,19 +15,20 @@ http://boost.org/LICENSE_1_0.txt namespace boost { namespace alignment { -inline void* aligned_alloc(std::size_t alignment, std::size_t size) - BOOST_NOEXCEPT +inline void* +aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); return ::_aligned_malloc(size, alignment); } -inline void aligned_free(void* ptr) BOOST_NOEXCEPT +inline void +aligned_free(void* ptr) BOOST_NOEXCEPT { ::_aligned_free(ptr); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_posix.hpp b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_posix.hpp index 931b0c4bd6..78fc842d20 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_posix.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_posix.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_POSIX_HPP #define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_POSIX_HPP @@ -16,8 +15,8 @@ http://boost.org/LICENSE_1_0.txt namespace boost { namespace alignment { -inline void* aligned_alloc(std::size_t alignment, std::size_t size) - BOOST_NOEXCEPT +inline void* +aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); if (alignment < sizeof(void*)) { @@ -30,12 +29,13 @@ inline void* aligned_alloc(std::size_t alignment, std::size_t size) return p; } -inline void aligned_free(void* ptr) BOOST_NOEXCEPT +inline void +aligned_free(void* ptr) BOOST_NOEXCEPT { ::free(ptr); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_sunos.hpp b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_sunos.hpp index 5039c733c6..0948b40e39 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_sunos.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/aligned_alloc_sunos.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_SUNOS_HPP #define BOOST_ALIGN_DETAIL_ALIGNED_ALLOC_SUNOS_HPP @@ -16,19 +15,20 @@ http://boost.org/LICENSE_1_0.txt namespace boost { namespace alignment { -inline void* aligned_alloc(std::size_t alignment, std::size_t size) - BOOST_NOEXCEPT +inline void* +aligned_alloc(std::size_t alignment, std::size_t size) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); return ::memalign(alignment, size); } -inline void aligned_free(void* ptr) BOOST_NOEXCEPT +inline void +aligned_free(void* ptr) BOOST_NOEXCEPT { ::free(ptr); } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of.hpp b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of.hpp index f3f6192899..b6fc3dcdcf 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_HPP #define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_HPP @@ -16,17 +15,17 @@ namespace alignment { namespace detail { template -struct alignof_helper { +struct offset_value { char value; T object; }; template struct alignment_of - : min_size) - sizeof(T)> { }; + : min_size) - sizeof(T)> { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_clang.hpp b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_clang.hpp index f550156d73..95773e5ea3 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_clang.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_clang.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CLANG_HPP #define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CLANG_HPP @@ -20,8 +19,8 @@ template struct alignment_of : integral_constant { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_codegear.hpp b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_codegear.hpp index 8948309d88..ea6f904242 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_codegear.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_codegear.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CODEGEAR_HPP #define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CODEGEAR_HPP @@ -20,8 +19,8 @@ template struct alignment_of : integral_constant { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_cxx11.hpp b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_cxx11.hpp index cbe2d9e7a8..05c7429385 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_cxx11.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_cxx11.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CXX11_HPP #define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_CXX11_HPP @@ -17,8 +16,8 @@ namespace detail { using std::alignment_of; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_gcc.hpp b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_gcc.hpp index ffd8294fe3..66a63a50b1 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_gcc.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_gcc.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_GCC_HPP #define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_GCC_HPP @@ -20,8 +19,8 @@ template struct alignment_of : integral_constant { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_msvc.hpp b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_msvc.hpp index cdd7c477ce..440b840db4 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_msvc.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/alignment_of_msvc.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ALIGNMENT_OF_MSVC_HPP #define BOOST_ALIGN_DETAIL_ALIGNMENT_OF_MSVC_HPP @@ -16,7 +15,7 @@ namespace alignment { namespace detail { template -struct alignof_helper { +struct offset_value { T first; char value; T second; @@ -24,11 +23,10 @@ struct alignof_helper { template struct alignment_of - : min_size) - (sizeof(T) << 1)> { }; + : min_size) - (sizeof(T) << 1)> { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned.hpp b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned.hpp index a1c632b94d..d218d8c64e 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned.hpp @@ -1,17 +1,16 @@ /* -(c) 2015 NumScale SAS -(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI +Copyright 2015 NumScale SAS +Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_HPP #define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_HPP -#define BOOST_ALIGN_ASSUME_ALIGNED(p, n) +#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment) #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_clang.hpp b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_clang.hpp index d57cf4f8e5..4c7159fa28 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_clang.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_clang.hpp @@ -1,17 +1,16 @@ /* -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_CLANG_HPP #define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_CLANG_HPP #if __has_builtin(__builtin_assume_aligned) #define BOOST_ALIGN_ASSUME_ALIGNED(p, n) \ -(p) = (__typeof__(p))(__builtin_assume_aligned((p), (n))) +(p) = static_cast<__typeof__(p)>(__builtin_assume_aligned((p), (n))) #else #define BOOST_ALIGN_ASSUME_ALIGNED(p, n) #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_gcc.hpp b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_gcc.hpp index fc6d76a07f..117344447a 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_gcc.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_gcc.hpp @@ -1,18 +1,17 @@ /* -(c) 2015 NumScale SAS -(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI +Copyright 2015 NumScale SAS +Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_GCC_HPP #define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_GCC_HPP #define BOOST_ALIGN_ASSUME_ALIGNED(p, n) \ -(p) = (__typeof__(p))(__builtin_assume_aligned((p), (n))) +(p) = static_cast<__typeof__(p)>(__builtin_assume_aligned((p), (n))) #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_intel.hpp b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_intel.hpp index 1944f3de51..6792ce005c 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_intel.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_intel.hpp @@ -1,18 +1,17 @@ /* -(c) 2015 NumScale SAS -(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI +Copyright 2015 NumScale SAS +Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_INTEL_HPP #define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_INTEL_HPP -#define BOOST_ALIGN_ASSUME_ALIGNED(p, n) \ -__assume_aligned((p), (n)) +#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment) \ +__assume_aligned((ptr), (alignment)) #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_msvc.hpp b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_msvc.hpp index e953333b02..75ac7e1242 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_msvc.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/assume_aligned_msvc.hpp @@ -1,20 +1,19 @@ /* -(c) 2015 NumScale SAS -(c) 2015 LRI UMR 8623 CNRS/University Paris Sud XI +Copyright 2015 NumScale SAS +Copyright 2015 LRI UMR 8623 CNRS/University Paris Sud XI -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_MSVC_HPP #define BOOST_ALIGN_DETAIL_ASSUME_ALIGNED_MSVC_HPP #include -#define BOOST_ALIGN_ASSUME_ALIGNED(p, n) \ -__assume(((std::size_t)(p) & ((n) - 1)) == 0) +#define BOOST_ALIGN_ASSUME_ALIGNED(ptr, alignment) \ +__assume((reinterpret_cast(ptr) & ((alignment) - 1)) == 0) #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/element_type.hpp b/bundled/boost-1.62.0/include/boost/align/detail/element_type.hpp index 69995e1613..5b2b732da0 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/element_type.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/element_type.hpp @@ -1,10 +1,9 @@ /* -(c) 2015 Glen Joseph Fernandes - +Copyright 2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP #define BOOST_ALIGN_DETAIL_ELEMENT_TYPE_HPP @@ -49,45 +48,44 @@ struct remove_all_extents { }; template -struct remove_all_extents - : remove_all_extents { }; +struct remove_all_extents { + typedef typename remove_all_extents::type type; +}; template -struct remove_all_extents - : remove_all_extents { }; +struct remove_all_extents { + typedef typename remove_all_extents::type type; +}; template -struct remove_const { +struct remove_cv { typedef T type; }; template -struct remove_const { +struct remove_cv { typedef T type; }; template -struct remove_volatile { +struct remove_cv { typedef T type; }; template -struct remove_volatile { +struct remove_cv { typedef T type; }; - -template -struct remove_cv - : remove_volatile::type> { }; #endif template -struct element_type - : remove_cv::type>::type> { }; +struct element_type { + typedef typename remove_cv::type>::type>::type type; +}; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/integral_constant.hpp b/bundled/boost-1.62.0/include/boost/align/detail/integral_constant.hpp index 1ad67e330f..860096783e 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/integral_constant.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/integral_constant.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2016 Glen Joseph Fernandes - +Copyright 2014-2016 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_INTEGRAL_CONSTANT_HPP #define BOOST_ALIGN_DETAIL_INTEGRAL_CONSTANT_HPP @@ -37,10 +36,13 @@ struct integral_constant { BOOST_STATIC_CONSTEXPR T value = Value; }; + +template +BOOST_CONSTEXPR_OR_CONST T integral_constant::value; #endif -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/is_aligned.hpp b/bundled/boost-1.62.0/include/boost/align/detail/is_aligned.hpp index e7c7dd60a0..61982c4685 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/is_aligned.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/is_aligned.hpp @@ -1,36 +1,34 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_IS_ALIGNED_HPP #define BOOST_ALIGN_DETAIL_IS_ALIGNED_HPP #include -#include #include namespace boost { namespace alignment { -inline bool is_aligned(const void* ptr, std::size_t alignment) - BOOST_NOEXCEPT +inline bool +is_aligned(const void* ptr, std::size_t alignment) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); - return is_aligned((std::size_t)ptr, alignment); + return (reinterpret_cast(ptr) & (alignment - 1)) == 0; } -inline bool is_aligned(std::size_t alignment, const void* ptr) - BOOST_NOEXCEPT +inline bool +is_aligned(std::size_t alignment, const void* ptr) BOOST_NOEXCEPT { BOOST_ASSERT(detail::is_alignment(alignment)); - return is_aligned((std::size_t)ptr, alignment); + return (reinterpret_cast(ptr) & (alignment - 1)) == 0; } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/is_alignment.hpp b/bundled/boost-1.62.0/include/boost/align/detail/is_alignment.hpp index 12d8df974f..542fbe4694 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/is_alignment.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/is_alignment.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_IS_ALIGNMENT_HPP #define BOOST_ALIGN_DETAIL_IS_ALIGNMENT_HPP @@ -16,14 +15,14 @@ namespace boost { namespace alignment { namespace detail { -BOOST_CONSTEXPR inline bool is_alignment(std::size_t value) - BOOST_NOEXCEPT +BOOST_CONSTEXPR inline bool +is_alignment(std::size_t value) BOOST_NOEXCEPT { return (value > 0) && ((value & (value - 1)) == 0); } -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/is_alignment_const.hpp b/bundled/boost-1.62.0/include/boost/align/detail/is_alignment_const.hpp deleted file mode 100644 index f6d7e97408..0000000000 --- a/bundled/boost-1.62.0/include/boost/align/detail/is_alignment_const.hpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - Copyright (c) 2014 Glen Joseph Fernandes - glenfe at live dot com - - Distributed under the Boost Software License, - Version 1.0. (See accompanying file LICENSE_1_0.txt - or copy at http://boost.org/LICENSE_1_0.txt) -*/ -#ifndef BOOST_ALIGN_DETAIL_IS_ALIGNMENT_CONST_HPP -#define BOOST_ALIGN_DETAIL_IS_ALIGNMENT_CONST_HPP - -#include - -namespace boost { - namespace alignment { - namespace detail { - template - struct is_alignment_const { - enum { - value = (N > 0) && ((N & (N - 1)) == 0) - }; - }; - } - } -} - -#endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/is_alignment_constant.hpp b/bundled/boost-1.62.0/include/boost/align/detail/is_alignment_constant.hpp index eb709b7bc2..0ded62857e 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/is_alignment_constant.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/is_alignment_constant.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_IS_ALIGNMENT_CONSTANT_HPP #define BOOST_ALIGN_DETAIL_IS_ALIGNMENT_CONSTANT_HPP @@ -20,8 +19,8 @@ template struct is_alignment_constant : integral_constant 0) && ((N & (N - 1)) == 0)> { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/max_align.hpp b/bundled/boost-1.62.0/include/boost/align/detail/max_align.hpp index d91de0dab5..9c09fec9c9 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/max_align.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/max_align.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_MAX_ALIGN_HPP #define BOOST_ALIGN_DETAIL_MAX_ALIGN_HPP @@ -20,8 +19,8 @@ template struct max_align : max_size::value, alignment_of::value> { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/max_count_of.hpp b/bundled/boost-1.62.0/include/boost/align/detail/max_count_of.hpp deleted file mode 100644 index 62917ac1f4..0000000000 --- a/bundled/boost-1.62.0/include/boost/align/detail/max_count_of.hpp +++ /dev/null @@ -1,27 +0,0 @@ -/* - Copyright (c) 2014 Glen Joseph Fernandes - glenfe at live dot com - - Distributed under the Boost Software License, - Version 1.0. (See accompanying file LICENSE_1_0.txt - or copy at http://boost.org/LICENSE_1_0.txt) -*/ -#ifndef BOOST_ALIGN_DETAIL_MAX_COUNT_OF_HPP -#define BOOST_ALIGN_DETAIL_MAX_COUNT_OF_HPP - -#include - -namespace boost { - namespace alignment { - namespace detail { - template - struct max_count_of { - enum { - value = ~static_cast(0) / sizeof(T) - }; - }; - } - } -} - -#endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/max_objects.hpp b/bundled/boost-1.62.0/include/boost/align/detail/max_objects.hpp index 27d377c5c2..9fdd30e118 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/max_objects.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/max_objects.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_MAX_OBJECTS_HPP #define BOOST_ALIGN_DETAIL_MAX_OBJECTS_HPP @@ -21,8 +20,8 @@ struct max_objects : integral_constant(0) / sizeof(T)> { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/max_size.hpp b/bundled/boost-1.62.0/include/boost/align/detail/max_size.hpp index 555aa2c258..22cefdbec5 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/max_size.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/max_size.hpp @@ -1,10 +1,9 @@ /* -(c) 2014-2015 Glen Joseph Fernandes - +Copyright 2014-2015 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_MAX_SIZE_HPP #define BOOST_ALIGN_DETAIL_MAX_SIZE_HPP @@ -20,8 +19,8 @@ template struct max_size : integral_constant B) ? A : B> { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/min_size.hpp b/bundled/boost-1.62.0/include/boost/align/detail/min_size.hpp index b20d3cdeaf..5b478fdaf0 100644 --- a/bundled/boost-1.62.0/include/boost/align/detail/min_size.hpp +++ b/bundled/boost-1.62.0/include/boost/align/detail/min_size.hpp @@ -1,10 +1,9 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) */ #ifndef BOOST_ALIGN_DETAIL_MIN_SIZE_HPP #define BOOST_ALIGN_DETAIL_MIN_SIZE_HPP @@ -20,8 +19,8 @@ template struct min_size : integral_constant { }; -} /* .detail */ -} /* .alignment */ -} /* .boost */ +} /* detail */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/padded.hpp b/bundled/boost-1.62.0/include/boost/align/detail/padded.hpp deleted file mode 100644 index 9aeeee8929..0000000000 --- a/bundled/boost-1.62.0/include/boost/align/detail/padded.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/* - Copyright (c) 2014 Glen Joseph Fernandes - glenfe at live dot com - - Distributed under the Boost Software License, - Version 1.0. (See accompanying file LICENSE_1_0.txt - or copy at http://boost.org/LICENSE_1_0.txt) -*/ -#ifndef BOOST_ALIGN_DETAIL_PADDED_HPP -#define BOOST_ALIGN_DETAIL_PADDED_HPP - -namespace boost { - namespace alignment { - namespace detail { - template - struct padded { - char unit; - T object; - }; - } - } -} - -#endif diff --git a/bundled/boost-1.62.0/include/boost/align/detail/type_traits.hpp b/bundled/boost-1.62.0/include/boost/align/detail/type_traits.hpp deleted file mode 100644 index b250f18a2e..0000000000 --- a/bundled/boost-1.62.0/include/boost/align/detail/type_traits.hpp +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright (c) 2014 Glen Joseph Fernandes - glenfe at live dot com - - Distributed under the Boost Software License, - Version 1.0. (See accompanying file LICENSE_1_0.txt - or copy at http://boost.org/LICENSE_1_0.txt) -*/ -#ifndef BOOST_ALIGN_DETAIL_TYPE_TRAITS_HPP -#define BOOST_ALIGN_DETAIL_TYPE_TRAITS_HPP - -#include - -#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) -#include -#else -#include -#endif - -namespace boost { - namespace alignment { - namespace detail { -#if !defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) - using std::remove_reference; - using std::remove_all_extents; - using std::remove_cv; -#else - template - struct remove_reference { - typedef T type; - }; - - template - struct remove_reference { - typedef T type; - }; - -#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES) - template - struct remove_reference { - typedef T type; - }; -#endif - - template - struct remove_all_extents { - typedef T type; - }; - - template - struct remove_all_extents { - typedef typename remove_all_extents::type type; - }; - - template - struct remove_all_extents { - typedef typename remove_all_extents::type type; - }; - - template - struct remove_const { - typedef T type; - }; - - template - struct remove_const { - typedef T type; - }; - - template - struct remove_volatile { - typedef T type; - }; - - template - struct remove_volatile { - typedef T type; - }; - - template - struct remove_cv { - typedef typename remove_volatile::type>::type type; - }; -#endif - } - } -} - -#endif diff --git a/bundled/boost-1.62.0/include/boost/align/is_aligned.hpp b/bundled/boost-1.62.0/include/boost/align/is_aligned.hpp index cbace96077..c8266d0eae 100644 --- a/bundled/boost-1.62.0/include/boost/align/is_aligned.hpp +++ b/bundled/boost-1.62.0/include/boost/align/is_aligned.hpp @@ -1,27 +1,26 @@ /* -(c) 2014 Glen Joseph Fernandes - +Copyright 2014 Glen Joseph Fernandes +(glenjofe@gmail.com) + +Distributed under the Boost Software License, Version 1.0. +(http://www.boost.org/LICENSE_1_0.txt) -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt */ #ifndef BOOST_ALIGN_IS_ALIGNED_HPP #define BOOST_ALIGN_IS_ALIGNED_HPP #include -#include namespace boost { namespace alignment { -BOOST_CONSTEXPR inline bool is_aligned(std::size_t value, - std::size_t alignment) BOOST_NOEXCEPT +BOOST_CONSTEXPR inline bool +is_aligned(std::size_t value, std::size_t alignment) BOOST_NOEXCEPT { return (value & (alignment - 1)) == 0; } -} /* .alignment */ -} /* .boost */ +} /* alignment */ +} /* boost */ #endif diff --git a/bundled/boost-1.62.0/include/boost/align/is_aligned_forward.hpp b/bundled/boost-1.62.0/include/boost/align/is_aligned_forward.hpp deleted file mode 100644 index d1bcbc19dd..0000000000 --- a/bundled/boost-1.62.0/include/boost/align/is_aligned_forward.hpp +++ /dev/null @@ -1,24 +0,0 @@ -/* -(c) 2015 Glen Joseph Fernandes - - -Distributed under the Boost Software -License, Version 1.0. -http://boost.org/LICENSE_1_0.txt -*/ -#ifndef BOOST_ALIGN_IS_ALIGNED_FORWARD_HPP -#define BOOST_ALIGN_IS_ALIGNED_FORWARD_HPP - -#include -#include - -namespace boost { -namespace alignment { - -BOOST_CONSTEXPR bool is_aligned(std::size_t value, - std::size_t alignment) BOOST_NOEXCEPT; - -} /* .alignment */ -} /* .boost */ - -#endif diff --git a/bundled/boost-1.62.0/include/boost/any.hpp b/bundled/boost-1.62.0/include/boost/any.hpp index 38c665a96c..f161b3ff17 100644 --- a/bundled/boost-1.62.0/include/boost/any.hpp +++ b/bundled/boost-1.62.0/include/boost/any.hpp @@ -12,11 +12,11 @@ // with features contributed and bugs found by // Antony Polukhin, Ed Brey, Mark Rodgers, // Peter Dimov, and James Curran -// when: July 2001, April 2013 - May 2013 +// when: July 2001, April 2013 - 2019 #include -#include "boost/config.hpp" +#include #include #include #include @@ -27,9 +27,10 @@ #include #include #include +#include #include #include -#include +#include namespace boost { @@ -108,7 +109,7 @@ namespace boost return *this; } - // move assignement + // move assignment any & operator=(any&& rhs) BOOST_NOEXCEPT { rhs.swap(*this); @@ -148,7 +149,7 @@ namespace boost public: // types (public so any_cast can be non-friend) #endif - class placeholder + class BOOST_SYMBOL_VISIBLE placeholder { public: // structors @@ -182,12 +183,12 @@ namespace boost #endif public: // queries - virtual const boost::typeindex::type_info& type() const BOOST_NOEXCEPT override + virtual const boost::typeindex::type_info& type() const BOOST_NOEXCEPT { return boost::typeindex::type_id().type_info(); } - virtual placeholder * clone() const override + virtual placeholder * clone() const { return new holder(held); } @@ -233,7 +234,7 @@ namespace boost #endif { public: - virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW override + virtual const char * what() const BOOST_NOEXCEPT_OR_NOTHROW { return "boost::bad_any_cast: " "failed conversion using boost::any_cast"; @@ -244,7 +245,9 @@ namespace boost ValueType * any_cast(any * operand) BOOST_NOEXCEPT { return operand && operand->type() == boost::typeindex::type_id() - ? &static_cast::type> *>(operand->content)->held + ? boost::addressof( + static_cast::type> *>(operand->content)->held + ) : 0; } @@ -260,7 +263,7 @@ namespace boost typedef BOOST_DEDUCED_TYPENAME remove_reference::type nonref; - nonref * result = any_cast(&operand); + nonref * result = any_cast(boost::addressof(operand)); if(!result) boost::throw_exception(bad_any_cast()); @@ -268,13 +271,20 @@ namespace boost // `ValueType` is not a reference. Example: // `static_cast(*result);` // which is equal to `std::string(*result);` - typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_< - boost::is_reference, + typedef BOOST_DEDUCED_TYPENAME boost::conditional< + boost::is_reference::value, ValueType, BOOST_DEDUCED_TYPENAME boost::add_reference::type >::type ref_type; +#ifdef BOOST_MSVC +# pragma warning(push) +# pragma warning(disable: 4172) // "returning address of local variable or temporary" but *result is not local! +#endif return static_cast(*result); +#ifdef BOOST_MSVC +# pragma warning(pop) +#endif } template @@ -306,7 +316,9 @@ namespace boost template inline ValueType * unsafe_any_cast(any * operand) BOOST_NOEXCEPT { - return &static_cast *>(operand->content)->held; + return boost::addressof( + static_cast *>(operand->content)->held + ); } template @@ -317,6 +329,7 @@ namespace boost } // Copyright Kevlin Henney, 2000, 2001, 2002. All rights reserved. +// Copyright Antony Polukhin, 2013-2019. // // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at diff --git a/bundled/boost-1.62.0/include/boost/archive/add_facet.hpp b/bundled/boost-1.62.0/include/boost/archive/add_facet.hpp deleted file mode 100644 index 242bdd9001..0000000000 --- a/bundled/boost-1.62.0/include/boost/archive/add_facet.hpp +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef BOOST_ARCHIVE_ADD_FACET_HPP -#define BOOST_ARCHIVE_ADD_FACET_HPP - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) -# pragma once -#endif - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// add_facet.hpp - -// (C) Copyright 2003 Robert Ramey - http://www.rrsd.com . -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -#include -#include -#include - -// does STLport uses native STL for locales? -#if (defined(__SGI_STL_PORT)&& defined(_STLP_NO_OWN_IOSTREAMS)) -// and this native STL lib is old Dinkumware (has not defined _CPPLIB_VER) -# if (defined(_YVALS) && !defined(__IBMCPP__)) || !defined(_CPPLIB_VER) -# define BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT -# endif -#endif - -namespace boost { -namespace archive { - -template -inline std::locale * -add_facet(const std::locale &l, Facet * f){ - return - #if defined BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT - // std namespace used for native locale - new std::locale(std::_Addfac(l, f)); - #elif BOOST_WORKAROUND(BOOST_DINKUMWARE_STDLIB, == 1) // old Dinkumwar - // std namespace used for native locale - new std::locale(std::_Addfac(l, f)); - #else - // standard compatible - new std::locale(l, f); - #endif -} - -} // namespace archive -} // namespace boost - -#undef BOOST_ARCHIVE_OLD_DINKUMWARE_BENEATH_STLPORT - -#endif // BOOST_ARCHIVE_ADD_FACET_HPP diff --git a/bundled/boost-1.62.0/include/boost/archive/archive_exception.hpp b/bundled/boost-1.62.0/include/boost/archive/archive_exception.hpp index ce69e99891..fabcdb5fa7 100644 --- a/bundled/boost-1.62.0/include/boost/archive/archive_exception.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/archive_exception.hpp @@ -88,8 +88,8 @@ public: const char * e2 = NULL ) BOOST_NOEXCEPT; BOOST_ARCHIVE_DECL archive_exception(archive_exception const &) BOOST_NOEXCEPT ; - virtual BOOST_ARCHIVE_DECL ~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW override ; - virtual BOOST_ARCHIVE_DECL const char * what() const BOOST_NOEXCEPT_OR_NOTHROW override ; + virtual BOOST_ARCHIVE_DECL ~archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ; + virtual BOOST_ARCHIVE_DECL const char * what() const BOOST_NOEXCEPT_OR_NOTHROW ; }; }// namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_archive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_archive.hpp index ce7ac99a6d..9283974ff1 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_archive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_archive.hpp @@ -127,11 +127,11 @@ public: } // used for text output - operator int () const { + operator base_type () const { return t; } // used for text input - operator int_least16_t &() { + operator base_type &() { return t; } bool operator==(const class_id_type & rhs) const { @@ -151,7 +151,10 @@ private: public: object_id_type(): t(0) {}; // note: presumes that size_t >= unsigned int. - explicit object_id_type(const std::size_t & t_) : t(t_){ + // use explicit cast to silence useless warning + explicit object_id_type(const std::size_t & t_) : t(static_cast(t_)){ + // make quadriple sure that we haven't lost any real integer + // precision BOOST_ASSERT(t_ <= boost::integer_traits::const_max); } object_id_type(const object_id_type & t_) : @@ -162,11 +165,11 @@ public: return *this; } // used for text output - operator uint_least32_t () const { + operator base_type () const { return t; } // used for text input - operator uint_least32_t & () { + operator base_type & () { return t; } bool operator==(const object_id_type & rhs) const { diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_binary_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_binary_iarchive.hpp index c0cc655c99..c85ead86c6 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_binary_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_binary_iarchive.hpp @@ -102,17 +102,29 @@ protected: } void load_override(class_id_type & t){ library_version_type lvt = this->get_library_version(); + /* + * library versions: + * boost 1.39 -> 5 + * boost 1.43 -> 7 + * boost 1.47 -> 9 + * + * + * 1) in boost 1.43 and inferior, class_id_type is always a 16bit value, with no check on the library version + * --> this means all archives with version v <= 7 are written with a 16bit class_id_type + * 2) in boost 1.44 this load_override has disappeared (and thus boost 1.44 is not backward compatible at all !!) + * 3) recent boosts reintroduced load_override with a test on the version : + * - v > 7 : this->detail_common_iarchive::load_override(t, version) + * - v > 6 : 16bit + * - other : 32bit + * --> which is obviously incorrect, see point 1 + * + * the fix here decodes class_id_type on 16bit for all v <= 7, which seems to be the correct behaviour ... + */ if(boost::archive::library_version_type(7) < lvt){ this->detail_common_iarchive::load_override(t); } - else - if(boost::archive::library_version_type(6) < lvt){ - int_least16_t x=0; - * this->This() >> x; - t = boost::archive::class_id_type(x); - } else{ - int x=0; + int_least16_t x=0; * this->This() >> x; t = boost::archive::class_id_type(x); } diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_binary_iprimitive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_binary_iprimitive.hpp index 40f45d9c2f..665d3e81e1 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_binary_iprimitive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_binary_iprimitive.hpp @@ -50,7 +50,7 @@ namespace std{ //#include #include -#include +#include #include #include diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_binary_oprimitive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_binary_oprimitive.hpp index 4b7f454b25..6dc770c60e 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_binary_oprimitive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_binary_oprimitive.hpp @@ -45,7 +45,7 @@ namespace std{ //#include #include -#include +#include #include #include diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_text_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_text_iarchive.hpp index 936e3ecd13..48a646cc1f 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_text_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_text_iarchive.hpp @@ -21,7 +21,7 @@ // // note the fact that on libraries without wide characters, ostream is // is not a specialization of basic_ostream which in fact is not defined -// in such cases. So we can't use basic_ostream but rather +// in such cases. So we can't use basic_istream but rather // use two template parameters #include @@ -81,7 +81,7 @@ protected: basic_text_iarchive(unsigned int flags) : detail::common_iarchive(flags) {} - ~basic_text_iarchive() override{} + ~basic_text_iarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_text_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_text_oarchive.hpp index 454a20d07a..6f7f8fb167 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_text_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_text_oarchive.hpp @@ -104,7 +104,7 @@ protected: detail::common_oarchive(flags), delimiter(none) {} - ~basic_text_oarchive() override{} + ~basic_text_oarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_text_oprimitive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_text_oprimitive.hpp index c9f8c59160..45f09358ec 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_text_oprimitive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_text_oprimitive.hpp @@ -175,8 +175,6 @@ protected: template void save(const T & t){ - boost::io::ios_flags_saver fs(os); - boost::io::ios_precision_saver ps(os); typename is_float::type tf; save_impl(t, tf); } diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_xml_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_xml_iarchive.hpp index 5f46f3c871..e9f7482f74 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_xml_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_xml_iarchive.hpp @@ -89,8 +89,7 @@ protected: // leaving the archive in an undetermined state BOOST_ARCHIVE_OR_WARCHIVE_DECL void load_override(class_id_type & t); - BOOST_ARCHIVE_OR_WARCHIVE_DECL void - load_override(class_id_optional_type & /* t */){} + void load_override(class_id_optional_type & /* t */){} BOOST_ARCHIVE_OR_WARCHIVE_DECL void load_override(object_id_type & t); BOOST_ARCHIVE_OR_WARCHIVE_DECL void @@ -105,7 +104,7 @@ protected: BOOST_ARCHIVE_OR_WARCHIVE_DECL basic_xml_iarchive(unsigned int flags); BOOST_ARCHIVE_OR_WARCHIVE_DECL - ~basic_xml_iarchive() override; + ~basic_xml_iarchive(); }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/basic_xml_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/basic_xml_oarchive.hpp index 740a7ecfee..107fca4ec6 100644 --- a/bundled/boost-1.62.0/include/boost/archive/basic_xml_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/basic_xml_oarchive.hpp @@ -123,7 +123,7 @@ protected: BOOST_ARCHIVE_OR_WARCHIVE_DECL basic_xml_oarchive(unsigned int flags); BOOST_ARCHIVE_OR_WARCHIVE_DECL - ~basic_xml_oarchive() override; + ~basic_xml_oarchive(); }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/codecvt_null.hpp b/bundled/boost-1.62.0/include/boost/archive/codecvt_null.hpp index f27e1b467b..3b39c8edef 100644 --- a/bundled/boost-1.62.0/include/boost/archive/codecvt_null.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/codecvt_null.hpp @@ -18,8 +18,11 @@ #include #include // NULL, size_t +#ifndef BOOST_NO_CWCHAR #include // for mbstate_t +#endif #include +#include #include #include // must be the last header @@ -49,20 +52,21 @@ class codecvt_null; template<> class codecvt_null : public std::codecvt { - virtual bool do_always_noconv() const throw() override { + virtual bool do_always_noconv() const throw() { return true; } public: explicit codecvt_null(std::size_t no_locale_manage = 0) : std::codecvt(no_locale_manage) {} - virtual ~codecvt_null() override{}; + virtual ~codecvt_null(){}; }; template<> -class BOOST_SYMBOL_VISIBLE codecvt_null : public std::codecvt +class BOOST_WARCHIVE_DECL codecvt_null : + public std::codecvt { - virtual BOOST_WARCHIVE_DECL std::codecvt_base::result + virtual std::codecvt_base::result do_out( std::mbstate_t & state, const wchar_t * first1, @@ -71,8 +75,8 @@ class BOOST_SYMBOL_VISIBLE codecvt_null : public std::codecvt : public std::codecvt(no_locale_manage) {} - virtual ~codecvt_null() override{}; + //virtual ~codecvt_null(){}; }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/detail/basic_archive_impl.hpp b/bundled/boost-1.62.0/include/boost/archive/detail/basic_archive_impl.hpp deleted file mode 100644 index b84a509837..0000000000 --- a/bundled/boost-1.62.0/include/boost/archive/detail/basic_archive_impl.hpp +++ /dev/null @@ -1,48 +0,0 @@ -#ifndef BOOST_ARCHIVE_DETAIL_BASIC_ARCHIVE_IMPL_HPP -#define BOOST_ARCHIVE_DETAIL_BASIC_ARCHIVE_IMPL_HPP - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) -# pragma once -#endif - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// basic_archive_impl.hpp: - -// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -// can't use this - much as I'd like to as borland doesn't support it -// #include - -#include - -#include // must be the last header - -namespace boost { -namespace serialization { - class extended_type_info; -} // namespace serialization - -namespace archive { -namespace detail { - -////////////////////////////////////////////////////////////////////// -class BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) basic_archive_impl -{ -}; - -} // namespace detail -} // namespace serialization -} // namespace boost - -#include // pops abi_suffix.hpp pragmas - -#endif //BOOST_ARCHIVE_DETAIL_BASIC_ARCHIVE_IMPL_HPP - - - diff --git a/bundled/boost-1.62.0/include/boost/archive/detail/basic_config.hpp b/bundled/boost-1.62.0/include/boost/archive/detail/basic_config.hpp deleted file mode 100644 index 4bd2723eb2..0000000000 --- a/bundled/boost-1.62.0/include/boost/archive/detail/basic_config.hpp +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef BOOST_ARCHIVE_DETAIL_BASIC_CONFIG_HPP -#define BOOST_ARCHIVE_DETAIL_BASIC_CONFIG_HPP - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) -# pragma once -#endif - -// basic_config.hpp ---------------------------------------------// - -// (c) Copyright Robert Ramey 2004 -// Use, modification, and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See library home page at http://www.boost.org/libs/serialization - -//----------------------------------------------------------------------------// - -// This header implements separate compilation features as described in -// http://www.boost.org/more/separate_compilation.html - -#include - -#ifdef BOOST_HAS_DECLSPEC // defined in config system -// we need to import/export our code only if the user has specifically -// asked for it by defining either BOOST_ALL_DYN_LINK if they want all boost -// libraries to be dynamically linked, or BOOST_ARCHIVE_DYN_LINK -// if they want just this one to be dynamically linked: -#if defined(BOOST_ALL_DYN_LINK) || defined(BOOST_ARCHIVE_DYN_LINK) -// export if this is our own source, otherwise import: -#ifdef BOOST_ARCHIVE_SOURCE -# define BOOST_ARCHIVE_DECL __declspec(dllexport) -#else -# define BOOST_ARCHIVE_DECL __declspec(dllimport) -#endif // BOOST_ARCHIVE_SOURCE -#endif // DYN_LINK -#endif // BOOST_HAS_DECLSPEC -// -// if BOOST_ARCHIVE_DECL isn't defined yet define it now: -#ifndef BOOST_ARCHIVE_DECL -#define BOOST_ARCHIVE_DECL -#endif - -#endif // BOOST_ARCHIVE_DETAIL_BASIC_CONFIG_HPP diff --git a/bundled/boost-1.62.0/include/boost/archive/detail/common_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/detail/common_iarchive.hpp index 43e86e74eb..4176a8a5ef 100644 --- a/bundled/boost-1.62.0/include/boost/archive/detail/common_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/detail/common_iarchive.hpp @@ -35,28 +35,29 @@ class extended_type_info; // note: referred to as Curiously Recurring Template Patter (CRTP) template -class BOOST_SYMBOL_VISIBLE common_iarchive : +class BOOST_SYMBOL_VISIBLE common_iarchive : public basic_iarchive, public interface_iarchive { friend class interface_iarchive; + friend class basic_iarchive; private: - virtual void vload(version_type & t) override{ + virtual void vload(version_type & t){ * this->This() >> t; } - virtual void vload(object_id_type & t) override{ + virtual void vload(object_id_type & t){ * this->This() >> t; } - virtual void vload(class_id_type & t) override{ + virtual void vload(class_id_type & t){ * this->This() >> t; } - virtual void vload(class_id_optional_type & t) override{ + virtual void vload(class_id_optional_type & t){ * this->This() >> t; } - virtual void vload(tracking_type & t) override{ + virtual void vload(tracking_type & t){ * this->This() >> t; } - virtual void vload(class_name_type &s) override{ + virtual void vload(class_name_type &s){ * this->This() >> s; } protected: diff --git a/bundled/boost-1.62.0/include/boost/archive/detail/common_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/detail/common_oarchive.hpp index 5df48e91c8..f7428637e4 100644 --- a/bundled/boost-1.62.0/include/boost/archive/detail/common_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/detail/common_oarchive.hpp @@ -38,29 +38,30 @@ class BOOST_SYMBOL_VISIBLE common_oarchive : public interface_oarchive { friend class interface_oarchive; + friend class basic_oarchive; private: - virtual void vsave(const version_type t) override{ + virtual void vsave(const version_type t){ * this->This() << t; } - virtual void vsave(const object_id_type t) override{ + virtual void vsave(const object_id_type t){ * this->This() << t; } - virtual void vsave(const object_reference_type t) override{ + virtual void vsave(const object_reference_type t){ * this->This() << t; } - virtual void vsave(const class_id_type t) override{ + virtual void vsave(const class_id_type t){ * this->This() << t; } - virtual void vsave(const class_id_reference_type t) override{ + virtual void vsave(const class_id_reference_type t){ * this->This() << t; } - virtual void vsave(const class_id_optional_type t) override{ + virtual void vsave(const class_id_optional_type t){ * this->This() << t; } - virtual void vsave(const class_name_type & t) override{ + virtual void vsave(const class_name_type & t){ * this->This() << t; } - virtual void vsave(const tracking_type t) override{ + virtual void vsave(const tracking_type t){ * this->This() << t; } protected: diff --git a/bundled/boost-1.62.0/include/boost/archive/detail/iserializer.hpp b/bundled/boost-1.62.0/include/boost/archive/detail/iserializer.hpp index f0bf622af6..98cd6a17f2 100644 --- a/bundled/boost-1.62.0/include/boost/archive/detail/iserializer.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/detail/iserializer.hpp @@ -57,7 +57,9 @@ namespace std{ #include -#if BOOST_WORKAROUND(__IBMCPP__, < 1210) || (defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590)) +#if !defined(BOOST_MSVC) && \ + (BOOST_WORKAROUND(__IBMCPP__, < 1210) || \ + defined(__SUNPRO_CC) && (__SUNPRO_CC < 0x590)) #define DONT_USE_HAS_NEW_OPERATOR 1 #else #define DONT_USE_HAS_NEW_OPERATOR 0 @@ -74,10 +76,10 @@ namespace std{ #include #include #include -#include #include #include #include +#include // the following is need only for dynamic cast of polymorphic pointers #include @@ -87,6 +89,8 @@ namespace std{ #include #include +#include + namespace boost { namespace serialization { @@ -116,11 +120,10 @@ template class iserializer : public basic_iserializer { private: - virtual void destroy(/*const*/ void *address) const override { + virtual void destroy(/*const*/ void *address) const { boost::serialization::access::destroy(static_cast(address)); } -protected: - // protected constructor since it's always created by singleton +public: explicit iserializer() : basic_iserializer( boost::serialization::singleton< @@ -129,30 +132,29 @@ protected: >::get_const_instance() ) {} -public: virtual BOOST_DLLEXPORT void load_object_data( basic_iarchive & ar, void *x, const unsigned int file_version - ) const override BOOST_USED; - virtual bool class_info() const override { + ) const BOOST_USED; + virtual bool class_info() const { return boost::serialization::implementation_level< T >::value >= boost::serialization::object_class_info; } - virtual bool tracking(const unsigned int /* flags */) const override { + virtual bool tracking(const unsigned int /* flags */) const { return boost::serialization::tracking_level< T >::value == boost::serialization::track_always || ( boost::serialization::tracking_level< T >::value == boost::serialization::track_selectively && serialized_as_pointer()); } - virtual version_type version() const override { + virtual version_type version() const { return version_type(::boost::serialization::version< T >::value); } - virtual bool is_polymorphic() const override { + virtual bool is_polymorphic() const { return boost::is_polymorphic< T >::value; } - virtual ~iserializer() override{}; + virtual ~iserializer(){}; }; #ifdef BOOST_MSVC @@ -231,7 +233,7 @@ struct heap_allocation { // that the class might have class specific new with NO // class specific delete at all. Patches (compatible with // C++03) welcome! - delete t; + (operator delete)(t); } }; struct doesnt_have_new_operator { @@ -240,7 +242,7 @@ struct heap_allocation { } static void invoke_delete(T * t) { // Note: I'm reliance upon automatic conversion from T * to void * here - delete t; + (operator delete)(t); } }; static T * invoke_new() { @@ -287,13 +289,13 @@ class pointer_iserializer : public basic_pointer_iserializer { private: - virtual void * heap_allocation() const override { + virtual void * heap_allocation() const { detail::heap_allocation h; T * t = h.get(); h.release(); return t; } - virtual const basic_iserializer & get_basic_serializer() const override { + virtual const basic_iserializer & get_basic_serializer() const { return boost::serialization::singleton< iserializer >::get_const_instance(); @@ -302,11 +304,11 @@ private: basic_iarchive & ar, void * x, const unsigned int file_version - ) const override BOOST_USED; -protected: + ) const BOOST_USED; +public: // this should alway be a singleton so make the constructor protected pointer_iserializer(); - ~pointer_iserializer() override; + ~pointer_iserializer(); }; #ifdef BOOST_MSVC @@ -403,7 +405,7 @@ struct load_non_pointer_type { struct load_standard { template static void invoke(Archive &ar, const T & t){ - void * x = & const_cast(t); + void * x = boost::addressof(const_cast(t)); ar.load_object( x, boost::serialization::singleton< @@ -585,7 +587,14 @@ struct load_array_type { boost::archive::archive_exception::array_size_too_short ) ); - ar >> serialization::make_array(static_cast(&t[0]),count); + // explict template arguments to pass intel C++ compiler + ar >> serialization::make_array< + value_type, + boost::serialization::collection_size_type + >( + static_cast(&t[0]), + count + ); } }; @@ -595,7 +604,7 @@ template inline void load(Archive & ar, T &t){ // if this assertion trips. It means we're trying to load a // const object with a compiler that doesn't have correct - // funtion template ordering. On other compilers, this is + // function template ordering. On other compilers, this is // handled below. detail::check_const_loading< T >(); typedef diff --git a/bundled/boost-1.62.0/include/boost/archive/detail/oserializer.hpp b/bundled/boost-1.62.0/include/boost/archive/detail/oserializer.hpp index 57cbb4035b..612e1f2cb1 100644 --- a/bundled/boost-1.62.0/include/boost/archive/detail/oserializer.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/detail/oserializer.hpp @@ -26,6 +26,7 @@ #include // NULL #include + #include #include @@ -56,8 +57,9 @@ #include #include #include -#include #include +#include + #include #include @@ -67,6 +69,8 @@ #include #include +#include + namespace boost { namespace serialization { @@ -115,23 +119,23 @@ public: virtual BOOST_DLLEXPORT void save_object_data( basic_oarchive & ar, const void *x - ) const override BOOST_USED; - virtual bool class_info() const override { + ) const BOOST_USED; + virtual bool class_info() const { return boost::serialization::implementation_level< T >::value >= boost::serialization::object_class_info; } - virtual bool tracking(const unsigned int /* flags */) const override { + virtual bool tracking(const unsigned int /* flags */) const { return boost::serialization::tracking_level< T >::value == boost::serialization::track_always || (boost::serialization::tracking_level< T >::value == boost::serialization::track_selectively && serialized_as_pointer()); } - virtual version_type version() const override { + virtual version_type version() const { return version_type(::boost::serialization::version< T >::value); } - virtual bool is_polymorphic() const override { + virtual bool is_polymorphic() const { return boost::is_polymorphic< T >::value; } - virtual ~oserializer() override{} + virtual ~oserializer(){} }; #ifdef BOOST_MSVC @@ -164,7 +168,7 @@ class pointer_oserializer : { private: const basic_oserializer & - get_basic_serializer() const override { + get_basic_serializer() const { return boost::serialization::singleton< oserializer >::get_const_instance(); @@ -172,10 +176,10 @@ private: virtual BOOST_DLLEXPORT void save_object_ptr( basic_oarchive & ar, const void * x - ) const override BOOST_USED; + ) const BOOST_USED; public: pointer_oserializer(); - ~pointer_oserializer() override; + ~pointer_oserializer(); }; #ifdef BOOST_MSVC @@ -252,7 +256,7 @@ struct save_non_pointer_type { template static void invoke(Archive &ar, const T & t){ ar.save_object( - & t, + boost::addressof(t), boost::serialization::singleton< oserializer >::get_const_instance() @@ -260,6 +264,8 @@ struct save_non_pointer_type { } }; + + // adds class information to the archive. This includes // serialization level and class version struct save_conditional { @@ -337,7 +343,7 @@ struct save_pointer_type { }; template - static const basic_pointer_oserializer * register_type(Archive &ar, T & /*t*/){ + static const basic_pointer_oserializer * register_type(Archive &ar, T* const /*t*/){ // there should never be any need to save an abstract polymorphic // class pointer. Inhibiting code generation for this // permits abstract base classes to be used - note: exception @@ -404,7 +410,7 @@ struct save_pointer_type { // if its not a pointer to a more derived type const void *vp = static_cast(&t); if(*this_type == *true_type){ - const basic_pointer_oserializer * bpos = register_type(ar, t); + const basic_pointer_oserializer * bpos = register_type(ar, &t); ar.save_pointer(vp, bpos); return; } @@ -463,7 +469,7 @@ struct save_pointer_type { template static void invoke(Archive &ar, const TPtr t){ - register_type(ar, * t); + register_type(ar, t); if(NULL == t){ basic_oarchive & boa = boost::serialization::smart_cast_reference(ar); @@ -501,7 +507,14 @@ struct save_array_type ); boost::serialization::collection_size_type count(c); ar << BOOST_SERIALIZATION_NVP(count); - ar << serialization::make_array(static_cast(&t[0]),count); + // explict template arguments to pass intel C++ compiler + ar << serialization::make_array< + const value_type, + boost::serialization::collection_size_type + >( + static_cast(&t[0]), + count + ); } }; diff --git a/bundled/boost-1.62.0/include/boost/archive/detail/utf8_codecvt_facet.hpp b/bundled/boost-1.62.0/include/boost/archive/detail/utf8_codecvt_facet.hpp index dfbec6bdfd..00b2b4193d 100644 --- a/bundled/boost-1.62.0/include/boost/archive/detail/utf8_codecvt_facet.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/detail/utf8_codecvt_facet.hpp @@ -9,26 +9,21 @@ #include -// std::codecvt_utf8 doesn't seem to work for msvc -// versions prior to MSVC 14.0 +#ifdef BOOST_NO_STD_WSTREAMBUF +#error "wide char i/o not supported on this platform" +#endif -#if defined(_MSC_VER) && _MSC_VER < 1900 \ -|| defined( BOOST_NO_CXX11_HDR_CODECVT ) - #include - #define BOOST_UTF8_BEGIN_NAMESPACE \ - namespace boost { namespace archive { namespace detail { - #define BOOST_UTF8_DECL BOOST_ARCHIVE_DECL - #define BOOST_UTF8_END_NAMESPACE }}} +// use boost's utf8 codecvt facet +#include +#define BOOST_UTF8_BEGIN_NAMESPACE \ + namespace boost { namespace archive { namespace detail { +#define BOOST_UTF8_DECL BOOST_ARCHIVE_DECL +#define BOOST_UTF8_END_NAMESPACE }}} - #include +#include + +#undef BOOST_UTF8_END_NAMESPACE +#undef BOOST_UTF8_DECL +#undef BOOST_UTF8_BEGIN_NAMESPACE - #undef BOOST_UTF8_END_NAMESPACE - #undef BOOST_UTF8_DECL - #undef BOOST_UTF8_BEGIN_NAMESPACE -#else - #include - namespace boost { namespace archive { namespace detail { - typedef std::codecvt_utf8 utf8_codecvt_facet; - } } } -#endif // BOOST_NO_CXX11_HDR_CODECVT #endif // BOOST_ARCHIVE_DETAIL_UTF8_CODECVT_FACET_HPP diff --git a/bundled/boost-1.62.0/include/boost/archive/impl/archive_serializer_map.ipp b/bundled/boost-1.62.0/include/boost/archive/impl/archive_serializer_map.ipp index 8dabf0d08f..98e058ddec 100644 --- a/bundled/boost-1.62.0/include/boost/archive/impl/archive_serializer_map.ipp +++ b/bundled/boost-1.62.0/include/boost/archive/impl/archive_serializer_map.ipp @@ -47,6 +47,10 @@ archive_serializer_map::insert(const basic_serializer * bs){ template BOOST_ARCHIVE_OR_WARCHIVE_DECL void archive_serializer_map::erase(const basic_serializer * bs){ + // note: previously this conditional was a runtime assertion with + // BOOST_ASSERT. We've changed it because we've discovered that at + // least one platform is not guaranteed to destroy singletons in + // reverse order of distruction. if(boost::serialization::singleton< extra_detail::map >::is_destroyed()) diff --git a/bundled/boost-1.62.0/include/boost/archive/impl/basic_binary_iprimitive.ipp b/bundled/boost-1.62.0/include/boost/archive/impl/basic_binary_iprimitive.ipp index 7082b003e7..e2d051080e 100644 --- a/bundled/boost-1.62.0/include/boost/archive/impl/basic_binary_iprimitive.ipp +++ b/bundled/boost-1.62.0/include/boost/archive/impl/basic_binary_iprimitive.ipp @@ -84,6 +84,8 @@ basic_binary_iprimitive::init() ); } +#ifndef BOOST_NO_CWCHAR +#ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_ARCHIVE_OR_WARCHIVE_DECL void basic_binary_iprimitive::load(wchar_t * ws) @@ -93,6 +95,8 @@ basic_binary_iprimitive::load(wchar_t * ws) load_binary(ws, l * sizeof(wchar_t) / sizeof(char)); ws[l] = L'\0'; } +#endif +#endif template BOOST_ARCHIVE_OR_WARCHIVE_DECL void @@ -110,7 +114,6 @@ basic_binary_iprimitive::load(std::string & s) load_binary(&(*s.begin()), l); } -#ifndef BOOST_NO_CWCHAR template BOOST_ARCHIVE_OR_WARCHIVE_DECL void basic_binary_iprimitive::load(char * s) @@ -120,7 +123,6 @@ basic_binary_iprimitive::load(char * s) load_binary(s, l); s[l] = '\0'; } -#endif #ifndef BOOST_NO_STD_WSTRING template diff --git a/bundled/boost-1.62.0/include/boost/archive/impl/basic_binary_oprimitive.ipp b/bundled/boost-1.62.0/include/boost/archive/impl/basic_binary_oprimitive.ipp index 130831e4fb..7b042173a4 100644 --- a/bundled/boost-1.62.0/include/boost/archive/impl/basic_binary_oprimitive.ipp +++ b/bundled/boost-1.62.0/include/boost/archive/impl/basic_binary_oprimitive.ipp @@ -71,6 +71,7 @@ basic_binary_oprimitive::save(const std::string &s) } #ifndef BOOST_NO_CWCHAR +#ifndef BOOST_NO_INTRINSIC_WCHAR_T template BOOST_ARCHIVE_OR_WARCHIVE_DECL void basic_binary_oprimitive::save(const wchar_t * ws) @@ -91,6 +92,7 @@ basic_binary_oprimitive::save(const std::wstring &ws) save_binary(ws.data(), l * sizeof(wchar_t) / sizeof(char)); } #endif +#endif // BOOST_NO_CWCHAR template BOOST_ARCHIVE_OR_WARCHIVE_DECL diff --git a/bundled/boost-1.62.0/include/boost/archive/impl/basic_xml_grammar.hpp b/bundled/boost-1.62.0/include/boost/archive/impl/basic_xml_grammar.hpp index 6d4e4683f6..cc88d4fd82 100644 --- a/bundled/boost-1.62.0/include/boost/archive/impl/basic_xml_grammar.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/impl/basic_xml_grammar.hpp @@ -64,7 +64,7 @@ namespace archive { // XML grammar parsing template -class basic_xml_grammar { +class BOOST_SYMBOL_VISIBLE basic_xml_grammar { public: // The following is not necessary according to DR45, but at least // one compiler (Compaq C++ 6.5 in strict_ansi mode) chokes otherwise. diff --git a/bundled/boost-1.62.0/include/boost/archive/impl/text_wiarchive_impl.ipp b/bundled/boost-1.62.0/include/boost/archive/impl/text_wiarchive_impl.ipp index 12af2b9f12..e85625ac32 100644 --- a/bundled/boost-1.62.0/include/boost/archive/impl/text_wiarchive_impl.ipp +++ b/bundled/boost-1.62.0/include/boost/archive/impl/text_wiarchive_impl.ipp @@ -56,7 +56,7 @@ text_wiarchive_impl::load(std::string &s) s.resize(0); s.reserve(size); while(size-- > 0){ - int x = is.narrow(is.get(), '\0'); + char x = is.narrow(is.get(), '\0'); s += x; } } diff --git a/bundled/boost-1.62.0/include/boost/archive/impl/xml_wiarchive_impl.ipp b/bundled/boost-1.62.0/include/boost/archive/impl/xml_wiarchive_impl.ipp index ee66c1263e..f572b76220 100644 --- a/bundled/boost-1.62.0/include/boost/archive/impl/xml_wiarchive_impl.ipp +++ b/bundled/boost-1.62.0/include/boost/archive/impl/xml_wiarchive_impl.ipp @@ -161,13 +161,13 @@ xml_wiarchive_impl::xml_wiarchive_impl( gimpl(new xml_wgrammar()) { if(0 == (flags & no_codecvt)){ - std::locale l = std::locale( + archive_locale = std::locale( is_.getloc(), new boost::archive::detail::utf8_codecvt_facet ); // libstdc++ crashes without this is_.sync(); - is_.imbue(l); + is_.imbue(archive_locale); } if(0 == (flags & no_header)) init(); diff --git a/bundled/boost-1.62.0/include/boost/archive/impl/xml_woarchive_impl.ipp b/bundled/boost-1.62.0/include/boost/archive/impl/xml_woarchive_impl.ipp index 58f92c9d92..630898b86a 100644 --- a/bundled/boost-1.62.0/include/boost/archive/impl/xml_woarchive_impl.ipp +++ b/bundled/boost-1.62.0/include/boost/archive/impl/xml_woarchive_impl.ipp @@ -17,7 +17,9 @@ #include // strlen #include // mbtowc +#ifndef BOOST_NO_CWCHAR #include // wcslen +#endif #include #if defined(BOOST_NO_STDC_NAMESPACE) @@ -101,7 +103,6 @@ xml_woarchive_impl::save(const char * s){ template BOOST_WARCHIVE_DECL void xml_woarchive_impl::save(const wchar_t * ws){ - os << ws; typedef iterators::xml_escape xmbtows; std::copy( xmbtows(ws), @@ -124,12 +125,12 @@ xml_woarchive_impl::xml_woarchive_impl( basic_xml_oarchive(flags) { if(0 == (flags & no_codecvt)){ - std::locale l = std::locale( + archive_locale = std::locale( os_.getloc(), new boost::archive::detail::utf8_codecvt_facet ); os_.flush(); - os_.imbue(l); + os_.imbue(archive_locale); } if(0 == (flags & no_header)) this->init(); @@ -141,7 +142,7 @@ xml_woarchive_impl::~xml_woarchive_impl(){ if(std::uncaught_exception()) return; if(0 == (this->get_flags() & no_header)){ - save(L"\n"); + os << L""; } } diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/base64_from_binary.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/base64_from_binary.hpp index 00c4e10c10..ee84994439 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/base64_from_binary.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/base64_from_binary.hpp @@ -41,7 +41,7 @@ template struct from_6_bit { typedef CharType result_type; CharType operator()(CharType t) const{ - const char * lookup_table = + static const char * lookup_table = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789" diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/binary_from_base64.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/binary_from_base64.hpp index 2eb7828251..89b8f889da 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/binary_from_base64.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/binary_from_base64.hpp @@ -37,7 +37,7 @@ template struct to_6_bit { typedef CharType result_type; CharType operator()(CharType t) const{ - const signed char lookup_table[] = { + static const signed char lookup_table[] = { -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63, diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/dataflow_exception.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/dataflow_exception.hpp index 1feed10059..e3e18605b3 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/dataflow_exception.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/dataflow_exception.hpp @@ -46,7 +46,7 @@ public: dataflow_exception(exception_code c = other_exception) : code(c) {} - virtual const char *what( ) const throw( ) override + virtual const char *what( ) const throw( ) { const char *msg = "unknown exception code"; switch(code){ diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/escape.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/escape.hpp index a1fee91420..103b31e0fe 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/escape.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/escape.hpp @@ -102,7 +102,8 @@ public: super_t(base), m_bnext(NULL), m_bend(NULL), - m_full(false) + m_full(false), + m_current_value(0) { } }; diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/head_iterator.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/head_iterator.hpp deleted file mode 100644 index 6ad7d6b32b..0000000000 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/head_iterator.hpp +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP -#define BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) -# pragma once -#endif - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// head_iterator.hpp - -// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -#include -#include - -namespace boost { -namespace archive { -namespace iterators { - -template -class head_iterator - : public boost::iterator_adaptor< - head_iterator, - Base, - use_default, - single_pass_traversal_tag - > -{ -private: - friend class iterator_core_access; - typedef boost::iterator_adaptor< - head_iterator, - Base, - use_default, - single_pass_traversal_tag - > super_t; - - typedef head_iterator this_t; - typedef super_t::value_type value_type; - typedef super_t::reference reference_type; - - reference_type dereference_impl(){ - if(! m_end){ - while(! m_predicate(* this->base_reference())) - ++ this->base_reference(); - m_end = true; - } - return * this->base_reference(); - } - - reference_type dereference() const { - return const_cast(this)->dereference_impl(); - } - - void increment(){ - ++base_reference(); - } - Predicate m_predicate; - bool m_end; -public: - template - head_iterator(Predicate f, T start) : - super_t(Base(start)), - m_predicate(f), - m_end(false) - {} - -}; - -} // namespace iterators -} // namespace archive -} // namespace boost - -#endif // BOOST_ARCHIVE_ITERATORS_HEAD_ITERATOR_HPP diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/istream_iterator.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/istream_iterator.hpp index 797602c974..a187f605e6 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/istream_iterator.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/istream_iterator.hpp @@ -56,7 +56,7 @@ class istream_iterator : //Access the value referred to Elem dereference() const { - return m_istream->peek(); + return static_cast(m_istream->peek()); } void increment(){ @@ -69,22 +69,20 @@ class istream_iterator : Elem m_current_value; public: istream_iterator(istream_type & is) : - m_istream(& is), - m_current_value() + m_istream(& is) { //increment(); } istream_iterator() : m_istream(NULL), - m_current_value() + m_current_value(NULL) {} istream_iterator(const istream_iterator & rhs) : m_istream(rhs.m_istream), m_current_value(rhs.m_current_value) {} - }; } // namespace iterators diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/mb_from_wchar.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/mb_from_wchar.hpp index d5110de28a..eb30480cc0 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/mb_from_wchar.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/mb_from_wchar.hpp @@ -18,14 +18,16 @@ #include #include // size_t +#ifndef BOOST_NO_CWCHAR #include // mbstate_t - +#endif #include #if defined(BOOST_NO_STDC_NAMESPACE) namespace std{ using ::mbstate_t; } // namespace std #endif + #include #include @@ -84,12 +86,15 @@ class mb_from_wchar wchar_t value = * this->base_reference(); const wchar_t *wend; char *bend; - std::codecvt_base::result r = m_codecvt_facet.out( - m_mbs, - & value, & value + 1, wend, - m_buffer, m_buffer + sizeof(m_buffer), bend + BOOST_VERIFY( + m_codecvt_facet.out( + m_mbs, + & value, & value + 1, wend, + m_buffer, m_buffer + sizeof(m_buffer), bend + ) + == + std::codecvt_base::ok ); - BOOST_ASSERT(std::codecvt_base::ok == r); m_bnext = 0; m_bend = bend - m_buffer; } diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/transform_width.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/transform_width.hpp index cd1dbd2264..09c050a927 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/transform_width.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/transform_width.hpp @@ -111,6 +111,7 @@ public: transform_width(T start) : super_t(Base(static_cast< T >(start))), m_buffer_out_full(false), + m_buffer_out(0), // To disable GCC warning, but not truly necessary //(m_buffer_in will be initialized later before being //used because m_remaining_bits == 0) @@ -118,6 +119,15 @@ public: m_remaining_bits(0), m_end_of_sequence(false) {} + // intel 7.1 doesn't like default copy constructor + transform_width(const transform_width & rhs) : + super_t(rhs.base_reference()), + m_buffer_out_full(rhs.m_buffer_out_full), + m_buffer_out(rhs.m_buffer_out), + m_buffer_in(rhs.m_buffer_in), + m_remaining_bits(rhs.m_remaining_bits), + m_end_of_sequence(false) + {} }; template< diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/wchar_from_mb.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/wchar_from_mb.hpp index 52a44bdc79..2af8f6401f 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/wchar_from_mb.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/wchar_from_mb.hpp @@ -19,7 +19,9 @@ #include #include #include // size_t +#ifndef BOOST_NO_CWCHAR #include // mbstate_t +#endif #include // copy #include diff --git a/bundled/boost-1.62.0/include/boost/archive/iterators/xml_unescape.hpp b/bundled/boost-1.62.0/include/boost/archive/iterators/xml_unescape.hpp index 6997740456..9d3c3af996 100644 --- a/bundled/boost-1.62.0/include/boost/archive/iterators/xml_unescape.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/iterators/xml_unescape.hpp @@ -16,6 +16,8 @@ // See http://www.boost.org for updates, documentation, and revision history. +#include +#include #include #include @@ -42,11 +44,11 @@ class xml_unescape return unescape, Base>::dereference(); } public: - // workaround msvc 7.1 ICU crash - #if defined(BOOST_MSVC) + // msvc versions prior to 14.0 crash with and ICE + #if BOOST_WORKAROUND(BOOST_MSVC, < 1900) typedef int value_type; #else - typedef typename this_t::value_type value_type; + typedef typename super_t::value_type value_type; #endif void drain_residue(const char *literal); diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_binary_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_binary_iarchive.hpp index 4a898a8ad1..20559bd8fb 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_binary_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_binary_iarchive.hpp @@ -28,7 +28,7 @@ namespace boost { namespace archive { -class polymorphic_binary_iarchive : +class BOOST_SYMBOL_VISIBLE polymorphic_binary_iarchive : public detail::polymorphic_iarchive_route { public: diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_binary_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_binary_oarchive.hpp index 931b243feb..96febd7a58 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_binary_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_binary_oarchive.hpp @@ -23,13 +23,15 @@ namespace boost { namespace archive { -typedef detail::polymorphic_oarchive_route< - binary_oarchive_impl< - binary_oarchive, - std::ostream::char_type, - std::ostream::traits_type - > - > polymorphic_binary_oarchive; +class BOOST_SYMBOL_VISIBLE polymorphic_binary_oarchive : + public detail::polymorphic_oarchive_route +{ +public: + polymorphic_binary_oarchive(std::ostream & os, unsigned int flags = 0) : + detail::polymorphic_oarchive_route(os, flags) + {} + ~polymorphic_binary_oarchive(){} +}; } // namespace archive } // namespace boost diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_iarchive.hpp index ae63bd3d99..d3c59a9f0f 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_iarchive.hpp @@ -156,7 +156,7 @@ class BOOST_SYMBOL_VISIBLE polymorphic_iarchive : public polymorphic_iarchive_impl { public: - virtual ~polymorphic_iarchive() override{}; + virtual ~polymorphic_iarchive(){}; }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_oarchive.hpp index 0ad35c78af..edac4edb1e 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_oarchive.hpp @@ -140,7 +140,7 @@ class BOOST_SYMBOL_VISIBLE polymorphic_oarchive : public polymorphic_oarchive_impl { public: - virtual ~polymorphic_oarchive() override{}; + virtual ~polymorphic_oarchive(){}; }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_iarchive.hpp index 7bef292786..3e59bfe6bd 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_iarchive.hpp @@ -28,7 +28,7 @@ namespace boost { namespace archive { -class polymorphic_text_iarchive : +class BOOST_SYMBOL_VISIBLE polymorphic_text_iarchive : public detail::polymorphic_iarchive_route { public: diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_oarchive.hpp index 457aad9fd7..233d37c7b5 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_oarchive.hpp @@ -23,9 +23,15 @@ namespace boost { namespace archive { -typedef detail::polymorphic_oarchive_route< - text_oarchive_impl -> polymorphic_text_oarchive; +class BOOST_SYMBOL_VISIBLE polymorphic_text_oarchive : + public detail::polymorphic_oarchive_route +{ +public: + polymorphic_text_oarchive(std::ostream & os, unsigned int flags = 0) : + detail::polymorphic_oarchive_route(os, flags) + {} + ~polymorphic_text_oarchive(){} +}; } // namespace archive } // namespace boost diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_wiarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_wiarchive.hpp index 8466f05d6a..96afe0eba6 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_wiarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_wiarchive.hpp @@ -32,7 +32,7 @@ namespace boost { namespace archive { -class polymorphic_text_wiarchive : +class BOOST_SYMBOL_VISIBLE polymorphic_text_wiarchive : public detail::polymorphic_iarchive_route { public: diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_woarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_woarchive.hpp index 295625d1bc..fa0a3aec3c 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_woarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_text_woarchive.hpp @@ -27,9 +27,15 @@ namespace boost { namespace archive { -typedef detail::polymorphic_oarchive_route< - text_woarchive_impl -> polymorphic_text_woarchive; +class BOOST_SYMBOL_VISIBLE polymorphic_text_woarchive : + public detail::polymorphic_oarchive_route +{ +public: + polymorphic_text_woarchive(std::wostream & os, unsigned int flags = 0) : + detail::polymorphic_oarchive_route(os, flags) + {} + ~polymorphic_text_woarchive(){} +}; } // namespace archive } // namespace boost diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_iarchive.hpp index 4dc3f894b3..0b17b5516e 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_iarchive.hpp @@ -28,7 +28,7 @@ namespace boost { namespace archive { -class polymorphic_xml_iarchive : +class BOOST_SYMBOL_VISIBLE polymorphic_xml_iarchive : public detail::polymorphic_iarchive_route { public: diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_oarchive.hpp index 514f9e530a..a9fc82427e 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_oarchive.hpp @@ -23,10 +23,15 @@ namespace boost { namespace archive { -typedef detail::polymorphic_oarchive_route< - xml_oarchive_impl -> polymorphic_xml_oarchive; - +class BOOST_SYMBOL_VISIBLE polymorphic_xml_oarchive : + public detail::polymorphic_oarchive_route +{ +public: + polymorphic_xml_oarchive(std::ostream & os, unsigned int flags = 0) : + detail::polymorphic_oarchive_route(os, flags) + {} + ~polymorphic_xml_oarchive(){} +}; } // namespace archive } // namespace boost diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_wiarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_wiarchive.hpp index d4ab731267..688ff4d0c0 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_wiarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_wiarchive.hpp @@ -27,7 +27,7 @@ namespace boost { namespace archive { -class polymorphic_xml_wiarchive : +class BOOST_SYMBOL_VISIBLE polymorphic_xml_wiarchive : public detail::polymorphic_iarchive_route { public: diff --git a/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_woarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_woarchive.hpp index dd8963fbb1..2606010d81 100644 --- a/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_woarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/polymorphic_xml_woarchive.hpp @@ -7,7 +7,7 @@ #endif /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// polymorphic_xml_oarchive.hpp +// polymorphic_xml_woarchive.hpp // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com . // Use, modification and distribution is subject to the Boost Software @@ -27,9 +27,15 @@ namespace boost { namespace archive { -typedef detail::polymorphic_oarchive_route< - xml_woarchive_impl -> polymorphic_xml_woarchive; +class BOOST_SYMBOL_VISIBLE polymorphic_xml_woarchive : + public detail::polymorphic_oarchive_route +{ +public: + polymorphic_xml_woarchive(std::wostream & os, unsigned int flags = 0) : + detail::polymorphic_oarchive_route(os, flags) + {} + ~polymorphic_xml_woarchive(){} +}; } // namespace archive } // namespace boost diff --git a/bundled/boost-1.62.0/include/boost/archive/shared_ptr_helper.hpp b/bundled/boost-1.62.0/include/boost/archive/shared_ptr_helper.hpp deleted file mode 100644 index 3df4605551..0000000000 --- a/bundled/boost-1.62.0/include/boost/archive/shared_ptr_helper.hpp +++ /dev/null @@ -1,219 +0,0 @@ -#ifndef BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP -#define BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP - -// MS compatible compilers support #pragma once -#if defined(_MSC_VER) -# pragma once -#endif - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// shared_ptr_helper.hpp: serialization for boost shared pointern - -// (C) Copyright 2004-2009 Robert Ramey, Martin Ecker and Takatoshi Kondo -// Use, modification and distribution is subject to the Boost Software -// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) - -// See http://www.boost.org for updates, documentation, and revision history. - -#include -#include -#include -#include // NULL - -#include -#include - -#include -#include -#include -#include - -#include -#include - -#include // must be the last headern - -namespace boost_132 { - template class shared_ptr; -} -namespace boost { - template class shared_ptr; - namespace serialization { - class extended_type_info; - template - inline void load( - Archive & ar, - boost::shared_ptr< T > &t, - const unsigned int file_version - ); - } -namespace archive{ -namespace detail { - -/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8 -// a common class for holding various types of shared pointers - -class shared_ptr_helper { - struct collection_type_compare { - bool operator()( - const shared_ptr &lhs, - const shared_ptr &rhs - )const{ - return lhs.get() < rhs.get(); - } - }; - typedef std::set< - boost::shared_ptr, - collection_type_compare - > collection_type; - typedef collection_type::const_iterator iterator_type; - // list of shared_pointers create accessable by raw pointer. This - // is used to "match up" shared pointers loaded at different - // points in the archive. Note, we delay construction until - // it is actually used since this is by default included as - // a "mix-in" even if shared_ptr isn't used. - collection_type * m_pointers; - - struct null_deleter { - void operator()(void const *) const {} - }; - - struct void_deleter { - const boost::serialization::extended_type_info * m_eti; - void_deleter(const boost::serialization::extended_type_info *eti) : - m_eti(eti) - {} - void operator()(void *vp) const { - m_eti->destroy(vp); - } - }; - -#ifdef BOOST_NO_MEMBER_TEMPLATE_FRIENDS -public: -#else - template - friend inline void boost::serialization::load( - Archive & ar, - boost::shared_ptr< T > &t, - const unsigned int file_version - ); -#endif - -// #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP - // list of loaded pointers. This is used to be sure that the pointers - // stay around long enough to be "matched" with other pointers loaded - // by the same archive. These are created with a "null_deleter" so that - // when this list is destroyed - the underlaying raw pointers are not - // destroyed. This has to be done because the pointers are also held by - // new system which is disjoint from this set. This is implemented - // by a change in load_construct_data below. It makes this file suitable - // only for loading pointers into a 1.33 or later boost system. - std::list > * m_pointers_132; -// #endif - - // returns pointer to object and an indicator whether this is a - // new entry (true) or a previous one (false) - BOOST_ARCHIVE_DECL(shared_ptr) - get_od( - const void * od, - const boost::serialization::extended_type_info * true_type, - const boost::serialization::extended_type_info * this_type - ); - - BOOST_ARCHIVE_DECL(void) - append(const boost::shared_ptr &); - - template - struct non_polymorphic { - static const boost::serialization::extended_type_info * - get_object_identifier(T &){ - return & boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME - boost::serialization::type_info_implementation< T >::type - >::get_const_instance(); - } - }; - template - struct polymorphic { - static const boost::serialization::extended_type_info * - get_object_identifier(T & t){ - return boost::serialization::singleton< - BOOST_DEDUCED_TYPENAME - boost::serialization::type_info_implementation< T >::type - >::get_const_instance().get_derived_extended_type_info(t); - } - }; -public: - template - void reset(shared_ptr< T > & s, T * t){ - if(NULL == t){ - s.reset(); - return; - } - const boost::serialization::extended_type_info * this_type - = & boost::serialization::type_info_implementation< T >::type - ::get_const_instance(); - - // get pointer to the most derived object. This is effectively - // the object identifern - typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< - is_polymorphic< T >, - mpl::identity >, - mpl::identity > - >::type type; - - const boost::serialization::extended_type_info * true_type - = type::get_object_identifier(*t); - - // note:if this exception is thrown, be sure that derived pointern - // is either registered or exported. - if(NULL == true_type) - boost::serialization::throw_exception( - archive_exception( - archive_exception::unregistered_class, - this_type->get_debug_info() - ) - ); - shared_ptr r = - get_od( - static_cast(t), - true_type, - this_type - ); - if(!r){ - s.reset(t); - const void * od = void_downcast( - *true_type, - *this_type, - static_cast(t) - ); - shared_ptr sp(s, od); - append(sp); - } - else{ - s = shared_ptr< T >( - r, - static_cast(r.get()) - ); - } - } - -// #ifdef BOOST_SERIALIZATION_SHARED_PTR_132_HPP - BOOST_ARCHIVE_DECL(void) - append(const boost_132::shared_ptr & t); -// #endif -public: - BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) - shared_ptr_helper(); - BOOST_ARCHIVE_DECL(BOOST_PP_EMPTY()) - ~shared_ptr_helper(); -}; - -} // namespace detail -} // namespace archive -} // namespace boost - -#include // pops abi_suffix.hpp pragmas - -#endif // BOOST_ARCHIVE_SHARED_PTR_HELPER_HPP diff --git a/bundled/boost-1.62.0/include/boost/archive/text_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/text_iarchive.hpp index 2c75f2acfc..d9d60adf0b 100644 --- a/bundled/boost-1.62.0/include/boost/archive/text_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/text_iarchive.hpp @@ -89,7 +89,7 @@ protected: text_iarchive_impl(std::istream & is, unsigned int flags); // don't import inline definitions! leave this as a reminder. //BOOST_ARCHIVE_DECL - ~text_iarchive_impl() override{}; + ~text_iarchive_impl(){}; }; } // namespace archive @@ -116,7 +116,7 @@ public: // note: added _ to suppress useless gcc warning text_iarchive_impl(is_, flags) {} - ~text_iarchive() override{} + ~text_iarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/text_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/text_oarchive.hpp index 9fd7993b89..e4c6d4666a 100644 --- a/bundled/boost-1.62.0/include/boost/archive/text_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/text_oarchive.hpp @@ -86,7 +86,7 @@ protected: text_oarchive_impl(std::ostream & os, unsigned int flags); // don't import inline definitions! leave this as a reminder. //BOOST_ARCHIVE_DECL - ~text_oarchive_impl() override{}; + ~text_oarchive_impl(){}; public: BOOST_ARCHIVE_DECL void save_binary(const void *address, std::size_t count); @@ -103,7 +103,7 @@ public: // note: added _ to suppress useless gcc warning text_oarchive_impl(os_, flags) {} - ~text_oarchive() override{} + ~text_oarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/text_wiarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/text_wiarchive.hpp index 2acc646702..3adf068a51 100644 --- a/bundled/boost-1.62.0/include/boost/archive/text_wiarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/text_wiarchive.hpp @@ -94,7 +94,7 @@ protected: } BOOST_WARCHIVE_DECL text_wiarchive_impl(std::wistream & is, unsigned int flags); - ~text_wiarchive_impl() override{}; + ~text_wiarchive_impl(){}; }; } // namespace archive @@ -120,7 +120,7 @@ public: text_wiarchive(std::wistream & is, unsigned int flags = 0) : text_wiarchive_impl(is, flags) {} - ~text_wiarchive() override{} + ~text_wiarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/text_woarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/text_woarchive.hpp index b55d57e01f..beba62f705 100644 --- a/bundled/boost-1.62.0/include/boost/archive/text_woarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/text_woarchive.hpp @@ -136,7 +136,7 @@ public: text_woarchive(std::wostream & os, unsigned int flags = 0) : text_woarchive_impl(os, flags) {} - ~text_woarchive() override{} + ~text_woarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/wcslen.hpp b/bundled/boost-1.62.0/include/boost/archive/wcslen.hpp index 2a3d6351d4..0b60004f09 100644 --- a/bundled/boost-1.62.0/include/boost/archive/wcslen.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/wcslen.hpp @@ -44,7 +44,9 @@ inline std::size_t wcslen(const wchar_t * ws) #else +#ifndef BOOST_NO_CWCHAR #include +#endif #ifdef BOOST_NO_STDC_NAMESPACE namespace std{ using ::wcslen; } #endif diff --git a/bundled/boost-1.62.0/include/boost/archive/xml_archive_exception.hpp b/bundled/boost-1.62.0/include/boost/archive/xml_archive_exception.hpp index 5c21680af3..82c53ef5d3 100644 --- a/bundled/boost-1.62.0/include/boost/archive/xml_archive_exception.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/xml_archive_exception.hpp @@ -46,7 +46,7 @@ public: const char * e2 = NULL ); BOOST_ARCHIVE_DECL xml_archive_exception(xml_archive_exception const &) ; - virtual BOOST_ARCHIVE_DECL ~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW override ; + virtual BOOST_ARCHIVE_DECL ~xml_archive_exception() BOOST_NOEXCEPT_OR_NOTHROW ; }; }// namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/xml_iarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/xml_iarchive.hpp index 0fdda45b2a..abd2f9fc4e 100644 --- a/bundled/boost-1.62.0/include/boost/archive/xml_iarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/xml_iarchive.hpp @@ -101,7 +101,7 @@ protected: BOOST_ARCHIVE_DECL xml_iarchive_impl(std::istream & is, unsigned int flags); BOOST_ARCHIVE_DECL - ~xml_iarchive_impl() override; + ~xml_iarchive_impl(); }; } // namespace archive @@ -126,7 +126,7 @@ public: xml_iarchive(std::istream & is, unsigned int flags = 0) : xml_iarchive_impl(is, flags) {} - ~xml_iarchive() override{}; + ~xml_iarchive(){}; }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/xml_oarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/xml_oarchive.hpp index 2222e627e8..d0fa8b21f2 100644 --- a/bundled/boost-1.62.0/include/boost/archive/xml_oarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/xml_oarchive.hpp @@ -86,7 +86,7 @@ protected: BOOST_ARCHIVE_DECL xml_oarchive_impl(std::ostream & os, unsigned int flags); BOOST_ARCHIVE_DECL - ~xml_oarchive_impl() override; + ~xml_oarchive_impl(); public: BOOST_ARCHIVE_DECL void save_binary(const void *address, std::size_t count); @@ -121,7 +121,7 @@ public: xml_oarchive(std::ostream & os, unsigned int flags = 0) : xml_oarchive_impl(os, flags) {} - ~xml_oarchive() override{} + ~xml_oarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/xml_wiarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/xml_wiarchive.hpp index e7c0393477..2ca3e5595e 100644 --- a/bundled/boost-1.62.0/include/boost/archive/xml_wiarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/xml_wiarchive.hpp @@ -62,6 +62,7 @@ protected: friend class basic_xml_iarchive; friend class load_access; #endif + std::locale archive_locale; boost::scoped_ptr gimpl; std::wistream & get_is(){ return is; @@ -106,7 +107,7 @@ protected: BOOST_WARCHIVE_DECL xml_wiarchive_impl(std::wistream & is, unsigned int flags) ; BOOST_WARCHIVE_DECL - ~xml_wiarchive_impl() override; + ~xml_wiarchive_impl(); }; } // namespace archive @@ -132,7 +133,7 @@ public: xml_wiarchive(std::wistream & is, unsigned int flags = 0) : xml_wiarchive_impl(is, flags) {} - ~xml_wiarchive() override{} + ~xml_wiarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/archive/xml_woarchive.hpp b/bundled/boost-1.62.0/include/boost/archive/xml_woarchive.hpp index 316e42469e..e6ac50de44 100644 --- a/bundled/boost-1.62.0/include/boost/archive/xml_woarchive.hpp +++ b/bundled/boost-1.62.0/include/boost/archive/xml_woarchive.hpp @@ -95,7 +95,7 @@ protected: BOOST_WARCHIVE_DECL xml_woarchive_impl(std::wostream & os, unsigned int flags); BOOST_WARCHIVE_DECL - ~xml_woarchive_impl() override; + ~xml_woarchive_impl(); public: BOOST_WARCHIVE_DECL void save_binary(const void *address, std::size_t count); @@ -115,7 +115,7 @@ public: xml_woarchive(std::wostream & os, unsigned int flags = 0) : xml_woarchive_impl(os, flags) {} - ~xml_woarchive() override{} + ~xml_woarchive(){} }; } // namespace archive diff --git a/bundled/boost-1.62.0/include/boost/array.hpp b/bundled/boost-1.62.0/include/boost/array.hpp index fa06fa9a5f..99dc2c6ded 100644 --- a/bundled/boost-1.62.0/include/boost/array.hpp +++ b/bundled/boost-1.62.0/include/boost/array.hpp @@ -13,6 +13,7 @@ * accompanying file LICENSE_1_0.txt or copy at * http://www.boost.org/LICENSE_1_0.txt) * + * 9 Jan 2013 - (mtc) Added constexpr * 14 Apr 2012 - (mtc) Added support for boost::hash * 28 Dec 2010 - (mtc) Added cbegin and cend (and crbegin and crend) for C++Ox compatibility. * 10 Mar 2010 - (mtc) fill method added, matching resolution of the standard library working group. @@ -42,12 +43,12 @@ #include #include #include +#include #include // Handles broken standard libraries better than #include #include -#include #include // FIXES for broken compilers @@ -81,15 +82,9 @@ namespace boost { const_iterator cend() const { return elems+N; } // reverse iterator support -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) +#if !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; -#elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310) - // workaround for broken reverse_iterator in VC7 - typedef std::reverse_iterator > reverse_iterator; - typedef std::reverse_iterator > const_reverse_iterator; #elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) typedef std::reverse_iterator reverse_iterator; @@ -120,19 +115,17 @@ namespace boost { // operator[] reference operator[](size_type i) { - BOOST_ASSERT_MSG( i < N, "out of range" ); - return elems[i]; + return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i]; } - const_reference operator[](size_type i) const + /*BOOST_CONSTEXPR*/ const_reference operator[](size_type i) const { - BOOST_ASSERT_MSG( i < N, "out of range" ); - return elems[i]; + return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i]; } // at() with range check - reference at(size_type i) { rangecheck(i); return elems[i]; } - const_reference at(size_type i) const { rangecheck(i); return elems[i]; } + reference at(size_type i) { return rangecheck(i), elems[i]; } + /*BOOST_CONSTEXPR*/ const_reference at(size_type i) const { return rangecheck(i), elems[i]; } // front() and back() reference front() @@ -140,7 +133,7 @@ namespace boost { return elems[0]; } - const_reference front() const + BOOST_CONSTEXPR const_reference front() const { return elems[0]; } @@ -150,15 +143,15 @@ namespace boost { return elems[N-1]; } - const_reference back() const + BOOST_CONSTEXPR const_reference back() const { return elems[N-1]; } // size is constant - static size_type size() { return N; } - static bool empty() { return false; } - static size_type max_size() { return N; } + static BOOST_CONSTEXPR size_type size() { return N; } + static BOOST_CONSTEXPR bool empty() { return false; } + static BOOST_CONSTEXPR size_type max_size() { return N; } enum { static_size = N }; // swap (note: linear complexity) @@ -189,16 +182,12 @@ namespace boost { } // check range (may be private because it is static) - static void rangecheck (size_type i) { - if (i >= size()) { - std::out_of_range e("array<>: index out of range"); - boost::throw_exception(e); - } + static BOOST_CONSTEXPR bool rangecheck (size_type i) { + return i >= size() ? boost::throw_exception(std::out_of_range ("array<>: index out of range")), true : true; } }; -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) template< class T > class array< T, 0 > { @@ -222,15 +211,9 @@ namespace boost { const_iterator cend() const { return cbegin(); } // reverse iterator support -#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) +#if !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) typedef std::reverse_iterator reverse_iterator; typedef std::reverse_iterator const_reverse_iterator; -#elif defined(_MSC_VER) && (_MSC_VER == 1300) && defined(BOOST_DINKUMWARE_STDLIB) && (BOOST_DINKUMWARE_STDLIB == 310) - // workaround for broken reverse_iterator in VC7 - typedef std::reverse_iterator > reverse_iterator; - typedef std::reverse_iterator > const_reverse_iterator; #elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) typedef std::reverse_iterator reverse_iterator; @@ -264,14 +247,14 @@ namespace boost { return failed_rangecheck(); } - const_reference operator[](size_type /*i*/) const + /*BOOST_CONSTEXPR*/ const_reference operator[](size_type /*i*/) const { return failed_rangecheck(); } // at() with range check reference at(size_type /*i*/) { return failed_rangecheck(); } - const_reference at(size_type /*i*/) const { return failed_rangecheck(); } + /*BOOST_CONSTEXPR*/ const_reference at(size_type /*i*/) const { return failed_rangecheck(); } // front() and back() reference front() @@ -279,7 +262,7 @@ namespace boost { return failed_rangecheck(); } - const_reference front() const + BOOST_CONSTEXPR const_reference front() const { return failed_rangecheck(); } @@ -289,15 +272,15 @@ namespace boost { return failed_rangecheck(); } - const_reference back() const + BOOST_CONSTEXPR const_reference back() const { return failed_rangecheck(); } // size is constant - static size_type size() { return 0; } - static bool empty() { return true; } - static size_type max_size() { return 0; } + static BOOST_CONSTEXPR size_type size() { return 0; } + static BOOST_CONSTEXPR bool empty() { return true; } + static BOOST_CONSTEXPR size_type max_size() { return 0; } enum { static_size = 0 }; void swap (array& /*y*/) { @@ -335,7 +318,6 @@ namespace boost { #endif } }; -#endif // comparisons template @@ -391,7 +373,7 @@ namespace boost { // Specific for boost::array: simply returns its elems data member. template - typename const detail::c_array::type& get_c_array(const boost::array& arg) + typename detail::c_array::type const& get_c_array(const boost::array& arg) { return arg.elems; } @@ -429,6 +411,7 @@ namespace boost { } #endif + template std::size_t hash_range(It, It); template std::size_t hash_value(const array& arr) @@ -436,8 +419,36 @@ namespace boost { return boost::hash_range(arr.begin(), arr.end()); } + template + T &get(boost::array &arr) BOOST_NOEXCEPT { + BOOST_STATIC_ASSERT_MSG ( Idx < N, "boost::get<>(boost::array &) index out of range" ); + return arr[Idx]; + } + + template + const T &get(const boost::array &arr) BOOST_NOEXCEPT { + BOOST_STATIC_ASSERT_MSG ( Idx < N, "boost::get<>(const boost::array &) index out of range" ); + return arr[Idx]; + } + } /* namespace boost */ +#ifndef BOOST_NO_CXX11_HDR_ARRAY +// If we don't have std::array, I'm assuming that we don't have std::get +namespace std { + template + T &get(boost::array &arr) BOOST_NOEXCEPT { + BOOST_STATIC_ASSERT_MSG ( Idx < N, "std::get<>(boost::array &) index out of range" ); + return arr[Idx]; + } + + template + const T &get(const boost::array &arr) BOOST_NOEXCEPT { + BOOST_STATIC_ASSERT_MSG ( Idx < N, "std::get<>(const boost::array &) index out of range" ); + return arr[Idx]; + } +} +#endif #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) # pragma warning(pop) diff --git a/bundled/boost-1.62.0/include/boost/asio.hpp b/bundled/boost-1.62.0/include/boost/asio.hpp index 6523d60fe1..1ee7e12f21 100644 --- a/bundled/boost-1.62.0/include/boost/asio.hpp +++ b/bundled/boost-1.62.0/include/boost/asio.hpp @@ -2,7 +2,7 @@ // asio.hpp // ~~~~~~~~ // -// Copyright (c) 2003-2016 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// Copyright (c) 2003-2019 Christopher M. Kohlhoff (chris at kohlhoff dot com) // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -17,7 +17,10 @@ # pragma once #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) +#include +#include #include +#include #include #include #include @@ -25,12 +28,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -39,13 +44,19 @@ #include #include #include +#include #include +#include #include #include -#include -#include #include +#include +#include +#include #include +#include +#include +#include #include #include #include @@ -54,11 +65,21 @@ #include #include #include -#include +#include +#include +#include #include +#include #include #include +#include +#include #include +#include +#include +#include +#include +#include #include #include #include @@ -67,54 +88,58 @@ #include #include #include +#include #include -#include #include #include #include #include +#include #include #include #include #include #include #include +#include #include #include #include +#include #include #include -#include -#include +#include #include #include #include -#include +#include #include #include -#include #include -#include -#include #include +#include #include -#include #include +#include +#include +#include +#include +#include #include +#include +#include +#include #include #include -#include -#include #include +#include #include #include #include -#include +#include #include #include -#include #include -#include #include #include diff --git a/bundled/boost-1.62.0/include/boost/atomic/atomic.hpp b/bundled/boost-1.62.0/include/boost/atomic/atomic.hpp index 8b0bdd11c1..5a8058829c 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/atomic.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/atomic.hpp @@ -21,6 +21,11 @@ #include #include #include +#include +#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT) +#include +#include +#endif #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -80,6 +85,12 @@ using atomics::atomic_uint_fast64_t; using atomics::atomic_intmax_t; using atomics::atomic_uintmax_t; +#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT) +using atomics::atomic_float_t; +using atomics::atomic_double_t; +using atomics::atomic_long_double_t; +#endif + using atomics::atomic_size_t; using atomics::atomic_ptrdiff_t; diff --git a/bundled/boost-1.62.0/include/boost/atomic/capabilities.hpp b/bundled/boost-1.62.0/include/boost/atomic/capabilities.hpp index 05bbb0fd93..5c7434d9bd 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/capabilities.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/capabilities.hpp @@ -17,9 +17,12 @@ #include #include #include +#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT) +#include +#endif #if !defined(BOOST_ATOMIC_EMULATED) -#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/caps_) +#include BOOST_ATOMIC_DETAIL_BACKEND_HEADER(boost/atomic/detail/caps_) #endif #ifdef BOOST_HAS_PRAGMA_ONCE @@ -150,6 +153,52 @@ #define BOOST_ATOMIC_FLAG_LOCK_FREE BOOST_ATOMIC_BOOL_LOCK_FREE #endif +#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT) + +#if !defined(BOOST_ATOMIC_FLOAT_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT) +#if BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 2 +#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 4 +#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 8 +#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_FLOAT == 16 +#define BOOST_ATOMIC_FLOAT_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE +#else +#define BOOST_ATOMIC_FLOAT_LOCK_FREE 0 +#endif +#endif + +#if !defined(BOOST_ATOMIC_DOUBLE_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE) +#if BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 2 +#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 4 +#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 8 +#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_DOUBLE == 16 +#define BOOST_ATOMIC_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE +#else +#define BOOST_ATOMIC_DOUBLE_LOCK_FREE 0 +#endif +#endif + +#if !defined(BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE) && defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE) +#if BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 2 +#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT16_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 4 +#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT32_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 8 +#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT64_LOCK_FREE +#elif BOOST_ATOMIC_DETAIL_SIZEOF_LONG_DOUBLE == 16 +#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE +#else +#define BOOST_ATOMIC_LONG_DOUBLE_LOCK_FREE 0 +#endif +#endif + +#endif // !defined(BOOST_ATOMIC_NO_FLOATING_POINT) + #ifndef BOOST_ATOMIC_THREAD_FENCE #define BOOST_ATOMIC_THREAD_FENCE 0 #endif diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/atomic_flag.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/atomic_flag.hpp index 7fb44cdb1a..6f5fc8acc3 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/atomic_flag.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/atomic_flag.hpp @@ -55,6 +55,7 @@ struct atomic_flag BOOST_FORCEINLINE void clear(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { + BOOST_ASSERT(order != memory_order_consume); BOOST_ASSERT(order != memory_order_acquire); BOOST_ASSERT(order != memory_order_acq_rel); operations::clear(m_storage.value, order); diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/atomic_template.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/atomic_template.hpp index 2deaded62f..fb0a8f58f0 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/atomic_template.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/atomic_template.hpp @@ -19,11 +19,24 @@ #include #include #include -#include -#include #include +#include #include +#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT) +#include +#include +#include +#endif #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -53,53 +66,268 @@ BOOST_FORCEINLINE BOOST_CONSTEXPR bool cas_failure_order_must_not_be_stronger_th { // 15 == (memory_order_seq_cst | memory_order_consume), see memory_order.hpp // Given the enum values we can test the strength of memory order requirements with this single condition. - return (failure_order & 15u) <= (success_order & 15u); + return (static_cast< unsigned int >(failure_order) & 15u) <= (static_cast< unsigned int >(success_order) & 15u); } -template< typename T, bool IsInt = boost::is_integral< T >::value > +template< typename T, bool IsFunction = atomics::detail::is_function< T >::value > +struct classify_pointer +{ + typedef void* type; +}; + +template< typename T > +struct classify_pointer< T, true > +{ + typedef void type; +}; + +template< typename T, bool IsInt = atomics::detail::is_integral< T >::value, bool IsFloat = atomics::detail::is_floating_point< T >::value > struct classify { typedef void type; }; template< typename T > -struct classify< T, true > { typedef int type; }; +struct classify< T, true, false > { typedef int type; }; + +#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT) +template< typename T > +struct classify< T, false, true > { typedef float type; }; +#endif template< typename T > -struct classify< T*, false > { typedef void* type; }; +struct classify< T*, false, false > { typedef typename classify_pointer< T >::type type; }; + +template< > +struct classify< void*, false, false > { typedef void type; }; + +template< > +struct classify< const void*, false, false > { typedef void type; }; + +template< > +struct classify< volatile void*, false, false > { typedef void type; }; + +template< > +struct classify< const volatile void*, false, false > { typedef void type; }; + +template< typename T, typename U > +struct classify< T U::*, false, false > { typedef void type; }; + + +#if defined(BOOST_INTEL) || (defined(BOOST_GCC) && (BOOST_GCC+0) < 40700) ||\ + (defined(BOOST_CLANG) && !defined(__apple_build_version__) && ((__clang_major__+0) * 100 + (__clang_minor__+0)) < 302) ||\ + (defined(__clang__) && defined(__apple_build_version__) && ((__clang_major__+0) * 100 + (__clang_minor__+0)) < 402) +// Intel compiler (at least 18.0 update 1) breaks if noexcept specification is used in defaulted function declarations: +// error: the default constructor of "boost::atomics::atomic" cannot be referenced -- it is a deleted function +// GCC 4.6 doesn't seem to support that either. Clang 3.1 deduces wrong noexcept for the defaulted function and fails as well. +#define BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL +#define BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL BOOST_NOEXCEPT +#else +#define BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL BOOST_NOEXCEPT +#define BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL +#endif + +template< typename T, bool IsTriviallyDefaultConstructible = atomics::detail::is_trivially_default_constructible< T >::value > +class base_atomic_generic; + +template< typename T > +class base_atomic_generic< T, true > +{ +public: + typedef T value_type; + +protected: + typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations; + typedef typename atomics::detail::conditional< sizeof(value_type) <= sizeof(void*), value_type, value_type const& >::type value_arg_type; + +public: + typedef typename operations::storage_type storage_type; + +protected: + typename operations::aligned_storage_type m_storage; + +public: + BOOST_DEFAULTED_FUNCTION(base_atomic_generic() BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL {}) + BOOST_FORCEINLINE explicit base_atomic_generic(value_arg_type v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v)) + { + } +}; + +template< typename T > +class base_atomic_generic< T, false > +{ +public: + typedef T value_type; + +protected: + typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations; + typedef typename atomics::detail::conditional< sizeof(value_type) <= sizeof(void*), value_type, value_type const& >::type value_arg_type; + +public: + typedef typename operations::storage_type storage_type; + +protected: + typename operations::aligned_storage_type m_storage; + +public: + BOOST_FORCEINLINE explicit base_atomic_generic(value_arg_type v = value_type()) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v)) + { + } +}; + template< typename T, typename Kind > class base_atomic; +//! General template. Implementation for user-defined types, such as structs and enums, and pointers to non-object types +template< typename T > +class base_atomic< T, void > : + public base_atomic_generic< T > +{ +private: + typedef base_atomic_generic< T > base_type; + +public: + typedef typename base_type::value_type value_type; + typedef typename base_type::storage_type storage_type; + +protected: + typedef typename base_type::operations operations; + typedef typename base_type::value_arg_type value_arg_type; + +private: + typedef atomics::detail::integral_constant< bool, sizeof(value_type) == sizeof(storage_type) > value_matches_storage; + +public: + BOOST_DEFAULTED_FUNCTION(base_atomic() BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL {}) + BOOST_FORCEINLINE explicit base_atomic(value_arg_type v) BOOST_NOEXCEPT : base_type(v) + { + } + + BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + BOOST_ASSERT(order != memory_order_consume); + BOOST_ASSERT(order != memory_order_acquire); + BOOST_ASSERT(order != memory_order_acq_rel); + + operations::store(this->m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order); + } + + BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT + { + BOOST_ASSERT(order != memory_order_release); + BOOST_ASSERT(order != memory_order_acq_rel); + + return atomics::detail::bitwise_cast< value_type >(operations::load(this->m_storage.value, order)); + } + + BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::bitwise_cast< value_type >(operations::exchange(this->m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order)); + } + + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + { + BOOST_ASSERT(failure_order != memory_order_release); + BOOST_ASSERT(failure_order != memory_order_acq_rel); + BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); + + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, value_matches_storage()); + } + + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order)); + } + + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + { + BOOST_ASSERT(failure_order != memory_order_release); + BOOST_ASSERT(failure_order != memory_order_acq_rel); + BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); + + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, value_matches_storage()); + } + + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order)); + } + + BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&)) + BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&)) + +private: + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT + { +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_strong(this->m_storage.value, reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif + } + + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT + { + storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected); + const bool res = operations::compare_exchange_strong(this->m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); + expected = atomics::detail::bitwise_cast< value_type >(old_value); + return res; + } + + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT + { +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_weak(this->m_storage.value, reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif + } + + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT + { + storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected); + const bool res = operations::compare_exchange_weak(this->m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); + expected = atomics::detail::bitwise_cast< value_type >(old_value); + return res; + } +}; + + //! Implementation for integers template< typename T > class base_atomic< T, int > { -private: +public: typedef T value_type; typedef T difference_type; - typedef atomics::detail::operations< storage_size_of< value_type >::value, boost::is_signed< T >::value > operations; protected: + typedef atomics::detail::operations< storage_size_of< value_type >::value, atomics::detail::is_signed< T >::value > operations; + typedef atomics::detail::extra_operations< operations, operations::storage_size, operations::is_signed > extra_operations; typedef value_type value_arg_type; public: typedef typename operations::storage_type storage_type; +private: + typedef atomics::detail::integral_constant< bool, sizeof(value_type) == sizeof(storage_type) > value_matches_storage; + protected: typename operations::aligned_storage_type m_storage; public: - BOOST_DEFAULTED_FUNCTION(base_atomic(), {}) - BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : m_storage(v) {} + BOOST_DEFAULTED_FUNCTION(base_atomic() BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL {}) + BOOST_FORCEINLINE BOOST_CONSTEXPR explicit base_atomic(value_arg_type v) BOOST_NOEXCEPT : m_storage(v) {} - BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + // Standard methods + BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { BOOST_ASSERT(order != memory_order_consume); BOOST_ASSERT(order != memory_order_acquire); BOOST_ASSERT(order != memory_order_acq_rel); - operations::store(m_storage.value, static_cast< storage_type >(v), order); + operations::store(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); } BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT @@ -107,78 +335,207 @@ public: BOOST_ASSERT(order != memory_order_release); BOOST_ASSERT(order != memory_order_acq_rel); - return static_cast< value_type >(operations::load(m_storage.value, order)); + return atomics::detail::integral_truncate< value_type >(operations::load(m_storage.value, order)); } BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return static_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v), order)); + return atomics::detail::integral_truncate< value_type >(operations::fetch_add(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); } BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return static_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v), order)); + return atomics::detail::integral_truncate< value_type >(operations::fetch_sub(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); } - BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return static_cast< value_type >(operations::exchange(m_storage.value, static_cast< storage_type >(v), order)); + return atomics::detail::integral_truncate< value_type >(operations::exchange(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { BOOST_ASSERT(failure_order != memory_order_release); BOOST_ASSERT(failure_order != memory_order_acq_rel); BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - storage_type old_value = static_cast< storage_type >(expected); - const bool res = operations::compare_exchange_strong(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order); - expected = static_cast< value_type >(old_value); - return res; + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, value_matches_storage()); } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order)); } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { BOOST_ASSERT(failure_order != memory_order_release); BOOST_ASSERT(failure_order != memory_order_acq_rel); BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - storage_type old_value = static_cast< storage_type >(expected); - const bool res = operations::compare_exchange_weak(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order); - expected = static_cast< value_type >(old_value); - return res; + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, value_matches_storage()); } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order)); } - BOOST_FORCEINLINE value_type fetch_and(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type fetch_and(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return static_cast< value_type >(operations::fetch_and(m_storage.value, static_cast< storage_type >(v), order)); + return atomics::detail::integral_truncate< value_type >(operations::fetch_and(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); } - BOOST_FORCEINLINE value_type fetch_or(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type fetch_or(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return static_cast< value_type >(operations::fetch_or(m_storage.value, static_cast< storage_type >(v), order)); + return atomics::detail::integral_truncate< value_type >(operations::fetch_or(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); } - BOOST_FORCEINLINE value_type fetch_xor(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type fetch_xor(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return static_cast< value_type >(operations::fetch_xor(m_storage.value, static_cast< storage_type >(v), order)); + return atomics::detail::integral_truncate< value_type >(operations::fetch_xor(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); } - BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT + // Boost.Atomic extensions + BOOST_FORCEINLINE value_type fetch_negate(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::fetch_negate(m_storage.value, order)); + } + + BOOST_FORCEINLINE value_type fetch_complement(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::fetch_complement(m_storage.value, order)); + } + + BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::add(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); + } + + BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::sub(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); + } + + BOOST_FORCEINLINE value_type negate(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::negate(m_storage.value, order)); + } + + BOOST_FORCEINLINE value_type bitwise_and(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::bitwise_and(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); + } + + BOOST_FORCEINLINE value_type bitwise_or(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::bitwise_or(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); + } + + BOOST_FORCEINLINE value_type bitwise_xor(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::bitwise_xor(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order)); + } + + BOOST_FORCEINLINE value_type bitwise_complement(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::integral_truncate< value_type >(extra_operations::bitwise_complement(m_storage.value, order)); + } + + BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_operations::opaque_add(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_operations::opaque_sub(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_FORCEINLINE void opaque_negate(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_operations::opaque_negate(m_storage.value, order); + } + + BOOST_FORCEINLINE void opaque_and(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_operations::opaque_and(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_FORCEINLINE void opaque_or(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_operations::opaque_or(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_FORCEINLINE void opaque_xor(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_operations::opaque_xor(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_FORCEINLINE void opaque_complement(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_operations::opaque_complement(m_storage.value, order); + } + + BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST + BOOST_FORCEINLINE bool add_and_test(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::add_and_test(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST + BOOST_FORCEINLINE bool sub_and_test(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::sub_and_test(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_FORCEINLINE bool negate_and_test(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::negate_and_test(m_storage.value, order); + } + + BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST + BOOST_FORCEINLINE bool and_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::and_and_test(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST + BOOST_FORCEINLINE bool or_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::or_and_test(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST + BOOST_FORCEINLINE bool xor_and_test(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::xor_and_test(m_storage.value, atomics::detail::integral_extend< operations::is_signed, storage_type >(v), order); + } + + BOOST_FORCEINLINE bool complement_and_test(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::complement_and_test(m_storage.value, order); + } + + BOOST_FORCEINLINE bool bit_test_and_set(unsigned int bit_number, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + BOOST_ASSERT(bit_number < sizeof(value_type) * 8u); + return extra_operations::bit_test_and_set(m_storage.value, bit_number, order); + } + + BOOST_FORCEINLINE bool bit_test_and_reset(unsigned int bit_number, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + BOOST_ASSERT(bit_number < sizeof(value_type) * 8u); + return extra_operations::bit_test_and_reset(m_storage.value, bit_number, order); + } + + BOOST_FORCEINLINE bool bit_test_and_complement(unsigned int bit_number, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return operations::is_lock_free(m_storage.value); + BOOST_ASSERT(bit_number < sizeof(value_type) * 8u); + return extra_operations::bit_test_and_complement(m_storage.value, bit_number, order); } + // Operators BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT { return fetch_add(1); @@ -186,7 +543,7 @@ public: BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT { - return fetch_add(1) + 1; + return add(1); } BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT @@ -196,60 +553,99 @@ public: BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT { - return fetch_sub(1) - 1; + return sub(1); } BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT { - return fetch_add(v) + v; + return add(v); } BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT { - return fetch_sub(v) - v; + return sub(v); } BOOST_FORCEINLINE value_type operator&=(value_type v) volatile BOOST_NOEXCEPT { - return fetch_and(v) & v; + return bitwise_and(v); } BOOST_FORCEINLINE value_type operator|=(value_type v) volatile BOOST_NOEXCEPT { - return fetch_or(v) | v; + return bitwise_or(v); } BOOST_FORCEINLINE value_type operator^=(value_type v) volatile BOOST_NOEXCEPT { - return fetch_xor(v) ^ v; + return bitwise_xor(v); } BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&)) BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&)) + +private: + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT + { +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_strong(m_storage.value, reinterpret_cast< storage_type& >(expected), atomics::detail::integral_extend< operations::is_signed, storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif + } + + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT + { + storage_type old_value = atomics::detail::integral_extend< operations::is_signed, storage_type >(expected); + const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::integral_extend< operations::is_signed, storage_type >(desired), success_order, failure_order); + expected = atomics::detail::integral_truncate< value_type >(old_value); + return res; + } + + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT + { +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_weak(m_storage.value, reinterpret_cast< storage_type& >(expected), atomics::detail::integral_extend< operations::is_signed, storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif + } + + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT + { + storage_type old_value = atomics::detail::integral_extend< operations::is_signed, storage_type >(expected); + const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::integral_extend< operations::is_signed, storage_type >(desired), success_order, failure_order); + expected = atomics::detail::integral_truncate< value_type >(old_value); + return res; + } }; //! Implementation for bool template< > class base_atomic< bool, int > { -private: +public: typedef bool value_type; - typedef atomics::detail::operations< 1u, false > operations; protected: + typedef atomics::detail::operations< 1u, false > operations; typedef value_type value_arg_type; public: typedef operations::storage_type storage_type; +private: + typedef atomics::detail::integral_constant< bool, sizeof(value_type) == sizeof(storage_type) > value_matches_storage; + protected: operations::aligned_storage_type m_storage; public: - BOOST_DEFAULTED_FUNCTION(base_atomic(), {}) - BOOST_CONSTEXPR explicit base_atomic(value_type v) BOOST_NOEXCEPT : m_storage(v) {} + BOOST_DEFAULTED_FUNCTION(base_atomic() BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL {}) + BOOST_FORCEINLINE BOOST_CONSTEXPR explicit base_atomic(value_arg_type v) BOOST_NOEXCEPT : m_storage(v) {} - BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + // Standard methods + BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { BOOST_ASSERT(order != memory_order_consume); BOOST_ASSERT(order != memory_order_acquire); @@ -266,174 +662,116 @@ public: return !!operations::load(m_storage.value, order); } - BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return !!operations::exchange(m_storage.value, static_cast< storage_type >(v), order); } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { BOOST_ASSERT(failure_order != memory_order_release); BOOST_ASSERT(failure_order != memory_order_acq_rel); BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - storage_type old_value = static_cast< storage_type >(expected); - const bool res = operations::compare_exchange_strong(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order); - expected = !!old_value; - return res; + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, value_matches_storage()); } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order)); } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { BOOST_ASSERT(failure_order != memory_order_release); BOOST_ASSERT(failure_order != memory_order_acq_rel); BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - storage_type old_value = static_cast< storage_type >(expected); - const bool res = operations::compare_exchange_weak(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order); - expected = !!old_value; - return res; + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, value_matches_storage()); } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order)); } - BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT - { - return operations::is_lock_free(m_storage.value); - } - BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&)) BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&)) -}; - -//! Implementation for user-defined types, such as structs and enums -template< typename T > -class base_atomic< T, void > -{ private: - typedef T value_type; - typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations; - -protected: - typedef value_type const& value_arg_type; - -public: - typedef typename operations::storage_type storage_type; - -protected: - typename operations::aligned_storage_type m_storage; - -public: - BOOST_FORCEINLINE explicit base_atomic(value_type const& v = value_type()) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v)) - { - } - - BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT { - BOOST_ASSERT(order != memory_order_consume); - BOOST_ASSERT(order != memory_order_acquire); - BOOST_ASSERT(order != memory_order_acq_rel); - - operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order); - } - - BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT - { - BOOST_ASSERT(order != memory_order_release); - BOOST_ASSERT(order != memory_order_acq_rel); - - return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order)); - } - - BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT - { - return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order)); +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_strong(m_storage.value, reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT { - BOOST_ASSERT(failure_order != memory_order_release); - BOOST_ASSERT(failure_order != memory_order_acq_rel); - BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - - storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected); - const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); - expected = atomics::detail::bitwise_cast< value_type >(old_value); + storage_type old_value = static_cast< storage_type >(expected); + const bool res = operations::compare_exchange_strong(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order); + expected = !!old_value; return res; } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT { - return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order)); +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_weak(m_storage.value, reinterpret_cast< storage_type& >(expected), static_cast< storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT { - BOOST_ASSERT(failure_order != memory_order_release); - BOOST_ASSERT(failure_order != memory_order_acq_rel); - BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - - storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected); - const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); - expected = atomics::detail::bitwise_cast< value_type >(old_value); + storage_type old_value = static_cast< storage_type >(expected); + const bool res = operations::compare_exchange_weak(m_storage.value, old_value, static_cast< storage_type >(desired), success_order, failure_order); + expected = !!old_value; return res; } - - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT - { - return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order)); - } - - BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT - { - return operations::is_lock_free(m_storage.value); - } - - BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&)) - BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&)) }; -//! Implementation for pointers +#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT) + +//! Implementation for floating point types template< typename T > -class base_atomic< T*, void* > +class base_atomic< T, float > { -private: - typedef T* value_type; - typedef std::ptrdiff_t difference_type; - typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations; +public: + typedef T value_type; + typedef T difference_type; protected: + typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations; + typedef atomics::detail::extra_operations< operations, operations::storage_size, operations::is_signed > extra_operations; + typedef atomics::detail::fp_operations< extra_operations, value_type, operations::storage_size > fp_operations; + typedef atomics::detail::extra_fp_operations< fp_operations, value_type, operations::storage_size > extra_fp_operations; typedef value_type value_arg_type; public: typedef typename operations::storage_type storage_type; +private: + typedef atomics::detail::integral_constant< bool, atomics::detail::value_sizeof< value_type >::value == sizeof(storage_type) > value_matches_storage; + protected: typename operations::aligned_storage_type m_storage; public: - BOOST_DEFAULTED_FUNCTION(base_atomic(), {}) - BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v)) - { - } + BOOST_DEFAULTED_FUNCTION(base_atomic() BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL {}) + BOOST_FORCEINLINE explicit base_atomic(value_arg_type v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_fp_cast< storage_type >(v)) {} - BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { BOOST_ASSERT(order != memory_order_consume); BOOST_ASSERT(order != memory_order_acquire); BOOST_ASSERT(order != memory_order_acq_rel); - operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order); + operations::store(m_storage.value, atomics::detail::bitwise_fp_cast< storage_type >(v), order); } BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT @@ -441,129 +779,185 @@ public: BOOST_ASSERT(order != memory_order_release); BOOST_ASSERT(order != memory_order_acq_rel); - return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order)); + return atomics::detail::bitwise_fp_cast< value_type >(operations::load(m_storage.value, order)); } BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return atomics::detail::bitwise_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v * sizeof(T)), order)); + return fp_operations::fetch_add(m_storage.value, v, order); } BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return atomics::detail::bitwise_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v * sizeof(T)), order)); + return fp_operations::fetch_sub(m_storage.value, v, order); } - BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type exchange(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order)); + return atomics::detail::bitwise_fp_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_fp_cast< storage_type >(v), order)); } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { BOOST_ASSERT(failure_order != memory_order_release); BOOST_ASSERT(failure_order != memory_order_acq_rel); BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected); - const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); - expected = atomics::detail::bitwise_cast< value_type >(old_value); - return res; + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, value_matches_storage()); } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order)); } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { BOOST_ASSERT(failure_order != memory_order_release); BOOST_ASSERT(failure_order != memory_order_acq_rel); BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected); - const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); - expected = atomics::detail::bitwise_cast< value_type >(old_value); - return res; + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, value_matches_storage()); } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order)); } - BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT + // Boost.Atomic extensions + BOOST_FORCEINLINE value_type fetch_negate(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return operations::is_lock_free(m_storage.value); + return extra_fp_operations::fetch_negate(m_storage.value, order); } - BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return fetch_add(1); + return extra_fp_operations::add(m_storage.value, v, order); } - BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return fetch_add(1) + 1; + return extra_fp_operations::sub(m_storage.value, v, order); } - BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE value_type negate(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return fetch_sub(1); + return extra_fp_operations::negate(m_storage.value, order); } - BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_fp_operations::opaque_add(m_storage.value, v, order); + } + + BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_fp_operations::opaque_sub(m_storage.value, v, order); + } + + BOOST_FORCEINLINE void opaque_negate(memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return fetch_sub(1) - 1; + extra_fp_operations::opaque_negate(m_storage.value, order); } + // Operators BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT { - return fetch_add(v) + v; + return add(v); } BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT { - return fetch_sub(v) - v; + return sub(v); } BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&)) BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&)) + +private: + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT + { +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_strong(m_storage.value, reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif + } + + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT + { + storage_type old_value = atomics::detail::bitwise_fp_cast< storage_type >(expected); + const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order); + expected = atomics::detail::bitwise_fp_cast< value_type >(old_value); + return res; + } + + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT + { +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_weak(m_storage.value, reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif + } + + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT + { + storage_type old_value = atomics::detail::bitwise_fp_cast< storage_type >(expected); + const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_fp_cast< storage_type >(desired), success_order, failure_order); + expected = atomics::detail::bitwise_fp_cast< value_type >(old_value); + return res; + } }; +#endif // !defined(BOOST_ATOMIC_NO_FLOATING_POINT) -//! Implementation for void pointers -template< > -class base_atomic< void*, void* > + +//! Implementation for pointers to object types +template< typename T > +class base_atomic< T*, void* > { -private: - typedef void* value_type; +public: + typedef T* value_type; typedef std::ptrdiff_t difference_type; - typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations; protected: + typedef atomics::detail::operations< storage_size_of< value_type >::value, false > operations; + typedef atomics::detail::extra_operations< operations, operations::storage_size, operations::is_signed > extra_operations; typedef value_type value_arg_type; public: - typedef operations::storage_type storage_type; + typedef typename operations::storage_type storage_type; + +private: + typedef atomics::detail::integral_constant< bool, sizeof(value_type) == sizeof(storage_type) > value_matches_storage; + + // uintptr_storage_type is the minimal storage type that is enough to store pointers. The actual storage_type theoretically may be larger, + // if the target architecture only supports atomic ops on larger data. Typically, though, they are the same type. +#if defined(BOOST_HAS_INTPTR_T) + typedef uintptr_t uintptr_storage_type; +#else + typedef typename atomics::detail::make_storage_type< sizeof(value_type) >::type uintptr_storage_type; +#endif protected: - operations::aligned_storage_type m_storage; + typename operations::aligned_storage_type m_storage; public: - BOOST_DEFAULTED_FUNCTION(base_atomic(), {}) - BOOST_FORCEINLINE explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< storage_type >(v)) + BOOST_DEFAULTED_FUNCTION(base_atomic() BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL {}) + BOOST_FORCEINLINE explicit base_atomic(value_arg_type v) BOOST_NOEXCEPT : m_storage(atomics::detail::bitwise_cast< uintptr_storage_type >(v)) { } - BOOST_FORCEINLINE void store(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + // Standard methods + BOOST_FORCEINLINE void store(value_arg_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { BOOST_ASSERT(order != memory_order_consume); BOOST_ASSERT(order != memory_order_acquire); BOOST_ASSERT(order != memory_order_acq_rel); - operations::store(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order); + operations::store(m_storage.value, atomics::detail::bitwise_cast< uintptr_storage_type >(v), order); } BOOST_FORCEINLINE value_type load(memory_order order = memory_order_seq_cst) const volatile BOOST_NOEXCEPT @@ -571,63 +965,86 @@ public: BOOST_ASSERT(order != memory_order_release); BOOST_ASSERT(order != memory_order_acq_rel); - return atomics::detail::bitwise_cast< value_type >(operations::load(m_storage.value, order)); + return atomics::detail::bitwise_cast< value_type >(static_cast< uintptr_storage_type >(operations::load(m_storage.value, order))); } BOOST_FORCEINLINE value_type fetch_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return atomics::detail::bitwise_cast< value_type >(operations::fetch_add(m_storage.value, static_cast< storage_type >(v), order)); + return atomics::detail::bitwise_cast< value_type >(static_cast< uintptr_storage_type >(operations::fetch_add(m_storage.value, static_cast< uintptr_storage_type >(v * sizeof(T)), order))); } BOOST_FORCEINLINE value_type fetch_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return atomics::detail::bitwise_cast< value_type >(operations::fetch_sub(m_storage.value, static_cast< storage_type >(v), order)); + return atomics::detail::bitwise_cast< value_type >(static_cast< uintptr_storage_type >(operations::fetch_sub(m_storage.value, static_cast< uintptr_storage_type >(v * sizeof(T)), order))); } BOOST_FORCEINLINE value_type exchange(value_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return atomics::detail::bitwise_cast< value_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< storage_type >(v), order)); + return atomics::detail::bitwise_cast< value_type >(static_cast< uintptr_storage_type >(operations::exchange(m_storage.value, atomics::detail::bitwise_cast< uintptr_storage_type >(v), order))); } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { BOOST_ASSERT(failure_order != memory_order_release); BOOST_ASSERT(failure_order != memory_order_acq_rel); BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected); - const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); - expected = atomics::detail::bitwise_cast< value_type >(old_value); - return res; + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, value_matches_storage()); } - BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_strong(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return compare_exchange_strong(expected, desired, order, atomics::detail::deduce_failure_order(order)); } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { BOOST_ASSERT(failure_order != memory_order_release); BOOST_ASSERT(failure_order != memory_order_acq_rel); BOOST_ASSERT(cas_failure_order_must_not_be_stronger_than_success_order(success_order, failure_order)); - storage_type old_value = atomics::detail::bitwise_cast< storage_type >(expected); - const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< storage_type >(desired), success_order, failure_order); - expected = atomics::detail::bitwise_cast< value_type >(old_value); - return res; + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, value_matches_storage()); } - BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + BOOST_FORCEINLINE bool compare_exchange_weak(value_type& expected, value_arg_type desired, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { return compare_exchange_weak(expected, desired, order, atomics::detail::deduce_failure_order(order)); } - BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT + // Boost.Atomic extensions + BOOST_FORCEINLINE value_type add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::bitwise_cast< value_type >(static_cast< uintptr_storage_type >(extra_operations::add(m_storage.value, static_cast< uintptr_storage_type >(v * sizeof(T)), order))); + } + + BOOST_FORCEINLINE value_type sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return atomics::detail::bitwise_cast< value_type >(static_cast< uintptr_storage_type >(extra_operations::sub(m_storage.value, static_cast< uintptr_storage_type >(v * sizeof(T)), order))); + } + + BOOST_FORCEINLINE void opaque_add(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - return operations::is_lock_free(m_storage.value); + extra_operations::opaque_add(m_storage.value, static_cast< uintptr_storage_type >(v * sizeof(T)), order); } + BOOST_FORCEINLINE void opaque_sub(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + extra_operations::opaque_sub(m_storage.value, static_cast< uintptr_storage_type >(v * sizeof(T)), order); + } + + BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST + BOOST_FORCEINLINE bool add_and_test(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::add_and_test(m_storage.value, static_cast< uintptr_storage_type >(v * sizeof(T)), order); + } + + BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST + BOOST_FORCEINLINE bool sub_and_test(difference_type v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT + { + return extra_operations::sub_and_test(m_storage.value, static_cast< uintptr_storage_type >(v * sizeof(T)), order); + } + + // Operators BOOST_FORCEINLINE value_type operator++(int) volatile BOOST_NOEXCEPT { return fetch_add(1); @@ -635,7 +1052,7 @@ public: BOOST_FORCEINLINE value_type operator++() volatile BOOST_NOEXCEPT { - return (char*)fetch_add(1) + 1; + return add(1); } BOOST_FORCEINLINE value_type operator--(int) volatile BOOST_NOEXCEPT @@ -645,21 +1062,56 @@ public: BOOST_FORCEINLINE value_type operator--() volatile BOOST_NOEXCEPT { - return (char*)fetch_sub(1) - 1; + return sub(1); } BOOST_FORCEINLINE value_type operator+=(difference_type v) volatile BOOST_NOEXCEPT { - return (char*)fetch_add(v) + v; + return add(v); } BOOST_FORCEINLINE value_type operator-=(difference_type v) volatile BOOST_NOEXCEPT { - return (char*)fetch_sub(v) - v; + return sub(v); } BOOST_DELETED_FUNCTION(base_atomic(base_atomic const&)) BOOST_DELETED_FUNCTION(base_atomic& operator=(base_atomic const&)) + +private: + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT + { +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_strong(m_storage.value, reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< uintptr_storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_strong_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif + } + + BOOST_FORCEINLINE bool compare_exchange_strong_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT + { + storage_type old_value = atomics::detail::bitwise_cast< uintptr_storage_type >(expected); + const bool res = operations::compare_exchange_strong(m_storage.value, old_value, atomics::detail::bitwise_cast< uintptr_storage_type >(desired), success_order, failure_order); + expected = atomics::detail::bitwise_cast< value_type >(static_cast< uintptr_storage_type >(old_value)); + return res; + } + + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::true_type) volatile BOOST_NOEXCEPT + { +#if defined(BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS) + return operations::compare_exchange_weak(m_storage.value, reinterpret_cast< storage_type& >(expected), atomics::detail::bitwise_cast< uintptr_storage_type >(desired), success_order, failure_order); +#else + return compare_exchange_weak_impl(expected, desired, success_order, failure_order, atomics::detail::false_type()); +#endif + } + + BOOST_FORCEINLINE bool compare_exchange_weak_impl(value_type& expected, value_arg_type desired, memory_order success_order, memory_order failure_order, atomics::detail::false_type) volatile BOOST_NOEXCEPT + { + storage_type old_value = atomics::detail::bitwise_cast< uintptr_storage_type >(expected); + const bool res = operations::compare_exchange_weak(m_storage.value, old_value, atomics::detail::bitwise_cast< uintptr_storage_type >(desired), success_order, failure_order); + expected = atomics::detail::bitwise_cast< value_type >(static_cast< uintptr_storage_type >(old_value)); + return res; + } }; } // namespace detail @@ -669,21 +1121,25 @@ class atomic : public atomics::detail::base_atomic< T, typename atomics::detail::classify< T >::type > { private: - typedef T value_type; typedef atomics::detail::base_atomic< T, typename atomics::detail::classify< T >::type > base_type; typedef typename base_type::value_arg_type value_arg_type; public: + typedef typename base_type::value_type value_type; typedef typename base_type::storage_type storage_type; public: - BOOST_DEFAULTED_FUNCTION(atomic(), BOOST_NOEXCEPT {}) + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = base_type::operations::is_always_lock_free; + +public: + BOOST_DEFAULTED_FUNCTION(atomic() BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL, BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL {}) + BOOST_FORCEINLINE BOOST_CONSTEXPR atomic(value_arg_type v) BOOST_NOEXCEPT : base_type(v) {} - // NOTE: The constructor is made explicit because gcc 4.7 complains that - // operator=(value_arg_type) is considered ambiguous with operator=(atomic const&) - // in assignment expressions, even though conversion to atomic<> is less preferred - // than conversion to value_arg_type. - BOOST_FORCEINLINE explicit BOOST_CONSTEXPR atomic(value_arg_type v) BOOST_NOEXCEPT : base_type(v) {} + BOOST_FORCEINLINE value_type operator= (value_arg_type v) BOOST_NOEXCEPT + { + this->store(v); + return v; + } BOOST_FORCEINLINE value_type operator= (value_arg_type v) volatile BOOST_NOEXCEPT { @@ -691,11 +1147,17 @@ public: return v; } - BOOST_FORCEINLINE operator value_type() volatile const BOOST_NOEXCEPT + BOOST_FORCEINLINE operator value_type() const volatile BOOST_NOEXCEPT { return this->load(); } + BOOST_FORCEINLINE bool is_lock_free() const volatile BOOST_NOEXCEPT + { + // C++17 requires all instances of atomic<> return a value consistent with is_always_lock_free here + return is_always_lock_free; + } + BOOST_FORCEINLINE storage_type& storage() BOOST_NOEXCEPT { return this->m_storage.value; } BOOST_FORCEINLINE storage_type volatile& storage() volatile BOOST_NOEXCEPT { return this->m_storage.value; } BOOST_FORCEINLINE storage_type const& storage() const BOOST_NOEXCEPT { return this->m_storage.value; } @@ -706,6 +1168,12 @@ public: BOOST_DELETED_FUNCTION(atomic& operator= (atomic const&) volatile) }; +template< typename T > +BOOST_CONSTEXPR_OR_CONST bool atomic< T >::is_always_lock_free; + +#undef BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_DECL +#undef BOOST_ATOMIC_DETAIL_DEF_NOEXCEPT_IMPL + typedef atomic< char > atomic_char; typedef atomic< unsigned char > atomic_uchar; typedef atomic< signed char > atomic_schar; @@ -756,6 +1224,12 @@ typedef atomic< uint_fast64_t > atomic_uint_fast64_t; typedef atomic< intmax_t > atomic_intmax_t; typedef atomic< uintmax_t > atomic_uintmax_t; +#if !defined(BOOST_ATOMIC_NO_FLOATING_POINT) +typedef atomic< float > atomic_float_t; +typedef atomic< double > atomic_double_t; +typedef atomic< long double > atomic_long_double_t; +#endif + typedef atomic< std::size_t > atomic_size_t; typedef atomic< std::ptrdiff_t > atomic_ptrdiff_t; diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/bitwise_cast.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/bitwise_cast.hpp index 7455ce21be..10d165e7c5 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/bitwise_cast.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/bitwise_cast.hpp @@ -5,7 +5,7 @@ * * Copyright (c) 2009 Helge Bahmann * Copyright (c) 2012 Tim Blechmann - * Copyright (c) 2013 - 2014 Andrey Semashev + * Copyright (c) 2013 - 2018 Andrey Semashev */ /*! * \file atomic/detail/bitwise_cast.hpp @@ -16,10 +16,11 @@ #ifndef BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_BITWISE_CAST_HPP_INCLUDED_ +#include #include -#if !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY) -#include -#endif +#include +#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -29,21 +30,35 @@ namespace boost { namespace atomics { namespace detail { -template< typename To, typename From > +template< std::size_t FromSize, typename To > +BOOST_FORCEINLINE void clear_padding(To& to, atomics::detail::true_type) BOOST_NOEXCEPT +{ + BOOST_ATOMIC_DETAIL_MEMSET(reinterpret_cast< unsigned char* >(atomics::detail::addressof(to)) + FromSize, 0, sizeof(To) - FromSize); +} + +template< std::size_t FromSize, typename To > +BOOST_FORCEINLINE void clear_padding(To&, atomics::detail::false_type) BOOST_NOEXCEPT +{ +} + +template< typename To, std::size_t FromSize, typename From > BOOST_FORCEINLINE To bitwise_cast(From const& from) BOOST_NOEXCEPT { - struct - { - To to; - } - value = {To()}; + To to; BOOST_ATOMIC_DETAIL_MEMCPY ( - &reinterpret_cast< char& >(value.to), - &reinterpret_cast< const char& >(from), - (sizeof(From) < sizeof(To) ? sizeof(From) : sizeof(To)) + atomics::detail::addressof(to), + atomics::detail::addressof(from), + (FromSize < sizeof(To) ? FromSize : sizeof(To)) ); - return value.to; + atomics::detail::clear_padding< FromSize >(to, atomics::detail::integral_constant< bool, FromSize < sizeof(To) >()); + return to; +} + +template< typename To, typename From > +BOOST_FORCEINLINE To bitwise_cast(From const& from) BOOST_NOEXCEPT +{ + return atomics::detail::bitwise_cast< To, sizeof(From) >(from); } } // namespace detail diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_arm.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_arm.hpp index b827c648d7..a26ea56ee5 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_arm.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_arm.hpp @@ -19,29 +19,12 @@ #define BOOST_ATOMIC_DETAIL_CAPS_GCC_ARM_HPP_INCLUDED_ #include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -#if !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__)) -// ARMv7 and later have dmb instruction -#define BOOST_ATOMIC_DETAIL_ARM_HAS_DMB 1 -#endif - -#if !(defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6Z__)) -// ARMv6k and ARMv7 have 8 and 16 ldrex/strex variants -#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB 1 -#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH 1 -#if !(((defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6ZK__)) && defined(__thumb__)) || defined(__ARM_ARCH_7M__)) -// ARMv6k and ARMv7 except ARMv7-M have 64-bit ldrex/strex variants. -// Unfortunately, GCC (at least 4.7.3 on Ubuntu) does not allocate register pairs properly when targeting ARMv6k Thumb, -// which is required for ldrexd/strexd instructions, so we disable 64-bit support. When targeting ARMv6k ARM -// or ARMv7 (both ARM and Thumb 2) it works as expected. -#define BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD 1 -#endif -#endif - #define BOOST_ATOMIC_INT8_LOCK_FREE 2 #define BOOST_ATOMIC_INT16_LOCK_FREE 2 #define BOOST_ATOMIC_INT32_LOCK_FREE 2 diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_atomic.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_atomic.hpp index f4e7a7023e..3b518cf49c 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_atomic.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_atomic.hpp @@ -16,32 +16,31 @@ #include #include +#if defined(__i386__) || defined(__x86_64__) +#include +#elif defined(__arm__) +#include +#elif defined(__POWERPC__) || defined(__PPC__) +#include +#endif #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -#if defined(__i386__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) -#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1 -#endif - -#if defined(__x86_64__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16) -#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1 -#endif - #if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) && (defined(BOOST_HAS_INT128) || !defined(BOOST_NO_ALIGNMENT)) #define BOOST_ATOMIC_INT128_LOCK_FREE 2 #else #define BOOST_ATOMIC_INT128_LOCK_FREE 0 #endif -#if __GCC_ATOMIC_LLONG_LOCK_FREE == 2 +#if (__GCC_ATOMIC_LLONG_LOCK_FREE == 2) || (defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) && BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8) #define BOOST_ATOMIC_LLONG_LOCK_FREE 2 #else #define BOOST_ATOMIC_LLONG_LOCK_FREE BOOST_ATOMIC_INT128_LOCK_FREE #endif -#if __GCC_ATOMIC_LONG_LOCK_FREE == 2 +#if (__GCC_ATOMIC_LONG_LOCK_FREE == 2) || (defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) && BOOST_ATOMIC_DETAIL_SIZEOF_LONG == 8) #define BOOST_ATOMIC_LONG_LOCK_FREE 2 #else #define BOOST_ATOMIC_LONG_LOCK_FREE BOOST_ATOMIC_LLONG_LOCK_FREE diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_ppc.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_ppc.hpp index ee2346081b..3e20fdee45 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_ppc.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_ppc.hpp @@ -17,6 +17,7 @@ #define BOOST_ATOMIC_DETAIL_CAPS_GCC_PPC_HPP_INCLUDED_ #include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -25,7 +26,7 @@ #define BOOST_ATOMIC_INT8_LOCK_FREE 2 #define BOOST_ATOMIC_INT16_LOCK_FREE 2 #define BOOST_ATOMIC_INT32_LOCK_FREE 2 -#if defined(__powerpc64__) || defined(__PPC64__) +#if defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LDARX_STDCX) #define BOOST_ATOMIC_INT64_LOCK_FREE 2 #endif #define BOOST_ATOMIC_POINTER_LOCK_FREE 2 diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_sync.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_sync.hpp index 7fac07a130..ffbe605a1a 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_sync.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_sync.hpp @@ -17,19 +17,18 @@ #define BOOST_ATOMIC_DETAIL_CAPS_GCC_SYNC_HPP_INCLUDED_ #include +#if defined(__i386__) || defined(__x86_64__) +#include +#elif defined(__arm__) +#include +#elif defined(__POWERPC__) || defined(__PPC__) +#include +#endif #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -#if defined(__i386__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) -#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1 -#endif - -#if defined(__x86_64__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16) -#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1 -#endif - #if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1)\ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2)\ || defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)\ diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_x86.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_x86.hpp index 7485b010c7..70c64628af 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_x86.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/caps_gcc_x86.hpp @@ -17,47 +17,12 @@ #define BOOST_ATOMIC_DETAIL_CAPS_GCC_X86_HPP_INCLUDED_ #include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once #endif -#if defined(__GNUC__) - -#if defined(__i386__) &&\ - (\ - defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) ||\ - defined(__i586__) || defined(__i686__) || defined(__pentium4__) || defined(__nocona__) || defined(__core2__) || defined(__corei7__) ||\ - defined(__k6__) || defined(__athlon__) || defined(__k8__) || defined(__amdfam10__) || defined(__bdver1__) || defined(__bdver2__) || defined(__bdver3__) || defined(__btver1__) || defined(__btver2__)\ - ) -#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1 -#endif - -#if defined(__x86_64__) && defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16) -#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1 -#endif - -#if defined(__x86_64__) || defined(__SSE2__) -// Use mfence only if SSE2 is available -#define BOOST_ATOMIC_DETAIL_X86_HAS_MFENCE 1 -#endif - -#else // defined(__GNUC__) - -#if defined(__i386__) && !defined(BOOST_ATOMIC_NO_CMPXCHG8B) -#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B 1 -#endif - -#if defined(__x86_64__) && !defined(BOOST_ATOMIC_NO_CMPXCHG16B) -#define BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B 1 -#endif - -#if !defined(BOOST_ATOMIC_NO_MFENCE) -#define BOOST_ATOMIC_DETAIL_X86_HAS_MFENCE 1 -#endif - -#endif // defined(__GNUC__) - #define BOOST_ATOMIC_INT8_LOCK_FREE 2 #define BOOST_ATOMIC_INT16_LOCK_FREE 2 #define BOOST_ATOMIC_INT32_LOCK_FREE 2 diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/casts.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/casts.hpp deleted file mode 100644 index db28bc25ff..0000000000 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/casts.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Distributed under the Boost Software License, Version 1.0. - * (See accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - * - * Copyright (c) 2009 Helge Bahmann - * Copyright (c) 2012 Tim Blechmann - * Copyright (c) 2013 - 2014 Andrey Semashev - */ -/*! - * \file atomic/detail/casts.hpp - * - * This header defines \c union_cast and \c memcpy_cast used to convert between storage and value types - */ - -#ifndef BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_ -#define BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_ - -#include -#include - -#ifdef BOOST_HAS_PRAGMA_ONCE -#pragma once -#endif - -namespace boost { -namespace atomics { -namespace detail { - -template< typename To, typename From > -BOOST_FORCEINLINE To union_cast(From const& from) BOOST_NOEXCEPT -{ - union - { - To as_to; - From as_from; - } - caster = {}; - caster.as_from = from; - return caster.as_to; -} - -template< typename To, typename From > -BOOST_FORCEINLINE To memcpy_cast(From const& from) BOOST_NOEXCEPT -{ - struct - { - To to; - } - value = {}; - std::memcpy - ( - &reinterpret_cast< char& >(value.to), - &reinterpret_cast< const char& >(from), - (sizeof(From) < sizeof(To) ? sizeof(From) : sizeof(To)) - ); - return value.to; -} - -} // namespace detail -} // namespace atomics -} // namespace boost - -#endif // BOOST_ATOMIC_DETAIL_CASTS_HPP_INCLUDED_ diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/config.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/config.hpp index 489281c2b4..d2a6afd203 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/config.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/config.hpp @@ -21,32 +21,8 @@ #pragma once #endif -#if defined(__has_builtin) -#if __has_builtin(__builtin_memcpy) -#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY -#endif -#if __has_builtin(__builtin_memcmp) -#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP -#endif -#elif defined(BOOST_GCC) -#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY -#define BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP -#endif - -#if defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY) -#define BOOST_ATOMIC_DETAIL_MEMCPY __builtin_memcpy -#else -#define BOOST_ATOMIC_DETAIL_MEMCPY std::memcpy -#endif - -#if defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP) -#define BOOST_ATOMIC_DETAIL_MEMCMP __builtin_memcmp -#else -#define BOOST_ATOMIC_DETAIL_MEMCMP std::memcmp -#endif - #if defined(__CUDACC__) -// nvcc does not support alternatives in asm statement constraints +// nvcc does not support alternatives ("q,m") in asm statement constraints #define BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES // nvcc does not support condition code register ("cc") clobber in asm statements #define BOOST_ATOMIC_DETAIL_NO_ASM_CLOBBER_CC @@ -60,16 +36,115 @@ #define BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA #endif -#if (defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) < 403) -// This macro indicates we're using older binutils that don't support implied zero displacements for memory opereands, -// making code like this invalid: -// movl 4+(%%edx), %%eax -#define BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS +#if (defined(__i386__) || defined(__x86_64__)) && (defined(__clang__) || (defined(BOOST_GCC) && (BOOST_GCC+0) < 40500) || defined(__SUNPRO_CC)) +// This macro indicates that the compiler does not support allocating eax:edx or rax:rdx register pairs ("A") in asm blocks +#define BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS +#endif + +#if defined(__i386__) && (defined(__PIC__) || defined(__PIE__)) && !(defined(__clang__) || (defined(BOOST_GCC) && (BOOST_GCC+0) >= 50100)) +// This macro indicates that asm blocks should preserve ebx value unchanged. Some compilers are able to maintain ebx themselves +// around the asm blocks. For those compilers we don't need to save/restore ebx in asm blocks. +#define BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX +#endif + +#if defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) +#if !(defined(BOOST_LIBSTDCXX11) && (BOOST_LIBSTDCXX_VERSION+0) >= 40700) /* libstdc++ from gcc >= 4.7 in C++11 mode */ +// This macro indicates that there is not even a basic standard header that is sufficient for most Boost.Atomic needs. +#define BOOST_ATOMIC_DETAIL_NO_CXX11_BASIC_HDR_TYPE_TRAITS +#endif +#endif // defined(BOOST_NO_CXX11_HDR_TYPE_TRAITS) + +// Enable pointer/reference casts between storage and value when possible. +// Note: Despite that MSVC does not employ strict aliasing rules for optimizations +// and does not require an explicit markup for types that may alias, we still don't +// enable the optimization for this compiler because at least MSVC-8 and 9 are known +// to generate broken code sometimes when casts are used. +#define BOOST_ATOMIC_DETAIL_MAY_ALIAS BOOST_MAY_ALIAS +#if !defined(BOOST_NO_MAY_ALIAS) +#define BOOST_ATOMIC_DETAIL_STORAGE_TYPE_MAY_ALIAS +#endif + +#if defined(__GCC_ASM_FLAG_OUTPUTS__) +// The compiler supports output values in flag registers. +// See: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html, Section 6.44.3. +#define BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS +#endif + +#if defined(__has_builtin) +#if __has_builtin(__builtin_constant_p) +#define BOOST_ATOMIC_DETAIL_IS_CONSTANT(x) __builtin_constant_p(x) +#endif +#elif defined(__GNUC__) +#define BOOST_ATOMIC_DETAIL_IS_CONSTANT(x) __builtin_constant_p(x) +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_IS_CONSTANT) +#define BOOST_ATOMIC_DETAIL_IS_CONSTANT(x) false +#endif + +#if (defined(__BYTE_ORDER__) && defined(__FLOAT_WORD_ORDER__) && (__BYTE_ORDER__+0) == (__FLOAT_WORD_ORDER__+0)) ||\ + defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64) +// This macro indicates that integer and floating point endianness is the same +#define BOOST_ATOMIC_DETAIL_INT_FP_ENDIAN_MATCH +#endif + +// Deprecated symbols markup +#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && defined(_MSC_VER) +#if (_MSC_VER) >= 1400 +#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __declspec(deprecated(msg)) +#else +// MSVC 7.1 only supports the attribute without a message +#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __declspec(deprecated) +#endif +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && defined(__has_extension) +#if __has_extension(attribute_deprecated_with_message) +#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __attribute__((deprecated(msg))) +#endif #endif -#if defined(__clang__) || (defined(BOOST_GCC) && (BOOST_GCC+0) < 40500) -// This macro indicates that the compiler does not support allocating rax:rdx register pairs ("A") in asm blocks -#define BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS +// gcc since 4.5 supports deprecated attribute with a message; older versions support the attribute without a message. +// Oracle Studio 12.4 supports deprecated attribute with a message; this is the first release that supports the attribute. +#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && (\ + (defined(__GNUC__) && ((__GNUC__ + 0) * 100 + (__GNUC_MINOR__ + 0)) >= 405) ||\ + (defined(__SUNPRO_CC) && (__SUNPRO_CC + 0) >= 0x5130)) +#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __attribute__((deprecated(msg))) +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && __cplusplus >= 201402 +#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) [[deprecated(msg)]] +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && defined(__GNUC__) +#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __attribute__((deprecated)) +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) && defined(__has_attribute) +#if __has_attribute(deprecated) +#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) __attribute__((deprecated)) +#endif +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_DEPRECATED) +#define BOOST_ATOMIC_DETAIL_DEPRECATED(msg) +#endif + +// In Boost.Atomic 1.67 we changed (op)_and_test methods to return true when the result is non-zero. This would be more consistent +// with the other names used in Boost.Atomic and the C++ standard library. Since the methods were announced as experimental and +// the previous behavior was released only in Boost 1.66, it was decided to change the result without changing the method names. +// By defining BOOST_ATOMIC_HIGHLIGHT_OP_AND_TEST the user has a way to highlight all uses of the affected functions so +// that it is easier to find and update the affected code (which is typically adding or removing negation of the result). This +// highlighting functionality is a temporary measure to help users upgrade from Boost 1.66 to newer Boost versions. It will +// be removed eventually. +// +// More info at: +// https://github.com/boostorg/atomic/issues/11 +// http://boost.2283326.n4.nabble.com/atomic-op-and-test-naming-tc4701445.html +#if defined(BOOST_ATOMIC_HIGHLIGHT_OP_AND_TEST) +#define BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST BOOST_ATOMIC_DETAIL_DEPRECATED("Boost.Atomic 1.67 has changed (op)_and_test result to the opposite. The functions now return true when the result is non-zero. Please, verify your use of the operation and undefine BOOST_ATOMIC_HIGHLIGHT_OP_AND_TEST.") +#else +#define BOOST_ATOMIC_DETAIL_HIGHLIGHT_OP_AND_TEST #endif #endif // BOOST_ATOMIC_DETAIL_CONFIG_HPP_INCLUDED_ diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/int_sizes.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/int_sizes.hpp index eada4fff07..2a9757c147 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/int_sizes.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/int_sizes.hpp @@ -39,7 +39,7 @@ #if defined(__SIZEOF_POINTER__) #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER __SIZEOF_POINTER__ #elif defined(_MSC_VER) -#if defined(_M_AMD64) || defined(_M_IA64) +#if defined(_M_AMD64) || defined(_M_ARM64) || defined(_M_IA64) #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 8 #else #define BOOST_ATOMIC_DETAIL_SIZEOF_POINTER 4 @@ -117,7 +117,7 @@ #include #include - #if defined(_MSC_VER) && ( _MSC_VER <= 1310 || defined(UNDER_CE) && _MSC_VER <= 1500 ) +#if defined(_MSC_VER) && (_MSC_VER <= 1310 || defined(UNDER_CE) && _MSC_VER <= 1500) // MSVC 7.1 and MSVC 8 (arm) define WCHAR_MAX to a value not suitable for constant expressions #define BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T 2 #elif (WCHAR_MAX + 0) == 0xff || (WCHAR_MAX + 0) == 0x7f @@ -134,7 +134,7 @@ #if !defined(BOOST_ATOMIC_DETAIL_SIZEOF_SHORT) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_INT) ||\ !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LONG) || !defined(BOOST_ATOMIC_DETAIL_SIZEOF_LLONG) ||\ !defined(BOOST_ATOMIC_DETAIL_SIZEOF_WCHAR_T) -#error Boost.Atomic: Failed to determine builtin integer sizes, the target platform is not supported. Please, report to the developers. +#error Boost.Atomic: Failed to determine builtin integer sizes, the target platform is not supported. Please, report to the developers (patches are welcome). #endif #endif // BOOST_ATOMIC_DETAIL_INT_SIZES_HPP_INCLUDED_ diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/interlocked.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/interlocked.hpp index 1c62396bf5..774354fb7f 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/interlocked.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/interlocked.hpp @@ -2,7 +2,7 @@ #define BOOST_ATOMIC_DETAIL_INTERLOCKED_HPP // Copyright (c) 2009 Helge Bahmann -// Copyright (c) 2012 - 2014 Andrey Semashev +// Copyright (c) 2012 - 2014, 2017 Andrey Semashev // // Distributed under the Boost Software License, Version 1.0. // See accompanying file LICENSE_1_0.txt or copy at @@ -73,6 +73,8 @@ extern "C" long __cdecl _InterlockedExchange( long volatile *, long ); #pragma intrinsic(_InterlockedAnd) #pragma intrinsic(_InterlockedOr) #pragma intrinsic(_InterlockedXor) +#pragma intrinsic(_interlockedbittestandset) +#pragma intrinsic(_interlockedbittestandreset) #endif #define BOOST_ATOMIC_INTERLOCKED_COMPARE_EXCHANGE(dest, exchange, compare) _InterlockedCompareExchange((long*)(dest), (long)(exchange), (long)(compare)) @@ -81,6 +83,18 @@ extern "C" long __cdecl _InterlockedExchange( long volatile *, long ); #define BOOST_ATOMIC_INTERLOCKED_AND(dest, arg) _InterlockedAnd((long*)(dest), (long)(arg)) #define BOOST_ATOMIC_INTERLOCKED_OR(dest, arg) _InterlockedOr((long*)(dest), (long)(arg)) #define BOOST_ATOMIC_INTERLOCKED_XOR(dest, arg) _InterlockedXor((long*)(dest), (long)(arg)) +#define BOOST_ATOMIC_INTERLOCKED_BTS(dest, arg) _interlockedbittestandset((long*)(dest), (long)(arg)) +#define BOOST_ATOMIC_INTERLOCKED_BTR(dest, arg) _interlockedbittestandreset((long*)(dest), (long)(arg)) + +#if defined(_M_AMD64) +#if defined(BOOST_MSVC) +#pragma intrinsic(_interlockedbittestandset64) +#pragma intrinsic(_interlockedbittestandreset64) +#endif + +#define BOOST_ATOMIC_INTERLOCKED_BTS64(dest, arg) _interlockedbittestandset64((__int64*)(dest), (__int64)(arg)) +#define BOOST_ATOMIC_INTERLOCKED_BTR64(dest, arg) _interlockedbittestandreset64((__int64*)(dest), (__int64)(arg)) +#endif // defined(_M_AMD64) #if (defined(_M_IX86) && _M_IX86 >= 500) || defined(_M_AMD64) || defined(_M_IA64) #if defined(BOOST_MSVC) @@ -169,7 +183,7 @@ extern "C" long __cdecl _InterlockedExchange( long volatile *, long ); #endif -#if _MSC_VER >= 1700 && defined(_M_ARM) +#if _MSC_VER >= 1700 && (defined(_M_ARM) || defined(_M_ARM64)) #if defined(BOOST_MSVC) #pragma intrinsic(_InterlockedExchangeAdd64) @@ -251,10 +265,17 @@ extern "C" long __cdecl _InterlockedExchange( long volatile *, long ); #define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_ACQUIRE(dest, addend) _InterlockedExchangeAdd64_acq((__int64*)(dest), (__int64)(addend)) #define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_RELEASE(dest, addend) _InterlockedExchangeAdd64_rel((__int64*)(dest), (__int64)(addend)) +#if defined(_M_ARM64) +#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64((__int64*)(dest), byte_offset)) +#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_RELAXED(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_RELAXED((__int64*)(dest), byte_offset)) +#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_ACQUIRE(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_ACQUIRE((__int64*)(dest), byte_offset)) +#define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_RELEASE(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD64_RELEASE((__int64*)(dest), byte_offset)) +#else #define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD((long*)(dest), byte_offset)) #define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_RELAXED(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_RELAXED((long*)(dest), byte_offset)) #define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_ACQUIRE(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_ACQUIRE((long*)(dest), byte_offset)) #define BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_POINTER_RELEASE(dest, byte_offset) ((void*)BOOST_ATOMIC_INTERLOCKED_EXCHANGE_ADD_RELEASE((long*)(dest), byte_offset)) +#endif #if defined(BOOST_MSVC) #pragma intrinsic(_InterlockedExchange8_nf) @@ -387,6 +408,26 @@ extern "C" long __cdecl _InterlockedExchange( long volatile *, long ); #define BOOST_ATOMIC_INTERLOCKED_XOR64_ACQUIRE(dest, arg) _InterlockedXor64_acq((__int64*)(dest), (__int64)(arg)) #define BOOST_ATOMIC_INTERLOCKED_XOR64_RELEASE(dest, arg) _InterlockedXor64_rel((__int64*)(dest), (__int64)(arg)) +#if defined(BOOST_MSVC) +#pragma intrinsic(_interlockedbittestandset_nf) +#pragma intrinsic(_interlockedbittestandset_acq) +#pragma intrinsic(_interlockedbittestandset_rel) +#endif + +#define BOOST_ATOMIC_INTERLOCKED_BTS_RELAXED(dest, arg) _interlockedbittestandset_nf((long*)(dest), (long)(arg)) +#define BOOST_ATOMIC_INTERLOCKED_BTS_ACQUIRE(dest, arg) _interlockedbittestandset_acq((long*)(dest), (long)(arg)) +#define BOOST_ATOMIC_INTERLOCKED_BTS_RELEASE(dest, arg) _interlockedbittestandset_rel((long*)(dest), (long)(arg)) + +#if defined(BOOST_MSVC) +#pragma intrinsic(_interlockedbittestandreset_nf) +#pragma intrinsic(_interlockedbittestandreset_acq) +#pragma intrinsic(_interlockedbittestandreset_rel) +#endif + +#define BOOST_ATOMIC_INTERLOCKED_BTR_RELAXED(dest, arg) _interlockedbittestandreset_nf((long*)(dest), (long)(arg)) +#define BOOST_ATOMIC_INTERLOCKED_BTR_ACQUIRE(dest, arg) _interlockedbittestandreset_acq((long*)(dest), (long)(arg)) +#define BOOST_ATOMIC_INTERLOCKED_BTR_RELEASE(dest, arg) _interlockedbittestandreset_rel((long*)(dest), (long)(arg)) + #endif // _MSC_VER >= 1700 && defined(_M_ARM) #endif // _MSC_VER < 1400 diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/operations_lockfree.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/operations_lockfree.hpp index b465403a6d..62b45836b5 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/operations_lockfree.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/operations_lockfree.hpp @@ -18,7 +18,7 @@ #include #if !defined(BOOST_ATOMIC_EMULATED) -#include BOOST_ATOMIC_DETAIL_HEADER(boost/atomic/detail/ops_) +#include BOOST_ATOMIC_DETAIL_BACKEND_HEADER(boost/atomic/detail/ops_) #else #include #endif diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_cas_based.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_cas_based.hpp index 504cedb70f..e2e18aa384 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_cas_based.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_cas_based.hpp @@ -47,6 +47,8 @@ struct cas_based_operations : { typedef typename Base::storage_type storage_type; + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true; + static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { storage_type old_val; diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_emulated.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_emulated.hpp index 17032917fe..f30fbdab9f 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_emulated.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_emulated.hpp @@ -30,10 +30,17 @@ namespace boost { namespace atomics { namespace detail { -template< typename T > +template< std::size_t Size, bool Signed > struct emulated_operations { - typedef T storage_type; + typedef typename make_storage_type< Size >::type storage_type; + typedef typename make_storage_type< Size >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = Size; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; + + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = false; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -140,18 +147,12 @@ struct emulated_operations { store(storage, (storage_type)0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return false; - } }; template< std::size_t Size, bool Signed > struct operations : - public emulated_operations< typename make_storage_type< Size, Signed >::type > + public emulated_operations< Size, Signed > { - typedef typename make_storage_type< Size, Signed >::aligned aligned_storage_type; }; } // namespace detail diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_extending_cas_based.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_extending_cas_based.hpp index 3f21031f12..5f197cea48 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_extending_cas_based.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_extending_cas_based.hpp @@ -18,6 +18,7 @@ #include #include #include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -32,18 +33,18 @@ struct extending_cas_based_operations : public Base { typedef typename Base::storage_type storage_type; - typedef typename make_storage_type< Size, Signed >::type emulated_storage_type; + typedef typename make_storage_type< Size >::type emulated_storage_type; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { storage_type old_val; atomics::detail::non_atomic_load(storage, old_val); - emulated_storage_type new_val; + storage_type new_val; do { - new_val = static_cast< emulated_storage_type >(old_val) + static_cast< emulated_storage_type >(v); + new_val = atomics::detail::integral_extend< Signed, storage_type >(static_cast< emulated_storage_type >(old_val + v)); } - while (!Base::compare_exchange_weak(storage, old_val, static_cast< storage_type >(new_val), order, memory_order_relaxed)); + while (!Base::compare_exchange_weak(storage, old_val, new_val, order, memory_order_relaxed)); return old_val; } @@ -51,12 +52,12 @@ struct extending_cas_based_operations : { storage_type old_val; atomics::detail::non_atomic_load(storage, old_val); - emulated_storage_type new_val; + storage_type new_val; do { - new_val = static_cast< emulated_storage_type >(old_val) - static_cast< emulated_storage_type >(v); + new_val = atomics::detail::integral_extend< Signed, storage_type >(static_cast< emulated_storage_type >(old_val - v)); } - while (!Base::compare_exchange_weak(storage, old_val, static_cast< storage_type >(new_val), order, memory_order_relaxed)); + while (!Base::compare_exchange_weak(storage, old_val, new_val, order, memory_order_relaxed)); return old_val; } }; diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_alpha.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_alpha.hpp index 3c0e258ceb..85b1342982 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_alpha.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_alpha.hpp @@ -16,6 +16,7 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_ALPHA_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_GCC_ALPHA_HPP_INCLUDED_ +#include #include #include #include @@ -63,15 +64,18 @@ namespace detail { struct gcc_alpha_operations_base { + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT { - if ((order & memory_order_release) != 0) + if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) __asm__ __volatile__ ("mb" ::: "memory"); } static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT { - if ((order & (memory_order_consume | memory_order_acquire)) != 0) + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) __asm__ __volatile__ ("mb" ::: "memory"); } @@ -87,8 +91,11 @@ template< bool Signed > struct operations< 4u, Signed > : public gcc_alpha_operations_base { - typedef typename make_storage_type< 4u, Signed >::type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type storage_type; + typedef typename make_storage_type< 4u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -337,11 +344,6 @@ struct operations< 4u, Signed > : { store(storage, 0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; @@ -599,8 +601,11 @@ template< bool Signed > struct operations< 8u, Signed > : public gcc_alpha_operations_base { - typedef typename make_storage_type< 8u, Signed >::type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 8u >::type storage_type; + typedef typename make_storage_type< 8u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -849,11 +854,6 @@ struct operations< 8u, Signed > : { store(storage, 0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_arm.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_arm.hpp index d2c2f39a2c..b32159536f 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_arm.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_arm.hpp @@ -16,12 +16,14 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_ARM_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_GCC_ARM_HPP_INCLUDED_ +#include #include #include #include #include +#include #include -#include +#include #include #ifdef BOOST_HAS_PRAGMA_ONCE @@ -53,110 +55,16 @@ namespace detail { // (Actually it looks like these are available from version 6k onwards.) // FIXME these are not yet used; should be mostly a matter of copy-and-paste. // I think you can supply an immediate offset to the address. -// -// A memory barrier is effected using a "co-processor 15" instruction, -// though a separate assembler mnemonic is available for it in v7. -// -// "Thumb 1" is a subset of the ARM instruction set that uses a 16-bit encoding. It -// doesn't include all instructions and in particular it doesn't include the co-processor -// instruction used for the memory barrier or the load-locked/store-conditional -// instructions. So, if we're compiling in "Thumb 1" mode, we need to wrap all of our -// asm blocks with code to temporarily change to ARM mode. -// -// You can only change between ARM and Thumb modes when branching using the bx instruction. -// bx takes an address specified in a register. The least significant bit of the address -// indicates the mode, so 1 is added to indicate that the destination code is Thumb. -// A temporary register is needed for the address and is passed as an argument to these -// macros. It must be one of the "low" registers accessible to Thumb code, specified -// using the "l" attribute in the asm statement. -// -// Architecture v7 introduces "Thumb 2", which does include (almost?) all of the ARM -// instruction set. (Actually, there was an extension of v6 called v6T2 which supported -// "Thumb 2" mode, but its architecture manual is no longer available, referring to v7.) -// So in v7 we don't need to change to ARM mode; we can write "universal -// assembler" which will assemble to Thumb 2 or ARM code as appropriate. The only thing -// we need to do to make this "universal" assembler mode work is to insert "IT" instructions -// to annotate the conditional instructions. These are ignored in other modes (e.g. v6), -// so they can always be present. - -// A note about memory_order_consume. Technically, this architecture allows to avoid -// unnecessary memory barrier after consume load since it supports data dependency ordering. -// However, some compiler optimizations may break a seemingly valid code relying on data -// dependency tracking by injecting bogus branches to aid out of order execution. -// This may happen not only in Boost.Atomic code but also in user's code, which we have no -// control of. See this thread: http://lists.boost.org/Archives/boost/2014/06/213890.php. -// For this reason we promote memory_order_consume to memory_order_acquire. - -#if defined(__thumb__) && !defined(__thumb2__) -#define BOOST_ATOMIC_DETAIL_ARM_ASM_START(TMPREG) "adr " #TMPREG ", 8f\n" "bx " #TMPREG "\n" ".arm\n" ".align 4\n" "8:\n" -#define BOOST_ATOMIC_DETAIL_ARM_ASM_END(TMPREG) "adr " #TMPREG ", 9f + 1\n" "bx " #TMPREG "\n" ".thumb\n" ".align 2\n" "9:\n" -#define BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(var) "=&l" (var) -#else -// The tmpreg may be wasted in this case, which is non-optimal. -#define BOOST_ATOMIC_DETAIL_ARM_ASM_START(TMPREG) -#define BOOST_ATOMIC_DETAIL_ARM_ASM_END(TMPREG) -#define BOOST_ATOMIC_DETAIL_ARM_ASM_TMPREG_CONSTRAINT(var) "=&r" (var) -#endif - -struct gcc_arm_operations_base -{ - static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT - { - if ((order & memory_order_release) != 0) - hardware_full_fence(); - } - - static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT - { - if ((order & (memory_order_consume | memory_order_acquire)) != 0) - hardware_full_fence(); - } - - static BOOST_FORCEINLINE void fence_after_store(memory_order order) BOOST_NOEXCEPT - { - if (order == memory_order_seq_cst) - hardware_full_fence(); - } - - static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT - { -#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_DMB) - // Older binutils (supposedly, older than 2.21.1) didn't support symbolic or numeric arguments of the "dmb" instruction such as "ish" or "#11". - // As a workaround we have to inject encoded bytes of the instruction. There are two encodings for the instruction: ARM and Thumb. See ARM Architecture Reference Manual, A8.8.43. - // Since we cannot detect binutils version at compile time, we'll have to always use this hack. - __asm__ __volatile__ - ( -#if defined(__thumb2__) - ".short 0xF3BF, 0x8F5B\n" // dmb ish -#else - ".word 0xF57FF05B\n" // dmb ish -#endif - : - : - : "memory" - ); -#else - int tmp; - __asm__ __volatile__ - ( - BOOST_ATOMIC_DETAIL_ARM_ASM_START(%0) - "mcr\tp15, 0, r0, c7, c10, 5\n" - BOOST_ATOMIC_DETAIL_ARM_ASM_END(%0) - : "=&l" (tmp) - : - : "memory" - ); -#endif - } -}; - template< bool Signed > struct operations< 4u, Signed > : public gcc_arm_operations_base { - typedef typename make_storage_type< 4u, Signed >::type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type storage_type; + typedef typename make_storage_type< 4u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -215,7 +123,7 @@ struct operations< 4u, Signed > : [success] "=&r" (success), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [expected] "r" (expected), // %4 + : [expected] "Ir" (expected), // %4 [desired] "r" (desired) // %5 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -251,7 +159,7 @@ struct operations< 4u, Signed > : [success] "=&r" (success), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [expected] "r" (expected), // %4 + : [expected] "Ir" (expected), // %4 [desired] "r" (desired) // %5 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -282,7 +190,7 @@ struct operations< 4u, Signed > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -308,7 +216,7 @@ struct operations< 4u, Signed > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -334,7 +242,7 @@ struct operations< 4u, Signed > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -360,7 +268,7 @@ struct operations< 4u, Signed > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -386,7 +294,7 @@ struct operations< 4u, Signed > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -402,13 +310,268 @@ struct operations< 4u, Signed > : { store(storage, 0, order); } +}; + +#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB) + +template< bool Signed > +struct operations< 1u, Signed > : + public gcc_arm_operations_base +{ + typedef typename make_storage_type< 1u >::type storage_type; + typedef typename make_storage_type< 1u >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type extended_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 1u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; + + static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + storage = v; + fence_after_store(order); + } - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT + static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT { - return true; + storage_type v = storage; + fence_after(order); + return v; + } + + static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + extended_storage_type original; + fence_before(order); + uint32_t tmp; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexb %[original], %[storage]\n" // load the original value and zero-extend to 32 bits + "strexb %[tmp], %[value], %[storage]\n" // store the replacement, tmp = store failed + "teq %[tmp], #0\n" // check if store succeeded + "bne 1b\n" + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [tmp] "=&l" (tmp), [original] "=&r" (original), [storage] "+Q" (storage) + : [value] "r" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE bool compare_exchange_weak( + storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT + { + fence_before(success_order); + uint32_t success; + uint32_t tmp; + extended_storage_type original; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "mov %[success], #0\n" // success = 0 + "ldrexb %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "cmp %[original], %[expected]\n" // flags = original==expected + "itt eq\n" // [hint that the following 2 instructions are conditional on flags.equal] + "strexbeq %[success], %[desired], %[storage]\n" // if (flags.equal) *(&storage) = desired, success = store failed + "eoreq %[success], %[success], #1\n" // if (flags.equal) success ^= 1 (i.e. make it 1 if store succeeded) + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [success] "=&r" (success), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [expected] "Ir" (atomics::detail::zero_extend< extended_storage_type >(expected)), // %4 + [desired] "r" (desired) // %5 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + if (success) + fence_after(success_order); + else + fence_after(failure_order); + expected = static_cast< storage_type >(original); + return !!success; + } + + static BOOST_FORCEINLINE bool compare_exchange_strong( + storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT + { + fence_before(success_order); + uint32_t success; + uint32_t tmp; + extended_storage_type original; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "mov %[success], #0\n" // success = 0 + "1:\n" + "ldrexb %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "cmp %[original], %[expected]\n" // flags = original==expected + "bne 2f\n" // if (!flags.equal) goto end + "strexb %[success], %[desired], %[storage]\n" // *(&storage) = desired, success = store failed + "eors %[success], %[success], #1\n" // success ^= 1 (i.e. make it 1 if store succeeded); flags.equal = success == 0 + "beq 1b\n" // if (flags.equal) goto retry + "2:\n" + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [success] "=&r" (success), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [expected] "Ir" (atomics::detail::zero_extend< extended_storage_type >(expected)), // %4 + [desired] "r" (desired) // %5 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + if (success) + fence_after(success_order); + else + fence_after(failure_order); + expected = static_cast< storage_type >(original); + return !!success; + } + + static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexb %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "add %[result], %[original], %[value]\n" // result = original + value + "strexb %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexb %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "sub %[result], %[original], %[value]\n" // result = original - value + "strexb %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexb %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "and %[result], %[original], %[value]\n" // result = original & value + "strexb %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexb %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "orr %[result], %[original], %[value]\n" // result = original | value + "strexb %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexb %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "eor %[result], %[original], %[value]\n" // result = original ^ value + "strexb %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT + { + return !!exchange(storage, (storage_type)1, order); + } + + static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT + { + store(storage, 0, order); } }; +#else // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB) template< > struct operations< 1u, false > : @@ -437,7 +600,7 @@ struct operations< 1u, false > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -464,7 +627,7 @@ struct operations< 1u, false > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -499,7 +662,7 @@ struct operations< 1u, true > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -526,7 +689,7 @@ struct operations< 1u, true > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -534,6 +697,268 @@ struct operations< 1u, true > : } }; +#endif // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXB_STREXB) + +#if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH) + +template< bool Signed > +struct operations< 2u, Signed > : + public gcc_arm_operations_base +{ + typedef typename make_storage_type< 2u >::type storage_type; + typedef typename make_storage_type< 2u >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type extended_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 2u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; + + static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + storage = v; + fence_after_store(order); + } + + static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT + { + storage_type v = storage; + fence_after(order); + return v; + } + + static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + extended_storage_type original; + fence_before(order); + uint32_t tmp; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexh %[original], %[storage]\n" // load the original value and zero-extend to 32 bits + "strexh %[tmp], %[value], %[storage]\n" // store the replacement, tmp = store failed + "teq %[tmp], #0\n" // check if store succeeded + "bne 1b\n" + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [tmp] "=&l" (tmp), [original] "=&r" (original), [storage] "+Q" (storage) + : [value] "r" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE bool compare_exchange_weak( + storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT + { + fence_before(success_order); + uint32_t success; + uint32_t tmp; + extended_storage_type original; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "mov %[success], #0\n" // success = 0 + "ldrexh %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "cmp %[original], %[expected]\n" // flags = original==expected + "itt eq\n" // [hint that the following 2 instructions are conditional on flags.equal] + "strexheq %[success], %[desired], %[storage]\n" // if (flags.equal) *(&storage) = desired, success = store failed + "eoreq %[success], %[success], #1\n" // if (flags.equal) success ^= 1 (i.e. make it 1 if store succeeded) + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [success] "=&r" (success), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [expected] "Ir" (atomics::detail::zero_extend< extended_storage_type >(expected)), // %4 + [desired] "r" (desired) // %5 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + if (success) + fence_after(success_order); + else + fence_after(failure_order); + expected = static_cast< storage_type >(original); + return !!success; + } + + static BOOST_FORCEINLINE bool compare_exchange_strong( + storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT + { + fence_before(success_order); + uint32_t success; + uint32_t tmp; + extended_storage_type original; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "mov %[success], #0\n" // success = 0 + "1:\n" + "ldrexh %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "cmp %[original], %[expected]\n" // flags = original==expected + "bne 2f\n" // if (!flags.equal) goto end + "strexh %[success], %[desired], %[storage]\n" // *(&storage) = desired, success = store failed + "eors %[success], %[success], #1\n" // success ^= 1 (i.e. make it 1 if store succeeded); flags.equal = success == 0 + "beq 1b\n" // if (flags.equal) goto retry + "2:\n" + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [success] "=&r" (success), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [expected] "Ir" (atomics::detail::zero_extend< extended_storage_type >(expected)), // %4 + [desired] "r" (desired) // %5 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + if (success) + fence_after(success_order); + else + fence_after(failure_order); + expected = static_cast< storage_type >(original); + return !!success; + } + + static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexh %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "add %[result], %[original], %[value]\n" // result = original + value + "strexh %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexh %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "sub %[result], %[original], %[value]\n" // result = original - value + "strexh %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexh %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "and %[result], %[original], %[value]\n" // result = original & value + "strexh %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexh %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "orr %[result], %[original], %[value]\n" // result = original | value + "strexh %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + uint32_t tmp; + extended_storage_type original, result; + __asm__ __volatile__ + ( + BOOST_ATOMIC_DETAIL_ARM_ASM_START(%[tmp]) + "1:\n" + "ldrexh %[original], %[storage]\n" // original = zero_extend(*(&storage)) + "eor %[result], %[original], %[value]\n" // result = original ^ value + "strexh %[tmp], %[result], %[storage]\n" // *(&storage) = result, tmp = store failed + "teq %[tmp], #0\n" // flags = tmp==0 + "bne 1b\n" // if (!flags.equal) goto retry + BOOST_ATOMIC_DETAIL_ARM_ASM_END(%[tmp]) + : [original] "=&r" (original), // %0 + [result] "=&r" (result), // %1 + [tmp] "=&l" (tmp), // %2 + [storage] "+Q" (storage) // %3 + : [value] "Ir" (v) // %4 + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return static_cast< storage_type >(original); + } + + static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT + { + return !!exchange(storage, (storage_type)1, order); + } + + static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT + { + store(storage, 0, order); + } +}; + +#else // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH) template< > struct operations< 2u, false > : @@ -562,7 +987,7 @@ struct operations< 2u, false > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -589,7 +1014,7 @@ struct operations< 2u, false > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -624,7 +1049,7 @@ struct operations< 2u, true > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -651,7 +1076,7 @@ struct operations< 2u, true > : [result] "=&r" (result), // %1 [tmp] "=&l" (tmp), // %2 [storage] "+Q" (storage) // %3 - : [value] "r" (v) // %4 + : [value] "Ir" (v) // %4 : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); @@ -659,6 +1084,7 @@ struct operations< 2u, true > : } }; +#endif // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXH_STREXH) #if defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD) @@ -677,8 +1103,11 @@ template< bool Signed > struct operations< 8u, Signed > : public gcc_arm_operations_base { - typedef typename make_storage_type< 8u, Signed >::type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 8u >::type storage_type; + typedef typename make_storage_type< 8u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -944,11 +1373,6 @@ struct operations< 8u, Signed > : { store(storage, 0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; #endif // defined(BOOST_ATOMIC_DETAIL_ARM_HAS_LDREXD_STREXD) diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_atomic.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_atomic.hpp index 573a695d08..ce40e3b2b9 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_atomic.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_atomic.hpp @@ -14,12 +14,13 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_ATOMIC_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_GCC_ATOMIC_HPP_INCLUDED_ +#include #include #include #include #include #include -#if defined(__clang__) && (defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)) +#if (defined(__clang__) || (defined(BOOST_GCC) && (BOOST_GCC+0) >= 70000)) && (defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B)) #include #include #endif @@ -53,10 +54,10 @@ namespace detail { * The function converts \c boost::memory_order values to the compiler-specific constants. * * NOTE: The intention is that the function is optimized away by the compiler, and the - * compiler-specific constants are passed to the intrinsics. I know constexpr doesn't + * compiler-specific constants are passed to the intrinsics. Unfortunately, constexpr doesn't * work in this case because the standard atomics interface require memory ordering * constants to be passed as function arguments, at which point they stop being constexpr. - * However it is crucial that the compiler sees constants and not runtime values, + * However, it is crucial that the compiler sees constants and not runtime values, * because otherwise it just ignores the ordering value and always uses seq_cst. * This is the case with Intel C++ Compiler 14.0.3 (Composer XE 2013 SP1, update 3) and * gcc 4.8.2. Intel Compiler issues a warning in this case: @@ -70,8 +71,8 @@ namespace detail { * all functions are called with constant orderings and call intrinstcts properly. * * Unfortunately, this still doesn't work in debug mode as the compiler doesn't - * inline functions even when marked with BOOST_FORCEINLINE. In this case all atomic - * operaions will be executed with seq_cst semantics. + * propagate constants even when functions are marked with BOOST_FORCEINLINE. In this case + * all atomic operaions will be executed with seq_cst semantics. */ BOOST_FORCEINLINE BOOST_CONSTEXPR int convert_memory_order_to_gcc(memory_order order) BOOST_NOEXCEPT { @@ -80,10 +81,20 @@ BOOST_FORCEINLINE BOOST_CONSTEXPR int convert_memory_order_to_gcc(memory_order o (order == memory_order_acq_rel ? __ATOMIC_ACQ_REL : __ATOMIC_SEQ_CST))))); } -template< typename T > +template< std::size_t Size, bool Signed > struct gcc_atomic_operations { - typedef T storage_type; + typedef typename make_storage_type< Size >::type storage_type; + typedef typename make_storage_type< Size >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = Size; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; + + // Note: In the current implementation, gcc_atomic_operations are used only when the particularly sized __atomic + // intrinsics are always lock-free (i.e. the corresponding LOCK_FREE macro is 2). Therefore it is safe to + // always set is_always_lock_free to true here. + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -156,31 +167,29 @@ struct gcc_atomic_operations { __atomic_clear(const_cast< storage_type* >(&storage), atomics::detail::convert_memory_order_to_gcc(order)); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile& storage) BOOST_NOEXCEPT - { - return __atomic_is_lock_free(sizeof(storage_type), &storage); - } }; #if BOOST_ATOMIC_INT128_LOCK_FREE > 0 -#if defined(__clang__) && defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) +#if (defined(__clang__) || (defined(BOOST_GCC) && (BOOST_GCC+0) >= 70000)) && defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) // Workaround for clang bug: http://llvm.org/bugs/show_bug.cgi?id=19149 // Clang 3.4 does not implement 128-bit __atomic* intrinsics even though it defines __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 +// A similar problem exists with gcc 7 as well, as it requires to link with libatomic to use 16-byte intrinsics: +// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80878 template< bool Signed > struct operations< 16u, Signed > : public cas_based_operations< gcc_dcas_x86_64< Signed > > { + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 16u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; }; #else template< bool Signed > struct operations< 16u, Signed > : - public gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type > + public gcc_atomic_operations< 16u, Signed > { - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; }; #endif @@ -195,6 +204,8 @@ template< bool Signed > struct operations< 8u, Signed > : public cas_based_operations< gcc_dcas_x86< Signed > > { + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; }; #elif (BOOST_ATOMIC_DETAIL_SIZEOF_LLONG == 8 && __GCC_ATOMIC_LLONG_LOCK_FREE != BOOST_ATOMIC_LLONG_LOCK_FREE) ||\ @@ -207,18 +218,16 @@ struct operations< 8u, Signed > : template< bool Signed > struct operations< 8u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >, 8u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 16u, Signed >, 8u, Signed > { - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; }; #else template< bool Signed > struct operations< 8u, Signed > : - public gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type > + public gcc_atomic_operations< 8u, Signed > { - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; }; #endif @@ -237,18 +246,16 @@ struct operations< 8u, Signed > : template< bool Signed > struct operations< 4u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >, 4u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 8u, Signed >, 4u, Signed > { - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; }; #else // !defined(BOOST_ATOMIC_DETAIL_INT64_EXTENDED) template< bool Signed > struct operations< 4u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >, 4u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 16u, Signed >, 4u, Signed > { - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; }; #endif // !defined(BOOST_ATOMIC_DETAIL_INT64_EXTENDED) @@ -257,9 +264,8 @@ struct operations< 4u, Signed > : template< bool Signed > struct operations< 4u, Signed > : - public gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type > + public gcc_atomic_operations< 4u, Signed > { - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; }; #endif @@ -278,27 +284,24 @@ struct operations< 4u, Signed > : template< bool Signed > struct operations< 2u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type >, 2u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 4u, Signed >, 2u, Signed > { - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; }; #elif !defined(BOOST_ATOMIC_DETAIL_INT64_EXTENDED) template< bool Signed > struct operations< 2u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >, 2u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 8u, Signed >, 2u, Signed > { - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; }; #else template< bool Signed > struct operations< 2u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >, 2u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 16u, Signed >, 2u, Signed > { - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; }; #endif @@ -307,9 +310,8 @@ struct operations< 2u, Signed > : template< bool Signed > struct operations< 2u, Signed > : - public gcc_atomic_operations< typename make_storage_type< 2u, Signed >::type > + public gcc_atomic_operations< 2u, Signed > { - typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type; }; #endif @@ -328,36 +330,32 @@ struct operations< 2u, Signed > : template< bool Signed > struct operations< 1u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 2u, Signed >::type >, 1u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 2u, Signed >, 1u, Signed > { - typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type; }; #elif !defined(BOOST_ATOMIC_DETAIL_INT32_EXTENDED) template< bool Signed > struct operations< 1u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 4u, Signed >::type >, 1u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 4u, Signed >, 1u, Signed > { - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; }; #elif !defined(BOOST_ATOMIC_DETAIL_INT64_EXTENDED) template< bool Signed > struct operations< 1u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 8u, Signed >::type >, 1u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 8u, Signed >, 1u, Signed > { - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; }; #else template< bool Signed > struct operations< 1u, Signed > : - public extending_cas_based_operations< gcc_atomic_operations< typename make_storage_type< 16u, Signed >::type >, 1u, Signed > + public extending_cas_based_operations< gcc_atomic_operations< 16u, Signed >, 1u, Signed > { - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; }; #endif @@ -366,9 +364,8 @@ struct operations< 1u, Signed > : template< bool Signed > struct operations< 1u, Signed > : - public gcc_atomic_operations< typename make_storage_type< 1u, Signed >::type > + public gcc_atomic_operations< 1u, Signed > { - typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type; }; #endif diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_ppc.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_ppc.hpp index 9131791193..a826736d17 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_ppc.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_ppc.hpp @@ -16,10 +16,12 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_PPC_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_GCC_PPC_HPP_INCLUDED_ +#include #include #include #include #include +#include #include #ifdef BOOST_HAS_PRAGMA_ONCE @@ -57,7 +59,9 @@ namespace detail { cycles, while "sync" hast a cost of about 50 clock cycles, the small penalty to atomic loads more than compensates for this. - Byte- and halfword-sized atomic values are realized by encoding the + Byte- and halfword-sized atomic values are implemented in two ways. + When 8 and 16-bit instructions are available (in Power8 and later), + they are used. Otherwise operations are realized by encoding the value to be represented into a word, performing sign/zero extension as appropriate. This means that after add/sub operations the value needs fixing up to accurately preserve the wrap-around semantic of @@ -75,43 +79,15 @@ namespace detail { to pose a problem. */ -// A note about memory_order_consume. Technically, this architecture allows to avoid -// unnecessary memory barrier after consume load since it supports data dependency ordering. -// However, some compiler optimizations may break a seemingly valid code relying on data -// dependency tracking by injecting bogus branches to aid out of order execution. -// This may happen not only in Boost.Atomic code but also in user's code, which we have no -// control of. See this thread: http://lists.boost.org/Archives/boost/2014/06/213890.php. -// For this reason we promote memory_order_consume to memory_order_acquire. - -struct gcc_ppc_operations_base -{ - static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT - { -#if defined(__powerpc64__) || defined(__PPC64__) - if (order == memory_order_seq_cst) - __asm__ __volatile__ ("sync" ::: "memory"); - else if ((order & memory_order_release) != 0) - __asm__ __volatile__ ("lwsync" ::: "memory"); -#else - if ((order & memory_order_release) != 0) - __asm__ __volatile__ ("sync" ::: "memory"); -#endif - } - - static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT - { - if ((order & (memory_order_consume | memory_order_acquire)) != 0) - __asm__ __volatile__ ("isync" ::: "memory"); - } -}; - - template< bool Signed > struct operations< 4u, Signed > : public gcc_ppc_operations_base { - typedef typename make_storage_type< 4u, Signed >::type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type storage_type; + typedef typename make_storage_type< 4u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -129,7 +105,7 @@ struct operations< 4u, Signed > : storage_type v; if (order == memory_order_seq_cst) __asm__ __volatile__ ("sync" ::: "memory"); - if ((order & (memory_order_consume | memory_order_acquire)) != 0) + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) { __asm__ __volatile__ ( @@ -227,7 +203,7 @@ struct operations< 4u, Signed > : static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -236,7 +212,7 @@ struct operations< 4u, Signed > : "add %1,%0,%3\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -246,7 +222,7 @@ struct operations< 4u, Signed > : static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -255,7 +231,7 @@ struct operations< 4u, Signed > : "sub %1,%0,%3\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -265,7 +241,7 @@ struct operations< 4u, Signed > : static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -274,7 +250,7 @@ struct operations< 4u, Signed > : "and %1,%0,%3\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -284,7 +260,7 @@ struct operations< 4u, Signed > : static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -293,7 +269,7 @@ struct operations< 4u, Signed > : "or %1,%0,%3\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -303,7 +279,7 @@ struct operations< 4u, Signed > : static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -312,7 +288,7 @@ struct operations< 4u, Signed > : "xor %1,%0,%3\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -329,13 +305,239 @@ struct operations< 4u, Signed > : { store(storage, 0, order); } +}; + +#if defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LBARX_STBCX) + +template< bool Signed > +struct operations< 1u, Signed > : + public gcc_ppc_operations_base +{ + typedef typename make_storage_type< 1u >::type storage_type; + typedef typename make_storage_type< 1u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 1u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; + + static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + __asm__ __volatile__ + ( + "stb %1, %0\n\t" + : "+m" (storage) + : "r" (v) + ); + } + + static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT + { + storage_type v; + if (order == memory_order_seq_cst) + __asm__ __volatile__ ("sync" ::: "memory"); + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) + { + __asm__ __volatile__ + ( + "lbz %0, %1\n\t" + "cmpw %0, %0\n\t" + "bne- 1f\n\t" + "1:\n\t" + "isync\n\t" + : "=&r" (v) + : "m" (storage) + : "cr0", "memory" + ); + } + else + { + __asm__ __volatile__ + ( + "lbz %0, %1\n\t" + : "=&r" (v) + : "m" (storage) + ); + } + return v; + } + + static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lbarx %0,%y1\n\t" + "stbcx. %2,%y1\n\t" + "bne- 1b\n\t" + : "=&b" (original), "+Z" (storage) + : "b" (v) + : "cr0" + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE bool compare_exchange_weak( + storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT + { + int success; + fence_before(success_order); + __asm__ __volatile__ + ( + "li %1, 0\n\t" + "lbarx %0,%y2\n\t" + "cmpw %0, %3\n\t" + "bne- 1f\n\t" + "stbcx. %4,%y2\n\t" + "bne- 1f\n\t" + "li %1, 1\n\t" + "1:\n\t" + : "=&b" (expected), "=&b" (success), "+Z" (storage) + : "b" (expected), "b" (desired) + : "cr0" + ); + if (success) + fence_after(success_order); + else + fence_after(failure_order); + return !!success; + } + + static BOOST_FORCEINLINE bool compare_exchange_strong( + storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT + { + int success; + fence_before(success_order); + __asm__ __volatile__ + ( + "li %1, 0\n\t" + "0: lbarx %0,%y2\n\t" + "cmpw %0, %3\n\t" + "bne- 1f\n\t" + "stbcx. %4,%y2\n\t" + "bne- 0b\n\t" + "li %1, 1\n\t" + "1:\n\t" + : "=&b" (expected), "=&b" (success), "+Z" (storage) + : "b" (expected), "b" (desired) + : "cr0" + ); + if (success) + fence_after(success_order); + else + fence_after(failure_order); + return !!success; + } + + static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lbarx %0,%y2\n\t" + "add %1,%0,%3\n\t" + "stbcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lbarx %0,%y2\n\t" + "sub %1,%0,%3\n\t" + "stbcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lbarx %0,%y2\n\t" + "and %1,%0,%3\n\t" + "stbcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lbarx %0,%y2\n\t" + "or %1,%0,%3\n\t" + "stbcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lbarx %0,%y2\n\t" + "xor %1,%0,%3\n\t" + "stbcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT + static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT + { + return !!exchange(storage, (storage_type)1, order); + } + + static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT { - return true; + store(storage, 0, order); } }; +#else // defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LBARX_STBCX) template< > struct operations< 1u, false > : @@ -346,7 +548,7 @@ struct operations< 1u, false > : static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -356,7 +558,7 @@ struct operations< 1u, false > : "rlwinm %1, %1, 0, 0xff\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -366,7 +568,7 @@ struct operations< 1u, false > : static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -376,7 +578,7 @@ struct operations< 1u, false > : "rlwinm %1, %1, 0, 0xff\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -394,7 +596,7 @@ struct operations< 1u, true > : static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -404,7 +606,7 @@ struct operations< 1u, true > : "extsb %1, %1\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -414,7 +616,7 @@ struct operations< 1u, true > : static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -424,15 +626,248 @@ struct operations< 1u, true > : "extsb %1, %1\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } +}; + +#endif // defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LBARX_STBCX) + +#if defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LHARX_STHCX) + +template< bool Signed > +struct operations< 2u, Signed > : + public gcc_ppc_operations_base +{ + typedef typename make_storage_type< 2u >::type storage_type; + typedef typename make_storage_type< 2u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 2u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; + + static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + fence_before(order); + __asm__ __volatile__ + ( + "sth %1, %0\n\t" + : "+m" (storage) + : "r" (v) + ); + } + + static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order order) BOOST_NOEXCEPT + { + storage_type v; + if (order == memory_order_seq_cst) + __asm__ __volatile__ ("sync" ::: "memory"); + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) + { + __asm__ __volatile__ + ( + "lhz %0, %1\n\t" + "cmpw %0, %0\n\t" + "bne- 1f\n\t" + "1:\n\t" + "isync\n\t" + : "=&r" (v) + : "m" (storage) + : "cr0", "memory" + ); + } + else + { + __asm__ __volatile__ + ( + "lhz %0, %1\n\t" + : "=&r" (v) + : "m" (storage) + ); + } + return v; + } + + static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lharx %0,%y1\n\t" + "sthcx. %2,%y1\n\t" + "bne- 1b\n\t" + : "=&b" (original), "+Z" (storage) + : "b" (v) + : "cr0" + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE bool compare_exchange_weak( + storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT + { + int success; + fence_before(success_order); + __asm__ __volatile__ + ( + "li %1, 0\n\t" + "lharx %0,%y2\n\t" + "cmpw %0, %3\n\t" + "bne- 1f\n\t" + "sthcx. %4,%y2\n\t" + "bne- 1f\n\t" + "li %1, 1\n\t" + "1:\n\t" + : "=&b" (expected), "=&b" (success), "+Z" (storage) + : "b" (expected), "b" (desired) + : "cr0" + ); + if (success) + fence_after(success_order); + else + fence_after(failure_order); + return !!success; + } + + static BOOST_FORCEINLINE bool compare_exchange_strong( + storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT + { + int success; + fence_before(success_order); + __asm__ __volatile__ + ( + "li %1, 0\n\t" + "0: lharx %0,%y2\n\t" + "cmpw %0, %3\n\t" + "bne- 1f\n\t" + "sthcx. %4,%y2\n\t" + "bne- 0b\n\t" + "li %1, 1\n\t" + "1:\n\t" + : "=&b" (expected), "=&b" (success), "+Z" (storage) + : "b" (expected), "b" (desired) + : "cr0" + ); + if (success) + fence_after(success_order); + else + fence_after(failure_order); + return !!success; + } + + static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lharx %0,%y2\n\t" + "add %1,%0,%3\n\t" + "sthcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lharx %0,%y2\n\t" + "sub %1,%0,%3\n\t" + "sthcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lharx %0,%y2\n\t" + "and %1,%0,%3\n\t" + "sthcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); fence_after(order); return original; } + + static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lharx %0,%y2\n\t" + "or %1,%0,%3\n\t" + "sthcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + { + storage_type original, result; + fence_before(order); + __asm__ __volatile__ + ( + "1:\n\t" + "lharx %0,%y2\n\t" + "xor %1,%0,%3\n\t" + "sthcx. %1,%y2\n\t" + "bne- 1b\n\t" + : "=&b" (original), "=&b" (result), "+Z" (storage) + : "b" (v) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC + ); + fence_after(order); + return original; + } + + static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT + { + return !!exchange(storage, (storage_type)1, order); + } + + static BOOST_FORCEINLINE void clear(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT + { + store(storage, 0, order); + } }; +#else // defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LHARX_STHCX) template< > struct operations< 2u, false > : @@ -443,7 +878,7 @@ struct operations< 2u, false > : static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -453,7 +888,7 @@ struct operations< 2u, false > : "rlwinm %1, %1, 0, 0xffff\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -463,7 +898,7 @@ struct operations< 2u, false > : static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -473,7 +908,7 @@ struct operations< 2u, false > : "rlwinm %1, %1, 0, 0xffff\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -491,7 +926,7 @@ struct operations< 2u, true > : static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -501,7 +936,7 @@ struct operations< 2u, true > : "extsh %1, %1\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -511,7 +946,7 @@ struct operations< 2u, true > : static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -521,7 +956,7 @@ struct operations< 2u, true > : "extsh %1, %1\n\t" "stwcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -530,15 +965,19 @@ struct operations< 2u, true > : } }; +#endif // defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LHARX_STHCX) -#if defined(__powerpc64__) || defined(__PPC64__) +#if defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LDARX_STDCX) template< bool Signed > struct operations< 8u, Signed > : public gcc_ppc_operations_base { - typedef typename make_storage_type< 8u, Signed >::type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 8u >::type storage_type; + typedef typename make_storage_type< 8u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -556,7 +995,7 @@ struct operations< 8u, Signed > : storage_type v; if (order == memory_order_seq_cst) __asm__ __volatile__ ("sync" ::: "memory"); - if ((order & (memory_order_consume | memory_order_acquire)) != 0) + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) { __asm__ __volatile__ ( @@ -654,7 +1093,7 @@ struct operations< 8u, Signed > : static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -663,7 +1102,7 @@ struct operations< 8u, Signed > : "add %1,%0,%3\n\t" "stdcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -673,7 +1112,7 @@ struct operations< 8u, Signed > : static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -682,7 +1121,7 @@ struct operations< 8u, Signed > : "sub %1,%0,%3\n\t" "stdcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -692,7 +1131,7 @@ struct operations< 8u, Signed > : static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -701,7 +1140,7 @@ struct operations< 8u, Signed > : "and %1,%0,%3\n\t" "stdcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -711,7 +1150,7 @@ struct operations< 8u, Signed > : static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -720,7 +1159,7 @@ struct operations< 8u, Signed > : "or %1,%0,%3\n\t" "stdcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -730,7 +1169,7 @@ struct operations< 8u, Signed > : static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - storage_type original, tmp; + storage_type original, result; fence_before(order); __asm__ __volatile__ ( @@ -739,7 +1178,7 @@ struct operations< 8u, Signed > : "xor %1,%0,%3\n\t" "stdcx. %1,%y2\n\t" "bne- 1b\n\t" - : "=&b" (original), "=&b" (tmp), "+Z" (storage) + : "=&b" (original), "=&b" (result), "+Z" (storage) : "b" (v) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC ); @@ -756,32 +1195,23 @@ struct operations< 8u, Signed > : { store(storage, 0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; -#endif // defined(__powerpc64__) || defined(__PPC64__) +#endif // defined(BOOST_ATOMIC_DETAIL_PPC_HAS_LDARX_STDCX) BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT { - switch (order) + if (order != memory_order_relaxed) { - case memory_order_consume: - case memory_order_acquire: - case memory_order_release: - case memory_order_acq_rel: #if defined(__powerpc64__) || defined(__PPC64__) - __asm__ __volatile__ ("lwsync" ::: "memory"); - break; -#endif - case memory_order_seq_cst: + if (order != memory_order_seq_cst) + __asm__ __volatile__ ("lwsync" ::: "memory"); + else + __asm__ __volatile__ ("sync" ::: "memory"); +#else __asm__ __volatile__ ("sync" ::: "memory"); - break; - default:; +#endif } } diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_sparc.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_sparc.hpp index faefecaf76..19b9b1fa87 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_sparc.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_sparc.hpp @@ -16,6 +16,7 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_SPARC_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_GCC_SPARC_HPP_INCLUDED_ +#include #include #include #include @@ -34,11 +35,14 @@ namespace detail { struct gcc_sparc_cas_base { + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT { if (order == memory_order_seq_cst) __asm__ __volatile__ ("membar #Sync" ::: "memory"); - else if ((order & memory_order_release) != 0) + else if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) __asm__ __volatile__ ("membar #StoreStore | #LoadStore" ::: "memory"); } @@ -46,7 +50,7 @@ struct gcc_sparc_cas_base { if (order == memory_order_seq_cst) __asm__ __volatile__ ("membar #Sync" ::: "memory"); - else if ((order & (memory_order_consume | memory_order_acquire)) != 0) + else if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) __asm__ __volatile__ ("membar #StoreStore | #LoadStore" ::: "memory"); } @@ -61,8 +65,11 @@ template< bool Signed > struct gcc_sparc_cas32 : public gcc_sparc_cas_base { - typedef typename make_storage_type< 4u, Signed >::type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type storage_type; + typedef typename make_storage_type< 4u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -118,11 +125,6 @@ struct gcc_sparc_cas32 : fence_after(order); return v; } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > @@ -147,8 +149,11 @@ template< bool Signed > struct gcc_sparc_cas64 : public gcc_sparc_cas_base { - typedef typename make_storage_type< 8u, Signed >::type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 8u >::type storage_type; + typedef typename make_storage_type< 8u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -190,11 +195,6 @@ struct gcc_sparc_cas64 : { return compare_exchange_strong(storage, expected, desired, success_order, failure_order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_sync.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_sync.hpp index 87f2f53029..1597de852a 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_sync.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_sync.hpp @@ -16,6 +16,7 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_SYNC_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_GCC_SYNC_HPP_INCLUDED_ +#include #include #include #include @@ -33,9 +34,12 @@ namespace detail { struct gcc_sync_operations_base { + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + static BOOST_FORCEINLINE void fence_before_store(memory_order order) BOOST_NOEXCEPT { - if ((order & memory_order_release) != 0) + if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) __sync_synchronize(); } @@ -47,16 +51,20 @@ struct gcc_sync_operations_base static BOOST_FORCEINLINE void fence_after_load(memory_order order) BOOST_NOEXCEPT { - if ((order & (memory_order_acquire | memory_order_consume)) != 0) + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_acquire) | static_cast< unsigned int >(memory_order_consume))) != 0u) __sync_synchronize(); } }; -template< typename T > +template< std::size_t Size, bool Signed > struct gcc_sync_operations : public gcc_sync_operations_base { - typedef T storage_type; + typedef typename make_storage_type< Size >::type storage_type; + typedef typename make_storage_type< Size >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = Size; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -87,7 +95,7 @@ struct gcc_sync_operations : // GCC docs mention that not all architectures may support full exchange semantics for this intrinsic. However, GCC's implementation of // std::atomic<> uses this intrinsic unconditionally. We do so as well. In case if some architectures actually don't support this, we can always // add a check here and fall back to a CAS loop. - if ((order & memory_order_release) != 0) + if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) __sync_synchronize(); return __sync_lock_test_and_set(&storage, v); } @@ -132,7 +140,7 @@ struct gcc_sync_operations : static BOOST_FORCEINLINE bool test_and_set(storage_type volatile& storage, memory_order order) BOOST_NOEXCEPT { - if ((order & memory_order_release) != 0) + if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) __sync_synchronize(); return !!__sync_lock_test_and_set(&storage, 1); } @@ -143,39 +151,23 @@ struct gcc_sync_operations : if (order == memory_order_seq_cst) __sync_synchronize(); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; #if BOOST_ATOMIC_INT8_LOCK_FREE > 0 template< bool Signed > struct operations< 1u, Signed > : #if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) - public gcc_sync_operations< typename make_storage_type< 1u, Signed >::type > + public gcc_sync_operations< 1u, Signed > #elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 2u, Signed >::type >, 1u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 2u, Signed >, 1u, Signed > #elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 4u, Signed >::type >, 1u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 4u, Signed >, 1u, Signed > #elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 8u, Signed >::type >, 1u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 8u, Signed >, 1u, Signed > #else - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 1u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 16u, Signed >, 1u, Signed > #endif { -#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) - typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type; -#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) - typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type; -#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; -#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; -#else - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; -#endif }; #endif @@ -183,24 +175,15 @@ struct operations< 1u, Signed > : template< bool Signed > struct operations< 2u, Signed > : #if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) - public gcc_sync_operations< typename make_storage_type< 2u, Signed >::type > + public gcc_sync_operations< 2u, Signed > #elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 4u, Signed >::type >, 2u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 4u, Signed >, 2u, Signed > #elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 8u, Signed >::type >, 2u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 8u, Signed >, 2u, Signed > #else - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 2u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 16u, Signed >, 2u, Signed > #endif { -#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_2) - typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type; -#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; -#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; -#else - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; -#endif }; #endif @@ -208,20 +191,13 @@ struct operations< 2u, Signed > : template< bool Signed > struct operations< 4u, Signed > : #if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) - public gcc_sync_operations< typename make_storage_type< 4u, Signed >::type > + public gcc_sync_operations< 4u, Signed > #elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 8u, Signed >::type >, 4u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 8u, Signed >, 4u, Signed > #else - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 4u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 16u, Signed >, 4u, Signed > #endif { -#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4) - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; -#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; -#else - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; -#endif }; #endif @@ -229,25 +205,19 @@ struct operations< 4u, Signed > : template< bool Signed > struct operations< 8u, Signed > : #if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - public gcc_sync_operations< typename make_storage_type< 8u, Signed >::type > + public gcc_sync_operations< 8u, Signed > #else - public extending_cas_based_operations< gcc_sync_operations< typename make_storage_type< 16u, Signed >::type >, 8u, Signed > + public extending_cas_based_operations< gcc_sync_operations< 16u, Signed >, 8u, Signed > #endif { -#if defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_8) - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; -#else - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; -#endif }; #endif #if BOOST_ATOMIC_INT128_LOCK_FREE > 0 template< bool Signed > struct operations< 16u, Signed > : - public gcc_sync_operations< typename make_storage_type< 16u, Signed >::type > + public gcc_sync_operations< 16u, Signed > { - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; }; #endif diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_x86.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_x86.hpp index a4e4af3660..007d4eeeeb 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_x86.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_x86.hpp @@ -16,6 +16,7 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_GCC_X86_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_GCC_X86_HPP_INCLUDED_ +#include #include #include #include @@ -30,36 +31,33 @@ #pragma once #endif -#if defined(__x86_64__) -#define BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "rdx" -#else -#define BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "edx" -#endif - namespace boost { namespace atomics { namespace detail { struct gcc_x86_operations_base { + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + static BOOST_FORCEINLINE void fence_before(memory_order order) BOOST_NOEXCEPT { - if ((order & memory_order_release) != 0) + if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) __asm__ __volatile__ ("" ::: "memory"); } static BOOST_FORCEINLINE void fence_after(memory_order order) BOOST_NOEXCEPT { - if ((order & memory_order_acquire) != 0) + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) __asm__ __volatile__ ("" ::: "memory"); } }; -template< typename T, typename Derived > +template< std::size_t Size, bool Signed, typename Derived > struct gcc_x86_operations : public gcc_x86_operations_base { - typedef T storage_type; + typedef typename make_storage_type< Size >::type storage_type; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -102,20 +100,19 @@ struct gcc_x86_operations : { store(storage, (storage_type)0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > struct operations< 1u, Signed > : - public gcc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > + public gcc_x86_operations< 1u, Signed, operations< 1u, Signed > > { - typedef gcc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type; + typedef gcc_x86_operations< 1u, Signed, operations< 1u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 1u >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type temp_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 1u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -146,6 +143,15 @@ struct operations< 1u, Signed > : { storage_type previous = expected; bool success; +#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + __asm__ __volatile__ + ( + "lock; cmpxchgb %3, %1" + : "+a" (previous), "+m" (storage), "=@ccz" (success) + : "q" (desired) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" + ); +#else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) __asm__ __volatile__ ( "lock; cmpxchgb %3, %1\n\t" @@ -154,22 +160,23 @@ struct operations< 1u, Signed > : : "q" (desired) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); +#endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) expected = previous; return success; } #define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, argument, result)\ + temp_storage_type new_val;\ __asm__ __volatile__\ (\ - "xor %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER ", %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "\n\t"\ ".align 16\n\t"\ - "1: movb %[arg], %%dl\n\t"\ - op " %%al, %%dl\n\t"\ - "lock; cmpxchgb %%dl, %[storage]\n\t"\ + "1: mov %[arg], %2\n\t"\ + op " %%al, %b2\n\t"\ + "lock; cmpxchgb %b2, %[storage]\n\t"\ "jne 1b"\ - : [res] "+a" (result), [storage] "+m" (storage)\ - : [arg] "q" (argument)\ - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER, "memory"\ + : [res] "+a" (result), [storage] "+m" (storage), "=&q" (new_val)\ + : [arg] "ir" ((temp_storage_type)argument)\ + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\ ) static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT @@ -198,11 +205,15 @@ struct operations< 1u, Signed > : template< bool Signed > struct operations< 2u, Signed > : - public gcc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > + public gcc_x86_operations< 2u, Signed, operations< 2u, Signed > > { - typedef gcc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type; + typedef gcc_x86_operations< 2u, Signed, operations< 2u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 2u >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type temp_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 2u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -233,6 +244,15 @@ struct operations< 2u, Signed > : { storage_type previous = expected; bool success; +#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + __asm__ __volatile__ + ( + "lock; cmpxchgw %3, %1" + : "+a" (previous), "+m" (storage), "=@ccz" (success) + : "q" (desired) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" + ); +#else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) __asm__ __volatile__ ( "lock; cmpxchgw %3, %1\n\t" @@ -241,22 +261,23 @@ struct operations< 2u, Signed > : : "q" (desired) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); +#endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) expected = previous; return success; } #define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, argument, result)\ + temp_storage_type new_val;\ __asm__ __volatile__\ (\ - "xor %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER ", %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "\n\t"\ ".align 16\n\t"\ - "1: movw %[arg], %%dx\n\t"\ - op " %%ax, %%dx\n\t"\ - "lock; cmpxchgw %%dx, %[storage]\n\t"\ + "1: mov %[arg], %2\n\t"\ + op " %%ax, %w2\n\t"\ + "lock; cmpxchgw %w2, %[storage]\n\t"\ "jne 1b"\ - : [res] "+a" (result), [storage] "+m" (storage)\ - : [arg] "q" (argument)\ - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER, "memory"\ + : [res] "+a" (result), [storage] "+m" (storage), "=&q" (new_val)\ + : [arg] "ir" ((temp_storage_type)argument)\ + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\ ) static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT @@ -285,11 +306,14 @@ struct operations< 2u, Signed > : template< bool Signed > struct operations< 4u, Signed > : - public gcc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > + public gcc_x86_operations< 4u, Signed, operations< 4u, Signed > > { - typedef gcc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type; + typedef gcc_x86_operations< 4u, Signed, operations< 4u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -320,6 +344,15 @@ struct operations< 4u, Signed > : { storage_type previous = expected; bool success; +#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + __asm__ __volatile__ + ( + "lock; cmpxchgl %3, %1" + : "+a" (previous), "+m" (storage), "=@ccz" (success) + : "r" (desired) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" + ); +#else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) __asm__ __volatile__ ( "lock; cmpxchgl %3, %1\n\t" @@ -328,22 +361,23 @@ struct operations< 4u, Signed > : : "r" (desired) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); +#endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) expected = previous; return success; } #define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, argument, result)\ + storage_type new_val;\ __asm__ __volatile__\ (\ - "xor %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER ", %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "\n\t"\ ".align 16\n\t"\ - "1: movl %[arg], %%edx\n\t"\ - op " %%eax, %%edx\n\t"\ - "lock; cmpxchgl %%edx, %[storage]\n\t"\ + "1: mov %[arg], %[new_val]\n\t"\ + op " %%eax, %[new_val]\n\t"\ + "lock; cmpxchgl %[new_val], %[storage]\n\t"\ "jne 1b"\ - : [res] "+a" (result), [storage] "+m" (storage)\ - : [arg] "r" (argument)\ - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER, "memory"\ + : [res] "+a" (result), [storage] "+m" (storage), [new_val] "=&r" (new_val)\ + : [arg] "ir" (argument)\ + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\ ) static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT @@ -376,17 +410,22 @@ template< bool Signed > struct operations< 8u, Signed > : public cas_based_operations< gcc_dcas_x86< Signed > > { + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; }; #elif defined(__x86_64__) template< bool Signed > struct operations< 8u, Signed > : - public gcc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > + public gcc_x86_operations< 8u, Signed, operations< 8u, Signed > > { - typedef gcc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > base_type; + typedef gcc_x86_operations< 8u, Signed, operations< 8u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 8u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -417,6 +456,15 @@ struct operations< 8u, Signed > : { storage_type previous = expected; bool success; +#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + __asm__ __volatile__ + ( + "lock; cmpxchgq %3, %1" + : "+a" (previous), "+m" (storage), "=@ccz" (success) + : "r" (desired) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" + ); +#else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) __asm__ __volatile__ ( "lock; cmpxchgq %3, %1\n\t" @@ -425,22 +473,23 @@ struct operations< 8u, Signed > : : "r" (desired) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); +#endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) expected = previous; return success; } #define BOOST_ATOMIC_DETAIL_CAS_LOOP(op, argument, result)\ + storage_type new_val;\ __asm__ __volatile__\ (\ - "xor %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER ", %%" BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER "\n\t"\ ".align 16\n\t"\ - "1: movq %[arg], %%rdx\n\t"\ - op " %%rax, %%rdx\n\t"\ - "lock; cmpxchgq %%rdx, %[storage]\n\t"\ + "1: movq %[arg], %[new_val]\n\t"\ + op " %%rax, %[new_val]\n\t"\ + "lock; cmpxchgq %[new_val], %[storage]\n\t"\ "jne 1b"\ - : [res] "+a" (result), [storage] "+m" (storage)\ + : [res] "+a" (result), [storage] "+m" (storage), [new_val] "=&r" (new_val)\ : [arg] "r" (argument)\ - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER, "memory"\ + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory"\ ) static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT @@ -475,6 +524,8 @@ template< bool Signed > struct operations< 16u, Signed > : public cas_based_operations< gcc_dcas_x86_64< Signed > > { + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 16u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; }; #endif // defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) @@ -493,7 +544,7 @@ BOOST_FORCEINLINE void thread_fence(memory_order order) BOOST_NOEXCEPT ::: "memory" ); } - else if ((order & (memory_order_acquire | memory_order_release)) != 0) + else if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_acquire) | static_cast< unsigned int >(memory_order_release))) != 0u) { __asm__ __volatile__ ("" ::: "memory"); } @@ -509,6 +560,4 @@ BOOST_FORCEINLINE void signal_fence(memory_order order) BOOST_NOEXCEPT } // namespace atomics } // namespace boost -#undef BOOST_ATOMIC_DETAIL_TEMP_CAS_REGISTER - #endif // BOOST_ATOMIC_DETAIL_OPS_GCC_X86_HPP_INCLUDED_ diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_x86_dcas.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_x86_dcas.hpp index 47cc36d8e7..4206bb39ef 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_x86_dcas.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_gcc_x86_dcas.hpp @@ -5,7 +5,7 @@ * * Copyright (c) 2009 Helge Bahmann * Copyright (c) 2012 Tim Blechmann - * Copyright (c) 2014 Andrey Semashev + * Copyright (c) 2014 - 2018 Andrey Semashev */ /*! * \file atomic/detail/ops_gcc_x86_dcas.hpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #ifdef BOOST_HAS_PRAGMA_ONCE @@ -30,115 +31,91 @@ namespace boost { namespace atomics { namespace detail { +// Note: In the 32-bit PIC code guarded with BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX below we have to avoid using memory +// operand constraints because the compiler may choose to use ebx as the base register for that operand. At least, clang +// is known to do that. For this reason we have to pre-compute a pointer to storage and pass it in edi. For the same reason +// we cannot save ebx to the stack with a mov instruction, so we use esi as a scratch register and restore it afterwards. +// Alternatively, we could push/pop the register to the stack, but exchanging the registers is faster. +// The need to pass a pointer in edi is a bit wasteful because normally the memory operand would use a base pointer +// with an offset (e.g. `this` + offset). But unfortunately, there seems to be no way around it. + #if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) template< bool Signed > struct gcc_dcas_x86 { - typedef typename make_storage_type< 8u, Signed >::type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 8u >::type storage_type; + typedef typename make_storage_type< 8u >::aligned aligned_storage_type; + typedef uint32_t BOOST_ATOMIC_DETAIL_MAY_ALIAS aliasing_uint32_t; + + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { - if ((((uint32_t)&storage) & 0x00000007) == 0) + if (BOOST_LIKELY((((uint32_t)&storage) & 0x00000007) == 0u)) { -#if defined(__SSE2__) +#if defined(__SSE__) + typedef float xmm_t __attribute__((__vector_size__(16))); + xmm_t xmm_scratch; __asm__ __volatile__ ( #if defined(__AVX__) - "vmovq %1, %%xmm4\n\t" - "vmovq %%xmm4, %0\n\t" + "vmovq %[value], %[xmm_scratch]\n\t" + "vmovq %[xmm_scratch], %[storage]\n\t" +#elif defined(__SSE2__) + "movq %[value], %[xmm_scratch]\n\t" + "movq %[xmm_scratch], %[storage]\n\t" #else - "movq %1, %%xmm4\n\t" - "movq %%xmm4, %0\n\t" + "xorps %[xmm_scratch], %[xmm_scratch]\n\t" + "movlps %[value], %[xmm_scratch]\n\t" + "movlps %[xmm_scratch], %[storage]\n\t" #endif - : "=m" (storage) - : "m" (v) - : "memory", "xmm4" + : [storage] "=m" (storage), [xmm_scratch] "=x" (xmm_scratch) + : [value] "m" (v) + : "memory" ); #else __asm__ __volatile__ ( - "fildll %1\n\t" - "fistpll %0\n\t" - : "=m" (storage) - : "m" (v) + "fildll %[value]\n\t" + "fistpll %[storage]\n\t" + : [storage] "=m" (storage) + : [value] "m" (v) : "memory" ); #endif } else { -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) -#if defined(__PIC__) - uint32_t scratch; - __asm__ __volatile__ - ( - "movl %%ebx, %[scratch]\n\t" - "movl %[value_lo], %%ebx\n\t" - "movl %[dest], %%eax\n\t" - "movl 4+%[dest], %%edx\n\t" - ".align 16\n\t" - "1: lock; cmpxchg8b %[dest]\n\t" - "jne 1b\n\t" - "movl %[scratch], %%ebx\n\t" - : [scratch] "=m" (scratch), [dest] "=o" (storage) - : [value_lo] "a" ((uint32_t)v), "c" ((uint32_t)(v >> 32)) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "edx", "memory" - ); -#else // defined(__PIC__) - __asm__ __volatile__ - ( - "movl %[dest], %%eax\n\t" - "movl 4+%[dest], %%edx\n\t" - ".align 16\n\t" - "1: lock; cmpxchg8b %[dest]\n\t" - "jne 1b\n\t" - : [dest] "=o" (storage) - : [value_lo] "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "eax", "edx", "memory" - ); -#endif // defined(__PIC__) -#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) -#if defined(__PIC__) - uint32_t scratch; +#if defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) __asm__ __volatile__ ( - "movl %%ebx, %[scratch]\n\t" - "movl %[value_lo], %%ebx\n\t" - "movl 0(%[dest]), %%eax\n\t" + "xchgl %%ebx, %%esi\n\t" + "movl %%eax, %%ebx\n\t" + "movl (%[dest]), %%eax\n\t" "movl 4(%[dest]), %%edx\n\t" ".align 16\n\t" - "1: lock; cmpxchg8b 0(%[dest])\n\t" + "1: lock; cmpxchg8b (%[dest])\n\t" "jne 1b\n\t" - "movl %[scratch], %%ebx\n\t" -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES) - : [scratch] "=m,m" (scratch) - : [value_lo] "a,a" ((uint32_t)v), "c,c" ((uint32_t)(v >> 32)), [dest] "D,S" (&storage) -#else - : [scratch] "=m" (scratch) - : [value_lo] "a" ((uint32_t)v), "c" ((uint32_t)(v >> 32)), [dest] "D" (&storage) -#endif + "xchgl %%ebx, %%esi\n\t" + : + : "a" ((uint32_t)v), "c" ((uint32_t)(v >> 32)), [dest] "D" (&storage) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "edx", "memory" ); -#else // defined(__PIC__) +#else // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) __asm__ __volatile__ ( - "movl 0(%[dest]), %%eax\n\t" - "movl 4(%[dest]), %%edx\n\t" + "movl %[dest_lo], %%eax\n\t" + "movl %[dest_hi], %%edx\n\t" ".align 16\n\t" - "1: lock; cmpxchg8b 0(%[dest])\n\t" + "1: lock; cmpxchg8b %[dest_lo]\n\t" "jne 1b\n\t" - : -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES) - : [value_lo] "b,b" ((uint32_t)v), "c,c" ((uint32_t)(v >> 32)), [dest] "D,S" (&storage) -#else - : [value_lo] "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)), [dest] "D" (&storage) -#endif + : [dest_lo] "=m" (storage), [dest_hi] "=m" (reinterpret_cast< volatile aliasing_uint32_t* >(&storage)[1]) + : [value_lo] "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "eax", "edx", "memory" ); -#endif // defined(__PIC__) -#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) +#endif // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) } } @@ -146,39 +123,63 @@ struct gcc_dcas_x86 { storage_type value; - if ((((uint32_t)&storage) & 0x00000007) == 0) + if (BOOST_LIKELY((((uint32_t)&storage) & 0x00000007) == 0u)) { -#if defined(__SSE2__) +#if defined(__SSE__) + typedef float xmm_t __attribute__((__vector_size__(16))); + xmm_t xmm_scratch; __asm__ __volatile__ ( #if defined(__AVX__) - "vmovq %1, %%xmm4\n\t" - "vmovq %%xmm4, %0\n\t" + "vmovq %[storage], %[xmm_scratch]\n\t" + "vmovq %[xmm_scratch], %[value]\n\t" +#elif defined(__SSE2__) + "movq %[storage], %[xmm_scratch]\n\t" + "movq %[xmm_scratch], %[value]\n\t" #else - "movq %1, %%xmm4\n\t" - "movq %%xmm4, %0\n\t" + "xorps %[xmm_scratch], %[xmm_scratch]\n\t" + "movlps %[storage], %[xmm_scratch]\n\t" + "movlps %[xmm_scratch], %[value]\n\t" #endif - : "=m" (value) - : "m" (storage) - : "memory", "xmm4" + : [value] "=m" (value), [xmm_scratch] "=x" (xmm_scratch) + : [storage] "m" (storage) + : "memory" ); #else __asm__ __volatile__ ( - "fildll %1\n\t" - "fistpll %0\n\t" - : "=m" (value) - : "m" (storage) + "fildll %[storage]\n\t" + "fistpll %[value]\n\t" + : [value] "=m" (value) + : [storage] "m" (storage) : "memory" ); #endif } else { -#if defined(__clang__) - // Clang cannot allocate eax:edx register pairs but it has sync intrinsics - value = __sync_val_compare_and_swap(&storage, (storage_type)0, (storage_type)0); -#else + // Note that despite const qualification cmpxchg8b below may issue a store to the storage. The storage value + // will not change, but this prevents the storage to reside in read-only memory. + +#if defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + + uint32_t value_bits[2]; + + // We don't care for comparison result here; the previous value will be stored into value anyway. + // Also we don't care for ebx and ecx values, they just have to be equal to eax and edx before cmpxchg8b. + __asm__ __volatile__ + ( + "movl %%ebx, %%eax\n\t" + "movl %%ecx, %%edx\n\t" + "lock; cmpxchg8b %[storage]\n\t" + : "=&a" (value_bits[0]), "=&d" (value_bits[1]) + : [storage] "m" (storage) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" + ); + BOOST_ATOMIC_DETAIL_MEMCPY(&value, value_bits, sizeof(value)); + +#else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + // We don't care for comparison result here; the previous value will be stored into value anyway. // Also we don't care for ebx and ecx values, they just have to be equal to eax and edx before cmpxchg8b. __asm__ __volatile__ @@ -190,7 +191,8 @@ struct gcc_dcas_x86 : [storage] "m" (storage) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); -#endif + +#endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) } return value; @@ -200,58 +202,67 @@ struct gcc_dcas_x86 storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT { #if defined(__clang__) + // Clang cannot allocate eax:edx register pairs but it has sync intrinsics storage_type old_expected = expected; expected = __sync_val_compare_and_swap(&storage, old_expected, desired); return expected == old_expected; -#elif defined(__PIC__) - // Make sure ebx is saved and restored properly in case - // of position independent code. To make this work - // setup register constraints such that ebx can not be - // used by accident e.g. as base address for the variable - // to be modified. Accessing "scratch" should always be okay, - // as it can only be placed on the stack (and therefore - // accessed through ebp or esp only). - // - // In theory, could push/pop ebx onto/off the stack, but movs - // to a prepared stack slot turn out to be faster. - - uint32_t scratch; + +#elif defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) + bool success; + +#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) __asm__ __volatile__ ( - "movl %%ebx, %[scratch]\n\t" - "movl %[desired_lo], %%ebx\n\t" - "lock; cmpxchg8b %[dest]\n\t" - "movl %[scratch], %%ebx\n\t" + "xchgl %%ebx, %%esi\n\t" + "lock; cmpxchg8b (%[dest])\n\t" + "xchgl %%ebx, %%esi\n\t" + : "+A" (expected), [success] "=@ccz" (success) + : "S" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32)), [dest] "D" (&storage) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" + ); +#else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + __asm__ __volatile__ + ( + "xchgl %%ebx, %%esi\n\t" + "lock; cmpxchg8b (%[dest])\n\t" + "xchgl %%ebx, %%esi\n\t" "sete %[success]\n\t" -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES) - : "+A,A,A,A,A,A" (expected), [dest] "+m,m,m,m,m,m" (storage), [scratch] "=m,m,m,m,m,m" (scratch), [success] "=q,m,q,m,q,m" (success) - : [desired_lo] "S,S,D,D,m,m" ((uint32_t)desired), "c,c,c,c,c,c" ((uint32_t)(desired >> 32)) -#else - : "+A" (expected), [dest] "+m" (storage), [scratch] "=m" (scratch), [success] "=q" (success) - : [desired_lo] "S" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32)) -#endif + : "+A" (expected), [success] "=qm" (success) + : "S" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32)), [dest] "D" (&storage) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); +#endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + return success; -#else + +#else // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) + bool success; + +#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + __asm__ __volatile__ + ( + "lock; cmpxchg8b %[dest]\n\t" + : "+A" (expected), [dest] "+m" (storage), [success] "=@ccz" (success) + : "b" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32)) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" + ); +#else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) __asm__ __volatile__ ( "lock; cmpxchg8b %[dest]\n\t" "sete %[success]\n\t" -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES) - : "+A,A" (expected), [dest] "+m,m" (storage), [success] "=q,m" (success) - : "b,b" ((uint32_t)desired), "c,c" ((uint32_t)(desired >> 32)) -#else - : "+A" (expected), [dest] "+m" (storage), [success] "=q" (success) + : "+A" (expected), [dest] "+m" (storage), [success] "=qm" (success) : "b" ((uint32_t)desired), "c" ((uint32_t)(desired >> 32)) -#endif : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); +#endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + return success; -#endif + +#endif // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) } static BOOST_FORCEINLINE bool compare_exchange_weak( @@ -260,100 +271,107 @@ struct gcc_dcas_x86 return compare_exchange_strong(storage, expected, desired, success_order, failure_order); } - static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { -#if defined(__clang__) - // Clang cannot allocate eax:edx register pairs but it has sync intrinsics - storage_type old_val = storage; - while (true) - { - storage_type val = __sync_val_compare_and_swap(&storage, old_val, v); - if (val == old_val) - return val; - old_val = val; - } -#elif !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) -#if defined(__PIC__) - uint32_t scratch; +#if defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) +#if defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + + uint32_t old_bits[2]; __asm__ __volatile__ ( - "movl %%ebx, %[scratch]\n\t" - "movl %%eax, %%ebx\n\t" - "movl %%edx, %%ecx\n\t" - "movl %[dest], %%eax\n\t" - "movl 4+%[dest], %%edx\n\t" + "xchgl %%ebx, %%esi\n\t" + "movl (%[dest]), %%eax\n\t" + "movl 4(%[dest]), %%edx\n\t" ".align 16\n\t" - "1: lock; cmpxchg8b %[dest]\n\t" + "1: lock; cmpxchg8b (%[dest])\n\t" "jne 1b\n\t" - "movl %[scratch], %%ebx\n\t" - : "+A" (v), [scratch] "=m" (scratch), [dest] "+o" (storage) - : - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "ecx", "memory" + "xchgl %%ebx, %%esi\n\t" + : "=a" (old_bits[0]), "=d" (old_bits[1]) + : "S" ((uint32_t)v), "c" ((uint32_t)(v >> 32)), [dest] "D" (&storage) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); - return v; -#else // defined(__PIC__) + + storage_type old_value; + BOOST_ATOMIC_DETAIL_MEMCPY(&old_value, old_bits, sizeof(old_value)); + return old_value; + +#else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + + storage_type old_value; __asm__ __volatile__ ( - "movl %[dest], %%eax\n\t" - "movl 4+%[dest], %%edx\n\t" + "xchgl %%ebx, %%esi\n\t" + "movl (%[dest]), %%eax\n\t" + "movl 4(%[dest]), %%edx\n\t" ".align 16\n\t" - "1: lock; cmpxchg8b %[dest]\n\t" + "1: lock; cmpxchg8b (%[dest])\n\t" "jne 1b\n\t" - : "=A" (v), [dest] "+o" (storage) - : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)) + "xchgl %%ebx, %%esi\n\t" + : "=A" (old_value) + : "S" ((uint32_t)v), "c" ((uint32_t)(v >> 32)), [dest] "D" (&storage) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); - return v; -#endif // defined(__PIC__) -#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) -#if defined(__PIC__) - uint32_t scratch; + return old_value; + +#endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) +#else // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) +#if defined(__MINGW32__) && ((__GNUC__+0) * 100 + (__GNUC_MINOR__+0)) < 407 + + // MinGW gcc up to 4.6 has problems with allocating registers in the asm blocks below + uint32_t old_bits[2]; __asm__ __volatile__ ( - "movl %%ebx, %[scratch]\n\t" - "movl %%eax, %%ebx\n\t" - "movl %%edx, %%ecx\n\t" - "movl 0(%[dest]), %%eax\n\t" + "movl (%[dest]), %%eax\n\t" "movl 4(%[dest]), %%edx\n\t" ".align 16\n\t" - "1: lock; cmpxchg8b 0(%[dest])\n\t" + "1: lock; cmpxchg8b (%[dest])\n\t" "jne 1b\n\t" - "movl %[scratch], %%ebx\n\t" -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES) - : "+A,A" (v), [scratch] "=m,m" (scratch) - : [dest] "D,S" (&storage) -#else - : "+A" (v), [scratch] "=m" (scratch) - : [dest] "D" (&storage) -#endif - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "ecx", "memory" + : "=&a" (old_bits[0]), "=&d" (old_bits[1]) + : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)), [dest] "DS" (&storage) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); - return v; -#else // defined(__PIC__) + + storage_type old_value; + BOOST_ATOMIC_DETAIL_MEMCPY(&old_value, old_bits, sizeof(old_value)); + return old_value; + +#elif defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + + uint32_t old_bits[2]; __asm__ __volatile__ ( - "movl 0(%[dest]), %%eax\n\t" - "movl 4(%[dest]), %%edx\n\t" + "movl %[dest_lo], %%eax\n\t" + "movl %[dest_hi], %%edx\n\t" ".align 16\n\t" - "1: lock; cmpxchg8b 0(%[dest])\n\t" + "1: lock; cmpxchg8b %[dest_lo]\n\t" "jne 1b\n\t" -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES) - : "=A,A" (v) - : "b,b" ((uint32_t)v), "c,c" ((uint32_t)(v >> 32)), [dest] "D,S" (&storage) -#else - : "=A" (v) - : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)), [dest] "D" (&storage) -#endif + : "=&a" (old_bits[0]), "=&d" (old_bits[1]), [dest_lo] "+m" (storage), [dest_hi] "+m" (reinterpret_cast< volatile aliasing_uint32_t* >(&storage)[1]) + : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); - return v; -#endif // defined(__PIC__) -#endif - } - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; + storage_type old_value; + BOOST_ATOMIC_DETAIL_MEMCPY(&old_value, old_bits, sizeof(old_value)); + return old_value; + +#else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + + storage_type old_value; + __asm__ __volatile__ + ( + "movl %[dest_lo], %%eax\n\t" + "movl %[dest_hi], %%edx\n\t" + ".align 16\n\t" + "1: lock; cmpxchg8b %[dest_lo]\n\t" + "jne 1b\n\t" + : "=&A" (old_value), [dest_lo] "+m" (storage), [dest_hi] "+m" (reinterpret_cast< volatile aliasing_uint32_t* >(&storage)[1]) + : "b" ((uint32_t)v), "c" ((uint32_t)(v >> 32)) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" + ); + return old_value; + +#endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) +#endif // defined(BOOST_ATOMIC_DETAIL_X86_ASM_PRESERVE_EBX) } }; @@ -364,79 +382,55 @@ struct gcc_dcas_x86 template< bool Signed > struct gcc_dcas_x86_64 { - typedef typename make_storage_type< 16u, Signed >::type storage_type; - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 16u >::type storage_type; + typedef typename make_storage_type< 16u >::aligned aligned_storage_type; + typedef uint64_t BOOST_ATOMIC_DETAIL_MAY_ALIAS aliasing_uint64_t; + + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { - uint64_t const* p_value = (uint64_t const*)&v; -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) - __asm__ __volatile__ - ( - "movq %[dest], %%rax\n\t" - "movq 8+%[dest], %%rdx\n\t" - ".align 16\n\t" - "1: lock; cmpxchg16b %[dest]\n\t" - "jne 1b\n\t" - : [dest] "=o" (storage) - : "b" (p_value[0]), "c" (p_value[1]) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "rax", "rdx", "memory" - ); -#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) __asm__ __volatile__ ( - "movq 0(%[dest]), %%rax\n\t" - "movq 8(%[dest]), %%rdx\n\t" + "movq %[dest_lo], %%rax\n\t" + "movq %[dest_hi], %%rdx\n\t" ".align 16\n\t" - "1: lock; cmpxchg16b 0(%[dest])\n\t" + "1: lock; cmpxchg16b %[dest_lo]\n\t" "jne 1b\n\t" - : - : "b" (p_value[0]), "c" (p_value[1]), [dest] "r" (&storage) + : [dest_lo] "=m" (storage), [dest_hi] "=m" (reinterpret_cast< volatile aliasing_uint64_t* >(&storage)[1]) + : "b" (reinterpret_cast< const aliasing_uint64_t* >(&v)[0]), "c" (reinterpret_cast< const aliasing_uint64_t* >(&v)[1]) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "rax", "rdx", "memory" ); -#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) } static BOOST_FORCEINLINE storage_type load(storage_type const volatile& storage, memory_order) BOOST_NOEXCEPT { -#if defined(__clang__) - // Clang cannot allocate rax:rdx register pairs but it has sync intrinsics - storage_type value = storage_type(); - return __sync_val_compare_and_swap(&storage, value, value); -#elif defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS) - // GCC 4.4 can't allocate rax:rdx register pair either but it also doesn't support 128-bit __sync_val_compare_and_swap - storage_type value; + // Note that despite const qualification cmpxchg16b below may issue a store to the storage. The storage value + // will not change, but this prevents the storage to reside in read-only memory. + +#if defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + + uint64_t value_bits[2]; // We don't care for comparison result here; the previous value will be stored into value anyway. // Also we don't care for rbx and rcx values, they just have to be equal to rax and rdx before cmpxchg16b. -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) __asm__ __volatile__ ( "movq %%rbx, %%rax\n\t" "movq %%rcx, %%rdx\n\t" "lock; cmpxchg16b %[storage]\n\t" - "movq %%rax, %[value]\n\t" - "movq %%rdx, 8+%[value]\n\t" - : [value] "=o" (value) + : "=&a" (value_bits[0]), "=&d" (value_bits[1]) : [storage] "m" (storage) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx" - ); -#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) - __asm__ __volatile__ - ( - "movq %%rbx, %%rax\n\t" - "movq %%rcx, %%rdx\n\t" - "lock; cmpxchg16b %[storage]\n\t" - "movq %%rax, 0(%[value])\n\t" - "movq %%rdx, 8(%[value])\n\t" - : - : [storage] "m" (storage), [value] "r" (&value) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx" + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); -#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) + storage_type value; + BOOST_ATOMIC_DETAIL_MEMCPY(&value, value_bits, sizeof(value)); return value; -#else // defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS) + +#else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + storage_type value; // We don't care for comparison result here; the previous value will be stored into value anyway. @@ -452,68 +446,61 @@ struct gcc_dcas_x86_64 ); return value; -#endif + +#endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) } static BOOST_FORCEINLINE bool compare_exchange_strong( storage_type volatile& storage, storage_type& expected, storage_type desired, memory_order, memory_order) BOOST_NOEXCEPT { #if defined(__clang__) + // Clang cannot allocate rax:rdx register pairs but it has sync intrinsics storage_type old_expected = expected; expected = __sync_val_compare_and_swap(&storage, old_expected, desired); return expected == old_expected; -#elif defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS) - // GCC 4.4 can't allocate rax:rdx register pair either but it also doesn't support 128-bit __sync_val_compare_and_swap - uint64_t const* p_desired = (uint64_t const*)&desired; + +#elif defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + + // Some compilers can't allocate rax:rdx register pair either but also don't support 128-bit __sync_val_compare_and_swap bool success; -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) __asm__ __volatile__ ( - "movq %[expected], %%rax\n\t" - "movq 8+%[expected], %%rdx\n\t" "lock; cmpxchg16b %[dest]\n\t" "sete %[success]\n\t" - "movq %%rax, %[expected]\n\t" - "movq %%rdx, 8+%[expected]\n\t" - : [dest] "+m" (storage), [expected] "+o" (expected), [success] "=q" (success) - : "b" (p_desired[0]), "c" (p_desired[1]) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx" + : [dest] "+m" (storage), "+a" (reinterpret_cast< aliasing_uint64_t* >(&expected)[0]), "+d" (reinterpret_cast< aliasing_uint64_t* >(&expected)[1]), [success] "=q" (success) + : "b" (reinterpret_cast< const aliasing_uint64_t* >(&desired)[0]), "c" (reinterpret_cast< const aliasing_uint64_t* >(&desired)[1]) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); -#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) + + return success; + +#else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + + bool success; + +#if defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) __asm__ __volatile__ ( - "movq 0(%[expected]), %%rax\n\t" - "movq 8(%[expected]), %%rdx\n\t" "lock; cmpxchg16b %[dest]\n\t" - "sete %[success]\n\t" - "movq %%rax, 0(%[expected])\n\t" - "movq %%rdx, 8(%[expected])\n\t" - : [dest] "+m" (storage), [success] "=q" (success) - : "b" (p_desired[0]), "c" (p_desired[1]), [expected] "r" (&expected) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx" + : "+A" (expected), [dest] "+m" (storage), "=@ccz" (success) + : "b" (reinterpret_cast< const aliasing_uint64_t* >(&desired)[0]), "c" (reinterpret_cast< const aliasing_uint64_t* >(&desired)[1]) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); -#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) - - return success; -#else // defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS) - uint64_t const* p_desired = (uint64_t const*)&desired; - bool success; +#else // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) __asm__ __volatile__ ( "lock; cmpxchg16b %[dest]\n\t" "sete %[success]\n\t" -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_CONSTRAINT_ALTERNATIVES) - : "+A,A" (expected), [dest] "+m,m" (storage), [success] "=q,m" (success) - : "b,b" (p_desired[0]), "c,c" (p_desired[1]) -#else - : "+A" (expected), [dest] "+m" (storage), [success] "=q" (success) - : "b" (p_desired[0]), "c" (p_desired[1]) -#endif + : "+A" (expected), [dest] "+m" (storage), [success] "=qm" (success) + : "b" (reinterpret_cast< const aliasing_uint64_t* >(&desired)[0]), "c" (reinterpret_cast< const aliasing_uint64_t* >(&desired)[1]) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); +#endif // defined(BOOST_ATOMIC_DETAIL_ASM_HAS_FLAG_OUTPUTS) + return success; -#endif + +#endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) } static BOOST_FORCEINLINE bool compare_exchange_weak( @@ -524,86 +511,39 @@ struct gcc_dcas_x86_64 static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { -#if defined(__clang__) - // Clang cannot allocate eax:edx register pairs but it has sync intrinsics - storage_type old_val = storage; - while (true) - { - storage_type val = __sync_val_compare_and_swap(&storage, old_val, v); - if (val == old_val) - return val; - old_val = val; - } -#elif defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS) - // GCC 4.4 can't allocate rax:rdx register pair either but it also doesn't support 128-bit __sync_val_compare_and_swap - storage_type old_value; - uint64_t const* p_value = (uint64_t const*)&v; -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) - __asm__ __volatile__ - ( - "movq %[dest], %%rax\n\t" - "movq 8+%[dest], %%rdx\n\t" - ".align 16\n\t" - "1: lock; cmpxchg16b %[dest]\n\t" - "jne 1b\n\t" - "movq %%rax, %[old_value]\n\t" - "movq %%rdx, 8+%[old_value]\n\t" - : [dest] "+o" (storage), [old_value] "=o" (old_value) - : "b" (p_value[0]), "c" (p_value[1]) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx" - ); -#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) +#if defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + uint64_t old_bits[2]; __asm__ __volatile__ ( - "movq 0(%[dest]), %%rax\n\t" - "movq 8(%[dest]), %%rdx\n\t" + "movq %[dest_lo], %%rax\n\t" + "movq %[dest_hi], %%rdx\n\t" ".align 16\n\t" - "1: lock; cmpxchg16b 0(%[dest])\n\t" + "1: lock; cmpxchg16b %[dest_lo]\n\t" "jne 1b\n\t" - "movq %%rax, 0(%[old_value])\n\t" - "movq %%rdx, 8(%[old_value])\n\t" - : - : "b" (p_value[0]), "c" (p_value[1]), [dest] "r" (&storage), [old_value] "r" (&old_value) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory", "rax", "rdx" + : [dest_lo] "+m" (storage), [dest_hi] "+m" (reinterpret_cast< volatile aliasing_uint64_t* >(&storage)[1]), "=&a" (old_bits[0]), "=&d" (old_bits[1]) + : "b" (reinterpret_cast< const aliasing_uint64_t* >(&v)[0]), "c" (reinterpret_cast< const aliasing_uint64_t* >(&v)[1]) + : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); -#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) + storage_type old_value; + BOOST_ATOMIC_DETAIL_MEMCPY(&old_value, old_bits, sizeof(old_value)); return old_value; -#else // defined(BOOST_ATOMIC_DETAIL_NO_ASM_RAX_RDX_PAIRS) - uint64_t const* p_value = (uint64_t const*)&v; -#if !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) - __asm__ __volatile__ - ( - "movq %[dest], %%rax\n\t" - "movq 8+%[dest], %%rdx\n\t" - ".align 16\n\t" - "1: lock; cmpxchg16b %[dest]\n\t" - "jne 1b\n\t" - : "=&A" (v), [dest] "+o" (storage) - : "b" (p_value[0]), "c" (p_value[1]) - : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" - ); -#else // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) +#else // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) + storage_type old_value; __asm__ __volatile__ ( - "movq 0(%[dest]), %%rax\n\t" - "movq 8(%[dest]), %%rdx\n\t" + "movq %[dest_lo], %%rax\n\t" + "movq %[dest_hi], %%rdx\n\t" ".align 16\n\t" - "1: lock; cmpxchg16b 0(%[dest])\n\t" + "1: lock; cmpxchg16b %[dest_lo]\n\t" "jne 1b\n\t" - : "=&A" (v) - : "b" (p_value[0]), "c" (p_value[1]), [dest] "r" (&storage) + : "=&A" (old_value), [dest_lo] "+m" (storage), [dest_hi] "+m" (reinterpret_cast< volatile aliasing_uint64_t* >(&storage)[1]) + : "b" (reinterpret_cast< const aliasing_uint64_t* >(&v)[0]), "c" (reinterpret_cast< const aliasing_uint64_t* >(&v)[1]) : BOOST_ATOMIC_DETAIL_ASM_CLOBBER_CC_COMMA "memory" ); -#endif // !defined(BOOST_ATOMIC_DETAIL_NO_ASM_IMPLIED_ZERO_DISPLACEMENTS) - return v; -#endif - } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; + return old_value; +#endif // defined(BOOST_ATOMIC_DETAIL_X86_NO_ASM_AX_DX_PAIRS) } }; diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_linux_arm.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_linux_arm.hpp index 41713a35f5..16af1732cf 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_linux_arm.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_linux_arm.hpp @@ -18,6 +18,7 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_LINUX_ARM_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_LINUX_ARM_HPP_INCLUDED_ +#include #include #include #include @@ -57,9 +58,12 @@ namespace detail { struct linux_arm_cas_base { + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + static BOOST_FORCEINLINE void fence_before_store(memory_order order) BOOST_NOEXCEPT { - if ((order & memory_order_release) != 0) + if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) hardware_full_fence(); } @@ -71,7 +75,7 @@ struct linux_arm_cas_base static BOOST_FORCEINLINE void fence_after_load(memory_order order) BOOST_NOEXCEPT { - if ((order & (memory_order_consume | memory_order_acquire)) != 0) + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) hardware_full_fence(); } @@ -86,8 +90,11 @@ template< bool Signed > struct linux_arm_cas : public linux_arm_cas_base { - typedef typename make_storage_type< 4u, Signed >::type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 4u >::type storage_type; + typedef typename make_storage_type< 4u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 4u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -134,11 +141,6 @@ struct linux_arm_cas : return false; } } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_msvc_arm.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_msvc_arm.hpp index ff953d67e3..608c6fddf8 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_msvc_arm.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_msvc_arm.hpp @@ -17,12 +17,13 @@ #define BOOST_ATOMIC_DETAIL_OPS_MSVC_ARM_HPP_INCLUDED_ #include +#include #include -#include #include #include #include #include +#include #include #include @@ -53,6 +54,9 @@ namespace detail { struct msvc_arm_operations_base { + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT { __dmb(0xB); // _ARM_BARRIER_ISH, see armintr.h from MSVC 11 and later @@ -62,7 +66,7 @@ struct msvc_arm_operations_base { BOOST_ATOMIC_DETAIL_COMPILER_BARRIER(); - if ((order & memory_order_release) != 0) + if ((static_cast< unsigned int >(order) & static_cast< unsigned int >(memory_order_release)) != 0u) hardware_full_fence(); BOOST_ATOMIC_DETAIL_COMPILER_BARRIER(); @@ -82,7 +86,7 @@ struct msvc_arm_operations_base { BOOST_ATOMIC_DETAIL_COMPILER_BARRIER(); - if ((order & (memory_order_consume | memory_order_acquire)) != 0) + if ((static_cast< unsigned int >(order) & (static_cast< unsigned int >(memory_order_consume) | static_cast< unsigned int >(memory_order_acquire))) != 0u) hardware_full_fence(); BOOST_ATOMIC_DETAIL_COMPILER_BARRIER(); @@ -91,19 +95,24 @@ struct msvc_arm_operations_base static BOOST_FORCEINLINE BOOST_CONSTEXPR memory_order cas_common_order(memory_order success_order, memory_order failure_order) BOOST_NOEXCEPT { // Combine order flags together and promote memory_order_consume to memory_order_acquire - return static_cast< memory_order >(((failure_order | success_order) & ~memory_order_consume) | (((failure_order | success_order) & memory_order_consume) << 1u)); + return static_cast< memory_order >(((static_cast< unsigned int >(failure_order) | static_cast< unsigned int >(success_order)) & ~static_cast< unsigned int >(memory_order_consume)) + | (((static_cast< unsigned int >(failure_order) | static_cast< unsigned int >(success_order)) & static_cast< unsigned int >(memory_order_consume)) << 1u)); } }; -template< typename T, typename Derived > +template< std::size_t Size, bool Signed, typename Derived > struct msvc_arm_operations : public msvc_arm_operations_base { - typedef T storage_type; + typedef typename make_storage_type< Size >::type storage_type; + typedef typename make_storage_type< Size >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = Size; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - typedef typename make_signed< storage_type >::type signed_storage_type; + typedef typename boost::atomics::detail::make_signed< storage_type >::type signed_storage_type; return Derived::fetch_add(storage, static_cast< storage_type >(-static_cast< signed_storage_type >(v)), order); } @@ -122,20 +131,14 @@ struct msvc_arm_operations : { Derived::store(storage, (storage_type)0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > struct operations< 1u, Signed > : - public msvc_arm_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > + public msvc_arm_operations< 1u, Signed, operations< 1u, Signed > > { - typedef msvc_arm_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type; + typedef msvc_arm_operations< 1u, Signed, operations< 1u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -297,11 +300,10 @@ struct operations< 1u, Signed > : template< bool Signed > struct operations< 2u, Signed > : - public msvc_arm_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > + public msvc_arm_operations< 2u, Signed, operations< 2u, Signed > > { - typedef msvc_arm_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type; + typedef msvc_arm_operations< 2u, Signed, operations< 2u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -463,11 +465,10 @@ struct operations< 2u, Signed > : template< bool Signed > struct operations< 4u, Signed > : - public msvc_arm_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > + public msvc_arm_operations< 4u, Signed, operations< 4u, Signed > > { - typedef msvc_arm_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type; + typedef msvc_arm_operations< 4u, Signed, operations< 4u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -629,11 +630,10 @@ struct operations< 4u, Signed > : template< bool Signed > struct operations< 8u, Signed > : - public msvc_arm_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > + public msvc_arm_operations< 8u, Signed, operations< 8u, Signed > > { - typedef msvc_arm_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > base_type; + typedef msvc_arm_operations< 8u, Signed, operations< 8u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_msvc_x86.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_msvc_x86.hpp index 04b496efb6..70b0ea994b 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_msvc_x86.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_msvc_x86.hpp @@ -16,12 +16,13 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_MSVC_X86_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_MSVC_X86_HPP_INCLUDED_ +#include #include -#include #include #include #include #include +#include #include #if defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG8B) || defined(BOOST_ATOMIC_DETAIL_X86_HAS_CMPXCHG16B) #include @@ -72,6 +73,9 @@ namespace detail { struct msvc_x86_operations_base { + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT { #if defined(BOOST_ATOMIC_DETAIL_X86_HAS_MFENCE) @@ -104,11 +108,15 @@ struct msvc_x86_operations_base } }; -template< typename T, typename Derived > +template< std::size_t Size, bool Signed, typename Derived > struct msvc_x86_operations : public msvc_x86_operations_base { - typedef T storage_type; + typedef typename make_storage_type< Size >::type storage_type; + typedef typename make_storage_type< Size >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = Size; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -133,7 +141,7 @@ struct msvc_x86_operations : static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - typedef typename make_signed< storage_type >::type signed_storage_type; + typedef typename boost::atomics::detail::make_signed< storage_type >::type signed_storage_type; return Derived::fetch_add(storage, static_cast< storage_type >(-static_cast< signed_storage_type >(v)), order); } @@ -152,20 +160,14 @@ struct msvc_x86_operations : { store(storage, (storage_type)0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > struct operations< 4u, Signed > : - public msvc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > + public msvc_x86_operations< 4u, Signed, operations< 4u, Signed > > { - typedef msvc_x86_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type; + typedef msvc_x86_operations< 4u, Signed, operations< 4u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -233,11 +235,10 @@ struct operations< 4u, Signed > : template< bool Signed > struct operations< 1u, Signed > : - public msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > + public msvc_x86_operations< 1u, Signed, operations< 1u, Signed > > { - typedef msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type; + typedef msvc_x86_operations< 1u, Signed, operations< 1u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -278,11 +279,10 @@ struct operations< 1u, Signed > : template< bool Signed > struct operations< 1u, Signed > : - public msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > + public msvc_x86_operations< 1u, Signed, operations< 1u, Signed > > { - typedef msvc_x86_operations< typename make_storage_type< 1u, Signed >::type, operations< 1u, Signed > > base_type; + typedef msvc_x86_operations< 1u, Signed, operations< 1u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 1u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -335,22 +335,19 @@ struct operations< 1u, Signed > : static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { base_type::fence_before(order); - int backup; __asm { - mov backup, ebx - xor edx, edx mov edi, storage - movzx ebx, v + movzx ecx, v + xor edx, edx movzx eax, byte ptr [edi] align 16 again: mov dl, al - and dl, bl + and dl, cl lock cmpxchg byte ptr [edi], dl jne again mov v, al - mov ebx, backup }; base_type::fence_after(order); return v; @@ -359,22 +356,19 @@ struct operations< 1u, Signed > : static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { base_type::fence_before(order); - int backup; __asm { - mov backup, ebx - xor edx, edx mov edi, storage - movzx ebx, v + movzx ecx, v + xor edx, edx movzx eax, byte ptr [edi] align 16 again: mov dl, al - or dl, bl + or dl, cl lock cmpxchg byte ptr [edi], dl jne again mov v, al - mov ebx, backup }; base_type::fence_after(order); return v; @@ -383,22 +377,19 @@ struct operations< 1u, Signed > : static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { base_type::fence_before(order); - int backup; __asm { - mov backup, ebx - xor edx, edx mov edi, storage - movzx ebx, v + movzx ecx, v + xor edx, edx movzx eax, byte ptr [edi] align 16 again: mov dl, al - xor dl, bl + xor dl, cl lock cmpxchg byte ptr [edi], dl jne again mov v, al - mov ebx, backup }; base_type::fence_after(order); return v; @@ -419,11 +410,10 @@ struct operations< 1u, Signed > : template< bool Signed > struct operations< 2u, Signed > : - public msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > + public msvc_x86_operations< 2u, Signed, operations< 2u, Signed > > { - typedef msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type; + typedef msvc_x86_operations< 2u, Signed, operations< 2u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -464,11 +454,10 @@ struct operations< 2u, Signed > : template< bool Signed > struct operations< 2u, Signed > : - public msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > + public msvc_x86_operations< 2u, Signed, operations< 2u, Signed > > { - typedef msvc_x86_operations< typename make_storage_type< 2u, Signed >::type, operations< 2u, Signed > > base_type; + typedef msvc_x86_operations< 2u, Signed, operations< 2u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 2u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -521,22 +510,19 @@ struct operations< 2u, Signed > : static BOOST_FORCEINLINE storage_type fetch_and(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { base_type::fence_before(order); - int backup; __asm { - mov backup, ebx - xor edx, edx mov edi, storage - movzx ebx, v + movzx ecx, v + xor edx, edx movzx eax, word ptr [edi] align 16 again: mov dx, ax - and dx, bx + and dx, cx lock cmpxchg word ptr [edi], dx jne again mov v, ax - mov ebx, backup }; base_type::fence_after(order); return v; @@ -545,22 +531,19 @@ struct operations< 2u, Signed > : static BOOST_FORCEINLINE storage_type fetch_or(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { base_type::fence_before(order); - int backup; __asm { - mov backup, ebx - xor edx, edx mov edi, storage - movzx ebx, v + movzx ecx, v + xor edx, edx movzx eax, word ptr [edi] align 16 again: mov dx, ax - or dx, bx + or dx, cx lock cmpxchg word ptr [edi], dx jne again mov v, ax - mov ebx, backup }; base_type::fence_after(order); return v; @@ -569,22 +552,19 @@ struct operations< 2u, Signed > : static BOOST_FORCEINLINE storage_type fetch_xor(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { base_type::fence_before(order); - int backup; __asm { - mov backup, ebx - xor edx, edx mov edi, storage - movzx ebx, v + movzx ecx, v + xor edx, edx movzx eax, word ptr [edi] align 16 again: mov dx, ax - xor dx, bx + xor dx, cx lock cmpxchg word ptr [edi], dx jne again mov v, ax - mov ebx, backup }; base_type::fence_after(order); return v; @@ -607,8 +587,14 @@ struct operations< 2u, Signed > : template< bool Signed > struct msvc_dcas_x86 { - typedef typename make_storage_type< 8u, Signed >::type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 8u >::type storage_type; + typedef typename make_storage_type< 8u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 8u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; // Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A, 8.1.1. Guaranteed Atomic Operations: // @@ -652,7 +638,7 @@ struct msvc_dcas_x86 } else { - int backup; + uint32_t backup; __asm { mov backup, ebx @@ -740,7 +726,7 @@ struct msvc_dcas_x86 expected = old_val; #else bool result; - int backup; + uint32_t backup; __asm { mov backup, ebx @@ -768,12 +754,12 @@ struct msvc_dcas_x86 return compare_exchange_strong(storage, expected, desired, success_order, failure_order); } - static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT + static BOOST_FORCEINLINE storage_type exchange(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { BOOST_ATOMIC_DETAIL_COMPILER_BARRIER(); storage_type volatile* p = &storage; - int backup; + uint32_t backup; __asm { mov backup, ebx @@ -795,11 +781,6 @@ struct msvc_dcas_x86 return v; } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > @@ -812,11 +793,10 @@ struct operations< 8u, Signed > : template< bool Signed > struct operations< 8u, Signed > : - public msvc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > + public msvc_x86_operations< 8u, Signed, operations< 8u, Signed > > { - typedef msvc_x86_operations< typename make_storage_type< 8u, Signed >::type, operations< 8u, Signed > > base_type; + typedef msvc_x86_operations< 8u, Signed, operations< 8u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 8u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -860,8 +840,14 @@ struct operations< 8u, Signed > : template< bool Signed > struct msvc_dcas_x86_64 { - typedef typename make_storage_type< 16u, Signed >::type storage_type; - typedef typename make_storage_type< 16u, Signed >::aligned aligned_storage_type; + typedef typename make_storage_type< 16u >::type storage_type; + typedef typename make_storage_type< 16u >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = true; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = 16u; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order) BOOST_NOEXCEPT { @@ -887,11 +873,6 @@ struct msvc_dcas_x86_64 { return compare_exchange_strong(storage, expected, desired, success_order, failure_order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_windows.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_windows.hpp index 191eb84d0a..d4ce6d95e7 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/ops_windows.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/ops_windows.hpp @@ -23,12 +23,13 @@ #ifndef BOOST_ATOMIC_DETAIL_OPS_WINDOWS_HPP_INCLUDED_ #define BOOST_ATOMIC_DETAIL_OPS_WINDOWS_HPP_INCLUDED_ +#include #include -#include #include #include #include #include +#include #include #include #include @@ -43,6 +44,9 @@ namespace detail { struct windows_operations_base { + static BOOST_CONSTEXPR_OR_CONST bool full_cas_based = false; + static BOOST_CONSTEXPR_OR_CONST bool is_always_lock_free = true; + static BOOST_FORCEINLINE void hardware_full_fence() BOOST_NOEXCEPT { long tmp; @@ -60,11 +64,15 @@ struct windows_operations_base } }; -template< typename T, typename Derived > +template< std::size_t Size, bool Signed, typename Derived > struct windows_operations : public windows_operations_base { - typedef T storage_type; + typedef typename make_storage_type< Size >::type storage_type; + typedef typename make_storage_type< Size >::aligned aligned_storage_type; + + static BOOST_CONSTEXPR_OR_CONST std::size_t storage_size = Size; + static BOOST_CONSTEXPR_OR_CONST bool is_signed = Signed; static BOOST_FORCEINLINE void store(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { @@ -78,7 +86,7 @@ struct windows_operations : static BOOST_FORCEINLINE storage_type fetch_sub(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { - typedef typename make_signed< storage_type >::type signed_storage_type; + typedef typename boost::atomics::detail::make_signed< storage_type >::type signed_storage_type; return Derived::fetch_add(storage, static_cast< storage_type >(-static_cast< signed_storage_type >(v)), order); } @@ -97,20 +105,14 @@ struct windows_operations : { store(storage, (storage_type)0, order); } - - static BOOST_FORCEINLINE bool is_lock_free(storage_type const volatile&) BOOST_NOEXCEPT - { - return true; - } }; template< bool Signed > struct operations< 4u, Signed > : - public windows_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > + public windows_operations< 4u, Signed, operations< 4u, Signed > > { - typedef windows_operations< typename make_storage_type< 4u, Signed >::type, operations< 4u, Signed > > base_type; + typedef windows_operations< 4u, Signed, operations< 4u, Signed > > base_type; typedef typename base_type::storage_type storage_type; - typedef typename make_storage_type< 4u, Signed >::aligned aligned_storage_type; static BOOST_FORCEINLINE storage_type fetch_add(storage_type volatile& storage, storage_type v, memory_order order) BOOST_NOEXCEPT { diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/platform.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/platform.hpp index 34be8e6a0a..df4cc305ac 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/platform.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/platform.hpp @@ -21,49 +21,48 @@ #pragma once #endif -#if !defined(BOOST_ATOMIC_FORCE_FALLBACK) - -// Compiler-based backends -#if (defined(__ibmxl__) || defined(__IBMCPP__)) && defined(__PPC__) +#if defined(__GNUC__) && defined(__arm__) + +// Newer gcc versions define __ARM_ARCH. Older ones don't, so we have to deduce ARM arch version from a bunch of version-specific macros. +#if defined(__ARM_ARCH) +#define BOOST_ATOMIC_DETAIL_ARM_ARCH __ARM_ARCH +#elif defined(__ARM_ARCH_8A__) +#define BOOST_ATOMIC_DETAIL_ARM_ARCH 8 +#elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) ||\ + defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) ||\ + defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__) +#define BOOST_ATOMIC_DETAIL_ARM_ARCH 7 +#elif defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) ||\ + defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) ||\ + defined(__ARM_ARCH_6ZK__) +#define BOOST_ATOMIC_DETAIL_ARM_ARCH 6 +#else +// We are not interested in older versions - they don't support atomic ops +#define BOOST_ATOMIC_DETAIL_ARM_ARCH 0 +#endif -// IBM XL C++ Compiler has to be checked before GCC/Clang as it pretends to be one but does not support __atomic* intrinsics. -// It does support GCC inline assembler though. -#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_ppc +#endif // defined(__GNUC__) && defined(__arm__) -#elif ((defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 407)) ||\ - (defined(BOOST_CLANG) && ((__clang_major__ * 100 + __clang_minor__) >= 302))) &&\ - (\ - (__GCC_ATOMIC_BOOL_LOCK_FREE + 0) == 2 ||\ - (__GCC_ATOMIC_CHAR_LOCK_FREE + 0) == 2 ||\ - (__GCC_ATOMIC_SHORT_LOCK_FREE + 0) == 2 ||\ - (__GCC_ATOMIC_INT_LOCK_FREE + 0) == 2 ||\ - (__GCC_ATOMIC_LONG_LOCK_FREE + 0) == 2 ||\ - (__GCC_ATOMIC_LLONG_LOCK_FREE + 0) == 2\ - ) +#if !defined(BOOST_ATOMIC_FORCE_FALLBACK) -#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_atomic +// Determine the target platform. +// The target platform describes the compiler and target architecture. It can be used by more generic backends, such as the ones +// based on compiler intrinsics, to implement specialized operations in a non-generic way. -#elif (defined(__GNUC__) || defined(__SUNPRO_CC)) && (defined(__i386__) || defined(__x86_64__)) +#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_x86 +#define BOOST_ATOMIC_DETAIL_EXTRA_BACKEND gcc_x86 #elif defined(__GNUC__) && (defined(__POWERPC__) || defined(__PPC__)) #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_ppc +#define BOOST_ATOMIC_DETAIL_EXTRA_BACKEND gcc_ppc -// This list of ARM architecture versions comes from Apple's arm/arch.h header. -// I don't know how complete it is. -#elif defined(__GNUC__) &&\ - (\ - defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) ||\ - defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) ||\ - defined(__ARM_ARCH_6ZK__) ||\ - defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) ||\ - defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) ||\ - defined(__ARM_ARCH_7EM__) || defined(__ARM_ARCH_7S__)\ - ) +#elif defined(__GNUC__) && defined(__arm__) && (BOOST_ATOMIC_DETAIL_ARM_ARCH+0) >= 6 #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_arm +#define BOOST_ATOMIC_DETAIL_EXTRA_BACKEND gcc_arm #elif (defined(__GNUC__) || defined(__SUNPRO_CC)) && (defined(__sparcv8plus) || defined(__sparc_v9__)) @@ -73,6 +72,38 @@ #define BOOST_ATOMIC_DETAIL_PLATFORM gcc_alpha +#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) + +#define BOOST_ATOMIC_DETAIL_PLATFORM msvc_x86 + +#elif defined(_MSC_VER) && _MSC_VER >= 1700 && (defined(_M_ARM) || defined(_M_ARM64)) + +#define BOOST_ATOMIC_DETAIL_PLATFORM msvc_arm + +#endif + +// Compiler-based backends + +// IBM XL C++ Compiler has to be checked before GCC/Clang as it pretends to be one but does not support __atomic* intrinsics. +// It does support GCC inline assembler though. +#if !(defined(__ibmxl__) || defined(__IBMCPP__)) &&\ + ((defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 407)) ||\ + (defined(BOOST_CLANG) && ((__clang_major__ * 100 + __clang_minor__) >= 302))) &&\ + (\ + (__GCC_ATOMIC_BOOL_LOCK_FREE + 0) == 2 ||\ + (__GCC_ATOMIC_CHAR_LOCK_FREE + 0) == 2 ||\ + (__GCC_ATOMIC_SHORT_LOCK_FREE + 0) == 2 ||\ + (__GCC_ATOMIC_INT_LOCK_FREE + 0) == 2 ||\ + (__GCC_ATOMIC_LONG_LOCK_FREE + 0) == 2 ||\ + (__GCC_ATOMIC_LLONG_LOCK_FREE + 0) == 2\ + ) + +#define BOOST_ATOMIC_DETAIL_BACKEND gcc_atomic + +#elif defined(BOOST_ATOMIC_DETAIL_PLATFORM) + +#define BOOST_ATOMIC_DETAIL_BACKEND BOOST_ATOMIC_DETAIL_PLATFORM + #elif defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 401) &&\ (\ defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_1) ||\ @@ -82,40 +113,51 @@ defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_16)\ ) -#define BOOST_ATOMIC_DETAIL_PLATFORM gcc_sync - -#elif defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64)) - -#define BOOST_ATOMIC_DETAIL_PLATFORM msvc_x86 - -#elif defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_M_ARM) - -#define BOOST_ATOMIC_DETAIL_PLATFORM msvc_arm +#define BOOST_ATOMIC_DETAIL_BACKEND gcc_sync #endif // OS-based backends -#if !defined(BOOST_ATOMIC_DETAIL_PLATFORM) + +#if !defined(BOOST_ATOMIC_DETAIL_BACKEND) #if defined(__linux__) && defined(__arm__) -#define BOOST_ATOMIC_DETAIL_PLATFORM linux_arm +#define BOOST_ATOMIC_DETAIL_BACKEND linux_arm #elif defined(BOOST_WINDOWS) || defined(_WIN32_CE) -#define BOOST_ATOMIC_DETAIL_PLATFORM windows +#define BOOST_ATOMIC_DETAIL_BACKEND windows #endif -#endif // !defined(BOOST_ATOMIC_DETAIL_PLATFORM) +#endif // !defined(BOOST_ATOMIC_DETAIL_BACKEND) #endif // !defined(BOOST_ATOMIC_FORCE_FALLBACK) -#if !defined(BOOST_ATOMIC_DETAIL_PLATFORM) -#define BOOST_ATOMIC_DETAIL_PLATFORM emulated +#if !defined(BOOST_ATOMIC_DETAIL_BACKEND) +#define BOOST_ATOMIC_DETAIL_BACKEND emulated #define BOOST_ATOMIC_EMULATED #endif -#define BOOST_ATOMIC_DETAIL_HEADER(prefix) +#if !defined(BOOST_ATOMIC_DETAIL_FP_BACKEND) +#define BOOST_ATOMIC_DETAIL_FP_BACKEND generic +#define BOOST_ATOMIC_DETAIL_FP_BACKEND_GENERIC +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_EXTRA_BACKEND) +#define BOOST_ATOMIC_DETAIL_EXTRA_BACKEND generic +#define BOOST_ATOMIC_DETAIL_EXTRA_BACKEND_GENERIC +#endif + +#if !defined(BOOST_ATOMIC_DETAIL_EXTRA_FP_BACKEND) +#define BOOST_ATOMIC_DETAIL_EXTRA_FP_BACKEND generic +#define BOOST_ATOMIC_DETAIL_EXTRA_FP_BACKEND_GENERIC +#endif + +#define BOOST_ATOMIC_DETAIL_BACKEND_HEADER(prefix) +#define BOOST_ATOMIC_DETAIL_FP_BACKEND_HEADER(prefix) +#define BOOST_ATOMIC_DETAIL_EXTRA_BACKEND_HEADER(prefix) +#define BOOST_ATOMIC_DETAIL_EXTRA_FP_BACKEND_HEADER(prefix) #endif // BOOST_ATOMIC_DETAIL_PLATFORM_HPP_INCLUDED_ diff --git a/bundled/boost-1.62.0/include/boost/atomic/detail/storage_type.hpp b/bundled/boost-1.62.0/include/boost/atomic/detail/storage_type.hpp index 63a7cef581..5d824d3a27 100644 --- a/bundled/boost-1.62.0/include/boost/atomic/detail/storage_type.hpp +++ b/bundled/boost-1.62.0/include/boost/atomic/detail/storage_type.hpp @@ -19,9 +19,7 @@ #include #include #include -#if !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCMP) || !defined(BOOST_ATOMIC_DETAIL_HAS_BUILTIN_MEMCPY) -#include -#endif +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once @@ -38,7 +36,7 @@ BOOST_FORCEINLINE void non_atomic_load(T const volatile& from, T& to) BOOST_NOEX } template< std::size_t Size > -struct buffer_storage +struct BOOST_ATOMIC_DETAIL_MAY_ALIAS buffer_storage { BOOST_ALIGNMENT(16) unsigned char data[Size]; @@ -64,12 +62,12 @@ BOOST_FORCEINLINE void non_atomic_load(buffer_storage< Size > const volatile& fr BOOST_ATOMIC_DETAIL_MEMCPY(to.data, const_cast< unsigned char const* >(from.data), Size); } -template< std::size_t Size, bool Signed > +template< std::size_t Size > struct make_storage_type { typedef buffer_storage< Size > type; - struct aligned + struct BOOST_ATOMIC_DETAIL_MAY_ALIAS aligned { type value; @@ -79,25 +77,11 @@ struct make_storage_type }; template< > -struct make_storage_type< 1u, false > -{ - typedef boost::uint8_t type; - - struct aligned - { - type value; - - BOOST_DEFAULTED_FUNCTION(aligned(), {}) - BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {} - }; -}; - -template< > -struct make_storage_type< 1u, true > +struct make_storage_type< 1u > { - typedef boost::int8_t type; + typedef boost::uint8_t BOOST_ATOMIC_DETAIL_MAY_ALIAS type; - struct aligned + struct BOOST_ATOMIC_DETAIL_MAY_ALIAS aligned { type value; @@ -107,11 +91,11 @@ struct make_storage_type< 1u, true > }; template< > -struct make_storage_type< 2u, false > +struct make_storage_type< 2u > { - typedef boost::uint16_t type; + typedef boost::uint16_t BOOST_ATOMIC_DETAIL_MAY_ALIAS type; - struct aligned + struct BOOST_ATOMIC_DETAIL_MAY_ALIAS aligned { BOOST_ALIGNMENT(2) type value; @@ -121,25 +105,11 @@ struct make_storage_type< 2u, false > }; template< > -struct make_storage_type< 2u, true > +struct make_storage_type< 4u > { - typedef boost::int16_t type; + typedef boost::uint32_t BOOST_ATOMIC_DETAIL_MAY_ALIAS type; - struct aligned - { - BOOST_ALIGNMENT(2) type value; - - BOOST_DEFAULTED_FUNCTION(aligned(), {}) - BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {} - }; -}; - -template< > -struct make_storage_type< 4u, false > -{ - typedef boost::uint32_t type; - - struct aligned + struct BOOST_ATOMIC_DETAIL_MAY_ALIAS aligned { BOOST_ALIGNMENT(4) type value; @@ -149,39 +119,11 @@ struct make_storage_type< 4u, false > }; template< > -struct make_storage_type< 4u, true > +struct make_storage_type< 8u > { - typedef boost::int32_t type; + typedef boost::uint64_t BOOST_ATOMIC_DETAIL_MAY_ALIAS type; - struct aligned - { - BOOST_ALIGNMENT(4) type value; - - BOOST_DEFAULTED_FUNCTION(aligned(), {}) - BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {} - }; -}; - -template< > -struct make_storage_type< 8u, false > -{ - typedef boost::uint64_t type; - - struct aligned - { - BOOST_ALIGNMENT(8) type value; - - BOOST_DEFAULTED_FUNCTION(aligned(), {}) - BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {} - }; -}; - -template< > -struct make_storage_type< 8u, true > -{ - typedef boost::int64_t type; - - struct aligned + struct BOOST_ATOMIC_DETAIL_MAY_ALIAS aligned { BOOST_ALIGNMENT(8) type value; @@ -193,25 +135,11 @@ struct make_storage_type< 8u, true > #if defined(BOOST_HAS_INT128) template< > -struct make_storage_type< 16u, false > +struct make_storage_type< 16u > { - typedef boost::uint128_type type; + typedef boost::uint128_type BOOST_ATOMIC_DETAIL_MAY_ALIAS type; - struct aligned - { - BOOST_ALIGNMENT(16) type value; - - BOOST_DEFAULTED_FUNCTION(aligned(), {}) - BOOST_FORCEINLINE BOOST_CONSTEXPR explicit aligned(type v) BOOST_NOEXCEPT : value(v) {} - }; -}; - -template< > -struct make_storage_type< 16u, true > -{ - typedef boost::int128_type type; - - struct aligned + struct BOOST_ATOMIC_DETAIL_MAY_ALIAS aligned { BOOST_ALIGNMENT(16) type value; @@ -222,19 +150,21 @@ struct make_storage_type< 16u, true > #elif !defined(BOOST_NO_ALIGNMENT) -struct storage128_t +struct BOOST_ATOMIC_DETAIL_MAY_ALIAS storage128_t { - boost::uint64_t data[2]; + typedef boost::uint64_t BOOST_ATOMIC_DETAIL_MAY_ALIAS element_type; + + element_type data[2]; BOOST_FORCEINLINE bool operator! () const BOOST_NOEXCEPT { - return data[0] == 0 && data[1] == 0; + return (data[0] | data[1]) == 0u; } }; BOOST_FORCEINLINE bool operator== (storage128_t const& left, storage128_t const& right) BOOST_NOEXCEPT { - return left.data[0] == right.data[0] && left.data[1] == right.data[1]; + return ((left.data[0] ^ right.data[0]) | (left.data[1] ^ right.data[1])) == 0u; } BOOST_FORCEINLINE bool operator!= (storage128_t const& left, storage128_t const& right) BOOST_NOEXCEPT { @@ -247,12 +177,12 @@ BOOST_FORCEINLINE void non_atomic_load(storage128_t const volatile& from, storag to.data[1] = from.data[1]; } -template< bool Signed > -struct make_storage_type< 16u, Signed > +template< > +struct make_storage_type< 16u > { typedef storage128_t type; - struct aligned + struct BOOST_ATOMIC_DETAIL_MAY_ALIAS aligned { BOOST_ALIGNMENT(16) type value; @@ -266,11 +196,8 @@ struct make_storage_type< 16u, Signed > template< typename T > struct storage_size_of { - enum _ - { - size = sizeof(T), - value = (size == 3 ? 4 : (size >= 5 && size <= 7 ? 8 : (size >= 9 && size <= 15 ? 16 : size))) - }; + static BOOST_CONSTEXPR_OR_CONST std::size_t size = sizeof(T); + static BOOST_CONSTEXPR_OR_CONST std::size_t value = (size == 3u ? 4u : (size >= 5u && size <= 7u ? 8u : (size >= 9u && size <= 15u ? 16u : size))); }; } // namespace detail diff --git a/bundled/boost-1.62.0/include/boost/bind/arg.hpp b/bundled/boost-1.62.0/include/boost/bind/arg.hpp index a74b8298be..cb52e6689f 100644 --- a/bundled/boost-1.62.0/include/boost/bind/arg.hpp +++ b/bundled/boost-1.62.0/include/boost/bind/arg.hpp @@ -21,20 +21,27 @@ #include #include -#include namespace boost { +template struct _arg_eq +{ +}; + +template<> struct _arg_eq +{ + typedef void type; +}; + template< int I > struct arg { BOOST_CONSTEXPR arg() { } - template< class T > BOOST_CONSTEXPR arg( T const & /* t */ ) + template< class T > BOOST_CONSTEXPR arg( T const & /* t */, typename _arg_eq< I == is_placeholder::value >::type * = 0 ) { - BOOST_STATIC_ASSERT( I == is_placeholder::value ); } }; diff --git a/bundled/boost-1.62.0/include/boost/bind/bind.hpp b/bundled/boost-1.62.0/include/boost/bind/bind.hpp index 85d675a0e3..4cedc5e9a4 100644 --- a/bundled/boost-1.62.0/include/boost/bind/bind.hpp +++ b/bundled/boost-1.62.0/include/boost/bind/bind.hpp @@ -2122,21 +2122,31 @@ template +# if defined( __cpp_noexcept_function_type ) || defined( _NOEXCEPT_TYPES_SUPPORTED ) +# undef BOOST_BIND_NOEXCEPT +# define BOOST_BIND_NOEXCEPT noexcept +# include +# endif + #undef BOOST_BIND_CC #undef BOOST_BIND_ST +#undef BOOST_BIND_NOEXCEPT #ifdef BOOST_BIND_ENABLE_STDCALL #define BOOST_BIND_CC __stdcall #define BOOST_BIND_ST +#define BOOST_BIND_NOEXCEPT #include #undef BOOST_BIND_CC #undef BOOST_BIND_ST +#undef BOOST_BIND_NOEXCEPT #endif @@ -2144,11 +2154,13 @@ template #undef BOOST_BIND_CC #undef BOOST_BIND_ST +#undef BOOST_BIND_NOEXCEPT #endif @@ -2156,11 +2168,13 @@ template #undef BOOST_BIND_ST #undef BOOST_BIND_CC +#undef BOOST_BIND_NOEXCEPT #endif @@ -2168,23 +2182,33 @@ template #include +# if defined( __cpp_noexcept_function_type ) || defined( _NOEXCEPT_TYPES_SUPPORTED ) +# undef BOOST_BIND_MF_NOEXCEPT +# define BOOST_BIND_MF_NOEXCEPT noexcept +# include +# endif + #undef BOOST_BIND_MF_NAME #undef BOOST_BIND_MF_CC +#undef BOOST_BIND_MF_NOEXCEPT #ifdef BOOST_MEM_FN_ENABLE_CDECL #define BOOST_BIND_MF_NAME(X) X##_cdecl #define BOOST_BIND_MF_CC __cdecl +#define BOOST_BIND_MF_NOEXCEPT #include #include #undef BOOST_BIND_MF_NAME #undef BOOST_BIND_MF_CC +#undef BOOST_BIND_MF_NOEXCEPT #endif @@ -2192,12 +2216,14 @@ template #include #undef BOOST_BIND_MF_NAME #undef BOOST_BIND_MF_CC +#undef BOOST_BIND_MF_NOEXCEPT #endif @@ -2205,12 +2231,14 @@ template #include #undef BOOST_BIND_MF_NAME #undef BOOST_BIND_MF_CC +#undef BOOST_BIND_MF_NOEXCEPT #endif @@ -2264,6 +2292,15 @@ template< class R, class T > struct add_cref< R (T::*) () const, 1 > typedef void type; }; +#if defined( __cpp_noexcept_function_type ) || defined( _NOEXCEPT_TYPES_SUPPORTED ) + +template< class R, class T > struct add_cref< R (T::*) () const noexcept, 1 > +{ + typedef void type; +}; + +#endif // __cpp_noexcept_function_type + #endif // __IBMCPP__ template struct isref diff --git a/bundled/boost-1.62.0/include/boost/bind/bind_cc.hpp b/bundled/boost-1.62.0/include/boost/bind/bind_cc.hpp index 35f8eceb9e..278aa9a2a8 100644 --- a/bundled/boost-1.62.0/include/boost/bind/bind_cc.hpp +++ b/bundled/boost-1.62.0/include/boost/bind/bind_cc.hpp @@ -13,28 +13,28 @@ // template - _bi::bind_t - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) ()) + _bi::bind_t + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) () BOOST_BIND_NOEXCEPT) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) () BOOST_BIND_NOEXCEPT; typedef _bi::list0 list_type; return _bi::bind_t (f, list_type()); } template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1), A1 a1) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1) BOOST_BIND_NOEXCEPT, A1 a1) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_1::type list_type; return _bi::bind_t (f, list_type(a1)); } template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2), A1 a1, A2 a2) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_2::type list_type; return _bi::bind_t (f, list_type(a1, a2)); } @@ -42,10 +42,10 @@ template template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3), A1 a1, A2 a2, A3 a3) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_3::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3)); } @@ -53,10 +53,10 @@ template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_4::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4)); } @@ -64,10 +64,10 @@ template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_5::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5)); } @@ -75,10 +75,10 @@ template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_6::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6)); } @@ -86,10 +86,10 @@ template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_7::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7)); } @@ -97,10 +97,10 @@ template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_8::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8)); } @@ -108,10 +108,10 @@ template - _bi::bind_t::type> - BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + _bi::bind_t::type> + BOOST_BIND(BOOST_BIND_ST R (BOOST_BIND_CC *f) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { - typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9); + typedef BOOST_BIND_ST R (BOOST_BIND_CC *F) (B1, B2, B3, B4, B5, B6, B7, B8, B9) BOOST_BIND_NOEXCEPT; typedef typename _bi::list_av_9::type list_type; return _bi::bind_t(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } diff --git a/bundled/boost-1.62.0/include/boost/bind/bind_mf_cc.hpp b/bundled/boost-1.62.0/include/boost/bind/bind_mf_cc.hpp index e149384ff5..bbfd3719b6 100644 --- a/bundled/boost-1.62.0/include/boost/bind/bind_mf_cc.hpp +++ b/bundled/boost-1.62.0/include/boost/bind/bind_mf_cc.hpp @@ -17,7 +17,7 @@ template _bi::bind_t, typename _bi::list_av_1::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1) { typedef _mfi::BOOST_BIND_MF_NAME(mf0) F; typedef typename _bi::list_av_1::type list_type; @@ -27,7 +27,7 @@ template _bi::bind_t, typename _bi::list_av_1::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1) { typedef _mfi::BOOST_BIND_MF_NAME(cmf0) F; typedef typename _bi::list_av_1::type list_type; @@ -38,7 +38,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_1::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (), A1 a1) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () BOOST_BIND_MF_NOEXCEPT, A1 a1) { typedef _mfi::BOOST_BIND_MF_NAME(mf0) F; typedef typename _bi::list_av_1::type list_type; @@ -49,7 +49,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_1::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const, A1 a1) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) () const BOOST_BIND_MF_NOEXCEPT, A1 a1) { typedef _mfi::BOOST_BIND_MF_NAME(cmf0) F; typedef typename _bi::list_av_1::type list_type; @@ -62,7 +62,7 @@ template _bi::bind_t, typename _bi::list_av_2::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) { typedef _mfi::BOOST_BIND_MF_NAME(mf1) F; typedef typename _bi::list_av_2::type list_type; @@ -73,7 +73,7 @@ template _bi::bind_t, typename _bi::list_av_2::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) { typedef _mfi::BOOST_BIND_MF_NAME(cmf1) F; typedef typename _bi::list_av_2::type list_type; @@ -85,7 +85,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_2::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1), A1 a1, A2 a2) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) { typedef _mfi::BOOST_BIND_MF_NAME(mf1) F; typedef typename _bi::list_av_2::type list_type; @@ -97,7 +97,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_2::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const, A1 a1, A2 a2) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2) { typedef _mfi::BOOST_BIND_MF_NAME(cmf1) F; typedef typename _bi::list_av_2::type list_type; @@ -110,7 +110,7 @@ template _bi::bind_t, typename _bi::list_av_3::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) { typedef _mfi::BOOST_BIND_MF_NAME(mf2) F; typedef typename _bi::list_av_3::type list_type; @@ -121,7 +121,7 @@ template _bi::bind_t, typename _bi::list_av_3::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) { typedef _mfi::BOOST_BIND_MF_NAME(cmf2) F; typedef typename _bi::list_av_3::type list_type; @@ -133,7 +133,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_3::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2), A1 a1, A2 a2, A3 a3) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) { typedef _mfi::BOOST_BIND_MF_NAME(mf2) F; typedef typename _bi::list_av_3::type list_type; @@ -145,7 +145,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_3::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const, A1 a1, A2 a2, A3 a3) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3) { typedef _mfi::BOOST_BIND_MF_NAME(cmf2) F; typedef typename _bi::list_av_3::type list_type; @@ -158,7 +158,7 @@ template _bi::bind_t, typename _bi::list_av_4::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) { typedef _mfi::BOOST_BIND_MF_NAME(mf3) F; typedef typename _bi::list_av_4::type list_type; @@ -169,7 +169,7 @@ template _bi::bind_t, typename _bi::list_av_4::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) { typedef _mfi::BOOST_BIND_MF_NAME(cmf3) F; typedef typename _bi::list_av_4::type list_type; @@ -181,7 +181,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_4::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3), A1 a1, A2 a2, A3 a3, A4 a4) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) { typedef _mfi::BOOST_BIND_MF_NAME(mf3) F; typedef typename _bi::list_av_4::type list_type; @@ -193,7 +193,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_4::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const, A1 a1, A2 a2, A3 a3, A4 a4) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4) { typedef _mfi::BOOST_BIND_MF_NAME(cmf3) F; typedef typename _bi::list_av_4::type list_type; @@ -206,7 +206,7 @@ template _bi::bind_t, typename _bi::list_av_5::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef _mfi::BOOST_BIND_MF_NAME(mf4) F; typedef typename _bi::list_av_5::type list_type; @@ -217,7 +217,7 @@ template _bi::bind_t, typename _bi::list_av_5::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef _mfi::BOOST_BIND_MF_NAME(cmf4) F; typedef typename _bi::list_av_5::type list_type; @@ -229,7 +229,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_5::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef _mfi::BOOST_BIND_MF_NAME(mf4) F; typedef typename _bi::list_av_5::type list_type; @@ -241,7 +241,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_5::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { typedef _mfi::BOOST_BIND_MF_NAME(cmf4) F; typedef typename _bi::list_av_5::type list_type; @@ -254,7 +254,7 @@ template _bi::bind_t, typename _bi::list_av_6::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef _mfi::BOOST_BIND_MF_NAME(mf5) F; typedef typename _bi::list_av_6::type list_type; @@ -265,7 +265,7 @@ template _bi::bind_t, typename _bi::list_av_6::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef _mfi::BOOST_BIND_MF_NAME(cmf5) F; typedef typename _bi::list_av_6::type list_type; @@ -277,7 +277,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_6::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef _mfi::BOOST_BIND_MF_NAME(mf5) F; typedef typename _bi::list_av_6::type list_type; @@ -289,7 +289,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_6::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { typedef _mfi::BOOST_BIND_MF_NAME(cmf5) F; typedef typename _bi::list_av_6::type list_type; @@ -302,7 +302,7 @@ template _bi::bind_t, typename _bi::list_av_7::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef _mfi::BOOST_BIND_MF_NAME(mf6) F; typedef typename _bi::list_av_7::type list_type; @@ -313,7 +313,7 @@ template _bi::bind_t, typename _bi::list_av_7::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef _mfi::BOOST_BIND_MF_NAME(cmf6) F; typedef typename _bi::list_av_7::type list_type; @@ -325,7 +325,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_7::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef _mfi::BOOST_BIND_MF_NAME(mf6) F; typedef typename _bi::list_av_7::type list_type; @@ -337,7 +337,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_7::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { typedef _mfi::BOOST_BIND_MF_NAME(cmf6) F; typedef typename _bi::list_av_7::type list_type; @@ -350,7 +350,7 @@ template _bi::bind_t, typename _bi::list_av_8::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef _mfi::BOOST_BIND_MF_NAME(mf7) F; typedef typename _bi::list_av_8::type list_type; @@ -361,7 +361,7 @@ template _bi::bind_t, typename _bi::list_av_8::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef _mfi::BOOST_BIND_MF_NAME(cmf7) F; typedef typename _bi::list_av_8::type list_type; @@ -373,7 +373,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_8::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef _mfi::BOOST_BIND_MF_NAME(mf7) F; typedef typename _bi::list_av_8::type list_type; @@ -385,7 +385,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_8::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8) { typedef _mfi::BOOST_BIND_MF_NAME(cmf7) F; typedef typename _bi::list_av_8::type list_type; @@ -398,7 +398,7 @@ template _bi::bind_t, typename _bi::list_av_9::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef _mfi::BOOST_BIND_MF_NAME(mf8) F; typedef typename _bi::list_av_9::type list_type; @@ -409,7 +409,7 @@ template _bi::bind_t, typename _bi::list_av_9::type> - BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef _mfi::BOOST_BIND_MF_NAME(cmf8) F; typedef typename _bi::list_av_9::type list_type; @@ -421,7 +421,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_9::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8), A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef _mfi::BOOST_BIND_MF_NAME(mf8) F; typedef typename _bi::list_av_9::type list_type; @@ -433,7 +433,7 @@ template typename boost::enable_if_c::value, _bi::bind_t, typename _bi::list_av_9::type> - >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) + >::type BOOST_BIND(R (BOOST_BIND_MF_CC T::*f) (B1, B2, B3, B4, B5, B6, B7, B8) const BOOST_BIND_MF_NOEXCEPT, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9) { typedef _mfi::BOOST_BIND_MF_NAME(cmf8) F; typedef typename _bi::list_av_9::type list_type; diff --git a/bundled/boost-1.62.0/include/boost/blank.hpp b/bundled/boost-1.62.0/include/boost/blank.hpp index d0fe5abca5..918723ca94 100644 --- a/bundled/boost-1.62.0/include/boost/blank.hpp +++ b/bundled/boost-1.62.0/include/boost/blank.hpp @@ -20,7 +20,7 @@ #include "boost/detail/templated_streams.hpp" #endif // BOOST_NO_IOSTREAM -#include "boost/mpl/bool.hpp" +#include "boost/type_traits/integral_constant.hpp" #include "boost/type_traits/is_empty.hpp" #include "boost/type_traits/is_pod.hpp" #include "boost/type_traits/is_stateless.hpp" @@ -36,19 +36,19 @@ struct blank template <> struct is_pod< blank > - : mpl::true_ + : boost::true_type { }; template <> struct is_empty< blank > - : mpl::true_ + : boost::true_type { }; template <> struct is_stateless< blank > - : mpl::true_ + : boost::true_type { }; diff --git a/bundled/boost-1.62.0/include/boost/cerrno.hpp b/bundled/boost-1.62.0/include/boost/cerrno.hpp index 6f2669846d..57278f5cee 100644 --- a/bundled/boost-1.62.0/include/boost/cerrno.hpp +++ b/bundled/boost-1.62.0/include/boost/cerrno.hpp @@ -7,8 +7,8 @@ // See library home page at http://www.boost.org/libs/system -#ifndef BOOST_CERRNO_HPP -#define BOOST_CERRNO_HPP +#ifndef BOOST_SYSTEM_CERRNO_HPP +#define BOOST_SYSTEM_CERRNO_HPP #include diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/chrono.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/chrono.hpp index 0bd3400a25..9bf6c2bb12 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/chrono.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/chrono.hpp @@ -40,7 +40,7 @@ system_clock::now(system::error_code & ec) { timeval tv; gettimeofday(&tv, 0); - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -89,7 +89,7 @@ BOOST_CHRONO_STATIC steady_clock::rep steady_simplified_ec(system::error_code & ec) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -131,21 +131,21 @@ steady_full_ec(system::error_code & ec) const double factor = chrono_detail::compute_steady_factor(err); if (err != 0) { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( err, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::steady_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return steady_clock::rep(); } } - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -217,21 +217,21 @@ steady_clock::now(system::error_code & ec) chrono_detail::FP_ec fp = chrono_detail::init_steady_clock_ec(err); if ( err != 0 ) { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( err, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::steady_clock" )); } else { - ec.assign( err, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( err, ::boost::system::system_category() ); return time_point(); } } - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp index 6e55b0f2ff..29fe86ccfc 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/process_cpu_clocks.hpp @@ -95,12 +95,12 @@ namespace boost clock_t c = ::times(&tm); if (c == clock_t(-1)) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_real_cpu_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } else @@ -108,19 +108,19 @@ namespace boost long factor = chrono_detail::tick_factor(); if (factor != -1) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } return time_point(nanoseconds(c * factor)); } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_real_cpu_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } @@ -129,12 +129,12 @@ namespace boost clock_t c = ::clock(); if (c == clock_t(-1)) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_real_cpu_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } else @@ -142,19 +142,19 @@ namespace boost long factor = chrono_detail::tick_factor(); if (factor != -1) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } return time_point(nanoseconds(c * factor)); } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_real_cpu_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_real_cpu_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } @@ -171,12 +171,12 @@ namespace boost clock_t c = ::times(&tm); if (c == clock_t(-1)) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_user_cpu_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_user_cpu_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } else @@ -184,19 +184,19 @@ namespace boost long factor = chrono_detail::tick_factor(); if (factor != -1) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } return time_point(nanoseconds((tm.tms_utime + tm.tms_cutime) * factor)); } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_user_cpu_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_user_cpu_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } @@ -254,12 +254,12 @@ namespace boost clock_t c = ::times(&tm); if (c == clock_t(-1)) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_system_cpu_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_system_cpu_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } else @@ -267,19 +267,19 @@ namespace boost long factor = chrono_detail::tick_factor(); if (factor != -1) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } return time_point(nanoseconds((tm.tms_stime + tm.tms_cstime) * factor)); } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_system_cpu_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_system_cpu_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } @@ -319,12 +319,12 @@ namespace boost clock_t c = ::times(&tm); if (c == clock_t(-1)) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } else @@ -338,12 +338,12 @@ namespace boost return time_point(duration(r)); } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { - boost::throw_exception(system::system_error(errno, BOOST_CHRONO_SYSTEM_CATEGORY, "chrono::process_clock")); + boost::throw_exception(system::system_error(errno, ::boost::system::system_category(), "chrono::process_clock")); } else { - ec.assign(errno, BOOST_CHRONO_SYSTEM_CATEGORY); + ec.assign(errno, ::boost::system::system_category()); return time_point(); } } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/thread_clock.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/thread_clock.hpp index 690458f41c..74b820ace6 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/thread_clock.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/mac/thread_clock.hpp @@ -58,21 +58,21 @@ namespace boost { namespace chrono { mach_msg_type_number_t count = THREAD_BASIC_INFO_COUNT; if ( thread_info(port, THREAD_BASIC_INFO, (thread_info_t)&info, &count) != KERN_SUCCESS ) { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( EINVAL, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::thread_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/chrono.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/chrono.hpp index c4c8a6add7..8baac39f39 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/chrono.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/chrono.hpp @@ -12,6 +12,7 @@ #include // for clock_gettime #include +#include namespace boost { @@ -36,22 +37,22 @@ namespace chrono timespec ts; if ( ::clock_gettime( CLOCK_REALTIME, &ts ) ) { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::system_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -75,11 +76,20 @@ namespace chrono steady_clock::time_point steady_clock::now() BOOST_NOEXCEPT { timespec ts; - if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) ) +#if BOOST_OS_CYGWIN + // lack of thread safety in high resolution timer initialization + // can lead to a timespec of zero without an error; was reported + // to the cygwin mailing list and can be removed once fixed + do { - BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); - } - +#endif + if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) ) + { + BOOST_ASSERT(0 && "Boost::Chrono - Internal Error"); + } +#if BOOST_OS_CYGWIN + } while (ts.tv_sec == 0 && ts.tv_nsec == 0); +#endif return time_point(duration( static_cast( ts.tv_sec ) * 1000000000 + ts.tv_nsec)); } @@ -88,24 +98,34 @@ namespace chrono steady_clock::time_point steady_clock::now(system::error_code & ec) { timespec ts; - if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) ) +#if BOOST_OS_CYGWIN + // lack of thread safety in high resolution timer initialization + // can lead to a timespec of zero without an error; was reported + // to the cygwin mailing list and can be removed once fixed + do { - if (BOOST_CHRONO_IS_THROWS(ec)) +#endif + if ( ::clock_gettime( CLOCK_MONOTONIC, &ts ) ) + { + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::steady_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } - } + } +#if BOOST_OS_CYGWIN + } while (ts.tv_sec == 0 && ts.tv_nsec == 0); +#endif - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp index feecc86792..f9a9e1293c 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/process_cpu_clocks.hpp @@ -73,17 +73,17 @@ process_real_cpu_clock::time_point process_real_cpu_clock::now( clock_t c = ::times( &tm ); if ( c == clock_t(-1) ) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_real_cpu_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } @@ -91,7 +91,7 @@ process_real_cpu_clock::time_point process_real_cpu_clock::now( { if ( chrono_detail::tick_factor() != -1 ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -100,17 +100,17 @@ process_real_cpu_clock::time_point process_real_cpu_clock::now( } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_real_cpu_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } @@ -149,17 +149,17 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( clock_t c = ::times( &tm ); if ( c == clock_t(-1) ) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_user_cpu_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } @@ -167,7 +167,7 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( { if ( chrono_detail::tick_factor() != -1 ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -176,17 +176,17 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_user_cpu_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } @@ -226,17 +226,17 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( clock_t c = ::times( &tm ); if ( c == clock_t(-1) ) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_system_cpu_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } @@ -244,7 +244,7 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( { if ( chrono_detail::tick_factor() != -1 ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -253,17 +253,17 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_system_cpu_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } @@ -306,17 +306,17 @@ process_cpu_clock::time_point process_cpu_clock::now( clock_t c = ::times( &tm ); if ( c == clock_t(-1) ) // error { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } @@ -332,17 +332,17 @@ process_cpu_clock::time_point process_cpu_clock::now( } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/thread_clock.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/thread_clock.hpp index a42b3c8a15..a2a2d9cf65 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/thread_clock.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/posix/thread_clock.hpp @@ -65,21 +65,21 @@ namespace boost { namespace chrono { if ( ::clock_gettime( clock_id, &ts ) ) #endif { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::thread_clock" )); } else { - ec.assign( errno, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( errno, ::boost::system::system_category() ); return time_point(); } } - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/chrono.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/chrono.hpp index e61f11e7ce..570dc02a15 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/chrono.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/chrono.hpp @@ -12,9 +12,9 @@ #ifndef BOOST_CHRONO_DETAIL_INLINED_WIN_CHRONO_HPP #define BOOST_CHRONO_DETAIL_INLINED_WIN_CHRONO_HPP -#include -#include -#include +#include +#include +#include #include namespace boost @@ -26,8 +26,8 @@ namespace chrono_detail BOOST_CHRONO_INLINE double get_nanosecs_per_tic() BOOST_NOEXCEPT { - boost::detail::winapi::LARGE_INTEGER_ freq; - if ( !boost::detail::winapi::QueryPerformanceFrequency( &freq ) ) + boost::winapi::LARGE_INTEGER_ freq; + if ( !boost::winapi::QueryPerformanceFrequency( &freq ) ) return 0.0L; return double(1000000000.0L / freq.QuadPart); } @@ -38,14 +38,14 @@ namespace chrono_detail { double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic(); - boost::detail::winapi::LARGE_INTEGER_ pcount; + boost::winapi::LARGE_INTEGER_ pcount; if ( nanosecs_per_tic <= 0.0L ) { BOOST_ASSERT(0 && "Boost::Chrono - get_nanosecs_per_tic Internal Error"); return steady_clock::time_point(); } unsigned times=0; - while ( ! boost::detail::winapi::QueryPerformanceCounter( &pcount ) ) + while ( ! boost::winapi::QueryPerformanceCounter( &pcount ) ) { if ( ++times > 3 ) { @@ -64,29 +64,29 @@ namespace chrono_detail { double nanosecs_per_tic = chrono_detail::get_nanosecs_per_tic(); - boost::detail::winapi::LARGE_INTEGER_ pcount; + boost::winapi::LARGE_INTEGER_ pcount; if ( (nanosecs_per_tic <= 0.0L) - || (!boost::detail::winapi::QueryPerformanceCounter( &pcount )) ) + || (!boost::winapi::QueryPerformanceCounter( &pcount )) ) { - boost::detail::winapi::DWORD_ cause = + boost::winapi::DWORD_ cause = ((nanosecs_per_tic <= 0.0L) ? ERROR_NOT_SUPPORTED - : boost::detail::winapi::GetLastError()); - if (BOOST_CHRONO_IS_THROWS(ec)) { + : boost::winapi::GetLastError()); + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( cause, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::steady_clock" )); } else { - ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( cause, ::boost::system::system_category() ); return steady_clock::time_point(duration(0)); } } - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -98,8 +98,8 @@ namespace chrono_detail BOOST_CHRONO_INLINE system_clock::time_point system_clock::now() BOOST_NOEXCEPT { - boost::detail::winapi::FILETIME_ ft; - boost::detail::winapi::GetSystemTimeAsFileTime( &ft ); // never fails + boost::winapi::FILETIME_ ft; + boost::winapi::GetSystemTimeAsFileTime( &ft ); // never fails return system_clock::time_point( system_clock::duration( ((static_cast<__int64>( ft.dwHighDateTime ) << 32) | ft.dwLowDateTime) @@ -113,9 +113,9 @@ namespace chrono_detail BOOST_CHRONO_INLINE system_clock::time_point system_clock::now( system::error_code & ec ) { - boost::detail::winapi::FILETIME_ ft; - boost::detail::winapi::GetSystemTimeAsFileTime( &ft ); // never fails - if (!BOOST_CHRONO_IS_THROWS(ec)) + boost::winapi::FILETIME_ ft; + boost::winapi::GetSystemTimeAsFileTime( &ft ); // never fails + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp index 7169f8020a..a3a838a5ce 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/process_cpu_clocks.hpp @@ -53,10 +53,10 @@ process_real_cpu_clock::time_point process_real_cpu_clock::now( boost::throw_exception( system::system_error( errno, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_real_cpu_clock" )); } - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -103,7 +103,7 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( boost::detail::winapi::GetCurrentProcess(), &creation, &exit, &system_time, &user_time ) ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -115,17 +115,17 @@ process_user_cpu_clock::time_point process_user_cpu_clock::now( else { boost::detail::winapi::DWORD_ cause = boost::detail::winapi::GetLastError(); - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( cause, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_user_cpu_clock" )); } else { - ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( cause, ::boost::system::system_category() ); return time_point(); } } @@ -168,7 +168,7 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( boost::detail::winapi::GetCurrentProcess(), &creation, &exit, &system_time, &user_time ) ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -180,17 +180,17 @@ process_system_cpu_clock::time_point process_system_cpu_clock::now( else { boost::detail::winapi::DWORD_ cause = boost::detail::winapi::GetLastError(); - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( cause, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_system_cpu_clock" )); } else { - ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( cause, ::boost::system::system_category() ); return time_point(); } } @@ -239,7 +239,7 @@ process_cpu_clock::time_point process_cpu_clock::now( boost::detail::winapi::GetCurrentProcess(), &creation, &exit, &system_time, &user_time ) ) { - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -257,17 +257,17 @@ process_cpu_clock::time_point process_cpu_clock::now( else { boost::detail::winapi::DWORD_ cause = boost::detail::winapi::GetLastError(); - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( cause, - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::process_cpu_clock" )); } else { - ec.assign( cause, BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( cause, ::boost::system::system_category() ); return time_point(); } } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/thread_clock.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/thread_clock.hpp index 037ccbee3e..776e5b4cd0 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/thread_clock.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/inlined/win/thread_clock.hpp @@ -43,7 +43,7 @@ thread_clock::time_point thread_clock::now( system::error_code & ec ) ((static_cast(system_time.dwHighDateTime) << 32) | system_time.dwLowDateTime) * 100 ); - if (!BOOST_CHRONO_IS_THROWS(ec)) + if (!::boost::chrono::is_throws(ec)) { ec.clear(); } @@ -52,17 +52,17 @@ thread_clock::time_point thread_clock::now( system::error_code & ec ) } else { - if (BOOST_CHRONO_IS_THROWS(ec)) + if (::boost::chrono::is_throws(ec)) { boost::throw_exception( system::system_error( boost::detail::winapi::GetLastError(), - BOOST_CHRONO_SYSTEM_CATEGORY, + ::boost::system::system_category(), "chrono::thread_clock" )); } else { - ec.assign( boost::detail::winapi::GetLastError(), BOOST_CHRONO_SYSTEM_CATEGORY ); + ec.assign( boost::detail::winapi::GetLastError(), ::boost::system::system_category() ); return thread_clock::time_point(duration(0)); } } diff --git a/bundled/boost-1.62.0/include/boost/chrono/detail/system.hpp b/bundled/boost-1.62.0/include/boost/chrono/detail/system.hpp index 0dcffe8521..3d82006a0b 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/detail/system.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/detail/system.hpp @@ -8,22 +8,13 @@ #if !defined BOOST_CHRONO_DONT_PROVIDE_HYBRID_ERROR_HANDLING -#include #include -#if ((BOOST_VERSION / 100000) < 2) && ((BOOST_VERSION / 100 % 1000) < 44) -#define BOOST_CHRONO_SYSTEM_CATEGORY boost::system::system_category -#else -#define BOOST_CHRONO_SYSTEM_CATEGORY boost::system::system_category() -#endif - -#ifdef BOOST_SYSTEM_NO_DEPRECATED -#define BOOST_CHRONO_THROWS boost::throws() -#define BOOST_CHRONO_IS_THROWS(EC) (&EC==&boost::throws()) -#else -#define BOOST_CHRONO_THROWS boost::system::throws -#define BOOST_CHRONO_IS_THROWS(EC) (&EC==&boost::system::throws) -#endif +namespace boost { +namespace chrono { + inline bool is_throws(system::error_code & ec) { return (&ec==&boost::throws()); } +} +} #endif #endif diff --git a/bundled/boost-1.62.0/include/boost/chrono/duration.hpp b/bundled/boost-1.62.0/include/boost/chrono/duration.hpp index 737328c418..0a09674f1a 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/duration.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/duration.hpp @@ -433,12 +433,13 @@ namespace chrono { rep rep_; public: -#if defined BOOST_NO_CXX11_DEFAULTED_FUNCTIONS || \ - defined BOOST_CHRONO_DURATION_DEFAULTS_TO_ZERO +#if defined BOOST_CHRONO_DURATION_DEFAULTS_TO_ZERO BOOST_FORCEINLINE BOOST_CONSTEXPR duration() : rep_(duration_values::zero()) { } +#elif defined BOOST_NO_CXX11_DEFAULTED_FUNCTIONS + BOOST_CONSTEXPR duration() {} #else - BOOST_CONSTEXPR duration() BOOST_NOEXCEPT : rep_() {}; + BOOST_CONSTEXPR duration() = default; #endif template BOOST_SYMBOL_VISIBLE BOOST_FORCEINLINE BOOST_CONSTEXPR @@ -542,8 +543,8 @@ namespace chrono { const duration& rhs) { typedef typename common_type, - duration >::type CD; - return CD(CD(lhs).count()+CD(rhs).count()); + duration >::type common_duration; + return common_duration(common_duration(lhs).count()+common_duration(rhs).count()); } // Duration - @@ -555,8 +556,8 @@ namespace chrono { const duration& rhs) { typedef typename common_type, - duration >::type CD; - return CD(CD(lhs).count()-CD(rhs).count()); + duration >::type common_duration; + return common_duration(common_duration(lhs).count()-common_duration(rhs).count()); } // Duration * @@ -572,9 +573,9 @@ namespace chrono { >::type operator*(const duration& d, const Rep2& s) { - typedef typename common_type::type CR; - typedef duration CD; - return CD(CD(d).count()*static_cast(s)); + typedef typename common_type::type common_rep; + typedef duration common_duration; + return common_duration(common_duration(d).count()*static_cast(s)); } template @@ -601,10 +602,9 @@ namespace chrono { >::type operator/(const duration& d, const Rep2& s) { - typedef typename common_type::type CR; - typedef duration CD; - - return CD(CD(d).count()/static_cast(s)); + typedef typename common_type::type common_rep; + typedef duration common_duration; + return common_duration(common_duration(d).count()/static_cast(s)); } template @@ -613,8 +613,8 @@ namespace chrono { operator/(const duration& lhs, const duration& rhs) { typedef typename common_type, - duration >::type CD; - return CD(lhs).count() / CD(rhs).count(); + duration >::type common_duration; + return common_duration(lhs).count() / common_duration(rhs).count(); } #ifdef BOOST_CHRONO_EXTENSIONS @@ -626,10 +626,9 @@ namespace chrono { >::type operator/(const Rep1& s, const duration& d) { - typedef typename common_type::type CR; - typedef duration CD; - - return static_cast(s)/CD(d).count(); + typedef typename common_type::type common_rep; + typedef duration common_duration; + return static_cast(s)/common_duration(d).count(); } #endif // Duration % @@ -642,10 +641,9 @@ namespace chrono { >::type operator%(const duration& d, const Rep2& s) { - typedef typename common_type::type CR; - typedef duration CD; - - return CD(CD(d).count()%static_cast(s)); + typedef typename common_type::type common_rep; + typedef duration common_duration; + return common_duration(common_duration(d).count()%static_cast(s)); } template @@ -654,9 +652,9 @@ namespace chrono { operator%(const duration& lhs, const duration& rhs) { typedef typename common_type, - duration >::type CD; + duration >::type common_duration; - return CD(CD(lhs).count()%CD(rhs).count()); + return common_duration(common_duration(lhs).count()%common_duration(rhs).count()); } @@ -671,8 +669,8 @@ namespace detail { BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const RhsDuration& rhs) const { - typedef typename common_type::type CD; - return CD(lhs).count() == CD(rhs).count(); + typedef typename common_type::type common_duration; + return common_duration(lhs).count() == common_duration(rhs).count(); } }; @@ -690,8 +688,8 @@ namespace detail { BOOST_CONSTEXPR bool operator()(const LhsDuration& lhs, const RhsDuration& rhs) const { - typedef typename common_type::type CD; - return CD(lhs).count() < CD(rhs).count(); + typedef typename common_type::type common_duration; + return common_duration(lhs).count() < common_duration(rhs).count(); } }; diff --git a/bundled/boost-1.62.0/include/boost/chrono/io/duration_get.hpp b/bundled/boost-1.62.0/include/boost/chrono/io/duration_get.hpp index 5a0a875037..081f071084 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/io/duration_get.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/io/duration_get.hpp @@ -309,8 +309,7 @@ namespace boost t /= den; if (t > duration_values::zero()) { - Rep pt = t; - if ( (duration_values::max)() < pt) + if ( (duration_values::max)() < Rep(t)) { // Conversion to Period overflowed err |= std::ios_base::failbit; @@ -318,8 +317,7 @@ namespace boost } } // Success! Store it. - r = Rep(t); - d = duration (r); + d = duration (Rep(t)); return s; } diff --git a/bundled/boost-1.62.0/include/boost/chrono/io/duration_io.hpp b/bundled/boost-1.62.0/include/boost/chrono/io/duration_io.hpp index 34004484f3..f3aca6adfd 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/io/duration_io.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/io/duration_io.hpp @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include namespace boost diff --git a/bundled/boost-1.62.0/include/boost/chrono/io/time_point_io.hpp b/bundled/boost-1.62.0/include/boost/chrono/io/time_point_io.hpp index 0cbc275c0e..d0f854cfbb 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/io/time_point_io.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/io/time_point_io.hpp @@ -34,20 +34,22 @@ #include #include -#define BOOST_CHRONO_INTERNAL_TIMEGM \ - ( defined BOOST_WINDOWS && ! defined(__CYGWIN__) ) \ +#if ( defined BOOST_WINDOWS && ! defined(__CYGWIN__) ) \ || (defined(sun) || defined(__sun)) \ || (defined __IBMCPP__) \ || defined __ANDROID__ \ || defined __QNXNTO__ \ || (defined(_AIX) && defined __GNUC__) +#define BOOST_CHRONO_INTERNAL_TIMEGM +#endif -#define BOOST_CHRONO_INTERNAL_GMTIME \ - (defined BOOST_WINDOWS && ! defined(__CYGWIN__)) \ +#if (defined BOOST_WINDOWS && ! defined(__CYGWIN__)) \ || ( (defined(sun) || defined(__sun)) && defined __GNUC__) \ || (defined __IBMCPP__) \ || defined __ANDROID__ \ || (defined(_AIX) && defined __GNUC__) +#define BOOST_CHRONO_INTERNAL_GMTIME +#endif #define BOOST_CHRONO_USES_INTERNAL_TIME_GET @@ -746,7 +748,7 @@ namespace boost namespace detail { -//#if BOOST_CHRONO_INTERNAL_TIMEGM +//#if defined BOOST_CHRONO_INTERNAL_TIMEGM inline int32_t is_leap(int32_t year) { @@ -765,7 +767,7 @@ namespace boost } inline int32_t days_from_1970(int32_t year) { - static const int days_from_0_to_1970 = days_from_0(1970); + static const int32_t days_from_0_to_1970 = days_from_0(1970); return days_from_0(year) - days_from_0_to_1970; } inline int32_t days_from_1jan(int32_t year,int32_t month,int32_t day) @@ -938,18 +940,22 @@ namespace boost if (tz == timezone::local) { #if defined BOOST_WINDOWS && ! defined(__CYGWIN__) +#if BOOST_MSVC < 1400 // localtime_s doesn't exist in vc7.1 std::tm *tmp = 0; if ((tmp=localtime(&t)) == 0) failed = true; else tm =*tmp; +# else + if (localtime_s(&tm, &t) != 0) failed = true; +# endif #else if (localtime_r(&t, &tm) == 0) failed = true; #endif } else { -#if BOOST_CHRONO_INTERNAL_GMTIME +#if defined BOOST_CHRONO_INTERNAL_GMTIME if (detail::internal_gmtime(&t, &tm) == 0) failed = true; #elif defined BOOST_WINDOWS && ! defined(__CYGWIN__) @@ -1157,7 +1163,7 @@ namespace boost if (err & std::ios_base::failbit) goto exit; time_t t; -#if BOOST_CHRONO_INTERNAL_TIMEGM +#if defined BOOST_CHRONO_INTERNAL_TIMEGM t = detail::internal_timegm(&tm); #else t = timegm(&tm); @@ -1209,7 +1215,7 @@ namespace boost time_t t; if (tz == timezone::utc || fz != pe) { -#if BOOST_CHRONO_INTERNAL_TIMEGM +#if defined BOOST_CHRONO_INTERNAL_TIMEGM t = detail::internal_timegm(&tm); #else t = timegm(&tm); diff --git a/bundled/boost-1.62.0/include/boost/chrono/io/time_point_units.hpp b/bundled/boost-1.62.0/include/boost/chrono/io/time_point_units.hpp index 7aef8526da..6a4999a5e5 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/io/time_point_units.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/io/time_point_units.hpp @@ -15,7 +15,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/bundled/boost-1.62.0/include/boost/chrono/io_v1/chrono_io.hpp b/bundled/boost-1.62.0/include/boost/chrono/io_v1/chrono_io.hpp index 12d9f5436f..afcc9ed7c9 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/io_v1/chrono_io.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/io_v1/chrono_io.hpp @@ -549,8 +549,7 @@ operator>>(std::basic_istream& is, duration& d) if (t > duration_values::zero()) { //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; - Rep pt = t; - if ( (duration_values::max)() < pt) + if ( (duration_values::max)() < Rep(t)) { //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // Conversion to Period overflowed @@ -560,8 +559,7 @@ operator>>(std::basic_istream& is, duration& d) } //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; // Success! Store it. - r = Rep(t); - d = duration(r); + d = duration(Rep(t)); is.setstate(err); //std::cerr << __FILE__ << "[" << __LINE__ << "]"<< std::endl; return is; diff --git a/bundled/boost-1.62.0/include/boost/chrono/process_cpu_clocks.hpp b/bundled/boost-1.62.0/include/boost/chrono/process_cpu_clocks.hpp index ca6bef38e9..93d3c94ac8 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/process_cpu_clocks.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/process_cpu_clocks.hpp @@ -20,7 +20,7 @@ #include #include #include -#include +#include #include #include @@ -476,7 +476,7 @@ namespace std { (std::numeric_limits::max)(), (std::numeric_limits::max)()); } - static Res lowest() throw() + static Res lowest() BOOST_NOEXCEPT_OR_NOTHROW { return (min)(); } diff --git a/bundled/boost-1.62.0/include/boost/chrono/system_clocks.hpp b/bundled/boost-1.62.0/include/boost/chrono/system_clocks.hpp index 5ba6a3b0e9..3087311ffe 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/system_clocks.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/system_clocks.hpp @@ -96,9 +96,9 @@ namespace boost { namespace chrono { // Clocks - class BOOST_CHRONO_DECL system_clock; + class system_clock; #ifdef BOOST_CHRONO_HAS_CLOCK_STEADY - class BOOST_CHRONO_DECL steady_clock; + class steady_clock; #endif #ifdef BOOST_CHRONO_HAS_CLOCK_STEADY diff --git a/bundled/boost-1.62.0/include/boost/chrono/time_point.hpp b/bundled/boost-1.62.0/include/boost/chrono/time_point.hpp index 6449fac6e1..fc230955d9 100644 --- a/bundled/boost-1.62.0/include/boost/chrono/time_point.hpp +++ b/bundled/boost-1.62.0/include/boost/chrono/time_point.hpp @@ -31,7 +31,6 @@ time2_demo contained this comment: #define BOOST_CHRONO_TIME_POINT_HPP #include -#include #ifndef BOOST_CHRONO_HEADER_ONLY // this must occur after all of the includes and before any code appears: diff --git a/bundled/boost-1.62.0/include/boost/circular_buffer.hpp b/bundled/boost-1.62.0/include/boost/circular_buffer.hpp index 7cf8928bc0..f0530805ec 100644 --- a/bundled/boost-1.62.0/include/boost/circular_buffer.hpp +++ b/bundled/boost-1.62.0/include/boost/circular_buffer.hpp @@ -16,7 +16,7 @@ #endif #include -#include +#include #include // BOOST_CB_ENABLE_DEBUG: Debug support control. @@ -36,10 +36,10 @@ #if BOOST_WORKAROUND(__BORLANDC__, <= 0x0550) || BOOST_WORKAROUND(__MWERKS__, <= 0x2407) #define BOOST_CB_IS_CONVERTIBLE(Iterator, Type) ((void)0) #else - #include + #include #include #define BOOST_CB_IS_CONVERTIBLE(Iterator, Type) \ - BOOST_STATIC_ASSERT((is_convertible::value_type, Type>::value)) + BOOST_STATIC_ASSERT((is_convertible::value_type, Type>::value)) #endif // BOOST_CB_ASSERT_TEMPLATED_ITERATOR_CONSTRUCTORS: diff --git a/bundled/boost-1.62.0/include/boost/concept/assert.hpp b/bundled/boost-1.62.0/include/boost/concept/assert.hpp index cf98179522..36c3b03f33 100644 --- a/bundled/boost-1.62.0/include/boost/concept/assert.hpp +++ b/bundled/boost-1.62.0/include/boost/concept/assert.hpp @@ -5,7 +5,7 @@ # define BOOST_CONCEPT_ASSERT_DWA2006430_HPP # include -# include +# include // The old protocol used a constraints() member function in concept // checking classes. If the compiler supports SFINAE, we can detect diff --git a/bundled/boost-1.62.0/include/boost/concept/detail/general.hpp b/bundled/boost-1.62.0/include/boost/concept/detail/general.hpp index 525ea656c2..eeb08750f1 100644 --- a/bundled/boost-1.62.0/include/boost/concept/detail/general.hpp +++ b/bundled/boost-1.62.0/include/boost/concept/detail/general.hpp @@ -10,7 +10,7 @@ # ifdef BOOST_OLD_CONCEPT_SUPPORT # include -# include +# include # endif // This implementation works on Comeau and GCC, all the way back to @@ -49,8 +49,8 @@ struct constraint template struct requirement_ - : mpl::if_< - concepts::not_satisfied + : boost::conditional< + concepts::not_satisfied::value , constraint , requirement >::type diff --git a/bundled/boost-1.62.0/include/boost/concept/detail/has_constraints.hpp b/bundled/boost-1.62.0/include/boost/concept/detail/has_constraints.hpp index a309db3d88..dc2c20714e 100644 --- a/bundled/boost-1.62.0/include/boost/concept/detail/has_constraints.hpp +++ b/bundled/boost-1.62.0/include/boost/concept/detail/has_constraints.hpp @@ -4,8 +4,8 @@ #ifndef BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP # define BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP -# include -# include +# include +# include # include namespace boost { namespace concepts { @@ -42,7 +42,7 @@ struct not_satisfied BOOST_STATIC_CONSTANT( bool , value = sizeof( detail::has_constraints_((Model*)0) ) == sizeof(detail::yes) ); - typedef mpl::bool_ type; + typedef boost::integral_constant type; }; }} // namespace boost::concepts::detail diff --git a/bundled/boost-1.62.0/include/boost/concept/detail/msvc.hpp b/bundled/boost-1.62.0/include/boost/concept/detail/msvc.hpp index 078dd22330..933ac02a52 100644 --- a/bundled/boost-1.62.0/include/boost/concept/detail/msvc.hpp +++ b/bundled/boost-1.62.0/include/boost/concept/detail/msvc.hpp @@ -10,7 +10,7 @@ # ifdef BOOST_OLD_CONCEPT_SUPPORT # include -# include +# include # endif # ifdef BOOST_MSVC @@ -54,7 +54,7 @@ namespace detail template struct require - : mpl::if_c< + : boost::conditional< not_satisfied::value , detail::constraint # ifndef BOOST_NO_PARTIAL_SPECIALIZATION diff --git a/bundled/boost-1.62.0/include/boost/concept/usage.hpp b/bundled/boost-1.62.0/include/boost/concept/usage.hpp index e73370fb37..373de63a9d 100644 --- a/bundled/boost-1.62.0/include/boost/concept/usage.hpp +++ b/bundled/boost-1.62.0/include/boost/concept/usage.hpp @@ -5,7 +5,7 @@ # define BOOST_CONCEPT_USAGE_DWA2006919_HPP # include -# include +# include # include namespace boost { namespace concepts { diff --git a/bundled/boost-1.62.0/include/boost/concept_archetype.hpp b/bundled/boost-1.62.0/include/boost/concept_archetype.hpp index f21c817384..a9d1808f30 100644 --- a/bundled/boost-1.62.0/include/boost/concept_archetype.hpp +++ b/bundled/boost-1.62.0/include/boost/concept_archetype.hpp @@ -15,9 +15,10 @@ #define BOOST_CONCEPT_ARCHETYPES_HPP #include -#include -#include +#include #include +#include // iterator tags +#include // std::ptrdiff_t namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/concept_check.hpp b/bundled/boost-1.62.0/include/boost/concept_check.hpp index 25f118b643..abbadb76be 100644 --- a/bundled/boost-1.62.0/include/boost/concept_check.hpp +++ b/bundled/boost-1.62.0/include/boost/concept_check.hpp @@ -24,9 +24,9 @@ # include # include # include -# include -# include -# include +# include +# include +# include # include # include @@ -301,14 +301,14 @@ namespace boost BOOST_CONCEPT_USAGE(Generator) { test(is_void()); } private: - void test(boost::mpl::false_) + void test(boost::false_type) { // Do we really want a reference here? const Return& r = f(); ignore_unused_variable_warning(r); } - void test(boost::mpl::true_) + void test(boost::true_type) { f(); } @@ -321,22 +321,22 @@ namespace boost BOOST_CONCEPT_USAGE(UnaryFunction) { test(is_void()); } private: - void test(boost::mpl::false_) + void test(boost::false_type) { f(arg); // "priming the pump" this way keeps msvc6 happy (ICE) Return r = f(arg); ignore_unused_variable_warning(r); } - void test(boost::mpl::true_) + void test(boost::true_type) { f(arg); } #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ && BOOST_WORKAROUND(__GNUC__, > 3))) - // Declare a dummy construktor to make gcc happy. - // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // Declare a dummy constructor to make gcc happy. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a reference type. // (warning: non-static reference "const double& boost::UnaryFunction::arg" // in class without a constructor [-Wuninitialized]) UnaryFunction(); @@ -350,14 +350,14 @@ namespace boost { BOOST_CONCEPT_USAGE(BinaryFunction) { test(is_void()); } private: - void test(boost::mpl::false_) + void test(boost::false_type) { f(first,second); Return r = f(first, second); // require operator() (void)r; } - void test(boost::mpl::true_) + void test(boost::true_type) { f(first,second); } @@ -365,7 +365,7 @@ namespace boost #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ && BOOST_WORKAROUND(__GNUC__, > 3))) // Declare a dummy constructor to make gcc happy. - // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a reference type. // (warning: non-static reference "const double& boost::BinaryFunction::arg" // in class without a constructor [-Wuninitialized]) BinaryFunction(); @@ -385,7 +385,7 @@ namespace boost #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ && BOOST_WORKAROUND(__GNUC__, > 3))) // Declare a dummy constructor to make gcc happy. - // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a reference type. // (warning: non-static reference "const double& boost::UnaryPredicate::arg" // in class without a constructor [-Wuninitialized]) UnaryPredicate(); @@ -404,7 +404,7 @@ namespace boost #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ && BOOST_WORKAROUND(__GNUC__, > 3))) // Declare a dummy constructor to make gcc happy. - // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a reference type. // (warning: non-static reference "const double& boost::BinaryPredicate::arg" // in class without a constructor [-Wuninitialized]) BinaryPredicate(); @@ -429,7 +429,7 @@ namespace boost #if (BOOST_WORKAROUND(__GNUC__, BOOST_TESTED_AT(4) \ && BOOST_WORKAROUND(__GNUC__, > 3))) // Declare a dummy constructor to make gcc happy. - // It seems the compiler can not generate a sensible constructor when this is instantiated with a refence type. + // It seems the compiler can not generate a sensible constructor when this is instantiated with a reference type. // (warning: non-static reference "const double& boost::Const_BinaryPredicate::arg" // in class without a constructor [-Wuninitialized]) Const_BinaryPredicate(); @@ -734,8 +734,8 @@ namespace boost private: void const_constraints(const C& cc) { - const_reverse_iterator i = cc.rbegin(); - i = cc.rend(); + const_reverse_iterator _i = cc.rbegin(); + _i = cc.rend(); } C c; }; @@ -966,7 +966,7 @@ namespace boost { typedef typename C::key_type key_type; typedef typename C::value_type value_type; - BOOST_MPL_ASSERT((boost::is_same)); + BOOST_STATIC_ASSERT((boost::is_same::value)); } }; @@ -979,7 +979,7 @@ namespace boost typedef typename C::value_type value_type; typedef typename C::mapped_type mapped_type; typedef std::pair required_value_type; - BOOST_MPL_ASSERT((boost::is_same)); + BOOST_STATIC_ASSERT((boost::is_same::value)); } }; diff --git a/bundled/boost-1.62.0/include/boost/concept_check/general.hpp b/bundled/boost-1.62.0/include/boost/concept_check/general.hpp index cd09fb043e..c44da4972b 100644 --- a/bundled/boost-1.62.0/include/boost/concept_check/general.hpp +++ b/bundled/boost-1.62.0/include/boost/concept_check/general.hpp @@ -6,7 +6,7 @@ # ifdef BOOST_OLD_CONCEPT_SUPPORT # include -# include +# include # endif @@ -54,7 +54,7 @@ namespace boost template struct concept_check_ - : mpl::if_c< + : conditional< concept_checking::has_constraints::value , constraint_check , concept_check diff --git a/bundled/boost-1.62.0/include/boost/concept_check/msvc.hpp b/bundled/boost-1.62.0/include/boost/concept_check/msvc.hpp index 3968469a89..23f6b13478 100644 --- a/bundled/boost-1.62.0/include/boost/concept_check/msvc.hpp +++ b/bundled/boost-1.62.0/include/boost/concept_check/msvc.hpp @@ -6,7 +6,7 @@ # ifdef BOOST_OLD_CONCEPT_SUPPORT # include -# include +# include # endif @@ -40,7 +40,7 @@ namespace boost template struct concept_check - : mpl::if_c< + : conditional< concept_checking::has_constraints::value , concept_checking::constraint_check , concept_checking::concept_check_ diff --git a/bundled/boost-1.62.0/include/boost/config.hpp b/bundled/boost-1.62.0/include/boost/config.hpp index d49bb27cd5..f00a980579 100644 --- a/bundled/boost-1.62.0/include/boost/config.hpp +++ b/bundled/boost-1.62.0/include/boost/config.hpp @@ -32,7 +32,7 @@ // if we don't have a compiler config set, try and find one: #if !defined(BOOST_COMPILER_CONFIG) && !defined(BOOST_NO_COMPILER_CONFIG) && !defined(BOOST_NO_CONFIG) -# include +# include #endif // if we have a compiler config, include it now: #ifdef BOOST_COMPILER_CONFIG @@ -41,7 +41,7 @@ // if we don't have a std library config set, try and find one: #if !defined(BOOST_STDLIB_CONFIG) && !defined(BOOST_NO_STDLIB_CONFIG) && !defined(BOOST_NO_CONFIG) && defined(__cplusplus) -# include +# include #endif // if we have a std library config, include it now: #ifdef BOOST_STDLIB_CONFIG @@ -50,7 +50,7 @@ // if we don't have a platform config set, try and find one: #if !defined(BOOST_PLATFORM_CONFIG) && !defined(BOOST_NO_PLATFORM_CONFIG) && !defined(BOOST_NO_CONFIG) -# include +# include #endif // if we have a platform config, include it now: #ifdef BOOST_PLATFORM_CONFIG @@ -58,7 +58,7 @@ #endif // get config suffix code: -#include +#include #ifdef BOOST_HAS_PRAGMA_ONCE #pragma once diff --git a/bundled/boost-1.62.0/include/boost/config/auto_link.hpp b/bundled/boost-1.62.0/include/boost/config/auto_link.hpp index 56a16b0b38..d0079d9bc2 100644 --- a/bundled/boost-1.62.0/include/boost/config/auto_link.hpp +++ b/bundled/boost-1.62.0/include/boost/config/auto_link.hpp @@ -28,6 +28,9 @@ BOOST_AUTO_LINK_NOMANGLE: Specifies that we should link to BOOST_LIB_NAME.lib, BOOST_AUTO_LINK_TAGGED: Specifies that we link to libraries built with the --layout=tagged option. This is essentially the same as the default name-mangled version, but without the compiler name and version, or the Boost version. Just the build options. +BOOST_AUTO_LINK_SYSTEM: Specifies that we link to libraries built with the --layout=system option. + This is essentially the same as the non-name-mangled version, but with + the prefix to differentiate static and dll builds These macros will be undef'ed at the end of the header, further this header has no include guards - so be sure to include it only once from your library! @@ -45,6 +48,7 @@ BOOST_LIB_PREFIX + BOOST_LIB_TOOLSET + BOOST_LIB_THREAD_OPT + BOOST_LIB_RT_OPT + + BOOST_LIB_ARCH_AND_MODEL_OPT "-" + BOOST_LIB_VERSION @@ -69,6 +73,9 @@ BOOST_LIB_RT_OPT: A suffix that indicates the runtime library used, p STLport build. n STLport build without its IOStreams. +BOOST_LIB_ARCH_AND_MODEL_OPT: The architecture and address model + (-x32 or -x64 for x86/32 and x86/64 respectively) + BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. @@ -161,10 +168,20 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. // vc12: # define BOOST_LIB_TOOLSET "vc120" -# elif defined(BOOST_MSVC) +# elif defined(BOOST_MSVC) && (BOOST_MSVC < 1910) + + // vc14: +# define BOOST_LIB_TOOLSET "vc140" + +# elif defined(BOOST_MSVC) && (BOOST_MSVC < 1920) + + // vc14.1: +# define BOOST_LIB_TOOLSET "vc141" - // vc14: -# define BOOST_LIB_TOOLSET "vc140" +# elif defined(BOOST_MSVC) + + // vc14.2: +# define BOOST_LIB_TOOLSET "vc142" # elif defined(__BORLANDC__) @@ -356,6 +373,20 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. #endif +// +// BOOST_LIB_ARCH_AND_MODEL_OPT +// + +#if defined( _M_IX86 ) +# define BOOST_LIB_ARCH_AND_MODEL_OPT "-x32" +#elif defined( _M_X64 ) +# define BOOST_LIB_ARCH_AND_MODEL_OPT "-x64" +#elif defined( _M_ARM ) +# define BOOST_LIB_ARCH_AND_MODEL_OPT "-a32" +#elif defined( _M_ARM64 ) +# define BOOST_LIB_ARCH_AND_MODEL_OPT "-a64" +#endif + // // select linkage opt: // @@ -375,12 +406,18 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. && defined(BOOST_LIB_TOOLSET) \ && defined(BOOST_LIB_THREAD_OPT) \ && defined(BOOST_LIB_RT_OPT) \ + && defined(BOOST_LIB_ARCH_AND_MODEL_OPT) \ && defined(BOOST_LIB_VERSION) #ifdef BOOST_AUTO_LINK_TAGGED -# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib") +# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT ".lib") # ifdef BOOST_LIB_DIAGNOSTIC -# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT ".lib") +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT ".lib") +# endif +#elif defined(BOOST_AUTO_LINK_SYSTEM) +# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") +# ifdef BOOST_LIB_DIAGNOSTIC +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") # endif #elif defined(BOOST_AUTO_LINK_NOMANGLE) # pragma comment(lib, BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") @@ -388,14 +425,14 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. # pragma message ("Linking to lib file: " BOOST_STRINGIZE(BOOST_LIB_NAME) ".lib") # endif #elif defined(BOOST_LIB_BUILDID) -# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) ".lib") +# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) ".lib") # ifdef BOOST_LIB_DIAGNOSTIC -# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) ".lib") +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION "-" BOOST_STRINGIZE(BOOST_LIB_BUILDID) ".lib") # endif #else -# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib") +# pragma comment(lib, BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION ".lib") # ifdef BOOST_LIB_DIAGNOSTIC -# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT "-" BOOST_LIB_VERSION ".lib") +# pragma message ("Linking to lib file: " BOOST_LIB_PREFIX BOOST_STRINGIZE(BOOST_LIB_NAME) "-" BOOST_LIB_TOOLSET BOOST_LIB_THREAD_OPT BOOST_LIB_RT_OPT BOOST_LIB_ARCH_AND_MODEL_OPT "-" BOOST_LIB_VERSION ".lib") # endif #endif @@ -426,6 +463,9 @@ BOOST_LIB_VERSION: The Boost version, in the form x_y, for Boost version x.y. #if defined(BOOST_LIB_RT_OPT) # undef BOOST_LIB_RT_OPT #endif +#if defined(BOOST_LIB_ARCH_AND_MODEL_OPT) +# undef BOOST_LIB_ARCH_AND_MODEL_OPT +#endif #if defined(BOOST_LIB_LINK_OPT) # undef BOOST_LIB_LINK_OPT #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/borland.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/borland.hpp index ccd930ea53..beec94621f 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/borland.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/borland.hpp @@ -19,9 +19,9 @@ // last known compiler version: #if (__BORLANDC__ > 0x613) //# if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" //# else -//# pragma message( "Unknown compiler version - please run the configure tests and report the results") +//# pragma message( "boost: Unknown compiler version - please run the configure tests and report the results") //# endif #elif (__BORLANDC__ == 0x600) # error "CBuilderX preview compiler is no longer supported" @@ -174,6 +174,7 @@ #define BOOST_NO_CXX11_CONSTEXPR #define BOOST_NO_CXX11_DECLTYPE_N3276 #define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DEFAULTED_MOVES #define BOOST_NO_CXX11_DELETED_FUNCTIONS #define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_HDR_INITIALIZER_LIST @@ -185,6 +186,7 @@ #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SFINAE_EXPR #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS // UTF-8 still not supported #define BOOST_NO_CXX11_VARIADIC_TEMPLATES @@ -227,6 +229,20 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + #if __BORLANDC__ >= 0x590 # define BOOST_HAS_TR1_HASH diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/clang.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/clang.hpp index 150e3c0d52..52b23d9d02 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/clang.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/clang.hpp @@ -27,6 +27,10 @@ #define __has_attribute(x) 0 #endif +#ifndef __has_cpp_attribute +#define __has_cpp_attribute(x) 0 +#endif + #if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS) # define BOOST_NO_EXCEPTIONS #endif @@ -53,11 +57,19 @@ # define BOOST_HAS_STDINT_H #endif +#if (defined(linux) || defined(__linux) || defined(__linux__) || defined(__GNU__) || defined(__GLIBC__)) && !defined(_CRAYC) +#if (__clang_major__ >= 4) && defined(__has_include) +#if __has_include() +# define BOOST_HAS_FLOAT128 +#endif +#endif +#endif + #define BOOST_HAS_NRVO // Branch prediction hints -#if defined(__has_builtin) +#if !defined (__c2__) && defined(__has_builtin) #if __has_builtin(__builtin_expect) #define BOOST_LIKELY(x) __builtin_expect(x, 1) #define BOOST_UNLIKELY(x) __builtin_expect(x, 0) @@ -94,10 +106,14 @@ // // Dynamic shared object (DSO) and dynamic-link library (DLL) support // -#if !defined(_WIN32) && !defined(__WIN32__) && !defined(WIN32) +#if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__) +# define BOOST_HAS_DECLSPEC +# define BOOST_SYMBOL_EXPORT __attribute__((__dllexport__)) +# define BOOST_SYMBOL_IMPORT __attribute__((__dllimport__)) +#else # define BOOST_SYMBOL_EXPORT __attribute__((__visibility__("default"))) -# define BOOST_SYMBOL_IMPORT # define BOOST_SYMBOL_VISIBLE __attribute__((__visibility__("default"))) +# define BOOST_SYMBOL_IMPORT #endif // @@ -282,6 +298,24 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif + +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + +// Clang 3.9+ in c++1z +#if !__has_cpp_attribute(fallthrough) || __cplusplus < 201406L +# define BOOST_NO_CXX17_INLINE_VARIABLES +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif + +#if __cplusplus < 201103L +#define BOOST_NO_CXX11_SFINAE_EXPR +#endif + #if __cplusplus < 201400 // All versions with __cplusplus above this value seem to support this: # define BOOST_NO_CXX14_DIGIT_SEPARATORS @@ -292,9 +326,19 @@ #define BOOST_UNREACHABLE_RETURN(x) __builtin_unreachable(); #endif +#if (__clang_major__ == 3) && (__clang_minor__ == 0) +// Apparently a clang bug: +# define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS +#endif + // Clang has supported the 'unused' attribute since the first release. #define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__)) +// Type aliasing hint. +#if __has_attribute(__may_alias__) +# define BOOST_MAY_ALIAS __attribute__((__may_alias__)) +#endif + #ifndef BOOST_COMPILER # define BOOST_COMPILER "Clang version " __clang_version__ #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/codegear.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/codegear.hpp index e2f6061b37..52531d2f08 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/codegear.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/codegear.hpp @@ -22,9 +22,9 @@ // last known and checked version is 0x621 #if (__CODEGEARC__ > 0x621) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # else -# pragma message( "Unknown compiler version - please run the configure tests and report the results") +# pragma message( "boost: Unknown compiler version - please run the configure tests and report the results") # endif #endif @@ -112,6 +112,7 @@ #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SFINAE_EXPR #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS #define BOOST_NO_CXX11_VARIADIC_TEMPLATES @@ -153,6 +154,23 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif + +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif + +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif + +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + // // TR1 macros: // diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/comeau.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/comeau.hpp index 09841604f9..ca80fac37a 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/comeau.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/comeau.hpp @@ -50,7 +50,7 @@ // last known and checked version is 4245: #if (__COMO_VERSION__ > 4245) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/common_edg.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/common_edg.hpp index c09faeb0dd..88aba9ac8f 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/common_edg.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/common_edg.hpp @@ -95,6 +95,7 @@ #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS @@ -137,6 +138,21 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif + +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + #ifdef c_plusplus // EDG has "long long" in non-strict mode // However, some libraries have insufficient "long long" support diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/cray.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/cray.hpp index 837f815234..412ef9efa5 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/cray.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/cray.hpp @@ -1,67 +1,227 @@ -// (C) Copyright John Maddock 2011. -// (C) Copyright Cray, Inc. 2013 +// Copyright 2011 John Maddock +// Copyright 2013, 2017-2018 Cray, Inc. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. -// Greenhills C compiler setup: +// Cray C++ compiler setup. +// +// There are a few parameters that affect the macros defined in this file: +// +// - What version of CCE (Cray Compiling Environment) are we running? This +// comes from the '_RELEASE_MAJOR', '_RELEASE_MINOR', and +// '_RELEASE_PATCHLEVEL' macros. +// - What C++ standards conformance level are we using (e.g. '-h +// std=c++14')? This comes from the '__cplusplus' macro. +// - Are we using GCC extensions ('-h gnu' or '-h nognu')? If we have '-h +// gnu' then CCE emulates GCC, and the macros '__GNUC__', +// '__GNUC_MINOR__', and '__GNUC_PATCHLEVEL__' are defined. +// +// This file is organized as follows: +// +// - Verify that the combination of parameters listed above is supported. +// If we have an unsupported combination, we abort with '#error'. +// - Establish baseline values for all Boost macros. +// - Apply changes to the baseline macros based on compiler version. These +// changes are cummulative so each version section only describes the +// changes since the previous version. +// - Within each version section, we may also apply changes based on +// other parameters (i.e. C++ standards conformance level and GCC +// extensions). +// +// To test changes to this file: +// +// ``` +// module load cce/8.6.5 # Pick the version you want to test. +// cd boost/libs/config/test/all +// b2 -j 8 toolset=cray cxxstd=03 cxxstd=11 cxxstd=14 cxxstd-dialect=gnu linkflags=-lrt +// ``` +// Note: Using 'cxxstd-dialect=iso' is not supported at this time (the +// tests run, but many tests fail). +// +// Note: 'linkflags=-lrt' is needed in Cray Linux Environment. Otherwise +// you get an 'undefined reference to clock_gettime' error. +// +// Note: If a test '*_fail.cpp' file compiles, but fails to run, then it is +// reported as a defect. However, this is not actually a defect. This is an +// area where the test system is somewhat broken. Tests that are failing +// because of this problem are noted in the comments. +// +// Pay attention to the macro definitions for the macros you wish to +// modify. For example, only macros categorized as compiler macros should +// appear in this file; platform macros should not appear in this file. +// Also, some macros have to be defined to specific values; it is not +// always enough to define or undefine a macro. +// +// Macro definitions are available in the source code at: +// +// `boost/libs/config/doc/html/boost_config/boost_macro_reference.html` +// +// Macro definitions are also available online at: +// +// http://www.boost.org/doc/libs/master/libs/config/doc/html/boost_config/boost_macro_reference.html +// +// Typically, if you enable a feature, and the tests pass, then you have +// nothing to worry about. However, it's sometimes hard to figure out if a +// disabled feature needs to stay disabled. To get a list of disabled +// features, run 'b2' in 'boost/libs/config/checks'. These are the macros +// you should pay attention to (in addition to macros that cause test +// failures). -#define BOOST_COMPILER "Cray C version " BOOST_STRINGIZE(_RELEASE) +//// +//// Front matter +//// -#if _RELEASE < 8 -# error "Boost is not configured for Cray compilers prior to version 8, please try the configure script." +// In a developer build of the Cray compiler (i.e. a compiler built by a +// Cray employee), the release patch level is reported as "x". This gives +// versions that look like e.g. "8.6.x". +// +// To accomplish this, the the Cray compiler preprocessor inserts: +// +// #define _RELEASE_PATCHLEVEL x +// +// If we are using a developer build of the compiler, we want to use the +// configuration macros for the most recent patch level of the release. To +// accomplish this, we'll pretend that _RELEASE_PATCHLEVEL is 99. +// +// However, it's difficult to detect if _RELEASE_PATCHLEVEL is x. We must +// consider that the x will be expanded if x is defined as a macro +// elsewhere. For example, imagine if someone put "-D x=3" on the command +// line, and _RELEASE_PATCHLEVEL is x. Then _RELEASE_PATCHLEVEL would +// expand to 3, and we could not distinguish it from an actual +// _RELEASE_PATCHLEVEL of 3. This problem only affects developer builds; in +// production builds, _RELEASE_PATCHLEVEL is always an integer. +// +// IMPORTANT: In developer builds, if x is defined as a macro, you will get +// an incorrect configuration. The behavior in this case is undefined. +// +// Even if x is not defined, we have to use some trickery to detect if +// _RELEASE_PATCHLEVEL is x. First we define BOOST_CRAY_x to some arbitrary +// magic value, 9867657. Then we use BOOST_CRAY_APPEND to append the +// expanded value of _RELEASE_PATCHLEVEL to the string "BOOST_CRAY_". +// +// - If _RELEASE_PATCHLEVEL is undefined, we get "BOOST_CRAY_". +// - If _RELEASE_PATCHLEVEL is 5, we get "BOOST_CRAY_5". +// - If _RELEASE_PATCHLEVEL is x (and x is not defined) we get +// "BOOST_CRAY_x": +// +// Then we check if BOOST_CRAY_x is equal to the output of +// BOOST_CRAY_APPEND. In other words, the output of BOOST_CRAY_APPEND is +// treated as a macro name, and expanded again. If we can safely assume +// that BOOST_CRAY_ is not a macro defined as our magic number, and +// BOOST_CRAY_5 is not a macro defined as our magic number, then the only +// way the equality test can pass is if _RELEASE_PATCHLEVEL expands to x. +// +// So, that is how we detect if we are using a developer build of the Cray +// compiler. + +#define BOOST_CRAY_x 9867657 // Arbitrary number +#define BOOST_CRAY_APPEND(MACRO) BOOST_CRAY_APPEND_INTERNAL(MACRO) +#define BOOST_CRAY_APPEND_INTERNAL(MACRO) BOOST_CRAY_##MACRO + +#if BOOST_CRAY_x == BOOST_CRAY_APPEND(_RELEASE_PATCHLEVEL) + + // This is a developer build. + // + // - _RELEASE_PATCHLEVEL is defined as x, and x is not defined as a macro. + + // Pretend _RELEASE_PATCHLEVEL is 99, so we get the configuration for the + // most recent patch level in this release. + + #define BOOST_CRAY_VERSION (_RELEASE_MAJOR * 10000 + _RELEASE_MINOR * 100 + 99) + +#else + + // This is a production build. + // + // _RELEASE_PATCHLEVEL is not defined as x, or x is defined as a macro. + + #define BOOST_CRAY_VERSION (_RELEASE_MAJOR * 10000 + _RELEASE_MINOR * 100 + _RELEASE_PATCHLEVEL) + +#endif // BOOST_CRAY_x == BOOST_CRAY_APPEND(_RELEASE_PATCHLEVEL) + +#undef BOOST_CRAY_APPEND_INTERNAL +#undef BOOST_CRAY_APPEND +#undef BOOST_CRAY_x + + +#ifdef __GNUC__ +# define BOOST_GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) #endif +#ifndef BOOST_COMPILER +# define BOOST_COMPILER "Cray C++ version " BOOST_STRINGIZE(_RELEASE_MAJOR) "." BOOST_STRINGIZE(_RELEASE_MINOR) "." BOOST_STRINGIZE(_RELEASE_PATCHLEVEL) +#endif + +// Since the Cray compiler defines '__GNUC__', we have to emulate some +// additional GCC macros in order to make everything work. // -// Check this is a recent EDG based compiler, otherwise we don't support it here: -// -#ifndef __EDG_VERSION__ +// FIXME: Perhaps Cray should fix the compiler to define these additional +// macros for GCC emulation? + +#if __cplusplus >= 201103L && defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__) +# define __GXX_EXPERIMENTAL_CXX0X__ 1 +#endif + +//// +//// Parameter validation +//// + +// FIXME: Do we really need to support compilers before 8.5? Do they pass +// the Boost.Config tests? + +#if BOOST_CRAY_VERSION < 80000 +# error "Boost is not configured for Cray compilers prior to version 8, please try the configure script." +#endif + +// We only support recent EDG based compilers. + +#ifndef __EDG__ # error "Unsupported Cray compiler, please try running the configure script." #endif -#include +//// +//// Baseline values +//// +#include -// -// -#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_HAS_NRVO +#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION #define BOOST_NO_CXX11_AUTO_DECLARATIONS #define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS -#define BOOST_HAS_NRVO -#define BOOST_NO_CXX11_VARIADIC_MACROS -#define BOOST_NO_CXX11_VARIADIC_TEMPLATES -#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX -#define BOOST_NO_CXX11_UNICODE_LITERALS -#define BOOST_NO_TWO_PHASE_NAME_LOOKUP -#define BOOST_HAS_NRVO -#define BOOST_NO_CXX11_TEMPLATE_ALIASES -#define BOOST_NO_CXX11_STATIC_ASSERT -#define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_CXX11_SCOPED_ENUMS -#define BOOST_NO_CXX11_RVALUE_REFERENCES -#define BOOST_NO_CXX11_RANGE_BASED_FOR -#define BOOST_NO_CXX11_RAW_LITERALS -#define BOOST_NO_CXX11_NULLPTR -#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_CHAR32_T +#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DECLTYPE +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#define BOOST_NO_CXX11_DELETED_FUNCTIONS +#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS #define BOOST_NO_CXX11_LAMBDAS #define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS -#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_CXX11_DELETED_FUNCTIONS -#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS -#define BOOST_NO_CXX11_DECLTYPE_N3276 -#define BOOST_NO_CXX11_DECLTYPE -#define BOOST_NO_CXX11_CONSTEXPR -#define BOOST_NO_CXX11_USER_DEFINED_LITERALS -#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION -#define BOOST_NO_CXX11_CHAR32_T -#define BOOST_NO_CXX11_CHAR16_T +#define BOOST_NO_CXX11_NOEXCEPT +#define BOOST_NO_CXX11_NULLPTR +#define BOOST_NO_CXX11_RANGE_BASED_FOR +#define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_REF_QUALIFIERS -#define BOOST_NO_CXX11_FINAL +#define BOOST_NO_CXX11_RVALUE_REFERENCES +#define BOOST_NO_CXX11_SCOPED_ENUMS +#define BOOST_NO_CXX11_SFINAE_EXPR +#define BOOST_NO_CXX11_STATIC_ASSERT +#define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_THREAD_LOCAL - +#define BOOST_NO_CXX11_UNICODE_LITERALS +#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX +#define BOOST_NO_CXX11_USER_DEFINED_LITERALS +#define BOOST_NO_CXX11_VARIADIC_MACROS +#define BOOST_NO_CXX11_VARIADIC_TEMPLATES +#define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_TWO_PHASE_NAME_LOOKUP //#define BOOST_BCB_PARTIAL_SPECIALIZATION_BUG #define BOOST_MATH_DISABLE_STD_FPCLASSIFY @@ -70,15 +230,15 @@ #define BOOST_SP_USE_PTHREADS #define BOOST_AC_USE_PTHREADS -/* everything that follows is working around what are thought to be - * compiler shortcomings. Revist all of these regularly. - */ +// +// Everything that follows is working around what are thought to be +// compiler shortcomings. Revist all of these regularly. +// //#define BOOST_USE_ENUM_STATIC_ASSERT //#define BOOST_BUGGY_INTEGRAL_CONSTANT_EXPRESSIONS //(this may be implied by the previous #define -// These constants should be provided by the -// compiler, at least when -hgnu is asserted on the command line. +// These constants should be provided by the compiler. #ifndef __ATOMIC_RELAXED #define __ATOMIC_RELAXED 0 @@ -89,5 +249,192 @@ #define __ATOMIC_SEQ_CST 5 #endif +//// +//// Version changes +//// + +// +// 8.5.0 +// + +#if BOOST_CRAY_VERSION >= 80500 + +#if __cplusplus >= 201103L + +#undef BOOST_HAS_NRVO +#undef BOOST_NO_COMPLETE_VALUE_INITIALIZATION +#undef BOOST_NO_CXX11_AUTO_DECLARATIONS +#undef BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS +#undef BOOST_NO_CXX11_CHAR16_T +#undef BOOST_NO_CXX11_CHAR32_T +#undef BOOST_NO_CXX11_CONSTEXPR +#undef BOOST_NO_CXX11_DECLTYPE +#undef BOOST_NO_CXX11_DECLTYPE_N3276 +#undef BOOST_NO_CXX11_DEFAULTED_FUNCTIONS +#undef BOOST_NO_CXX11_DELETED_FUNCTIONS +#undef BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS +#undef BOOST_NO_CXX11_FINAL +#undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#undef BOOST_NO_CXX11_LAMBDAS +#undef BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS +#undef BOOST_NO_CXX11_NOEXCEPT +#undef BOOST_NO_CXX11_NULLPTR +#undef BOOST_NO_CXX11_RANGE_BASED_FOR +#undef BOOST_NO_CXX11_RAW_LITERALS +#undef BOOST_NO_CXX11_REF_QUALIFIERS +#undef BOOST_NO_CXX11_RVALUE_REFERENCES +#undef BOOST_NO_CXX11_SCOPED_ENUMS +#undef BOOST_NO_CXX11_SFINAE_EXPR +#undef BOOST_NO_CXX11_STATIC_ASSERT +#undef BOOST_NO_CXX11_TEMPLATE_ALIASES +#undef BOOST_NO_CXX11_THREAD_LOCAL +#undef BOOST_NO_CXX11_UNICODE_LITERALS +#undef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX +#undef BOOST_NO_CXX11_USER_DEFINED_LITERALS +#undef BOOST_NO_CXX11_VARIADIC_MACROS +#undef BOOST_NO_CXX11_VARIADIC_TEMPLATES +#undef BOOST_NO_SFINAE_EXPR +#undef BOOST_NO_TWO_PHASE_NAME_LOOKUP +#undef BOOST_MATH_DISABLE_STD_FPCLASSIFY +#undef BOOST_SP_USE_PTHREADS +#undef BOOST_AC_USE_PTHREADS + +#define BOOST_HAS_VARIADIC_TMPL +#define BOOST_HAS_UNISTD_H +#define BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG +#define BOOST_HAS_TR1_COMPLEX_OVERLOADS +#define BOOST_HAS_STDINT_H +#define BOOST_HAS_STATIC_ASSERT +#define BOOST_HAS_SIGACTION +#define BOOST_HAS_SCHED_YIELD +#define BOOST_HAS_RVALUE_REFS +#define BOOST_HAS_PTHREADS +#define BOOST_HAS_PTHREAD_YIELD +#define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE +#define BOOST_HAS_PARTIAL_STD_ALLOCATOR +#define BOOST_HAS_NRVO +#define BOOST_HAS_NL_TYPES_H +#define BOOST_HAS_NANOSLEEP +#define BOOST_NO_CXX11_SMART_PTR +#define BOOST_NO_CXX11_HDR_FUNCTIONAL +#define BOOST_NO_CXX14_CONSTEXPR +#define BOOST_HAS_LONG_LONG +#define BOOST_HAS_FLOAT128 + +#if __cplusplus < 201402L +#define BOOST_NO_CXX11_DECLTYPE_N3276 +#endif // __cplusplus < 201402L + +#endif // __cplusplus >= 201103L + +#endif // BOOST_CRAY_VERSION >= 80500 + +// +// 8.6.4 +// (versions prior to 8.6.5 do not define _RELEASE_PATCHLEVEL) +// + +#if BOOST_CRAY_VERSION >= 80600 + +#if __cplusplus >= 199711L +#define BOOST_HAS_FLOAT128 +#define BOOST_HAS_PTHREAD_YIELD // This is a platform macro, but it improves test results. +#define BOOST_NO_COMPLETE_VALUE_INITIALIZATION // This is correct. Test compiles, but fails to run. +#undef BOOST_NO_CXX11_CHAR16_T +#undef BOOST_NO_CXX11_CHAR32_T +#undef BOOST_NO_CXX11_INLINE_NAMESPACES +#undef BOOST_NO_CXX11_FINAL +#undef BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS +#undef BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS +#define BOOST_NO_CXX11_SFINAE_EXPR // This is correct, even though '*_fail.cpp' test fails. +#undef BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX +#undef BOOST_NO_CXX11_VARIADIC_MACROS +#undef BOOST_NO_CXX11_VARIADIC_TEMPLATES +// 'BOOST_NO_DEDUCED_TYPENAME' test is broken. The test files are enabled / +// disabled with an '#ifdef BOOST_DEDUCED_TYPENAME'. However, +// 'boost/libs/config/include/boost/config/detail/suffix.hpp' ensures that +// 'BOOST_DEDUCED_TYPENAME' is always defined (the value it is defined as +// depends on 'BOOST_NO_DEDUCED_TYPENAME'). So, modifying +// 'BOOST_NO_DEDUCED_TYPENAME' has no effect on which tests are run. +// +// The 'no_ded_typename_pass.cpp' test should always compile and run +// successfully, because 'BOOST_DEDUCED_TYPENAME' must always have an +// appropriate value (it's not just something that you turn on or off). +// Therefore, if you wish to test changes to 'BOOST_NO_DEDUCED_TYPENAME', +// you have to modify 'no_ded_typename_pass.cpp' to unconditionally include +// 'boost_no_ded_typename.ipp'. +#undef BOOST_NO_DEDUCED_TYPENAME // This is correct. Test is broken. +#undef BOOST_NO_SFINAE_EXPR +#undef BOOST_NO_TWO_PHASE_NAME_LOOKUP +#endif // __cplusplus >= 199711L + +#if __cplusplus >= 201103L +#undef BOOST_NO_CXX11_ALIGNAS +#undef BOOST_NO_CXX11_DECLTYPE_N3276 +#define BOOST_NO_CXX11_HDR_ATOMIC +#undef BOOST_NO_CXX11_HDR_FUNCTIONAL +#define BOOST_NO_CXX11_HDR_REGEX // This is correct. Test compiles, but fails to run. +#undef BOOST_NO_CXX11_SFINAE_EXPR +#undef BOOST_NO_CXX11_SMART_PTR +#undef BOOST_NO_CXX11_TRAILING_RESULT_TYPES +#endif // __cplusplus >= 201103L + +#if __cplusplus >= 201402L +#undef BOOST_NO_CXX14_CONSTEXPR +#define BOOST_NO_CXX14_DIGIT_SEPARATORS +#endif // __cplusplus == 201402L + +#endif // BOOST_CRAY_VERSION >= 80600 + +// +// 8.6.5 +// (no change from 8.6.4) +// + +// +// 8.7.0 +// + +#if BOOST_CRAY_VERSION >= 80700 + +#if __cplusplus >= 199711L +#endif // __cplusplus >= 199711L + +#if __cplusplus >= 201103L +#undef BOOST_NO_CXX11_HDR_ATOMIC +#undef BOOST_NO_CXX11_HDR_REGEX +#endif // __cplusplus >= 201103L + +#if __cplusplus >= 201402L +#endif // __cplusplus == 201402L + +#endif // BOOST_CRAY_VERSION >= 80700 + +// +// Next release +// + +#if BOOST_CRAY_VERSION > 80799 + +#if __cplusplus >= 199711L +#endif // __cplusplus >= 199711L + +#if __cplusplus >= 201103L +#endif // __cplusplus >= 201103L + +#if __cplusplus >= 201402L +#endif // __cplusplus == 201402L + +#endif // BOOST_CRAY_VERSION > 80799 + +//// +//// Remove temporary macros +//// +// I've commented out some '#undef' statements to signify that we purposely +// want to keep certain macros. +//#undef __GXX_EXPERIMENTAL_CXX0X__ +//#undef BOOST_COMPILER +#undef BOOST_GCC_VERSION +#undef BOOST_CRAY_VERSION diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/digitalmars.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/digitalmars.hpp index c344aae044..1466373191 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/digitalmars.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/digitalmars.hpp @@ -71,6 +71,7 @@ #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS @@ -113,6 +114,20 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + #if (__DMC__ <= 0x840) #error "Compiler not supported or configured - please reconfigure" #endif @@ -120,6 +135,6 @@ // last known and checked version is ...: #if (__DMC__ > 0x848) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/gcc.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/gcc.hpp index e319d04958..9ae6072ee0 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/gcc.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/gcc.hpp @@ -99,10 +99,10 @@ // Dynamic shared object (DSO) and dynamic-link library (DLL) support // #if __GNUC__ >= 4 -# if (defined(_WIN32) || defined(__WIN32__) || defined(WIN32)) && !defined(__CYGWIN__) +# if defined(_WIN32) || defined(__WIN32__) || defined(WIN32) || defined(__CYGWIN__) // All Win32 development environments, including 64-bit Windows and MinGW, define // _WIN32 or one of its variant spellings. Note that Cygwin is a POSIX environment, - // so does not define _WIN32 or its variants. + // so does not define _WIN32 or its variants, but still supports dllexport/dllimport. # define BOOST_HAS_DECLSPEC # define BOOST_SYMBOL_EXPORT __attribute__((__dllexport__)) # define BOOST_SYMBOL_IMPORT __attribute__((__dllimport__)) @@ -232,7 +232,7 @@ // C++0x features in 4.6.n and later // #if (BOOST_GCC_VERSION < 40600) || !defined(BOOST_GCC_CXX11) -#define BOOST_NO_CXX11_CONSTEXPR +#define BOOST_NO_CXX11_DEFAULTED_MOVES #define BOOST_NO_CXX11_NOEXCEPT #define BOOST_NO_CXX11_NULLPTR #define BOOST_NO_CXX11_RANGE_BASED_FOR @@ -242,6 +242,9 @@ // C++0x features in 4.7.n and later // #if (BOOST_GCC_VERSION < 40700) || !defined(BOOST_GCC_CXX11) +// Note that while constexpr is partly supported in gcc-4.6 it's a +// pre-std version with several bugs: +# define BOOST_NO_CXX11_CONSTEXPR # define BOOST_NO_CXX11_FINAL # define BOOST_NO_CXX11_TEMPLATE_ALIASES # define BOOST_NO_CXX11_USER_DEFINED_LITERALS @@ -253,6 +256,7 @@ #if (BOOST_GCC_VERSION < 40800) || !defined(BOOST_GCC_CXX11) # define BOOST_NO_CXX11_ALIGNAS # define BOOST_NO_CXX11_THREAD_LOCAL +# define BOOST_NO_CXX11_SFINAE_EXPR #endif // C++0x features in 4.8.1 and later @@ -283,15 +287,44 @@ #if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304) # define BOOST_NO_CXX14_CONSTEXPR #endif -#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304) +#if (BOOST_GCC_VERSION < 50200) || !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304) # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + +#if __GNUC__ >= 7 +# define BOOST_FALLTHROUGH __attribute__((fallthrough)) +#endif + +#ifdef __MINGW32__ +// Currently (June 2017) thread_local is broken on mingw for all current compiler releases, see +// https://sourceforge.net/p/mingw-w64/bugs/527/ +// Not setting this causes program termination on thread exit. +#define BOOST_NO_CXX11_THREAD_LOCAL +#endif + // // Unused attribute: #if __GNUC__ >= 4 # define BOOST_ATTRIBUTE_UNUSED __attribute__((__unused__)) #endif + +// Type aliasing hint. Supported since gcc 3.3. +#define BOOST_MAY_ALIAS __attribute__((__may_alias__)) + // // __builtin_unreachable: #if BOOST_GCC_VERSION >= 40800 @@ -315,14 +348,14 @@ # error "Compiler not configured - please reconfigure" #endif // -// last known and checked version is 4.9: -#if (BOOST_GCC_VERSION > 40900) +// last known and checked version is 8.1: +#if (BOOST_GCC_VERSION > 80100) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "Boost.Config is older than your compiler - please check for an updated Boost release." # else // we don't emit warnings here anymore since there are no defect macros defined for // gcc post 3.4, so any failures are gcc regressions... -//# warning "Unknown compiler version - please run the configure tests and report the results" +//# warning "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/gcc_xml.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/gcc_xml.hpp index b56c78628c..bdba4ed092 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/gcc_xml.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/gcc_xml.hpp @@ -46,6 +46,7 @@ # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_SCOPED_ENUMS # define BOOST_NO_SFINAE_EXPR +# define BOOST_NO_CXX11_SFINAE_EXPR # define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS # define BOOST_NO_CXX11_LAMBDAS # define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS @@ -91,6 +92,20 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + #define BOOST_COMPILER "GCC-XML C++ version " __GCCXML__ diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/greenhills.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/greenhills.hpp index a76a07cf4a..39112c2c1c 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/greenhills.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/greenhills.hpp @@ -21,7 +21,7 @@ // last known and checked version is 0: #if (__ghs > 0) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/hp_acc.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/hp_acc.hpp index a773b8c442..49d676fa2b 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/hp_acc.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/hp_acc.hpp @@ -114,6 +114,7 @@ #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS @@ -141,6 +142,6 @@ // last known and checked version for PA-RISC is 38000 #if ((__HP_aCC > 61300) || ((__HP_aCC > 38000) && defined(__hpxstd98))) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/intel.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/intel.hpp index 80969e9edd..f56807dbbc 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/intel.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/intel.hpp @@ -35,15 +35,30 @@ #endif -#else +#if (__INTEL_COMPILER <= 1600) && !defined(BOOST_NO_CXX14_VARIABLE_TEMPLATES) +# define BOOST_NO_CXX14_VARIABLE_TEMPLATES +#endif + +#else // defined(_MSC_VER) #include #undef BOOST_GCC_VERSION #undef BOOST_GCC_CXX11 +#undef BOOST_GCC +#undef BOOST_FALLTHROUGH +// Broken in all versions up to 17 (newer versions not tested) +#if (__INTEL_COMPILER <= 1700) && !defined(BOOST_NO_CXX14_CONSTEXPR) +# define BOOST_NO_CXX14_CONSTEXPR #endif +#if (__INTEL_COMPILER >= 1800) && (__cplusplus >= 201703) +# define BOOST_FALLTHROUGH [[fallthrough]] +#endif + +#endif // defined(_MSC_VER) + #undef BOOST_COMPILER #if defined(__INTEL_COMPILER) @@ -88,7 +103,7 @@ # define BOOST_INTEL_LINUX BOOST_INTEL #endif -#else +#else // defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1500) && (defined(_MSC_VER) || defined(__GNUC__)) #include @@ -302,6 +317,12 @@ template<> struct assert_intrinsic_wchar_t {}; # define BOOST_SYMBOL_IMPORT # define BOOST_SYMBOL_VISIBLE __attribute__((visibility("default"))) #endif + +// Type aliasing hint +#if defined(__GNUC__) && (BOOST_INTEL_CXX_VERSION >= 1300) +# define BOOST_MAY_ALIAS __attribute__((__may_alias__)) +#endif + // // C++0x features // For each feature we need to check both the Intel compiler version, @@ -406,6 +427,11 @@ template<> struct assert_intrinsic_wchar_t {}; # undef BOOST_NO_SFINAE_EXPR #endif +// BOOST_NO_CXX11_SFINAE_EXPR +#if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40800)) && !defined(_MSC_VER) +# undef BOOST_NO_CXX11_SFINAE_EXPR +#endif + // BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS #if (BOOST_INTEL_CXX_VERSION >= 1500) && (!defined(BOOST_INTEL_GCC_VERSION) || (BOOST_INTEL_GCC_VERSION >= 40500)) && (!defined(_MSC_VER) || (_MSC_FULL_VER >= 180020827)) // This is available in earlier Intel releases, but breaks Multiprecision: @@ -479,7 +505,7 @@ template<> struct assert_intrinsic_wchar_t {}; # undef BOOST_NO_CXX11_FINAL #endif -#endif +#endif // defined(BOOST_INTEL_STDCXX0X) // // Broken in all versions up to 15: @@ -526,18 +552,18 @@ template<> struct assert_intrinsic_wchar_t {}; # define BOOST_HAS_INT128 #endif -#endif +#endif // defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1500) && (defined(_MSC_VER) || defined(__GNUC__)) // // last known and checked version: -#if (BOOST_INTEL_CXX_VERSION > 1500) +#if (BOOST_INTEL_CXX_VERSION > 1700) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "Boost.Config is older than your compiler - please check for an updated Boost release." # elif defined(_MSC_VER) // // We don't emit this warning any more, since we have so few // defect macros set anyway (just the one). // -//# pragma message("Unknown compiler version - please run the configure tests and report the results") +//# pragma message("boost: Unknown compiler version - please run the configure tests and report the results") # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/kai.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/kai.hpp index 960d501c86..0b22ec1d6c 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/kai.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/kai.hpp @@ -25,7 +25,7 @@ // last known and checked version is 4001: #if (__KCC_VERSION > 4001) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/metrowerks.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/metrowerks.hpp index 3c5e22868a..0e18e1809e 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/metrowerks.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/metrowerks.hpp @@ -113,6 +113,7 @@ #define BOOST_NO_CXX11_RAW_LITERALS #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS @@ -156,6 +157,20 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + #define BOOST_COMPILER "Metrowerks CodeWarrior C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) // @@ -168,7 +183,7 @@ // last known and checked version: #if (__MWERKS__ > 0x3205) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/mpw.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/mpw.hpp index 084f9e154f..05c066efbc 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/mpw.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/mpw.hpp @@ -62,6 +62,7 @@ #define BOOST_NO_CXX11_RVALUE_REFERENCES #define BOOST_NO_CXX11_SCOPED_ENUMS #define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SFINAE_EXPR #define BOOST_NO_CXX11_STATIC_ASSERT #define BOOST_NO_CXX11_TEMPLATE_ALIASES #define BOOST_NO_CXX11_UNICODE_LITERALS @@ -105,6 +106,20 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + // // versions check: // we don't support MPW prior to version 8.9: @@ -115,7 +130,7 @@ // last known and checked version is 0x890: #if (MPW_CPLUS > 0x890) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/nvcc.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/nvcc.hpp index 172558502d..ed035fcf73 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/nvcc.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/nvcc.hpp @@ -12,7 +12,7 @@ #endif #if defined(__CUDACC_VER_MAJOR__) && defined(__CUDACC_VER_MINOR__) && defined(__CUDACC_VER_BUILD__) -# define BOOST_CUDA_VERSION __CUDACC_VER_MAJOR__ * 1000000 + __CUDACC_VER_MINOR__ * 10000 + __CUDACC_VER_BUILD__ +# define BOOST_CUDA_VERSION (__CUDACC_VER_MAJOR__ * 1000000 + __CUDACC_VER_MINOR__ * 10000 + __CUDACC_VER_BUILD__) #else // We don't really know what the CUDA version is, but it's definitely before 7.5: # define BOOST_CUDA_VERSION 7000000 @@ -33,8 +33,8 @@ #if (BOOST_CUDA_VERSION > 8000000) && (BOOST_CUDA_VERSION < 8010000) # define BOOST_NO_CXX11_VARIADIC_TEMPLATES #endif -// Most recent CUDA (8.0) has no constexpr support in msvc mode: -#if defined(_MSC_VER) +// CUDA (8.0) has no constexpr support in msvc mode: +#if defined(_MSC_VER) && (BOOST_CUDA_VERSION < 9000000) # define BOOST_NO_CXX11_CONSTEXPR #endif @@ -55,3 +55,4 @@ #endif #endif + diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/pathscale.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/pathscale.hpp index a5e65af49b..1318d275ad 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/pathscale.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/pathscale.hpp @@ -12,7 +12,12 @@ # define BOOST_COMPILER "PathScale EKOPath C++ Compiler version " __PATHSCALE__ #endif -#if __PATHCC__ >= 4 +#if __PATHCC__ >= 6 +// PathCC is based on clang, and supports the __has_*() builtins used +// to detect features in clang.hpp. Since the clang toolset is much +// better maintained, it is more convenient to reuse its definitions. +# include "boost/config/compiler/clang.hpp" +#elif __PATHCC__ >= 4 # define BOOST_MSVC6_MEMBER_TEMPLATES # define BOOST_HAS_UNISTD_H # define BOOST_HAS_STDINT_H @@ -37,6 +42,7 @@ # define BOOST_NO_CXX11_TEMPLATE_ALIASES # define BOOST_NO_CXX11_STATIC_ASSERT # define BOOST_NO_SFINAE_EXPR +# define BOOST_NO_CXX11_SFINAE_EXPR # define BOOST_NO_CXX11_SCOPED_ENUMS # define BOOST_NO_CXX11_RVALUE_REFERENCES # define BOOST_NO_CXX11_RANGE_BASED_FOR @@ -112,4 +118,18 @@ #if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304) # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif + +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/pgi.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/pgi.hpp index fa2d5e402d..4e909d8a17 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/pgi.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/pgi.hpp @@ -1,4 +1,5 @@ // (C) Copyright Noel Belcourt 2007. +// Copyright 2017, NVIDIA CORPORATION. // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) @@ -10,147 +11,13 @@ #define BOOST_COMPILER_VERSION __PGIC__##__PGIC_MINOR__ #define BOOST_COMPILER "PGI compiler version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) -// -// Threading support: -// Turn this on unconditionally here, it will get turned off again later -// if no threading API is detected. -// +// PGI is mostly GNU compatible. So start with that. +#include -#if __PGIC__ >= 11 +// Now adjust for things that are different. -// options requested by configure --enable-test -#define BOOST_HAS_PTHREADS -#define BOOST_HAS_THREADS -#define BOOST_HAS_PTHREAD_YIELD -#define BOOST_HAS_NRVO -#define BOOST_HAS_LONG_LONG - -// options --enable-test wants undefined -#undef BOOST_NO_STDC_NAMESPACE -#undef BOOST_NO_EXCEPTION_STD_NAMESPACE -#undef BOOST_DEDUCED_TYPENAME - -#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL -#define BOOST_NO_TWO_PHASE_NAME_LOOKUP -#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CXX11_AUTO_DECLARATIONS - -#elif __PGIC__ >= 10 - -// options requested by configure --enable-test -#define BOOST_HAS_THREADS -#define BOOST_HAS_NRVO -#define BOOST_HAS_LONG_LONG -#if defined(linux) || defined(__linux) || defined(__linux__) -# define BOOST_HAS_STDINT_H -#endif - -// options --enable-test wants undefined -#undef BOOST_NO_STDC_NAMESPACE -#undef BOOST_NO_EXCEPTION_STD_NAMESPACE -#undef BOOST_DEDUCED_TYPENAME - -#elif __PGIC__ >= 7 - -#define BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL -#define BOOST_NO_TWO_PHASE_NAME_LOOKUP -#define BOOST_NO_SWPRINTF -#define BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS -#define BOOST_NO_CXX11_AUTO_DECLARATIONS - -#else - -# error "Pgi compiler not configured - please reconfigure" - -#endif -// -// C++0x features -// -// See boost\config\suffix.hpp for BOOST_NO_LONG_LONG -// -#define BOOST_NO_CXX11_CHAR16_T -#define BOOST_NO_CXX11_CHAR32_T -#define BOOST_NO_CXX11_CONSTEXPR -#define BOOST_NO_CXX11_DECLTYPE -#define BOOST_NO_CXX11_DECLTYPE_N3276 -#define BOOST_NO_CXX11_DEFAULTED_FUNCTIONS -#define BOOST_NO_CXX11_DELETED_FUNCTIONS -#define BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS -#define BOOST_NO_CXX11_EXTERN_TEMPLATE -#define BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS -#define BOOST_NO_CXX11_LAMBDAS -#define BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS -#define BOOST_NO_CXX11_NOEXCEPT -#define BOOST_NO_CXX11_NULLPTR -#define BOOST_NO_CXX11_NUMERIC_LIMITS -#define BOOST_NO_CXX11_RANGE_BASED_FOR -#define BOOST_NO_CXX11_RAW_LITERALS -#define BOOST_NO_CXX11_RVALUE_REFERENCES -#define BOOST_NO_CXX11_SCOPED_ENUMS -#define BOOST_NO_SFINAE_EXPR -#define BOOST_NO_CXX11_STATIC_ASSERT -#define BOOST_NO_SWPRINTF -#define BOOST_NO_CXX11_TEMPLATE_ALIASES -#define BOOST_NO_CXX11_UNICODE_LITERALS -#define BOOST_NO_CXX11_VARIADIC_TEMPLATES -#define BOOST_NO_CXX11_VARIADIC_MACROS -#define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX - -#define BOOST_NO_CXX11_HDR_UNORDERED_SET -#define BOOST_NO_CXX11_HDR_UNORDERED_MAP -#define BOOST_NO_CXX11_HDR_TYPEINDEX -#define BOOST_NO_CXX11_HDR_TYPE_TRAITS -#define BOOST_NO_CXX11_HDR_TUPLE -#define BOOST_NO_CXX11_HDR_THREAD -#define BOOST_NO_CXX11_HDR_SYSTEM_ERROR -#define BOOST_NO_CXX11_HDR_REGEX -#define BOOST_NO_CXX11_HDR_RATIO -#define BOOST_NO_CXX11_HDR_RANDOM -#define BOOST_NO_CXX11_HDR_MUTEX -#define BOOST_NO_CXX11_HDR_INITIALIZER_LIST -#define BOOST_NO_CXX11_HDR_FUTURE -#define BOOST_NO_CXX11_HDR_FORWARD_LIST -#define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE -#define BOOST_NO_CXX11_HDR_CODECVT -#define BOOST_NO_CXX11_HDR_CHRONO -#define BOOST_NO_CXX11_HDR_ARRAY -#define BOOST_NO_CXX11_USER_DEFINED_LITERALS -#define BOOST_NO_CXX11_ALIGNAS -#define BOOST_NO_CXX11_TRAILING_RESULT_TYPES -#define BOOST_NO_CXX11_INLINE_NAMESPACES -#define BOOST_NO_CXX11_REF_QUALIFIERS -#define BOOST_NO_CXX11_FINAL -#define BOOST_NO_CXX11_THREAD_LOCAL - -// C++ 14: -#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) -# define BOOST_NO_CXX14_AGGREGATE_NSDMI -#endif -#if !defined(__cpp_binary_literals) || (__cpp_binary_literals < 201304) -# define BOOST_NO_CXX14_BINARY_LITERALS -#endif -#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304) -# define BOOST_NO_CXX14_CONSTEXPR -#endif -#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304) -# define BOOST_NO_CXX14_DECLTYPE_AUTO -#endif -#if (__cplusplus < 201304) // There's no SD6 check for this.... -# define BOOST_NO_CXX14_DIGIT_SEPARATORS -#endif -#if !defined(__cpp_generic_lambdas) || (__cpp_generic_lambdas < 201304) -# define BOOST_NO_CXX14_GENERIC_LAMBDAS -#endif -#if !defined(__cpp_init_captures) || (__cpp_init_captures < 201304) -# define BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES -#endif -#if !defined(__cpp_return_type_deduction) || (__cpp_return_type_deduction < 201304) -# define BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION -#endif -#if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304) -# define BOOST_NO_CXX14_VARIABLE_TEMPLATES -#endif -// -// version check: -// probably nothing to do here? +// __float128 is a typedef, not a distinct type. +#undef BOOST_HAS_FLOAT128 +// __int128 is not supported. +#undef BOOST_HAS_INT128 diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/sunpro_cc.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/sunpro_cc.hpp index 8f07e0e9a2..41b7bcade6 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/sunpro_cc.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/sunpro_cc.hpp @@ -141,6 +141,7 @@ // # define BOOST_HAS_LONG_LONG +#define BOOST_NO_CXX11_SFINAE_EXPR // C++ 14: #if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) @@ -152,7 +153,7 @@ #if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304) # define BOOST_NO_CXX14_CONSTEXPR #endif -#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304) +#if !defined(__cpp_decltype_auto) || (__cpp_decltype_auto < 201304) || (__cplusplus < 201402L) # define BOOST_NO_CXX14_DECLTYPE_AUTO #endif #if (__cplusplus < 201304) // There's no SD6 check for this.... @@ -171,6 +172,20 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + // Turn on threading support for Solaris 12. // Ticket #11972 #if (__SUNPRO_CC >= 0x5140) && defined(__SunOS_5_12) && !defined(BOOST_HAS_THREADS) @@ -190,9 +205,9 @@ #error "Compiler not supported or configured - please reconfigure" #endif // -// last known and checked version is 0x590: -#if (__SUNPRO_CC > 0x590) +// last known and checked version: +#if (__SUNPRO_CC > 0x5150) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "Boost.Config is older than your compiler - please check for an updated Boost release." # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/vacpp.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/vacpp.hpp index 3fbed9fafe..8e26449968 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/vacpp.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/vacpp.hpp @@ -56,7 +56,7 @@ // last known and checked version is 1210: #if (__IBMCPP__ > 1210) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" +# error "boost: Unknown compiler version - please run the configure tests and report the results" # endif #endif @@ -65,6 +65,11 @@ #define BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS #endif +// Type aliasing hint. Supported since XL C++ 13.1 +#if (__IBMCPP__ >= 1310) +# define BOOST_MAY_ALIAS __attribute__((__may_alias__)) +#endif + // // C++0x features // @@ -114,6 +119,7 @@ # define BOOST_NO_CXX11_SCOPED_ENUMS #endif #define BOOST_NO_SFINAE_EXPR +#define BOOST_NO_CXX11_SFINAE_EXPR #define BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX #if ! __IBMCPP_STATIC_ASSERT # define BOOST_NO_CXX11_STATIC_ASSERT @@ -161,3 +167,17 @@ #if !defined(__cpp_variable_templates) || (__cpp_variable_templates < 201304) # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif + +// C++17 +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif +#if !defined(__cpp_inline_variables) || (__cpp_inline_variables < 201606) +# define BOOST_NO_CXX17_INLINE_VARIABLES +#endif +#if !defined(__cpp_fold_expressions) || (__cpp_fold_expressions < 201603) +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/visualc.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/visualc.hpp index 3a68c4d6bd..29642473cd 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/visualc.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/visualc.hpp @@ -107,7 +107,7 @@ // // TR1 features: // -#if _MSC_VER >= 1700 +#if (_MSC_VER >= 1700) && defined(_HAS_CXX17) && (_HAS_CXX17 > 0) // # define BOOST_HAS_TR1_HASH // don't know if this is true yet. // # define BOOST_HAS_TR1_TYPE_TRAITS // don't know if this is true yet. # define BOOST_HAS_TR1_UNORDERED_MAP @@ -167,6 +167,7 @@ // #if (_MSC_FULL_VER < 190023026) # define BOOST_NO_CXX11_NOEXCEPT +# define BOOST_NO_CXX11_DEFAULTED_MOVES # define BOOST_NO_CXX11_REF_QUALIFIERS # define BOOST_NO_CXX11_USER_DEFINED_LITERALS # define BOOST_NO_CXX11_ALIGNAS @@ -190,6 +191,21 @@ # define BOOST_NO_CXX11_CONSTEXPR #endif +// C++14 features supported by VC++ 14.1 (Visual Studio 2017) +// +#if (_MSC_VER < 1910) +# define BOOST_NO_CXX14_AGGREGATE_NSDMI +#endif + +// C++17 features supported by VC++ 14.1 (Visual Studio 2017) Update 3 +// +#if (_MSC_VER < 1911) || (_MSVC_LANG < 201703) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +# define BOOST_NO_CXX17_IF_CONSTEXPR +# define BOOST_NO_CXX17_HDR_OPTIONAL +# define BOOST_NO_CXX17_HDR_STRING_VIEW +#endif + // MSVC including version 14 has not yet completely // implemented value-initialization, as is reported: // "VC++ does not value-initialize members of derived classes without @@ -205,19 +221,51 @@ // https://connect.microsoft.com/VisualStudio/feedback/details/1582233/c-subobjects-still-not-value-initialized-correctly // See also: http://www.boost.org/libs/utility/value_init.htm#compiler_issues // (Niels Dekker, LKEB, May 2010) +// Still present in VC15.5, Dec 2017. #define BOOST_NO_COMPLETE_VALUE_INITIALIZATION // // C++ 11: // -#define BOOST_NO_TWO_PHASE_NAME_LOOKUP +// This is supported with /permissive- for 15.5 onwards, unfortunately we appear to have no way to tell +// if this is in effect or not, in any case nothing in Boost is currently using this, so we'll just go +// on defining it for now: // -// C++ 14: -#if !defined(__cpp_aggregate_nsdmi) || (__cpp_aggregate_nsdmi < 201304) -# define BOOST_NO_CXX14_AGGREGATE_NSDMI +# define BOOST_NO_TWO_PHASE_NAME_LOOKUP + +#if (_MSC_VER < 1912) || (_MSVC_LANG < 201402) +// Supported from msvc-15.5 onwards: +#define BOOST_NO_CXX11_SFINAE_EXPR #endif -#if !defined(__cpp_constexpr) || (__cpp_constexpr < 201304) +#if (_MSC_VER < 1915) || (_MSVC_LANG < 201402) +// C++ 14: +// Still gives internal compiler error for msvc-15.5: # define BOOST_NO_CXX14_CONSTEXPR #endif +// C++ 17: +#if (_MSC_VER < 1912) || (_MSVC_LANG < 201703) +#define BOOST_NO_CXX17_INLINE_VARIABLES +#define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif + +// +// Things that don't work in clr mode: +// +#ifdef _M_CEE +#ifndef BOOST_NO_CXX11_THREAD_LOCAL +# define BOOST_NO_CXX11_THREAD_LOCAL +#endif +#ifndef BOOST_NO_SFINAE_EXPR +# define BOOST_NO_SFINAE_EXPR +#endif +#ifndef BOOST_NO_CXX11_REF_QUALIFIERS +# define BOOST_NO_CXX11_REF_QUALIFIERS +#endif +#endif +#ifdef _M_CEE_PURE +#ifndef BOOST_NO_CXX11_CONSTEXPR +# define BOOST_NO_CXX11_CONSTEXPR +#endif +#endif // // prefix and suffix headers: @@ -240,9 +288,9 @@ # if _MSC_VER < 1400 // Note: I'm not aware of any CE compiler with version 13xx # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown EVC++ compiler version - please run the configure tests and report the results" +# error "boost: Unknown EVC++ compiler version - please run the configure tests and report the results" # else -# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") +# pragma message("boost: Unknown EVC++ compiler version - please run the configure tests and report the results") # endif # elif _MSC_VER < 1500 # define BOOST_COMPILER_VERSION evc8 @@ -258,13 +306,13 @@ # define BOOST_COMPILER_VERSION evc14 # else # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown EVC++ compiler version - please run the configure tests and report the results" +# error "boost: Unknown EVC++ compiler version - please run the configure tests and report the results" # else -# pragma message("Unknown EVC++ compiler version - please run the configure tests and report the results") +# pragma message("boost: Unknown EVC++ compiler version - please run the configure tests and report the results") # endif # endif # else -# if _MSC_VER < 1310 +# if _MSC_VER < 1200 // Note: Versions up to 7.0 aren't supported. # define BOOST_COMPILER_VERSION 5.0 # elif _MSC_VER < 1300 @@ -283,8 +331,10 @@ # define BOOST_COMPILER_VERSION 11.0 # elif _MSC_VER < 1900 # define BOOST_COMPILER_VERSION 12.0 -# elif _MSC_VER < 2000 +# elif _MSC_VER < 1910 # define BOOST_COMPILER_VERSION 14.0 +# elif _MSC_VER < 1920 +# define BOOST_COMPILER_VERSION 14.1 # else # define BOOST_COMPILER_VERSION _MSC_VER # endif @@ -293,14 +343,17 @@ # define BOOST_COMPILER "Microsoft Visual C++ version " BOOST_STRINGIZE(BOOST_COMPILER_VERSION) #endif +#include + // -// masterleinad: upgrade supported MSVC version to 19.20 (last checked 19.20.27404) -// Boost repo has only 19.10: -// last known and checked version is 19.10.24629 (VC++ 2017 RC): -#if (_MSC_VER > 1920) +// last known and checked version is 19.12.25830.2 (VC++ 2017.3): +#if (_MSC_VER > 1912) # if defined(BOOST_ASSERT_CONFIG) -# error "Unknown compiler version - please run the configure tests and report the results" -# else -# pragma message("Unknown compiler version - please run the configure tests and report the results") +# error "Boost.Config is older than your current compiler version." +# elif !defined(BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE) + // + // Disabled as of March 2018 - the pace of VS releases is hard to keep up with + // and in any case, we have relatively few defect macros defined now. + // BOOST_PRAGMA_MESSAGE("Info: Boost.Config is older than your compiler version - probably nothing bad will happen - but you may wish to look for an updated Boost version. Define BOOST_CONFIG_SUPPRESS_OUTDATED_MESSAGE to suppress this message.") # endif #endif diff --git a/bundled/boost-1.62.0/include/boost/config/compiler/xlcpp.hpp b/bundled/boost-1.62.0/include/boost/config/compiler/xlcpp.hpp index 2aaafc3b66..ee7aa1253a 100644 --- a/bundled/boost-1.62.0/include/boost/config/compiler/xlcpp.hpp +++ b/bundled/boost-1.62.0/include/boost/config/compiler/xlcpp.hpp @@ -23,6 +23,10 @@ #define __has_extension __has_feature #endif +#ifndef __has_cpp_attribute +#define __has_cpp_attribute(x) 0 +#endif + #if !__has_feature(cxx_exceptions) && !defined(BOOST_NO_EXCEPTIONS) # define BOOST_NO_EXCEPTIONS #endif @@ -238,6 +242,20 @@ # define BOOST_NO_CXX14_VARIABLE_TEMPLATES #endif +#if !defined(__cpp_structured_bindings) || (__cpp_structured_bindings < 201606) +# define BOOST_NO_CXX17_STRUCTURED_BINDINGS +#endif + +#if !defined(__cpp_if_constexpr) || (__cpp_if_constexpr < 201606) +# define BOOST_NO_CXX17_IF_CONSTEXPR +#endif + +// Clang 3.9+ in c++1z +#if !__has_cpp_attribute(fallthrough) || __cplusplus < 201406L +# define BOOST_NO_CXX17_INLINE_VARIABLES +# define BOOST_NO_CXX17_FOLD_EXPRESSIONS +#endif + #if !__has_feature(cxx_thread_local) # define BOOST_NO_CXX11_THREAD_LOCAL #endif @@ -253,6 +271,11 @@ # define BOOST_ATTRIBUTE_UNUSED __attribute__((unused)) #endif +// Type aliasing hint. +#if __has_attribute(__may_alias__) +# define BOOST_MAY_ALIAS __attribute__((__may_alias__)) +#endif + #ifndef BOOST_COMPILER # define BOOST_COMPILER "Clang version " __clang_version__ #endif diff --git a/bundled/boost-1.62.0/include/boost/config/posix_features.hpp b/bundled/boost-1.62.0/include/boost/config/detail/posix_features.hpp similarity index 100% rename from bundled/boost-1.62.0/include/boost/config/posix_features.hpp rename to bundled/boost-1.62.0/include/boost/config/detail/posix_features.hpp diff --git a/bundled/boost-1.62.0/include/boost/config/select_compiler_config.hpp b/bundled/boost-1.62.0/include/boost/config/detail/select_compiler_config.hpp similarity index 91% rename from bundled/boost-1.62.0/include/boost/config/select_compiler_config.hpp rename to bundled/boost-1.62.0/include/boost/config/detail/select_compiler_config.hpp index 7a75708428..8970dffb4f 100644 --- a/bundled/boost-1.62.0/include/boost/config/select_compiler_config.hpp +++ b/bundled/boost-1.62.0/include/boost/config/detail/select_compiler_config.hpp @@ -39,8 +39,7 @@ // Intel # define BOOST_COMPILER_CONFIG "boost/config/compiler/intel.hpp" -#elif defined __clang__ && !defined(__CUDACC__) && !defined(__ibmxl__) -// when using clang and cuda at same time, you want to appear as gcc +#elif defined __clang__ && !defined(__ibmxl__) // Clang C++ emulates GCC, so it has to appear early. # define BOOST_COMPILER_CONFIG "boost/config/compiler/clang.hpp" @@ -48,6 +47,14 @@ // Digital Mars C++ # define BOOST_COMPILER_CONFIG "boost/config/compiler/digitalmars.hpp" +#elif defined __DCC__ +// Wind River Diab C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/diab.hpp" + +#elif defined(__PGI) +// Portland Group Inc. +# define BOOST_COMPILER_CONFIG "boost/config/compiler/pgi.hpp" + # elif defined(__GNUC__) && !defined(__ibmxl__) // GNU C++: # define BOOST_COMPILER_CONFIG "boost/config/compiler/gcc.hpp" @@ -92,18 +99,18 @@ // MPW MrCpp or SCpp # define BOOST_COMPILER_CONFIG "boost/config/compiler/mpw.hpp" +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) && defined(__MVS__) +// IBM z/OS XL C/C++ +# define BOOST_COMPILER_CONFIG "boost/config/compiler/xlcpp_zos.hpp" + #elif defined(__ibmxl__) -// IBM XL C/C++ for Linux (Little Endian) +// IBM XL C/C++ for Linux (Little Endian) # define BOOST_COMPILER_CONFIG "boost/config/compiler/xlcpp.hpp" #elif defined(__IBMCPP__) // IBM Visual Age or IBM XL C/C++ for Linux (Big Endian) # define BOOST_COMPILER_CONFIG "boost/config/compiler/vacpp.hpp" -#elif defined(__PGI) -// Portland Group Inc. -# define BOOST_COMPILER_CONFIG "boost/config/compiler/pgi.hpp" - #elif defined _MSC_VER // Microsoft Visual C++ // @@ -140,6 +147,8 @@ #include #include #include +#include +#include #include #include #include diff --git a/bundled/boost-1.62.0/include/boost/config/select_platform_config.hpp b/bundled/boost-1.62.0/include/boost/config/detail/select_platform_config.hpp similarity index 94% rename from bundled/boost-1.62.0/include/boost/config/select_platform_config.hpp rename to bundled/boost-1.62.0/include/boost/config/detail/select_platform_config.hpp index 62fd818b93..b36eca57a2 100644 --- a/bundled/boost-1.62.0/include/boost/config/select_platform_config.hpp +++ b/bundled/boost-1.62.0/include/boost/config/detail/select_platform_config.hpp @@ -53,8 +53,12 @@ // MacOS # define BOOST_PLATFORM_CONFIG "boost/config/platform/macos.hpp" +#elif defined(__TOS_MVS__) +// IBM z/OS +# define BOOST_PLATFORM_CONFIG "boost/config/platform/zos.hpp" + #elif defined(__IBMCPP__) || defined(_AIX) -// IBM +// IBM AIX # define BOOST_PLATFORM_CONFIG "boost/config/platform/aix.hpp" #elif defined(__amigaos__) @@ -97,7 +101,7 @@ # define BOOST_HAS_UNISTD_H # endif -# include +# include # endif @@ -122,6 +126,7 @@ # include "boost/config/platform/win32.hpp" # include "boost/config/platform/beos.hpp" # include "boost/config/platform/macos.hpp" +# include "boost/config/platform/zos.hpp" # include "boost/config/platform/aix.hpp" # include "boost/config/platform/amigaos.hpp" # include "boost/config/platform/qnxnto.hpp" @@ -129,7 +134,7 @@ # include "boost/config/platform/symbian.hpp" # include "boost/config/platform/cray.hpp" # include "boost/config/platform/vms.hpp" -# include +# include diff --git a/bundled/boost-1.62.0/include/boost/config/select_stdlib_config.hpp b/bundled/boost-1.62.0/include/boost/config/detail/select_stdlib_config.hpp similarity index 94% rename from bundled/boost-1.62.0/include/boost/config/select_stdlib_config.hpp rename to bundled/boost-1.62.0/include/boost/config/detail/select_stdlib_config.hpp index e270a8813a..8db778c86b 100644 --- a/bundled/boost-1.62.0/include/boost/config/select_stdlib_config.hpp +++ b/bundled/boost-1.62.0/include/boost/config/detail/select_stdlib_config.hpp @@ -66,6 +66,10 @@ // MSL standard lib: # define BOOST_STDLIB_CONFIG "boost/config/stdlib/msl.hpp" +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) && defined(__MVS__) +// IBM z/OS XL C/C++ +# define BOOST_STDLIB_CONFIG "boost/config/stdlib/xlcpp_zos.hpp" + #elif defined(__IBMCPP__) // take the default VACPP std lib # define BOOST_STDLIB_CONFIG "boost/config/stdlib/vacpp.hpp" @@ -98,6 +102,7 @@ # include "boost/config/stdlib/libstdcpp3.hpp" # include "boost/config/stdlib/sgi.hpp" # include "boost/config/stdlib/msl.hpp" +# include "boost/config/stdlib/xlcpp_zos.hpp" # include "boost/config/stdlib/vacpp.hpp" # include "boost/config/stdlib/modena.hpp" # include "boost/config/stdlib/dinkumware.hpp" diff --git a/bundled/boost-1.62.0/include/boost/config/suffix.hpp b/bundled/boost-1.62.0/include/boost/config/detail/suffix.hpp similarity index 94% rename from bundled/boost-1.62.0/include/boost/config/suffix.hpp rename to bundled/boost-1.62.0/include/boost/config/detail/suffix.hpp index eeaec2bf69..cee9647b6b 100644 --- a/bundled/boost-1.62.0/include/boost/config/suffix.hpp +++ b/bundled/boost-1.62.0/include/boost/config/detail/suffix.hpp @@ -537,25 +537,10 @@ namespace std{ using ::type_info; } // ---------------------------------------------------------------------------// -// // Helper macro BOOST_STRINGIZE: -// Converts the parameter X to a string after macro replacement -// on X has been performed. -// -#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) -#define BOOST_DO_STRINGIZE(X) #X - -// // Helper macro BOOST_JOIN: -// The following piece of macro magic joins the two -// arguments together, even when one of the arguments is -// itself a macro (see 16.3.1 in C++ standard). The key -// is that macro expansion of macro arguments does not -// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN. -// -#define BOOST_JOIN( X, Y ) BOOST_DO_JOIN( X, Y ) -#define BOOST_DO_JOIN( X, Y ) BOOST_DO_JOIN2(X,Y) -#define BOOST_DO_JOIN2( X, Y ) X##Y + +#include // // Set some default values for compiler/library/platform names. @@ -583,6 +568,33 @@ namespace std{ using ::type_info; } # define BOOST_GPU_ENABLED # endif +// BOOST_RESTRICT ---------------------------------------------// +// Macro to use in place of 'restrict' keyword variants +#if !defined(BOOST_RESTRICT) +# if defined(_MSC_VER) +# define BOOST_RESTRICT __restrict +# if !defined(BOOST_NO_RESTRICT_REFERENCES) && (_MSC_FULL_VER < 190023026) +# define BOOST_NO_RESTRICT_REFERENCES +# endif +# elif defined(__GNUC__) && __GNUC__ > 3 + // Clang also defines __GNUC__ (as 4) +# define BOOST_RESTRICT __restrict__ +# else +# define BOOST_RESTRICT +# if !defined(BOOST_NO_RESTRICT_REFERENCES) +# define BOOST_NO_RESTRICT_REFERENCES +# endif +# endif +#endif + +// BOOST_MAY_ALIAS -----------------------------------------------// +// The macro expands to an attribute to mark a type that is allowed to alias other types. +// The macro is defined in the compiler-specific headers. +#if !defined(BOOST_MAY_ALIAS) +# define BOOST_NO_MAY_ALIAS +# define BOOST_MAY_ALIAS +#endif + // BOOST_FORCEINLINE ---------------------------------------------// // Macro to use in place of 'inline' to force a function to be inline #if !defined(BOOST_FORCEINLINE) @@ -604,7 +616,7 @@ namespace std{ using ::type_info; } # elif defined(__GNUC__) && __GNUC__ > 3 // Clang also defines __GNUC__ (as 4) # if defined(__CUDACC__) - // nvcc doesn't always parse __noinline__, + // nvcc doesn't always parse __noinline__, // see: https://svn.boost.org/trac/boost/ticket/9392 # define BOOST_NOINLINE __attribute__ ((noinline)) # else @@ -624,7 +636,7 @@ namespace std{ using ::type_info; } # define BOOST_NORETURN __declspec(noreturn) # elif defined(__GNUC__) # define BOOST_NORETURN __attribute__ ((__noreturn__)) -# elif defined(__has_attribute) && defined(__SUNPRO_CC) +# elif defined(__has_attribute) && defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x5130) # if __has_attribute(noreturn) # define BOOST_NORETURN [[noreturn]] # endif @@ -657,15 +669,17 @@ namespace std{ using ::type_info; } // Type and data alignment specification // -#if !defined(BOOST_NO_CXX11_ALIGNAS) -# define BOOST_ALIGNMENT(x) alignas(x) -#elif defined(_MSC_VER) -# define BOOST_ALIGNMENT(x) __declspec(align(x)) -#elif defined(__GNUC__) -# define BOOST_ALIGNMENT(x) __attribute__ ((__aligned__(x))) -#else -# define BOOST_NO_ALIGNMENT -# define BOOST_ALIGNMENT(x) +#if !defined(BOOST_ALIGNMENT) +# if !defined(BOOST_NO_CXX11_ALIGNAS) +# define BOOST_ALIGNMENT(x) alignas(x) +# elif defined(_MSC_VER) +# define BOOST_ALIGNMENT(x) __declspec(align(x)) +# elif defined(__GNUC__) +# define BOOST_ALIGNMENT(x) __attribute__ ((__aligned__(x))) +# else +# define BOOST_NO_ALIGNMENT +# define BOOST_ALIGNMENT(x) +# endif #endif // Lack of non-public defaulted functions is implied by the lack of any defaulted functions @@ -673,6 +687,11 @@ namespace std{ using ::type_info; } # define BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS #endif +// Lack of defaulted moves is implied by the lack of either rvalue references or any defaulted functions +#if !defined(BOOST_NO_CXX11_DEFAULTED_MOVES) && (defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS) || defined(BOOST_NO_CXX11_RVALUE_REFERENCES)) +# define BOOST_NO_CXX11_DEFAULTED_MOVES +#endif + // Defaulted and deleted function declaration helpers // These macros are intended to be inside a class definition. // BOOST_DEFAULTED_FUNCTION accepts the function declaration and its @@ -1004,6 +1023,19 @@ namespace std{ using ::type_info; } # define BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS #endif +// This is a catch all case for obsolete compilers / std libs: +#if !defined(__has_include) +# define BOOST_NO_CXX17_HDR_OPTIONAL +# define BOOST_NO_CXX17_HDR_STRING_VIEW +#else +#if !__has_include() +# define BOOST_NO_CXX17_HDR_OPTIONAL +#endif +#if !__has_include() +# define BOOST_NO_CXX17_HDR_STRING_VIEW +#endif +#endif + // // Finish off with checks for macros that are depricated / no longer supported, // if any of these are set then it's very likely that much of Boost will no diff --git a/bundled/boost-1.62.0/include/boost/config/helper_macros.hpp b/bundled/boost-1.62.0/include/boost/config/helper_macros.hpp new file mode 100644 index 0000000000..3e79526df6 --- /dev/null +++ b/bundled/boost-1.62.0/include/boost/config/helper_macros.hpp @@ -0,0 +1,37 @@ +#ifndef BOOST_CONFIG_HELPER_MACROS_HPP_INCLUDED +#define BOOST_CONFIG_HELPER_MACROS_HPP_INCLUDED + +// Copyright 2001 John Maddock. +// Copyright 2017 Peter Dimov. +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt +// +// BOOST_STRINGIZE(X) +// BOOST_JOIN(X, Y) +// +// Note that this header is C compatible. + +// +// Helper macro BOOST_STRINGIZE: +// Converts the parameter X to a string after macro replacement +// on X has been performed. +// +#define BOOST_STRINGIZE(X) BOOST_DO_STRINGIZE(X) +#define BOOST_DO_STRINGIZE(X) #X + +// +// Helper macro BOOST_JOIN: +// The following piece of macro magic joins the two +// arguments together, even when one of the arguments is +// itself a macro (see 16.3.1 in C++ standard). The key +// is that macro expansion of macro arguments does not +// occur in BOOST_DO_JOIN2 but does in BOOST_DO_JOIN. +// +#define BOOST_JOIN(X, Y) BOOST_DO_JOIN(X, Y) +#define BOOST_DO_JOIN(X, Y) BOOST_DO_JOIN2(X,Y) +#define BOOST_DO_JOIN2(X, Y) X##Y + +#endif // BOOST_CONFIG_HELPER_MACROS_HPP_INCLUDED diff --git a/bundled/boost-1.62.0/include/boost/config/platform/aix.hpp b/bundled/boost-1.62.0/include/boost/config/platform/aix.hpp index 894ef42ce9..a48e232061 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/aix.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/aix.hpp @@ -26,7 +26,7 @@ //#define BOOST_HAS_PTHREAD_YIELD // boilerplate code: -#include +#include diff --git a/bundled/boost-1.62.0/include/boost/config/platform/beos.hpp b/bundled/boost-1.62.0/include/boost/config/platform/beos.hpp index 48c3d8dc5b..6158c1c20b 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/beos.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/beos.hpp @@ -20,7 +20,7 @@ #endif // boilerplate code: -#include +#include diff --git a/bundled/boost-1.62.0/include/boost/config/platform/bsd.hpp b/bundled/boost-1.62.0/include/boost/config/platform/bsd.hpp index a0142978eb..79e74a080a 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/bsd.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/bsd.hpp @@ -77,7 +77,7 @@ // boilerplate code: #define BOOST_HAS_UNISTD_H -#include +#include diff --git a/bundled/boost-1.62.0/include/boost/config/platform/cray.hpp b/bundled/boost-1.62.0/include/boost/config/platform/cray.hpp index 5c476e4160..103e9c0620 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/cray.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/cray.hpp @@ -12,7 +12,7 @@ // boilerplate code: #define BOOST_HAS_UNISTD_H -#include +#include diff --git a/bundled/boost-1.62.0/include/boost/config/platform/cygwin.hpp b/bundled/boost-1.62.0/include/boost/config/platform/cygwin.hpp index b7ef572fa6..d0052d8b45 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/cygwin.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/cygwin.hpp @@ -23,7 +23,7 @@ # define BOOST_HAS_SCHED_YIELD # define BOOST_HAS_GETTIMEOFDAY # define BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE -# define BOOST_HAS_SIGACTION +//# define BOOST_HAS_SIGACTION #else # if !defined(BOOST_HAS_WINTHREADS) # define BOOST_HAS_WINTHREADS @@ -38,12 +38,26 @@ #ifdef _STDINT_H #define BOOST_HAS_STDINT_H #endif +#if __GNUC__ > 5 && !defined(BOOST_HAS_STDINT_H) +# define BOOST_HAS_STDINT_H +#endif +#include +#if (CYGWIN_VERSION_API_MAJOR == 0 && CYGWIN_VERSION_API_MINOR < 231) /// Cygwin has no fenv.h #define BOOST_NO_FENV_H +#endif + +// Cygwin has it's own which breaks unless the correct compiler flags are used: +#ifndef BOOST_NO_CXX14_HDR_SHARED_MUTEX +#include +#if !(__XSI_VISIBLE >= 500 || __POSIX_VISIBLE >= 200112) +# define BOOST_NO_CXX14_HDR_SHARED_MUTEX +#endif +#endif // boilerplate code: -#include +#include // // Cygwin lies about XSI conformance, there is no nl_types.h: @@ -51,7 +65,6 @@ #ifdef BOOST_HAS_NL_TYPES_H # undef BOOST_HAS_NL_TYPES_H #endif - diff --git a/bundled/boost-1.62.0/include/boost/config/platform/haiku.hpp b/bundled/boost-1.62.0/include/boost/config/platform/haiku.hpp index 750866c47d..04244c5677 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/haiku.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/haiku.hpp @@ -28,4 +28,4 @@ #define BOOST_HAS_GETTIMEOFDAY // boilerplate code: -#include +#include diff --git a/bundled/boost-1.62.0/include/boost/config/platform/hpux.hpp b/bundled/boost-1.62.0/include/boost/config/platform/hpux.hpp index 19ce68e597..222622e7ee 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/hpux.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/hpux.hpp @@ -43,7 +43,7 @@ // boilerplate code: #define BOOST_HAS_UNISTD_H -#include +#include // the following are always available: #ifndef BOOST_HAS_GETTIMEOFDAY diff --git a/bundled/boost-1.62.0/include/boost/config/platform/irix.hpp b/bundled/boost-1.62.0/include/boost/config/platform/irix.hpp index aeae49c8b4..0acb651552 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/irix.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/irix.hpp @@ -25,7 +25,7 @@ // boilerplate code: #define BOOST_HAS_UNISTD_H -#include +#include diff --git a/bundled/boost-1.62.0/include/boost/config/platform/linux.hpp b/bundled/boost-1.62.0/include/boost/config/platform/linux.hpp index 8c43c7b6d3..c4eef8f80c 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/linux.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/linux.hpp @@ -24,8 +24,9 @@ #if defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 1))) // defines int64_t unconditionally, but defines // int64_t only if __GNUC__. Thus, assume a fully usable - // only when using GCC. -# if defined __GNUC__ + // only when using GCC. Update 2017: this appears not to be the case for + // recent glibc releases, see bug report: https://svn.boost.org/trac/boost/ticket/13045 +# if defined(__GNUC__) || ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 5))) # define BOOST_HAS_STDINT_H # endif #endif @@ -71,7 +72,7 @@ // boilerplate code: #define BOOST_HAS_UNISTD_H -#include +#include #if defined(__USE_GNU) && !defined(__ANDROID__) && !defined(ANDROID) #define BOOST_HAS_PTHREAD_YIELD #endif diff --git a/bundled/boost-1.62.0/include/boost/config/platform/macos.hpp b/bundled/boost-1.62.0/include/boost/config/platform/macos.hpp index 5be4e3b3da..ed7dc15f28 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/macos.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/macos.hpp @@ -25,7 +25,7 @@ // to replace the platform-native BSD one. G++ users // should also always be able to do this on MaxOS X. // -# include +# include # ifndef BOOST_HAS_STDINT_H # define BOOST_HAS_STDINT_H # endif diff --git a/bundled/boost-1.62.0/include/boost/config/platform/qnxnto.hpp b/bundled/boost-1.62.0/include/boost/config/platform/qnxnto.hpp index b1377c8d2c..d0298cb4ec 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/qnxnto.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/qnxnto.hpp @@ -10,7 +10,7 @@ #define BOOST_PLATFORM "QNX" #define BOOST_HAS_UNISTD_H -#include +#include // QNX claims XOpen version 5 compatibility, but doesn't have an nl_types.h // or log1p and expm1: diff --git a/bundled/boost-1.62.0/include/boost/config/platform/solaris.hpp b/bundled/boost-1.62.0/include/boost/config/platform/solaris.hpp index 6e4efc9e56..51ffe67f33 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/solaris.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/solaris.hpp @@ -14,7 +14,7 @@ // boilerplate code: #define BOOST_HAS_UNISTD_H -#include +#include // // pthreads don't actually work with gcc unless _PTHREADS is defined: diff --git a/bundled/boost-1.62.0/include/boost/config/platform/symbian.hpp b/bundled/boost-1.62.0/include/boost/config/platform/symbian.hpp index e02a7782de..f814d00b5b 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/symbian.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/symbian.hpp @@ -24,7 +24,7 @@ #include #endif// boilerplate code: # define BOOST_HAS_UNISTD_H -# include +# include // S60 SDK defines _POSIX_VERSION as POSIX.1 # ifndef BOOST_HAS_STDINT_H # define BOOST_HAS_STDINT_H diff --git a/bundled/boost-1.62.0/include/boost/config/platform/vxworks.hpp b/bundled/boost-1.62.0/include/boost/config/platform/vxworks.hpp index cdda0158ad..a91e4ab439 100644 --- a/bundled/boost-1.62.0/include/boost/config/platform/vxworks.hpp +++ b/bundled/boost-1.62.0/include/boost/config/platform/vxworks.hpp @@ -1,30 +1,50 @@ // (C) Copyright Dustin Spicuzza 2009. // Adapted to vxWorks 6.9 by Peter Brockamp 2012. +// Updated for VxWorks 7 by Brian Kuhl 2016 // Use, modification and distribution are subject to the // Boost Software License, Version 1.0. (See accompanying file // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // See http://www.boost.org for most recent version. -// Since WRS does not yet properly support boost under vxWorks -// and this file was badly outdated, but I was keen on using it, -// I patched boost myself to make things work. This has been tested -// and adapted by me for vxWorks 6.9 *only*, as I'm lacking access -// to earlier 6.X versions! The only thing I know for sure is that -// very old versions of vxWorks (namely everything below 6.x) are -// absolutely unable to use boost. This is mainly due to the completely -// outdated libraries and ancient compiler (GCC 2.96 or worse). Do -// not even think of getting this to work, a miserable failure will -// be guaranteed! +// Old versions of vxWorks (namely everything below 6.x) are +// absolutely unable to use boost. Old STLs and compilers +// like (GCC 2.96) . Do not even think of getting this to work, +// a miserable failure will be guaranteed! +// // Equally, this file has been tested for RTPs (Real Time Processes) // only, not for DKMs (Downloadable Kernel Modules). These two types // of executables differ largely in the available functionality of -// the C-library, STL, and so on. A DKM uses a library similar to those -// of vxWorks 5.X - with all its limitations and incompatibilities -// with respect to ANSI C++ and STL. So probably there might be problems -// with the usage of boost from DKMs. WRS or any voluteers are free to -// prove the opposite! - +// the C-library, STL, and so on. A DKM uses a C89 library with no +// wide character support and no guarantee of ANSI C. The same Dinkum +// STL library is used in both contexts. +// +// Similarly the Dinkum abridged STL that supports the loosely specified +// embedded C++ standard has not been tested and is unlikely to work +// on anything but the simplest library. +// ==================================================================== +// +// Additional Configuration +// ------------------------------------------------------------------- +// +// Because of the ordering of include files and other issues the following +// additional definitions worked better outside this file. +// +// When building the log library add the following to the b2 invocation +// define=BOOST_LOG_WITHOUT_IPC +// and +// -DBOOST_LOG_WITHOUT_DEFAULT_FACTORIES +// to your compile options. +// +// When building the test library add +// -DBOOST_TEST_LIMITED_SIGNAL_DETAILS +// to your compile options +// +// When building containers library add +// -DHAVE_MORECORE=0 +// to your c compile options so dlmalloc heap library is compiled +// without brk() calls +// // ==================================================================== // // Some important information regarding the usage of POSIX semaphores: @@ -38,29 +58,14 @@ // Now, VxWorks POSIX-semaphores for DKM's default to the usage of // priority inverting semaphores, which is fine. On the other hand, // for RTP's it defaults to using non priority inverting semaphores, -// which could easily pose a serious problem for a real time process, -// i.e. deadlocks! To overcome this two possibilities do exist: +// which could easily pose a serious problem for a real time process. // -// a) Patch every piece of boost that uses semaphores to instanciate -// the proper type of semaphores. This is non-intrusive with respect -// to the OS and could relatively easy been done by giving all -// semaphores attributes deviating from the default (for in-depth -// information see the POSIX functions pthread_mutexattr_init() -// and pthread_mutexattr_setprotocol()). However this breaks all -// too easily, as with every new version some boost library could -// all in a sudden start using semaphores, resurrecting the very -// same, hard to locate problem over and over again! -// -// b) We could change the default properties for POSIX-semaphores -// that VxWorks uses for RTP's and this is being suggested here, -// as it will more or less seamlessly integrate with boost. I got -// the following information from WRS how to do this, compare -// Wind River TSR# 1209768: -// -// Instructions for changing the default properties of POSIX- -// semaphores for RTP's in VxWorks 6.9: -// - Edit the file /vxworks-6.9/target/usr/src/posix/pthreadLib.c -// in the root of your Workbench-installation. +// To change the default properties for POSIX-semaphores in VxWorks 7 +// enable core > CORE_USER Menu > DEFAULT_PTHREAD_PRIO_INHERIT +// +// In VxWorks 6.x so as to integrate with boost. +// - Edit the file +// installDir/vxworks-6.x/target/usr/src/posix/pthreadLib.c // - Around line 917 there should be the definition of the default // mutex attributes: // @@ -81,30 +86,11 @@ // pAttr->mutexAttrType = PTHREAD_MUTEX_DEFAULT; // // Here again, replace PTHREAD_PRIO_NONE by PTHREAD_PRIO_INHERIT. -// - Finally, rebuild your VSB. This will create a new VxWorks kernel +// - Finally, rebuild your VSB. This will rebuild the libraries // with the changed properties. That's it! Now, using boost should // no longer cause any problems with task deadlocks! // -// And here's another useful piece of information concerning VxWorks' -// POSIX-functionality in general: -// VxWorks is not a genuine POSIX-OS in itself, rather it is using a -// kind of compatibility layer (sort of a wrapper) to emulate the -// POSIX-functionality by using its own resources and functions. -// At the time a task (thread) calls it's first POSIX-function during -// runtime it is being transformed by the OS into a POSIX-thread. -// This transformation does include a call to malloc() to allocate the -// memory required for the housekeeping of POSIX-threads. In a high -// priority RTP this malloc() call may be highly undesirable, as its -// timing is more or less unpredictable (depending on what your actual -// heap looks like). You can circumvent this problem by calling the -// function thread_self() at a well defined point in the code of the -// task, e.g. shortly after the task spawns up. Thereby you are able -// to define the time when the task-transformation will take place and -// you could shift it to an uncritical point where a malloc() call is -// tolerable. So, if this could pose a problem for your code, remember -// to call thread_self() from the affected task at an early stage. -// -// ==================================================================== +// ==================================================================== // Block out all versions before vxWorks 6.x, as these don't work: // Include header with the vxWorks version information and query them @@ -158,11 +144,6 @@ #define BOOST_HAS_CLOCK_GETTIME #define BOOST_HAS_MACRO_USE_FACET -// Generally unavailable functionality, delivered by boost's test function: -//#define BOOST_NO_DEDUCED_TYPENAME // Commented this out, boost's test gives an errorneous result! -#define BOOST_NO_CXX11_EXTERN_TEMPLATE -#define BOOST_NO_CXX11_VARIADIC_MACROS - // Generally available threading API's: #define BOOST_HAS_PTHREADS #define BOOST_HAS_SCHED_YIELD @@ -180,7 +161,7 @@ // Luckily, at the moment there seems to be none! #endif -// These #defines allow posix_features to work, since vxWorks doesn't +// These #defines allow detail/posix_features to work, since vxWorks doesn't // #define them itself for DKMs (for RTPs on the contrary it does): #ifdef _WRS_KERNEL # ifndef _POSIX_TIMERS @@ -191,14 +172,7 @@ # endif #endif -// vxWorks doesn't work with asio serial ports: -#define BOOST_ASIO_DISABLE_SERIAL_PORT -// TODO: The problem here seems to bee that vxWorks uses its own, very specific -// ways to handle serial ports, incompatible with POSIX or anything... -// Maybe a specific implementation would be possible, but until the -// straight need arises... This implementation would presumably consist -// of some vxWorks specific ioctl-calls, etc. Any voluteers? - +#if (_WRS_VXWORKS_MAJOR < 7) // vxWorks-around: #defines CLOCKS_PER_SEC as sysClkRateGet() but // miserably fails to #include the required to make // sysClkRateGet() available! So we manually include it here. @@ -208,11 +182,12 @@ #endif // vxWorks-around: In the macros INT32_C(), UINT32_C(), INT64_C() and -// UINT64_C() are defined errorneously, yielding not a signed/ +// UINT64_C() are defined erroneously, yielding not a signed/ // unsigned long/long long type, but a signed/unsigned int/long // type. Eventually this leads to compile errors in ratio_fwd.hpp, // when trying to define several constants which do not fit into a // long type! We correct them here by redefining. + #include // Some macro-magic to do the job @@ -231,12 +206,16 @@ #define UINT64_C(x) VX_JOIN(x, ULL) // #include Libraries required for the following function adaption +#include +#endif // _WRS_VXWORKS_MAJOR < 7 + #include #include -#include // Use C-linkage for the following helper functions +#ifdef __cplusplus extern "C" { +#endif // vxWorks-around: The required functions getrlimit() and getrlimit() are missing. // But we have the similar functions getprlimit() and setprlimit(), @@ -248,7 +227,7 @@ extern "C" { // TODO: getprlimit() and setprlimit() do exist for RTPs only, for whatever reason. // Thus for DKMs there would have to be another implementation. -#ifdef __RTP__ +#if defined ( __RTP__) && (_WRS_VXWORKS_MAJOR < 7) inline int getrlimit(int resource, struct rlimit *rlp){ return getprlimit(0, 0, resource, rlp); } @@ -273,23 +252,27 @@ inline int truncate(const char *p, off_t l){ return close(fd); } +#ifdef __GNUC__ +#define ___unused __attribute__((unused)) +#else +#define ___unused +#endif + // Fake symlink handling by dummy functions: -inline int symlink(const char*, const char*){ +inline int symlink(const char* path1 ___unused, const char* path2 ___unused){ // vxWorks has no symlinks -> always return an error! errno = EACCES; return -1; } -inline ssize_t readlink(const char*, char*, size_t){ +inline ssize_t readlink(const char* path1 ___unused, char* path2 ___unused, size_t size ___unused){ // vxWorks has no symlinks -> always return an error! errno = EACCES; return -1; } -// vxWorks claims to implement gettimeofday in sys/time.h -// but nevertheless does not provide it! See -// https://support.windriver.com/olsPortal/faces/maintenance/techtipDetail_noHeader.jspx?docId=16442&contentId=WR_TECHTIP_006256 -// We implement a surrogate version here via clock_gettime: +#if (_WRS_VXWORKS_MAJOR < 7) + inline int gettimeofday(struct timeval *tv, void * /*tzv*/) { struct timespec ts; clock_gettime(CLOCK_MONOTONIC, &ts); @@ -297,8 +280,20 @@ inline int gettimeofday(struct timeval *tv, void * /*tzv*/) { tv->tv_usec = ts.tv_nsec / 1000; return 0; } +#endif + +#ifdef __cplusplus +} // extern "C" +#endif + +/* + * moved to os/utils/unix/freind_h/times.h in VxWorks 7 + * to avoid conflict with MPL operator times + */ +#if (_WRS_VXWORKS_MAJOR < 7) +#ifdef __cplusplus -// vxWorks does provide neither struct tms nor function times()! +// vxWorks provides neither struct tms nor function times()! // We implement an empty dummy-function, simply setting the user // and system time to the half of thew actual system ticks-value // and the child user and system time to 0. @@ -315,7 +310,8 @@ struct tms{ clock_t tms_cstime; // System CPU time of terminated child processes }; -inline clock_t times(struct tms *t){ + + inline clock_t times(struct tms *t){ struct timespec ts; clock_gettime(CLOCK_THREAD_CPUTIME_ID, &ts); clock_t ticks(static_cast(static_cast(ts.tv_sec) * CLOCKS_PER_SEC + @@ -327,7 +323,16 @@ inline clock_t times(struct tms *t){ return ticks; } -} // extern "C" + +namespace std { + using ::times; +} +#endif // __cplusplus +#endif // _WRS_VXWORKS_MAJOR < 7 + + +#ifdef __cplusplus +extern "C" void bzero (void *, size_t); // FD_ZERO uses bzero() but doesn't include strings.h // Put the selfmade functions into the std-namespace, just in case namespace std { @@ -338,9 +343,11 @@ namespace std { using ::truncate; using ::symlink; using ::readlink; - using ::times; - using ::gettimeofday; +#if (_WRS_VXWORKS_MAJOR < 7) + using ::gettimeofday; +#endif } +#endif // __cplusplus // Some more macro-magic: // vxWorks-around: Some functions are not present or broken in vxWorks @@ -348,22 +355,79 @@ namespace std { // Include signal.h which might contain a typo to be corrected here #include - +#if (_WRS_VXWORKS_MAJOR < 7) #define getpagesize() sysconf(_SC_PAGESIZE) // getpagesize is deprecated anyway! +inline int lstat(p, b) { return stat(p, b); } // lstat() == stat(), as vxWorks has no symlinks! +#endif #ifndef S_ISSOCK # define S_ISSOCK(mode) ((mode & S_IFMT) == S_IFSOCK) // Is file a socket? #endif -#define lstat(p, b) stat(p, b) // lstat() == stat(), as vxWorks has no symlinks! #ifndef FPE_FLTINV # define FPE_FLTINV (FPE_FLTSUB+1) // vxWorks has no FPE_FLTINV, so define one as a dummy #endif #if !defined(BUS_ADRALN) && defined(BUS_ADRALNR) # define BUS_ADRALN BUS_ADRALNR // Correct a supposed typo in vxWorks' #endif -//typedef int locale_t; // locale_t is a POSIX-extension, currently unpresent in vxWorks! +typedef int locale_t; // locale_t is a POSIX-extension, currently not present in vxWorks! // #include boilerplate code: -#include +#include // vxWorks lies about XSI conformance, there is no nl_types.h: #undef BOOST_HAS_NL_TYPES_H + +// vxWorks 7 adds C++11 support +// however it is optional, and does not match exactly the support determined +// by examining the Dinkum STL version and GCC version (or ICC and DCC) +#ifndef _WRS_CONFIG_LANG_LIB_CPLUS_CPLUS_USER_2011 +# define BOOST_NO_CXX11_ADDRESSOF // C11 addressof operator on memory location +# define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_ATOMIC_SMART_PTR +# define BOOST_NO_CXX11_NUMERIC_LIMITS // max_digits10 in test/../print_helper.hpp +# define BOOST_NO_CXX11_SMART_PTR +# define BOOST_NO_CXX11_STD_ALIGN + + +# define BOOST_NO_CXX11_HDR_ARRAY +# define BOOST_NO_CXX11_HDR_ATOMIC +# define BOOST_NO_CXX11_HDR_CHRONO +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_FORWARD_LIST //serialization/test/test_list.cpp +# define BOOST_NO_CXX11_HDR_FUNCTIONAL +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_RANDOM //math/../test_data.hpp +# define BOOST_NO_CXX11_HDR_RATIO +# define BOOST_NO_CXX11_HDR_REGEX +# define BOOST_NO_CXX14_HDR_SHARED_MUTEX +# define BOOST_NO_CXX11_HDR_SYSTEM_ERROR +# define BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_TYPEINDEX +# define BOOST_NO_CXX11_HDR_TYPE_TRAITS +# define BOOST_NO_CXX11_HDR_TUPLE +# define BOOST_NO_CXX11_HDR_UNORDERED_MAP +# define BOOST_NO_CXX11_HDR_UNORDERED_SET +#else +#ifndef BOOST_SYSTEM_NO_DEPRECATED +# define BOOST_SYSTEM_NO_DEPRECATED // workaround link error in spirit +#endif +#endif + + +// NONE is used in enums in lamda and other libraries +#undef NONE +// restrict is an iostreams class +#undef restrict + +// use fake poll() from Unix layer in ASIO to get full functionality +// most libraries will use select() but this define allows 'iostream' functionality +// which is based on poll() only +#if (_WRS_VXWORKS_MAJOR > 6) +# ifndef BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR +# define BOOST_ASIO_HAS_POSIX_STREAM_DESCRIPTOR +# endif +#else +# define BOOST_ASIO_DISABLE_SERIAL_PORT +#endif + + diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/dinkumware.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/dinkumware.hpp index 293a17675f..e829f08e51 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/dinkumware.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/dinkumware.hpp @@ -96,7 +96,8 @@ #include #endif #include -#if ( (!_HAS_EXCEPTIONS && !defined(__ghs__)) || (!_HAS_NAMESPACE && defined(__ghs__)) ) && !defined(__TI_COMPILER_VERSION__) && !defined(__VISUALDSPVERSION__) +#if ( (!_HAS_EXCEPTIONS && !defined(__ghs__)) || (defined(__ghs__) && !_HAS_NAMESPACE) ) && !defined(__TI_COMPILER_VERSION__) && !defined(__VISUALDSPVERSION__) \ + && !defined(__VXWORKS__) # define BOOST_NO_STD_TYPEINFO #endif @@ -147,16 +148,42 @@ # define BOOST_NO_CXX11_STD_ALIGN #endif +// Before 650 std::pointer_traits has a broken rebind template +#if !defined(_CPPLIB_VER) || _CPPLIB_VER < 650 +# define BOOST_NO_CXX11_POINTER_TRAITS +#elif defined(BOOST_MSVC) && BOOST_MSVC < 1910 +# define BOOST_NO_CXX11_POINTER_TRAITS +#endif + #if defined(__has_include) #if !__has_include() # define BOOST_NO_CXX14_HDR_SHARED_MUTEX -#elif __cplusplus < 201402 +#elif (__cplusplus < 201402) && !defined(_MSC_VER) # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif #elif !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +#if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) +# define BOOST_NO_CXX14_STD_EXCHANGE +#endif + +// C++17 features +#if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) || !defined(BOOST_MSVC) || (BOOST_MSVC < 1910) || !defined(_HAS_CXX17) || (_HAS_CXX17 == 0) +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_ITERATOR_TRAITS +#endif +#if !defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) || !defined(_HAS_CXX17) || (_HAS_CXX17 == 0) || !defined(_MSVC_STL_UPDATE) || (_MSVC_STL_UPDATE < 201709) +# define BOOST_NO_CXX17_STD_INVOKE +#endif + +#if !(!defined(_CPPLIB_VER) || (_CPPLIB_VER < 650) || !defined(BOOST_MSVC) || (BOOST_MSVC < 1912) || !defined(_HAS_CXX17) || (_HAS_CXX17 == 0)) +// Deprecated std::iterator: +# define BOOST_NO_STD_ITERATOR +#endif + #if defined(BOOST_INTEL) && (BOOST_INTEL <= 1400) // Intel's compiler can't handle this header yet: # define BOOST_NO_CXX11_HDR_ATOMIC @@ -177,14 +204,47 @@ #endif #if defined(_CPPLIB_VER) && (_CPPLIB_VER >= 650) -// If _HAS_AUTO_PTR_ETC is defined to 0, std::auto_ptr is not available. +// If _HAS_AUTO_PTR_ETC is defined to 0, std::auto_ptr and std::random_shuffle are not available. // See https://www.visualstudio.com/en-us/news/vs2015-vs.aspx#C++ // and http://blogs.msdn.com/b/vcblog/archive/2015/06/19/c-11-14-17-features-in-vs-2015-rtm.aspx -# if defined(_HAS_AUTO_PTR_ETC) && (_HAS_AUTO_PTR_ETC == 0) && !defined BOOST_NO_AUTO_PTR +# if defined(_HAS_AUTO_PTR_ETC) && (_HAS_AUTO_PTR_ETC == 0) # define BOOST_NO_AUTO_PTR +# define BOOST_NO_CXX98_RANDOM_SHUFFLE +# define BOOST_NO_CXX98_FUNCTION_BASE +# define BOOST_NO_CXX98_BINDERS # endif #endif + +// +// Things not supported by the CLR: +#ifdef _M_CEE +#ifndef BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_MUTEX +#endif +#ifndef BOOST_NO_CXX11_HDR_ATOMIC +# define BOOST_NO_CXX11_HDR_ATOMIC +#endif +#ifndef BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_FUTURE +#endif +#ifndef BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +#endif +#ifndef BOOST_NO_CXX11_HDR_THREAD +# define BOOST_NO_CXX11_HDR_THREAD +#endif +#ifndef BOOST_NO_CXX14_HDR_SHARED_MUTEX +# define BOOST_NO_CXX14_HDR_SHARED_MUTEX +#endif +#ifndef BOOST_NO_CXX14_STD_EXCHANGE +# define BOOST_NO_CXX14_STD_EXCHANGE +#endif +#ifndef BOOST_NO_FENV_H +# define BOOST_NO_FENV_H +#endif +#endif + #ifdef _CPPLIB_VER # define BOOST_DINKUMWARE_STDLIB _CPPLIB_VER #else diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/libcomo.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/libcomo.hpp index 941498d076..75ac2bb76a 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/libcomo.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/libcomo.hpp @@ -55,6 +55,7 @@ # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL @@ -72,6 +73,14 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + +// C++17 features +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_STD_INVOKE +# define BOOST_NO_CXX17_ITERATOR_TRAITS + // // Intrinsic type_traits support. // The SGI STL has it's own __type_traits class, which diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/libcpp.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/libcpp.hpp index 096b8c0de2..ffe2f2a0f5 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/libcpp.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/libcpp.hpp @@ -29,13 +29,18 @@ // aliases since members rebind_alloc and rebind_traits require it. #if defined(_LIBCPP_HAS_NO_TEMPLATE_ALIASES) # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS #endif #if __cplusplus < 201103 -# define BOOST_NO_CXX11_HDR_ARRAY +// +// These two appear to be somewhat useable in C++03 mode, there may be others... +// +//# define BOOST_NO_CXX11_HDR_ARRAY +//# define BOOST_NO_CXX11_HDR_FORWARD_LIST + # define BOOST_NO_CXX11_HDR_CODECVT # define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE -# define BOOST_NO_CXX11_HDR_FORWARD_LIST # define BOOST_NO_CXX11_HDR_INITIALIZER_LIST # define BOOST_NO_CXX11_HDR_MUTEX # define BOOST_NO_CXX11_HDR_RANDOM @@ -49,6 +54,7 @@ # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL # define BOOST_NO_CXX11_STD_ALIGN @@ -75,6 +81,30 @@ #define BOOST_NO_STD_MESSAGES #endif +// C++14 features +#if (_LIBCPP_VERSION < 3700) || (__cplusplus <= 201402L) +# define BOOST_NO_CXX14_STD_EXCHANGE +#endif + +// C++17 features +#if (_LIBCPP_VERSION < 4000) || (__cplusplus <= 201402L) +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_HDR_OPTIONAL +# define BOOST_NO_CXX17_HDR_STRING_VIEW +#endif +#if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR) +# define BOOST_NO_AUTO_PTR +#endif +#if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_RANDOM_SHUFFLE) +# define BOOST_NO_CXX98_RANDOM_SHUFFLE +#endif +#if (_LIBCPP_VERSION > 4000) && (__cplusplus > 201402L) && !defined(_LIBCPP_ENABLE_CXX17_REMOVED_BINDERS) +# define BOOST_NO_CXX98_BINDERS +#endif + +#define BOOST_NO_CXX17_ITERATOR_TRAITS +#define BOOST_NO_CXX17_STD_INVOKE // Invoke support is incomplete (no invoke_result) + #if (_LIBCPP_VERSION <= 1101) && !defined(BOOST_NO_CXX11_THREAD_LOCAL) // This is a bit of a sledgehammer, because really it's just libc++abi that has no // support for thread_local, leading to linker errors such as @@ -83,6 +113,19 @@ # define BOOST_NO_CXX11_THREAD_LOCAL #endif +#if defined(__linux__) && (_LIBCPP_VERSION < 6000) && !defined(BOOST_NO_CXX11_THREAD_LOCAL) +// After libc++-dev is installed on Trusty, clang++-libc++ almost works, +// except uses of `thread_local` fail with undefined reference to +// `__cxa_thread_atexit`. +// +// clang's libc++abi provides an implementation by deferring to the glibc +// implementation, which may or may not be available (it is not on Trusty). +// clang 4's libc++abi will provide an implementation if one is not in glibc +// though, so thread local support should work with clang 4 and above as long +// as libc++abi is linked in. +# define BOOST_NO_CXX11_THREAD_LOCAL +#endif + #if defined(__has_include) #if !__has_include() # define BOOST_NO_CXX14_HDR_SHARED_MUTEX @@ -93,4 +136,8 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +#if !defined(BOOST_NO_CXX14_HDR_SHARED_MUTEX) && (_LIBCPP_VERSION < 5000) +# define BOOST_NO_CXX14_HDR_SHARED_MUTEX +#endif + // --- end --- diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/libstdcpp3.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/libstdcpp3.hpp index 1d8f6ccbce..38209ddd45 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/libstdcpp3.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/libstdcpp3.hpp @@ -78,6 +78,7 @@ # include #endif +#ifndef __VXWORKS__ // VxWorks uses Dinkum, not GNU STL with GCC #if defined(__GLIBCXX__) || (defined(__GLIBCPP__) && __GLIBCPP__>=20020514) // GCC >= 3.1.0 # define BOOST_STD_EXTENSION_NAMESPACE __gnu_cxx # define BOOST_HAS_SLIST @@ -91,6 +92,7 @@ # define BOOST_HASH_MAP_HEADER # endif #endif +#endif // // Decide whether we have C++11 support turned on: @@ -98,10 +100,11 @@ #if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103) # define BOOST_LIBSTDCXX11 #endif + // // Decide which version of libstdc++ we have, normally -// stdlibc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly -// __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the stdlibc++ +// libstdc++ C++0x support is detected via __GNUC__, __GNUC_MINOR__, and possibly +// __GNUC_PATCHLEVEL__ at the suggestion of Jonathan Wakely, one of the libstdc++ // developers. He also commented: // // "I'm not sure how useful __GLIBCXX__ is for your purposes, for instance in @@ -109,7 +112,7 @@ // Although 4.3.0 was released earlier than 4.2.4, it has better C++0x support // than any release in the 4.2 series." // -// Another resource for understanding stdlibc++ features is: +// Another resource for understanding libstdc++ features is: // http://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#manual.intro.status.standard.200x // // However, using the GCC version number fails when the compiler is clang since this @@ -122,7 +125,9 @@ // #ifdef __clang__ -#if __has_include() +#if __has_include() +# define BOOST_LIBSTDCXX_VERSION 60100 +#elif __has_include() # define BOOST_LIBSTDCXX_VERSION 50100 #elif __has_include() # define BOOST_LIBSTDCXX_VERSION 40900 @@ -139,6 +144,38 @@ #elif __has_include() # define BOOST_LIBSTDCXX_VERSION 40300 #endif + +#if (BOOST_LIBSTDCXX_VERSION < 50100) +// libstdc++ does not define this function as it's deprecated in C++11, but clang still looks for it, +// defining it here is a terrible cludge, but should get things working: +extern "C" char *gets (char *__s); +#endif +// +// clang is unable to parse some GCC headers, add those workarounds here: +// +#if BOOST_LIBSTDCXX_VERSION < 50000 +# define BOOST_NO_CXX11_HDR_REGEX +#endif +// +// GCC 4.7.x has no __cxa_thread_atexit which +// thread_local objects require for cleanup: +// +#if BOOST_LIBSTDCXX_VERSION < 40800 +# define BOOST_NO_CXX11_THREAD_LOCAL +#endif +// +// Early clang versions can handle , not exactly sure which versions +// but certainly up to clang-3.8 and gcc-4.6: +// +#if (__clang_major__ < 5) +# if BOOST_LIBSTDCXX_VERSION < 40800 +# define BOOST_NO_CXX11_HDR_FUTURE +# define BOOST_NO_CXX11_HDR_MUTEX +# define BOOST_NO_CXX11_HDR_CONDITION_VARIABLE +# define BOOST_NO_CXX11_HDR_CHRONO +# endif +#endif + // // GCC 4.8 and 9 add working versions of and respectively. // However, we have no test for these as the headers were present but broken @@ -212,15 +249,17 @@ #if (BOOST_LIBSTDCXX_VERSION < 40600) || !defined(BOOST_LIBSTDCXX11) # define BOOST_NO_CXX11_HDR_TYPEINDEX # define BOOST_NO_CXX11_ADDRESSOF +# define BOOST_NO_CXX17_ITERATOR_TRAITS #endif // C++0x features in GCC 4.7.0 and later // #if (BOOST_LIBSTDCXX_VERSION < 40700) || !defined(BOOST_LIBSTDCXX11) // Note that although existed prior to 4.7, "steady_clock" is spelled "monotonic_clock" -// so 4.7.0 is the first truely conforming one. +// so 4.7.0 is the first truly conforming one. # define BOOST_NO_CXX11_HDR_CHRONO # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS #endif // C++0x features in GCC 4.8.0 and later // @@ -236,6 +275,9 @@ // even for the simplest patterns such as "\d" or "[0-9]". This is the case at least in gcc up to 4.8, inclusively. # define BOOST_NO_CXX11_HDR_REGEX #endif +#if (BOOST_LIBSTDCXX_VERSION < 40900) || (__cplusplus <= 201103) +# define BOOST_NO_CXX14_STD_EXCHANGE +#endif #if defined(__clang_major__) && ((__clang_major__ < 3) || ((__clang_major__ == 3) && (__clang_minor__ < 7))) // As of clang-3.6, libstdc++ header throws up errors with clang: @@ -251,6 +293,16 @@ # define BOOST_NO_CXX11_STD_ALIGN #endif +// +// C++17 features in GCC 7.1 and later +// +#if (BOOST_LIBSTDCXX_VERSION < 70100) || (__cplusplus <= 201402L) +# define BOOST_NO_CXX17_STD_INVOKE +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_HDR_OPTIONAL +# define BOOST_NO_CXX17_HDR_STRING_VIEW +#endif + #if defined(__has_include) #if !__has_include() # define BOOST_NO_CXX14_HDR_SHARED_MUTEX diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/modena.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/modena.hpp index 7a85e0cd57..81919e0180 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/modena.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/modena.hpp @@ -44,6 +44,7 @@ # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL @@ -61,6 +62,14 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + +// C++17 features +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_STD_INVOKE +# define BOOST_NO_CXX17_ITERATOR_TRAITS + #define BOOST_STDLIB "Modena C++ standard library" diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/msl.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/msl.hpp index dd2775e10c..0e2e2afee8 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/msl.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/msl.hpp @@ -34,7 +34,7 @@ # define BOOST_HAS_UNISTD_H # endif // boilerplate code: -# include +# include #endif #if defined(_MWMT) || _MSL_THREADSAFE @@ -68,6 +68,7 @@ # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL @@ -85,4 +86,12 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + +// C++17 features +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_STD_INVOKE +# define BOOST_NO_CXX17_ITERATOR_TRAITS + #define BOOST_STDLIB "Metrowerks Standard Library version " BOOST_STRINGIZE(__MSL_CPP__) diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/roguewave.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/roguewave.hpp index 97a2b0b90b..df6021551a 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/roguewave.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/roguewave.hpp @@ -180,6 +180,7 @@ # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL @@ -196,3 +197,11 @@ #else # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif + +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + +// C++17 features +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_STD_INVOKE +# define BOOST_NO_CXX17_ITERATOR_TRAITS diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/sgi.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/sgi.hpp index c8052717ce..0c8ab2e4c1 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/sgi.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/sgi.hpp @@ -138,6 +138,7 @@ # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL @@ -155,4 +156,12 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif -#define BOOST_STDLIB "SGI standard library" \ No newline at end of file +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + +// C++17 features +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_STD_INVOKE +# define BOOST_NO_CXX17_ITERATOR_TRAITS + +#define BOOST_STDLIB "SGI standard library" diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/stlport.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/stlport.hpp index bbc4176c90..2e304e2b94 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/stlport.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/stlport.hpp @@ -228,6 +228,7 @@ namespace boost { using std::min; using std::max; } # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL @@ -245,4 +246,12 @@ namespace boost { using std::min; using std::max; } # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + +// C++17 features +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_STD_INVOKE +# define BOOST_NO_CXX17_ITERATOR_TRAITS + #define BOOST_STDLIB "STLPort standard library version " BOOST_STRINGIZE(__SGI_STL_PORT) diff --git a/bundled/boost-1.62.0/include/boost/config/stdlib/vacpp.hpp b/bundled/boost-1.62.0/include/boost/config/stdlib/vacpp.hpp index 4ccd0d2466..c4e1fb1847 100644 --- a/bundled/boost-1.62.0/include/boost/config/stdlib/vacpp.hpp +++ b/bundled/boost-1.62.0/include/boost/config/stdlib/vacpp.hpp @@ -44,6 +44,7 @@ # define BOOST_NO_CXX11_HDR_UNORDERED_SET # define BOOST_NO_CXX11_NUMERIC_LIMITS # define BOOST_NO_CXX11_ALLOCATOR +# define BOOST_NO_CXX11_POINTER_TRAITS # define BOOST_NO_CXX11_ATOMIC_SMART_PTR # define BOOST_NO_CXX11_SMART_PTR # define BOOST_NO_CXX11_HDR_FUNCTIONAL @@ -61,4 +62,12 @@ # define BOOST_NO_CXX14_HDR_SHARED_MUTEX #endif +// C++14 features +# define BOOST_NO_CXX14_STD_EXCHANGE + +// C++17 features +# define BOOST_NO_CXX17_STD_APPLY +# define BOOST_NO_CXX17_STD_INVOKE +# define BOOST_NO_CXX17_ITERATOR_TRAITS + #define BOOST_STDLIB "Visual Age default standard library" diff --git a/bundled/boost-1.62.0/include/boost/config/workaround.hpp b/bundled/boost-1.62.0/include/boost/config/workaround.hpp new file mode 100644 index 0000000000..fca8f3ab7e --- /dev/null +++ b/bundled/boost-1.62.0/include/boost/config/workaround.hpp @@ -0,0 +1,279 @@ +// Copyright David Abrahams 2002. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) +#ifndef BOOST_CONFIG_WORKAROUND_HPP +#define BOOST_CONFIG_WORKAROUND_HPP + +// Compiler/library version workaround macro +// +// Usage: +// +// #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) +// // workaround for eVC4 and VC6 +// ... // workaround code here +// #endif +// +// When BOOST_STRICT_CONFIG is defined, expands to 0. Otherwise, the +// first argument must be undefined or expand to a numeric +// value. The above expands to: +// +// (BOOST_MSVC) != 0 && (BOOST_MSVC) < 1300 +// +// When used for workarounds that apply to the latest known version +// and all earlier versions of a compiler, the following convention +// should be observed: +// +// #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1301)) +// +// The version number in this case corresponds to the last version in +// which the workaround was known to have been required. When +// BOOST_DETECT_OUTDATED_WORKAROUNDS is not the defined, the macro +// BOOST_TESTED_AT(x) expands to "!= 0", which effectively activates +// the workaround for any version of the compiler. When +// BOOST_DETECT_OUTDATED_WORKAROUNDS is defined, a compiler warning or +// error will be issued if the compiler version exceeds the argument +// to BOOST_TESTED_AT(). This can be used to locate workarounds which +// may be obsoleted by newer versions. + +#ifndef BOOST_STRICT_CONFIG + +#include + +#ifndef __BORLANDC__ +#define __BORLANDC___WORKAROUND_GUARD 1 +#else +#define __BORLANDC___WORKAROUND_GUARD 0 +#endif +#ifndef __CODEGEARC__ +#define __CODEGEARC___WORKAROUND_GUARD 1 +#else +#define __CODEGEARC___WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_VER +#define _MSC_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_VER_WORKAROUND_GUARD 0 +#endif +#ifndef _MSC_FULL_VER +#define _MSC_FULL_VER_WORKAROUND_GUARD 1 +#else +#define _MSC_FULL_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_MSVC +#define BOOST_MSVC_WORKAROUND_GUARD 1 +#else +#define BOOST_MSVC_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_MSVC_FULL_VER +#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 1 +#else +#define BOOST_MSVC_FULL_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC__ +#define __GNUC___WORKAROUND_GUARD 1 +#else +#define __GNUC___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_MINOR__ +#define __GNUC_MINOR___WORKAROUND_GUARD 1 +#else +#define __GNUC_MINOR___WORKAROUND_GUARD 0 +#endif +#ifndef __GNUC_PATCHLEVEL__ +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 1 +#else +#define __GNUC_PATCHLEVEL___WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_GCC +#define BOOST_GCC_WORKAROUND_GUARD 1 +#define BOOST_GCC_VERSION_WORKAROUND_GUARD 1 +#else +#define BOOST_GCC_WORKAROUND_GUARD 0 +#define BOOST_GCC_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_XLCPP_ZOS +#define BOOST_XLCPP_ZOS_WORKAROUND_GUARD 1 +#else +#define BOOST_XLCPP_ZOS_WORKAROUND_GUARD 0 +#endif +#ifndef __IBMCPP__ +#define __IBMCPP___WORKAROUND_GUARD 1 +#else +#define __IBMCPP___WORKAROUND_GUARD 0 +#endif +#ifndef __SUNPRO_CC +#define __SUNPRO_CC_WORKAROUND_GUARD 1 +#else +#define __SUNPRO_CC_WORKAROUND_GUARD 0 +#endif +#ifndef __DECCXX_VER +#define __DECCXX_VER_WORKAROUND_GUARD 1 +#else +#define __DECCXX_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __MWERKS__ +#define __MWERKS___WORKAROUND_GUARD 1 +#else +#define __MWERKS___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG__ +#define __EDG___WORKAROUND_GUARD 1 +#else +#define __EDG___WORKAROUND_GUARD 0 +#endif +#ifndef __EDG_VERSION__ +#define __EDG_VERSION___WORKAROUND_GUARD 1 +#else +#define __EDG_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __HP_aCC +#define __HP_aCC_WORKAROUND_GUARD 1 +#else +#define __HP_aCC_WORKAROUND_GUARD 0 +#endif +#ifndef __hpxstd98 +#define __hpxstd98_WORKAROUND_GUARD 1 +#else +#define __hpxstd98_WORKAROUND_GUARD 0 +#endif +#ifndef _CRAYC +#define _CRAYC_WORKAROUND_GUARD 1 +#else +#define _CRAYC_WORKAROUND_GUARD 0 +#endif +#ifndef __DMC__ +#define __DMC___WORKAROUND_GUARD 1 +#else +#define __DMC___WORKAROUND_GUARD 0 +#endif +#ifndef MPW_CPLUS +#define MPW_CPLUS_WORKAROUND_GUARD 1 +#else +#define MPW_CPLUS_WORKAROUND_GUARD 0 +#endif +#ifndef __COMO__ +#define __COMO___WORKAROUND_GUARD 1 +#else +#define __COMO___WORKAROUND_GUARD 0 +#endif +#ifndef __COMO_VERSION__ +#define __COMO_VERSION___WORKAROUND_GUARD 1 +#else +#define __COMO_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef __INTEL_COMPILER +#define __INTEL_COMPILER_WORKAROUND_GUARD 1 +#else +#define __INTEL_COMPILER_WORKAROUND_GUARD 0 +#endif +#ifndef __ICL +#define __ICL_WORKAROUND_GUARD 1 +#else +#define __ICL_WORKAROUND_GUARD 0 +#endif +#ifndef _COMPILER_VERSION +#define _COMPILER_VERSION_WORKAROUND_GUARD 1 +#else +#define _COMPILER_VERSION_WORKAROUND_GUARD 0 +#endif + +#ifndef _RWSTD_VER +#define _RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define _RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_RWSTD_VER +#define BOOST_RWSTD_VER_WORKAROUND_GUARD 1 +#else +#define BOOST_RWSTD_VER_WORKAROUND_GUARD 0 +#endif +#ifndef __GLIBCPP__ +#define __GLIBCPP___WORKAROUND_GUARD 1 +#else +#define __GLIBCPP___WORKAROUND_GUARD 0 +#endif +#ifndef _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 1 +#else +#define _GLIBCXX_USE_C99_FP_MACROS_DYNAMIC_WORKAROUND_GUARD 0 +#endif +#ifndef __SGI_STL_PORT +#define __SGI_STL_PORT_WORKAROUND_GUARD 1 +#else +#define __SGI_STL_PORT_WORKAROUND_GUARD 0 +#endif +#ifndef _STLPORT_VERSION +#define _STLPORT_VERSION_WORKAROUND_GUARD 1 +#else +#define _STLPORT_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef __LIBCOMO_VERSION__ +#define __LIBCOMO_VERSION___WORKAROUND_GUARD 1 +#else +#define __LIBCOMO_VERSION___WORKAROUND_GUARD 0 +#endif +#ifndef _CPPLIB_VER +#define _CPPLIB_VER_WORKAROUND_GUARD 1 +#else +#define _CPPLIB_VER_WORKAROUND_GUARD 0 +#endif + +#ifndef BOOST_INTEL_CXX_VERSION +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_CXX_VERSION_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL_WIN +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WIN_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_DINKUMWARE_STDLIB +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 1 +#else +#define BOOST_DINKUMWARE_STDLIB_WORKAROUND_GUARD 0 +#endif +#ifndef BOOST_INTEL +#define BOOST_INTEL_WORKAROUND_GUARD 1 +#else +#define BOOST_INTEL_WORKAROUND_GUARD 0 +#endif +// Always define to zero, if it's used it'll be defined my MPL: +#define BOOST_MPL_CFG_GCC_WORKAROUND_GUARD 0 + +#define BOOST_WORKAROUND(symbol, test) \ + ((symbol ## _WORKAROUND_GUARD + 0 == 0) && \ + (symbol != 0) && (1 % (( (symbol test) ) + 1))) +// ^ ^ ^ ^ +// The extra level of parenthesis nesting above, along with the +// BOOST_OPEN_PAREN indirection below, is required to satisfy the +// broken preprocessor in MWCW 8.3 and earlier. +// +// The basic mechanism works as follows: +// (symbol test) + 1 => if (symbol test) then 2 else 1 +// 1 % ((symbol test) + 1) => if (symbol test) then 1 else 0 +// +// The complication with % is for cooperation with BOOST_TESTED_AT(). +// When "test" is BOOST_TESTED_AT(x) and +// BOOST_DETECT_OUTDATED_WORKAROUNDS is #defined, +// +// symbol test => if (symbol <= x) then 1 else -1 +// (symbol test) + 1 => if (symbol <= x) then 2 else 0 +// 1 % ((symbol test) + 1) => if (symbol <= x) then 1 else divide-by-zero +// + +#ifdef BOOST_DETECT_OUTDATED_WORKAROUNDS +# define BOOST_OPEN_PAREN ( +# define BOOST_TESTED_AT(value) > value) ?(-1): BOOST_OPEN_PAREN 1 +#else +# define BOOST_TESTED_AT(value) != ((value)-(value)) +#endif + +#else + +#define BOOST_WORKAROUND(symbol, test) 0 + +#endif + +#endif // BOOST_CONFIG_WORKAROUND_HPP diff --git a/bundled/boost-1.62.0/include/boost/container/adaptive_pool.hpp b/bundled/boost-1.62.0/include/boost/container/adaptive_pool.hpp index ac14fb397e..d1d77bcade 100644 --- a/bundled/boost-1.62.0/include/boost/container/adaptive_pool.hpp +++ b/bundled/boost-1.62.0/include/boost/container/adaptive_pool.hpp @@ -83,19 +83,19 @@ class adaptive_pool typedef T * pointer; typedef const T * const_pointer; typedef typename ::boost::container:: - container_detail::unvoid_ref::type reference; + dtl::unvoid_ref::type reference; typedef typename ::boost::container:: - container_detail::unvoid_ref::type const_reference; + dtl::unvoid_ref::type const_reference; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; - typedef boost::container::container_detail:: + typedef boost::container::dtl:: version_type version; #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED - typedef boost::container::container_detail:: + typedef boost::container::dtl:: basic_multiallocation_chain multiallocation_chain_void; - typedef boost::container::container_detail:: + typedef boost::container::dtl:: transform_multiallocation_chain multiallocation_chain; #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -117,9 +117,9 @@ class adaptive_pool #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED private: //!Not assignable from related adaptive_pool - template + template adaptive_pool& operator= - (const adaptive_pool&); + (const adaptive_pool&); #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -156,9 +156,9 @@ class adaptive_pool boost::container::throw_bad_alloc(); if(Version == 1 && count == 1){ - typedef typename container_detail::shared_adaptive_node_pool + typedef typename dtl::shared_adaptive_node_pool shared_pool_t; - typedef container_detail::singleton_default singleton_t; + typedef dtl::singleton_default singleton_t; return pointer(static_cast(singleton_t::instance().allocate_node())); } else{ @@ -172,9 +172,9 @@ class adaptive_pool { (void)count; if(Version == 1 && count == 1){ - typedef container_detail::shared_adaptive_node_pool + typedef dtl::shared_adaptive_node_pool shared_pool_t; - typedef container_detail::singleton_default singleton_t; + typedef dtl::singleton_default singleton_t; singleton_t::instance().deallocate_node(ptr); } else{ @@ -203,9 +203,9 @@ class adaptive_pool //!Throws bad_alloc if there is no enough memory pointer allocate_one() { - typedef container_detail::shared_adaptive_node_pool + typedef dtl::shared_adaptive_node_pool shared_pool_t; - typedef container_detail::singleton_default singleton_t; + typedef dtl::singleton_default singleton_t; return (pointer)singleton_t::instance().allocate_node(); } @@ -213,9 +213,9 @@ class adaptive_pool //!Elements must be individually deallocated with deallocate_one() void allocate_individual(std::size_t num_elements, multiallocation_chain &chain) { - typedef container_detail::shared_adaptive_node_pool + typedef dtl::shared_adaptive_node_pool shared_pool_t; - typedef container_detail::singleton_default singleton_t; + typedef dtl::singleton_default singleton_t; singleton_t::instance().allocate_nodes(num_elements, static_cast(chain)); //typename shared_pool_t::multiallocation_chain ch; //singleton_t::instance().allocate_nodes(num_elements, ch); @@ -228,17 +228,17 @@ class adaptive_pool //!with other functions different from allocate_one(). Never throws void deallocate_one(pointer p) BOOST_NOEXCEPT_OR_NOTHROW { - typedef container_detail::shared_adaptive_node_pool + typedef dtl::shared_adaptive_node_pool shared_pool_t; - typedef container_detail::singleton_default singleton_t; + typedef dtl::singleton_default singleton_t; singleton_t::instance().deallocate_node(p); } void deallocate_individual(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW { - typedef container_detail::shared_adaptive_node_pool + typedef dtl::shared_adaptive_node_pool shared_pool_t; - typedef container_detail::singleton_default singleton_t; + typedef dtl::singleton_default singleton_t; //typename shared_pool_t::multiallocation_chain ch(&*chain.begin(), &*chain.last(), chain.size()); //singleton_t::instance().deallocate_nodes(ch); singleton_t::instance().deallocate_nodes(chain); @@ -297,9 +297,9 @@ class adaptive_pool //!Deallocates all free blocks of the pool static void deallocate_free_blocks() BOOST_NOEXCEPT_OR_NOTHROW { - typedef container_detail::shared_adaptive_node_pool + typedef dtl::shared_adaptive_node_pool shared_pool_t; - typedef container_detail::singleton_default singleton_t; + typedef dtl::singleton_default singleton_t; singleton_t::instance().deallocate_free_blocks(); } @@ -341,6 +341,266 @@ class adaptive_pool } }; + + + + + + + + + + + + + + + + + + + +template < class T + , std::size_t NodesPerBlock = ADP_nodes_per_block + , std::size_t MaxFreeBlocks = ADP_max_free_blocks + , std::size_t OverheadPercent = ADP_overhead_percent + , unsigned Version = 2 + > +class private_adaptive_pool +{ + //!If Version is 1, the allocator is a STL conforming allocator. If Version is 2, + //!the allocator offers advanced expand in place and burst allocation capabilities. + public: + typedef unsigned int allocation_type; + typedef private_adaptive_pool + self_t; + + static const std::size_t nodes_per_block = NodesPerBlock; + static const std::size_t max_free_blocks = MaxFreeBlocks; + static const std::size_t overhead_percent = OverheadPercent; + static const std::size_t real_nodes_per_block = NodesPerBlock; + + BOOST_CONTAINER_DOCIGN(BOOST_STATIC_ASSERT((Version <=2))); + + typedef dtl::private_adaptive_node_pool + pool_t; + pool_t m_pool; + + public: + //------- + typedef T value_type; + typedef T * pointer; + typedef const T * const_pointer; + typedef typename ::boost::container:: + dtl::unvoid_ref::type reference; + typedef typename ::boost::container:: + dtl::unvoid_ref::type const_reference; + typedef std::size_t size_type; + typedef std::ptrdiff_t difference_type; + + typedef boost::container::dtl:: + version_type version; + + #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED + typedef boost::container::dtl:: + basic_multiallocation_chain multiallocation_chain_void; + typedef boost::container::dtl:: + transform_multiallocation_chain + multiallocation_chain; + #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED + + //!Obtains private_adaptive_pool from + //!private_adaptive_pool + template + struct rebind + { + typedef private_adaptive_pool + < T2 + , NodesPerBlock + , MaxFreeBlocks + , OverheadPercent + BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I Version) + > other; + }; + + #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED + private: + //!Not assignable from related private_adaptive_pool + template + private_adaptive_pool& operator= + (const private_adaptive_pool&); + #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED + + public: + //!Default constructor + private_adaptive_pool() BOOST_NOEXCEPT_OR_NOTHROW + {} + + //!Copy constructor from other private_adaptive_pool. + private_adaptive_pool(const private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW + {} + + //!Copy constructor from related private_adaptive_pool. + template + private_adaptive_pool + (const private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW + {} + + //!Destructor + ~private_adaptive_pool() BOOST_NOEXCEPT_OR_NOTHROW + {} + + //!Returns the number of elements that could be allocated. + //!Never throws + size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW + { return size_type(-1)/sizeof(T); } + + //!Allocate memory for an array of count elements. + //!Throws std::bad_alloc if there is no enough memory + pointer allocate(size_type count, const void * = 0) + { + if(BOOST_UNLIKELY(count > this->max_size())) + boost::container::throw_bad_alloc(); + + if(Version == 1 && count == 1){ + return pointer(static_cast(m_pool.allocate_node())); + } + else{ + return static_cast(dlmalloc_malloc(count*sizeof(T))); + } + } + + //!Deallocate allocated memory. + //!Never throws + void deallocate(const pointer &ptr, size_type count) BOOST_NOEXCEPT_OR_NOTHROW + { + (void)count; + if(Version == 1 && count == 1){ + m_pool.deallocate_node(ptr); + } + else{ + dlmalloc_free(ptr); + } + } + + pointer allocation_command(allocation_type command, + size_type limit_size, + size_type &prefer_in_recvd_out_size, + pointer &reuse) + { + pointer ret = this->priv_allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse); + if(BOOST_UNLIKELY(!ret && !(command & BOOST_CONTAINER_NOTHROW_ALLOCATION))) + boost::container::throw_bad_alloc(); + return ret; + } + + //!Returns maximum the number of objects the previously allocated memory + //!pointed by p can hold. + size_type size(pointer p) const BOOST_NOEXCEPT_OR_NOTHROW + { return dlmalloc_size(p); } + + //!Allocates just one object. Memory allocated with this function + //!must be deallocated only with deallocate_one(). + //!Throws bad_alloc if there is no enough memory + pointer allocate_one() + { + return (pointer)m_pool.allocate_node(); + } + + //!Allocates many elements of size == 1. + //!Elements must be individually deallocated with deallocate_one() + void allocate_individual(std::size_t num_elements, multiallocation_chain &chain) + { + m_pool.allocate_nodes(num_elements, static_cast(chain)); + } + + //!Deallocates memory previously allocated with allocate_one(). + //!You should never use deallocate_one to deallocate memory allocated + //!with other functions different from allocate_one(). Never throws + void deallocate_one(pointer p) BOOST_NOEXCEPT_OR_NOTHROW + { + m_pool.deallocate_node(p); + } + + void deallocate_individual(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW + { + m_pool.deallocate_nodes(chain); + } + + //!Allocates many elements of size elem_size. + //!Elements must be individually deallocated with deallocate() + void allocate_many(size_type elem_size, std::size_t n_elements, multiallocation_chain &chain) + { + BOOST_STATIC_ASSERT(( Version > 1 )); + if(BOOST_UNLIKELY(!dlmalloc_multialloc_nodes + (n_elements, elem_size*sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, reinterpret_cast(&chain)))){ + boost::container::throw_bad_alloc(); + } + } + + //!Allocates n_elements elements, each one of size elem_sizes[i] + //!Elements must be individually deallocated with deallocate() + void allocate_many(const size_type *elem_sizes, size_type n_elements, multiallocation_chain &chain) + { + BOOST_STATIC_ASSERT(( Version > 1 )); + if(BOOST_UNLIKELY(!dlmalloc_multialloc_arrays + (n_elements, elem_sizes, sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, reinterpret_cast(&chain)))){ + boost::container::throw_bad_alloc(); + } + } + + void deallocate_many(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW + { + dlmalloc_multidealloc(reinterpret_cast(&chain)); + } + + //!Deallocates all free blocks of the pool + void deallocate_free_blocks() BOOST_NOEXCEPT_OR_NOTHROW + { + m_pool.deallocate_free_blocks(); + } + + //!Swaps allocators. Does not throw. If each allocator is placed in a + //!different memory segment, the result is undefined. + friend void swap(private_adaptive_pool &, private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW + {} + + //!An allocator always compares to true, as memory allocated with one + //!instance can be deallocated by another instance + friend bool operator==(const private_adaptive_pool &, const private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW + { return true; } + + //!An allocator always compares to false, as memory allocated with one + //!instance can be deallocated by another instance + friend bool operator!=(const private_adaptive_pool &, const private_adaptive_pool &) BOOST_NOEXCEPT_OR_NOTHROW + { return false; } + + private: + pointer priv_allocation_command + (allocation_type command, std::size_t limit_size + ,size_type &prefer_in_recvd_out_size, pointer &reuse_ptr) + { + std::size_t const preferred_size = prefer_in_recvd_out_size; + dlmalloc_command_ret_t ret = {0 , 0}; + if(BOOST_UNLIKELY(limit_size > this->max_size() || preferred_size > this->max_size())){ + return pointer(); + } + std::size_t l_size = limit_size*sizeof(T); + std::size_t p_size = preferred_size*sizeof(T); + std::size_t r_size; + { + void* reuse_ptr_void = reuse_ptr; + ret = dlmalloc_allocation_command(command, sizeof(T), l_size, p_size, &r_size, reuse_ptr_void); + reuse_ptr = ret.second ? static_cast(reuse_ptr_void) : 0; + } + prefer_in_recvd_out_size = r_size/sizeof(T); + return (pointer)ret.first; + } +}; + } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/allocator.hpp b/bundled/boost-1.62.0/include/boost/container/allocator.hpp index 9b9268f16c..aef620ce59 100644 --- a/bundled/boost-1.62.0/include/boost/container/allocator.hpp +++ b/bundled/boost-1.62.0/include/boost/container/allocator.hpp @@ -49,11 +49,11 @@ class allocator typedef const int & const_reference; typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; - typedef boost::container::container_detail:: + typedef boost::container::dtl:: version_type version; #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED - typedef boost::container::container_detail:: + typedef boost::container::dtl:: basic_multiallocation_chain multiallocation_chain; #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -133,14 +133,14 @@ class allocator typedef std::size_t size_type; typedef std::ptrdiff_t difference_type; - typedef boost::container::container_detail:: + typedef boost::container::dtl:: version_type version; #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED - typedef boost::container::container_detail:: + typedef boost::container::dtl:: basic_multiallocation_chain void_multiallocation_chain; - typedef boost::container::container_detail:: + typedef boost::container::dtl:: transform_multiallocation_chain multiallocation_chain; #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -190,17 +190,17 @@ class allocator //!Deallocates previously allocated memory. //!Never throws - void deallocate(pointer ptr, size_type) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE void deallocate(pointer ptr, size_type) BOOST_NOEXCEPT_OR_NOTHROW { dlmalloc_free(ptr); } //!Returns the maximum number of elements that could be allocated. //!Never throws - size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW { return size_type(-1)/sizeof(T); } //!Swaps two allocators, does nothing //!because this allocator is stateless - friend void swap(self_t &, self_t &) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend void swap(self_t &, self_t &) BOOST_NOEXCEPT_OR_NOTHROW {} //!An allocator always compares to true, as memory allocated with one @@ -210,7 +210,7 @@ class allocator //!An allocator always compares to false, as memory allocated with one //!instance can be deallocated by another instance - friend bool operator!=(const allocator &, const allocator &) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const allocator &, const allocator &) BOOST_NOEXCEPT_OR_NOTHROW { return false; } //!An advanced function that offers in-place expansion shrink to fit and new allocation @@ -246,7 +246,7 @@ class allocator //!must be deallocated only with deallocate_one(). //!Throws bad_alloc if there is no enough memory //!This function is available only with Version == 2 - pointer allocate_one() + BOOST_CONTAINER_FORCEINLINE pointer allocate_one() { BOOST_STATIC_ASSERT(( Version > 1 )); return this->allocate(1); @@ -255,7 +255,7 @@ class allocator //!Allocates many elements of size == 1. //!Elements must be individually deallocated with deallocate_one() //!This function is available only with Version == 2 - void allocate_individual(std::size_t num_elements, multiallocation_chain &chain) + BOOST_CONTAINER_FORCEINLINE void allocate_individual(std::size_t num_elements, multiallocation_chain &chain) { BOOST_STATIC_ASSERT(( Version > 1 )); this->allocate_many(1, num_elements, chain); @@ -273,7 +273,7 @@ class allocator //!Deallocates memory allocated with allocate_one() or allocate_individual(). //!This function is available only with Version == 2 - void deallocate_individual(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE void deallocate_individual(multiallocation_chain &chain) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_STATIC_ASSERT(( Version > 1 )); return this->deallocate_many(chain); @@ -284,7 +284,7 @@ class allocator //!This function is available only with Version == 2 void allocate_many(size_type elem_size, std::size_t n_elements, multiallocation_chain &chain) { - BOOST_STATIC_ASSERT(( Version > 1 ));/* + BOOST_STATIC_ASSERT(( Version > 1 )); dlmalloc_memchain ch; BOOST_CONTAINER_MEMCHAIN_INIT(&ch); if(!dlmalloc_multialloc_nodes(n_elements, elem_size*sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, &ch)){ @@ -293,10 +293,11 @@ class allocator chain.incorporate_after(chain.before_begin() ,(T*)BOOST_CONTAINER_MEMCHAIN_FIRSTMEM(&ch) ,(T*)BOOST_CONTAINER_MEMCHAIN_LASTMEM(&ch) - ,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) );*/ + ,BOOST_CONTAINER_MEMCHAIN_SIZE(&ch) ); +/* if(!dlmalloc_multialloc_nodes(n_elements, elem_size*sizeof(T), DL_MULTIALLOC_DEFAULT_CONTIGUOUS, reinterpret_cast(&chain))){ boost::container::throw_bad_alloc(); - } + }*/ } //!Allocates n_elements elements, each one of size elem_sizes[i] diff --git a/bundled/boost-1.62.0/include/boost/container/allocator_traits.hpp b/bundled/boost-1.62.0/include/boost/container/allocator_traits.hpp index e6a882e594..8cfb0378bc 100644 --- a/bundled/boost-1.62.0/include/boost/container/allocator_traits.hpp +++ b/bundled/boost-1.62.0/include/boost/container/allocator_traits.hpp @@ -50,21 +50,21 @@ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME allocate -#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace container_detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 2 #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 2 #include #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME destroy -#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace container_detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1 #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 1 #include #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME construct -#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace container_detail { +#define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl { #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}} #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1 #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 9 @@ -77,7 +77,7 @@ namespace container { #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED -template +template class small_vector_allocator; namespace allocator_traits_detail { @@ -87,7 +87,7 @@ BOOST_INTRUSIVE_HAS_STATIC_MEMBER_FUNC_SIGNATURE(has_select_on_container_copy_co } //namespace allocator_traits_detail { -namespace container_detail { +namespace dtl { //workaround needed for C++03 compilers with no construct() //supporting rvalue references @@ -100,7 +100,7 @@ struct is_std_allocator< std::allocator > { static const bool value = true; }; template -struct is_std_allocator< small_vector_allocator< std::allocator > > +struct is_std_allocator< small_vector_allocator > > { static const bool value = true; }; template @@ -121,7 +121,7 @@ BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(is_always_equal) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(difference_type) BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(is_partially_propagable) -} //namespace container_detail { +} //namespace dtl { #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -151,7 +151,7 @@ struct allocator_traits //! Allocator::void_pointer if such a type exists ; otherwise, pointer_traits::rebind. //! typedef see_documentation void_pointer; - //! Allocator::const_void_pointer if such a type exists ; otherwis e, pointer_traits::rebind::rebind::difference_type. @@ -196,59 +196,59 @@ struct allocator_traits { typedef see_documentation type; }; #else //pointer - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, pointer, value_type*) pointer; //const_pointer - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Allocator, + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::dtl::, Allocator, const_pointer, typename boost::intrusive::pointer_traits::template rebind_pointer) const_pointer; //reference - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, - reference, typename container_detail::unvoid_ref::type) + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, + reference, typename dtl::unvoid_ref::type) reference; //const_reference - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, - const_reference, typename container_detail::unvoid_ref::type) + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, + const_reference, typename dtl::unvoid_ref::type) const_reference; //void_pointer - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Allocator, + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::dtl::, Allocator, void_pointer, typename boost::intrusive::pointer_traits::template rebind_pointer) void_pointer; //const_void_pointer - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::container_detail::, Allocator, + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_EVAL_DEFAULT(boost::container::dtl::, Allocator, const_void_pointer, typename boost::intrusive::pointer_traits::template rebind_pointer) const_void_pointer; //difference_type - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, difference_type, std::ptrdiff_t) difference_type; //size_type - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, size_type, std::size_t) size_type; //propagate_on_container_copy_assignment - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, - propagate_on_container_copy_assignment, container_detail::false_type) + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, + propagate_on_container_copy_assignment, dtl::false_type) propagate_on_container_copy_assignment; //propagate_on_container_move_assignment - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, - propagate_on_container_move_assignment, container_detail::false_type) + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, + propagate_on_container_move_assignment, dtl::false_type) propagate_on_container_move_assignment; //propagate_on_container_swap - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, - propagate_on_container_swap, container_detail::false_type) + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, + propagate_on_container_swap, dtl::false_type) propagate_on_container_swap; //is_always_equal - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, - is_always_equal, container_detail::is_empty) + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, + is_always_equal, dtl::is_empty) is_always_equal; //is_partially_propagable - typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::container_detail::, Allocator, - is_partially_propagable, container_detail::false_type) + typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT(boost::container::dtl::, Allocator, + is_partially_propagable, dtl::false_type) is_partially_propagable; //rebind_alloc & rebind_traits @@ -289,143 +289,143 @@ struct allocator_traits //! Returns: a.allocate(n) //! - static pointer allocate(Allocator &a, size_type n) + BOOST_CONTAINER_FORCEINLINE static pointer allocate(Allocator &a, size_type n) { return a.allocate(n); } //! Returns: a.deallocate(p, n) //! //! Throws: Nothing - static void deallocate(Allocator &a, pointer p, size_type n) + BOOST_CONTAINER_FORCEINLINE static void deallocate(Allocator &a, pointer p, size_type n) { a.deallocate(p, n); } //! Effects: calls a.allocate(n, p) if that call is well-formed; //! otherwise, invokes a.allocate(n) - static pointer allocate(Allocator &a, size_type n, const_void_pointer p) + BOOST_CONTAINER_FORCEINLINE static pointer allocate(Allocator &a, size_type n, const_void_pointer p) { - const bool value = boost::container::container_detail:: + const bool value = boost::container::dtl:: has_member_function_callable_with_allocate ::value; - container_detail::bool_ flag; + dtl::bool_ flag; return allocator_traits::priv_allocate(flag, a, n, p); } //! Effects: calls a.destroy(p) if that call is well-formed; //! otherwise, invokes p->~T(). template - static void destroy(Allocator &a, T*p) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static void destroy(Allocator &a, T*p) BOOST_NOEXCEPT_OR_NOTHROW { typedef T* destroy_pointer; - const bool value = boost::container::container_detail:: + const bool value = boost::container::dtl:: has_member_function_callable_with_destroy ::value; - container_detail::bool_ flag; + dtl::bool_ flag; allocator_traits::priv_destroy(flag, a, p); } //! Returns: a.max_size() if that expression is well-formed; otherwise, //! numeric_limits::max(). - static size_type max_size(const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static size_type max_size(const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW { const bool value = allocator_traits_detail::has_max_size::value; - container_detail::bool_ flag; + dtl::bool_ flag; return allocator_traits::priv_max_size(flag, a); } //! Returns: a.select_on_container_copy_construction() if that expression is well-formed; //! otherwise, a. - static BOOST_CONTAINER_DOC1ST(Allocator, - typename container_detail::if_c + BOOST_CONTAINER_FORCEINLINE static BOOST_CONTAINER_DOC1ST(Allocator, + typename dtl::if_c < allocator_traits_detail::has_select_on_container_copy_construction::value BOOST_MOVE_I Allocator BOOST_MOVE_I const Allocator & >::type) select_on_container_copy_construction(const Allocator &a) { const bool value = allocator_traits_detail::has_select_on_container_copy_construction ::value; - container_detail::bool_ flag; + dtl::bool_ flag; return allocator_traits::priv_select_on_container_copy_construction(flag, a); } #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED) //! Effects: calls a.construct(p, std::forward(args)...) if that call is well-formed; - //! otherwise, invokes ::new (static_cast(p)) T(std::forward(args)...) + //! otherwise, invokes `placement new` (static_cast(p)) T(std::forward(args)...) template - static void construct(Allocator & a, T* p, BOOST_FWD_REF(Args)... args) + BOOST_CONTAINER_FORCEINLINE static void construct(Allocator & a, T* p, BOOST_FWD_REF(Args)... args) { static const bool value = ::boost::move_detail::and_ - < container_detail::is_not_std_allocator - , boost::container::container_detail::has_member_function_callable_with_construct + < dtl::is_not_std_allocator + , boost::container::dtl::has_member_function_callable_with_construct < Allocator, T*, Args... > >::value; - container_detail::bool_ flag; + dtl::bool_ flag; allocator_traits::priv_construct(flag, a, p, ::boost::forward(args)...); } #endif //! Returns: a.storage_is_unpropagable(p) if is_partially_propagable::value is true; otherwise, //! false. - static bool storage_is_unpropagable(const Allocator &a, pointer p) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static bool storage_is_unpropagable(const Allocator &a, pointer p) BOOST_NOEXCEPT_OR_NOTHROW { - container_detail::bool_ flag; + dtl::bool_ flag; return allocator_traits::priv_storage_is_unpropagable(flag, a, p); } //! Returns: true if is_always_equal::value == true, otherwise, //! a == b. - static bool equal(const Allocator &a, const Allocator &b) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static bool equal(const Allocator &a, const Allocator &b) BOOST_NOEXCEPT_OR_NOTHROW { - container_detail::bool_ flag; + dtl::bool_ flag; return allocator_traits::priv_equal(flag, a, b); } #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) private: - static pointer priv_allocate(container_detail::true_type, Allocator &a, size_type n, const_void_pointer p) + BOOST_CONTAINER_FORCEINLINE static pointer priv_allocate(dtl::true_type, Allocator &a, size_type n, const_void_pointer p) { return a.allocate(n, p); } - static pointer priv_allocate(container_detail::false_type, Allocator &a, size_type n, const_void_pointer) + BOOST_CONTAINER_FORCEINLINE static pointer priv_allocate(dtl::false_type, Allocator &a, size_type n, const_void_pointer) { return a.allocate(n); } template - static void priv_destroy(container_detail::true_type, Allocator &a, T* p) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static void priv_destroy(dtl::true_type, Allocator &a, T* p) BOOST_NOEXCEPT_OR_NOTHROW { a.destroy(p); } template - static void priv_destroy(container_detail::false_type, Allocator &, T* p) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static void priv_destroy(dtl::false_type, Allocator &, T* p) BOOST_NOEXCEPT_OR_NOTHROW { p->~T(); (void)p; } - static size_type priv_max_size(container_detail::true_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static size_type priv_max_size(dtl::true_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW { return a.max_size(); } - static size_type priv_max_size(container_detail::false_type, const Allocator &) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static size_type priv_max_size(dtl::false_type, const Allocator &) BOOST_NOEXCEPT_OR_NOTHROW { return size_type(-1)/sizeof(value_type); } - static Allocator priv_select_on_container_copy_construction(container_detail::true_type, const Allocator &a) + BOOST_CONTAINER_FORCEINLINE static Allocator priv_select_on_container_copy_construction(dtl::true_type, const Allocator &a) { return a.select_on_container_copy_construction(); } - static const Allocator &priv_select_on_container_copy_construction(container_detail::false_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static const Allocator &priv_select_on_container_copy_construction(dtl::false_type, const Allocator &a) BOOST_NOEXCEPT_OR_NOTHROW { return a; } #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template - static void priv_construct(container_detail::true_type, Allocator &a, T *p, BOOST_FWD_REF(Args) ...args) + BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::true_type, Allocator &a, T *p, BOOST_FWD_REF(Args) ...args) { a.construct( p, ::boost::forward(args)...); } template - static void priv_construct(container_detail::false_type, Allocator &, T *p, BOOST_FWD_REF(Args) ...args) + BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p, BOOST_FWD_REF(Args) ...args) { ::new((void*)p, boost_container_new_t()) T(::boost::forward(args)...); } #else // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) public: #define BOOST_CONTAINER_ALLOCATOR_TRAITS_CONSTRUCT_IMPL(N) \ template\ - static void construct(Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + BOOST_CONTAINER_FORCEINLINE static void construct(Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ {\ static const bool value = ::boost::move_detail::and_ \ - < container_detail::is_not_std_allocator \ - , boost::container::container_detail::has_member_function_callable_with_construct \ + < dtl::is_not_std_allocator \ + , boost::container::dtl::has_member_function_callable_with_construct \ < Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_FWD_T##N > \ >::value; \ - container_detail::bool_ flag;\ + dtl::bool_ flag;\ (priv_construct)(flag, a, p BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\ }\ // @@ -438,11 +438,11 @@ struct allocator_traits ///////////////////////////////// #define BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL(N) \ template\ - static void priv_construct(container_detail::true_type, Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::true_type, Allocator &a, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ { a.construct( p BOOST_MOVE_I##N BOOST_MOVE_FWD##N ); }\ \ template\ - static void priv_construct(container_detail::false_type, Allocator &, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ + BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\ { ::new((void*)p, boost_container_new_t()) T(BOOST_MOVE_FWD##N); }\ // BOOST_MOVE_ITERATE_0TO8(BOOST_CONTAINER_ALLOCATOR_TRAITS_PRIV_CONSTRUCT_IMPL) @@ -451,24 +451,40 @@ struct allocator_traits #endif // #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) template - static void priv_construct(container_detail::false_type, Allocator &, T *p, const ::boost::container::default_init_t&) + BOOST_CONTAINER_FORCEINLINE static void priv_construct(dtl::false_type, Allocator &, T *p, const ::boost::container::default_init_t&) { ::new((void*)p, boost_container_new_t()) T; } - static bool priv_storage_is_unpropagable(container_detail::true_type, const Allocator &a, pointer p) + BOOST_CONTAINER_FORCEINLINE static bool priv_storage_is_unpropagable(dtl::true_type, const Allocator &a, pointer p) { return a.storage_is_unpropagable(p); } - static bool priv_storage_is_unpropagable(container_detail::false_type, const Allocator &, pointer) + BOOST_CONTAINER_FORCEINLINE static bool priv_storage_is_unpropagable(dtl::false_type, const Allocator &, pointer) { return false; } - static bool priv_equal(container_detail::true_type, const Allocator &, const Allocator &) + BOOST_CONTAINER_FORCEINLINE static bool priv_equal(dtl::true_type, const Allocator &, const Allocator &) { return true; } - static bool priv_equal(container_detail::false_type, const Allocator &a, const Allocator &b) + BOOST_CONTAINER_FORCEINLINE static bool priv_equal(dtl::false_type, const Allocator &a, const Allocator &b) { return a == b; } #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) }; +#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + +template +struct real_allocator +{ + typedef AllocatorOrVoid type; +}; + +template +struct real_allocator +{ + typedef new_allocator type; +}; + +#endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED) + } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/container_fwd.hpp b/bundled/boost-1.62.0/include/boost/container/container_fwd.hpp index e85a6ce952..b7591cd256 100644 --- a/bundled/boost-1.62.0/include/boost/container/container_fwd.hpp +++ b/bundled/boost-1.62.0/include/boost/container/container_fwd.hpp @@ -67,7 +67,7 @@ namespace detail{ //Create namespace to avoid compilation errors }}} -namespace boost{ namespace container{ namespace container_detail{ +namespace boost{ namespace container{ namespace dtl{ namespace bi = boost::intrusive; namespace bid = boost::intrusive::detail; }}} @@ -88,117 +88,97 @@ namespace boost{ namespace container{ namespace pmr{ namespace boost { namespace container { -//! Enumeration used to configure ordered associative containers -//! with a concrete tree implementation. -enum tree_type_enum -{ - red_black_tree, - avl_tree, - scapegoat_tree, - splay_tree -}; - #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED +template +struct pair; + template class new_allocator; template > + ,class Allocator = void + ,class Options = void> class vector; template > + ,class Allocator = void > class stable_vector; template class static_vector; template < class T, std::size_t N - , class Allocator= new_allocator > + , class Allocator = void > class small_vector; template > + ,class Allocator = void > class deque; template > + ,class Allocator = void > class list; template > + ,class Allocator = void > class slist; -template -struct tree_opt; - -typedef tree_opt tree_assoc_defaults; - template - ,class Allocator = new_allocator - ,class Options = tree_assoc_defaults > + ,class Allocator = void + ,class Options = void> class set; template - ,class Allocator = new_allocator - ,class Options = tree_assoc_defaults > + ,class Allocator = void + ,class Options = void > class multiset; template - ,class Allocator = new_allocator > - ,class Options = tree_assoc_defaults > + ,class Allocator = void + ,class Options = void > class map; template - ,class Allocator = new_allocator > - ,class Options = tree_assoc_defaults > + ,class Allocator = void + ,class Options = void > class multimap; template - ,class Allocator = new_allocator > + ,class Allocator = void > class flat_set; template - ,class Allocator = new_allocator > + ,class Allocator = void > class flat_multiset; template - ,class Allocator = new_allocator > > + ,class Allocator = void > class flat_map; template - ,class Allocator = new_allocator > > + ,class Allocator = void > class flat_multimap; template - ,class Allocator = new_allocator > + ,class Allocator = void > class basic_string; -typedef basic_string - - ,new_allocator > -string; - -typedef basic_string - - ,new_allocator > -wstring; +typedef basic_string string; +typedef basic_string wstring; static const std::size_t ADP_nodes_per_block = 256u; static const std::size_t ADP_max_free_blocks = 2u; @@ -246,13 +226,6 @@ class synchronized_pool_resource; } //namespace pmr { -#else - -//! Default options for tree-based associative containers -//! - tree_type -//! - optimize_size -typedef implementation_defined tree_assoc_defaults; - #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED //! Type used to tag that the input range is diff --git a/bundled/boost-1.62.0/include/boost/container/deque.hpp b/bundled/boost-1.62.0/include/boost/container/deque.hpp index 255cd9399d..1fa3e5d5d4 100644 --- a/bundled/boost-1.62.0/include/boost/container/deque.hpp +++ b/bundled/boost-1.62.0/include/boost/container/deque.hpp @@ -31,11 +31,11 @@ #include #include #include -#include +#include #include #include #include -#include +#include #include // move #include @@ -68,7 +68,7 @@ template struct deque_value_traits { typedef T value_type; - static const bool trivial_dctr = container_detail::is_trivially_destructible::value; + static const bool trivial_dctr = dtl::is_trivially_destructible::value; static const bool trivial_dctr_after_move = ::boost::has_trivial_destructor_after_move::value; }; @@ -82,7 +82,7 @@ struct deque_buf_size static const std::size_t value = sizeof_t < min_size ? (min_size/sizeof_t) : std::size_t(1); }; -namespace container_detail { +namespace dtl { // Class invariants: // For any nonsingular iterator i: @@ -127,7 +127,12 @@ class deque_iterator , value_type& >::type reference; - static std::size_t s_buffer_size() + class nat; + typedef typename dtl::if_c< IsConst + , deque_iterator + , nat>::type nonconst_iterator; + + BOOST_CONTAINER_FORCEINLINE static std::size_t s_buffer_size() { return deque_buf_size::value; } typedef Pointer val_alloc_ptr; @@ -141,20 +146,24 @@ class deque_iterator public: - Pointer get_cur() const { return m_cur; } - Pointer get_first() const { return m_first; } - Pointer get_last() const { return m_last; } - index_pointer get_node() const { return m_node; } + BOOST_CONTAINER_FORCEINLINE Pointer get_cur() const { return m_cur; } + BOOST_CONTAINER_FORCEINLINE Pointer get_first() const { return m_first; } + BOOST_CONTAINER_FORCEINLINE Pointer get_last() const { return m_last; } + BOOST_CONTAINER_FORCEINLINE index_pointer get_node() const { return m_node; } - deque_iterator(val_alloc_ptr x, index_pointer y) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator(val_alloc_ptr x, index_pointer y) BOOST_NOEXCEPT_OR_NOTHROW : m_cur(x), m_first(*y), m_last(*y + s_buffer_size()), m_node(y) {} - deque_iterator() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator() BOOST_NOEXCEPT_OR_NOTHROW : m_cur(), m_first(), m_last(), m_node() //Value initialization to achieve "null iterators" (N3644) {} - deque_iterator(deque_iterator const& x) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator(const deque_iterator& x) BOOST_NOEXCEPT_OR_NOTHROW + : m_cur(x.get_cur()), m_first(x.get_first()), m_last(x.get_last()), m_node(x.get_node()) + {} + + BOOST_CONTAINER_FORCEINLINE deque_iterator(const nonconst_iterator& x) BOOST_NOEXCEPT_OR_NOTHROW : m_cur(x.get_cur()), m_first(x.get_first()), m_last(x.get_last()), m_node(x.get_node()) {} @@ -162,15 +171,18 @@ class deque_iterator : m_cur(cur), m_first(first), m_last(last), m_node(node) {} - deque_iterator unconst() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator& operator=(const deque_iterator& x) BOOST_NOEXCEPT_OR_NOTHROW + { m_cur = x.get_cur(); m_first = x.get_first(); m_last = x.get_last(); m_node = x.get_node(); return *this; } + + BOOST_CONTAINER_FORCEINLINE deque_iterator unconst() const BOOST_NOEXCEPT_OR_NOTHROW { return deque_iterator(this->get_cur(), this->get_first(), this->get_last(), this->get_node()); } - reference operator*() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE reference operator*() const BOOST_NOEXCEPT_OR_NOTHROW { return *this->m_cur; } - pointer operator->() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE pointer operator->() const BOOST_NOEXCEPT_OR_NOTHROW { return this->m_cur; } difference_type operator-(const deque_iterator& x) const BOOST_NOEXCEPT_OR_NOTHROW @@ -192,7 +204,7 @@ class deque_iterator return *this; } - deque_iterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator operator++(int) BOOST_NOEXCEPT_OR_NOTHROW { deque_iterator tmp(*this); ++*this; @@ -209,7 +221,7 @@ class deque_iterator return *this; } - deque_iterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator operator--(int) BOOST_NOEXCEPT_OR_NOTHROW { deque_iterator tmp(*this); --*this; @@ -232,48 +244,48 @@ class deque_iterator return *this; } - deque_iterator operator+(difference_type n) const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator operator+(difference_type n) const BOOST_NOEXCEPT_OR_NOTHROW { deque_iterator tmp(*this); return tmp += n; } - deque_iterator& operator-=(difference_type n) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator& operator-=(difference_type n) BOOST_NOEXCEPT_OR_NOTHROW { return *this += -n; } - deque_iterator operator-(difference_type n) const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque_iterator operator-(difference_type n) const BOOST_NOEXCEPT_OR_NOTHROW { deque_iterator tmp(*this); return tmp -= n; } - reference operator[](difference_type n) const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE reference operator[](difference_type n) const BOOST_NOEXCEPT_OR_NOTHROW { return *(*this + n); } - friend bool operator==(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend bool operator==(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_cur == r.m_cur; } - friend bool operator!=(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return l.m_cur != r.m_cur; } - friend bool operator<(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend bool operator<(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return (l.m_node == r.m_node) ? (l.m_cur < r.m_cur) : (l.m_node < r.m_node); } - friend bool operator>(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend bool operator>(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return r < l; } - friend bool operator<=(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend bool operator<=(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return !(r < l); } - friend bool operator>=(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend bool operator>=(const deque_iterator& l, const deque_iterator& r) BOOST_NOEXCEPT_OR_NOTHROW { return !(l < r); } - void priv_set_node(index_pointer new_node) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE void priv_set_node(index_pointer new_node) BOOST_NOEXCEPT_OR_NOTHROW { this->m_node = new_node; this->m_first = *new_node; this->m_last = this->m_first + this->s_buffer_size(); } - friend deque_iterator operator+(difference_type n, deque_iterator x) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE friend deque_iterator operator+(difference_type n, deque_iterator x) BOOST_NOEXCEPT_OR_NOTHROW { return x += n; } }; -} //namespace container_detail { +} //namespace dtl { // Deque base class. It has two purposes. First, its constructor // and destructor allocate (but don't initialize) storage. This makes @@ -308,37 +320,37 @@ class deque_base typedef deque_value_traits traits_t; typedef ptr_alloc_t map_allocator_type; - static size_type s_buffer_size() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE static size_type s_buffer_size() BOOST_NOEXCEPT_OR_NOTHROW { return deque_buf_size::value; } - val_alloc_ptr priv_allocate_node() + BOOST_CONTAINER_FORCEINLINE val_alloc_ptr priv_allocate_node() { return this->alloc().allocate(s_buffer_size()); } - void priv_deallocate_node(val_alloc_ptr p) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE void priv_deallocate_node(val_alloc_ptr p) BOOST_NOEXCEPT_OR_NOTHROW { this->alloc().deallocate(p, s_buffer_size()); } - ptr_alloc_ptr priv_allocate_map(size_type n) + BOOST_CONTAINER_FORCEINLINE ptr_alloc_ptr priv_allocate_map(size_type n) { return this->ptr_alloc().allocate(n); } - void priv_deallocate_map(ptr_alloc_ptr p, size_type n) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE void priv_deallocate_map(ptr_alloc_ptr p, size_type n) BOOST_NOEXCEPT_OR_NOTHROW { this->ptr_alloc().deallocate(p, n); } - typedef container_detail::deque_iterator iterator; - typedef container_detail::deque_iterator const_iterator; + typedef dtl::deque_iterator iterator; + typedef dtl::deque_iterator const_iterator; - deque_base(size_type num_elements, const allocator_type& a) + BOOST_CONTAINER_FORCEINLINE deque_base(size_type num_elements, const allocator_type& a) : members_(a) { this->priv_initialize_map(num_elements); } - explicit deque_base(const allocator_type& a) + BOOST_CONTAINER_FORCEINLINE explicit deque_base(const allocator_type& a) : members_(a) {} - deque_base() + BOOST_CONTAINER_FORCEINLINE deque_base() : members_() {} - explicit deque_base(BOOST_RV_REF(deque_base) x) + BOOST_CONTAINER_FORCEINLINE explicit deque_base(BOOST_RV_REF(deque_base) x) : members_( boost::move(x.ptr_alloc()) , boost::move(x.alloc()) ) {} @@ -369,7 +381,7 @@ class deque_base // if(num_elements){ size_type num_nodes = num_elements / s_buffer_size() + 1; - this->members_.m_map_size = container_detail::max_value((size_type) InitialMapSize, num_nodes + 2); + this->members_.m_map_size = dtl::max_value((size_type) InitialMapSize, num_nodes + 2); this->members_.m_map = this->priv_allocate_map(this->members_.m_map_size); ptr_alloc_ptr nstart = this->members_.m_map + (this->members_.m_map_size - num_nodes) / 2; @@ -459,16 +471,16 @@ class deque_base iterator m_finish; } members_; - ptr_alloc_t &ptr_alloc() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE ptr_alloc_t &ptr_alloc() BOOST_NOEXCEPT_OR_NOTHROW { return members_; } - const ptr_alloc_t &ptr_alloc() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const ptr_alloc_t &ptr_alloc() const BOOST_NOEXCEPT_OR_NOTHROW { return members_; } - allocator_type &alloc() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE allocator_type &alloc() BOOST_NOEXCEPT_OR_NOTHROW { return members_; } - const allocator_type &alloc() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const allocator_type &alloc() const BOOST_NOEXCEPT_OR_NOTHROW { return members_; } }; #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -483,12 +495,13 @@ template > #else template #endif -class deque : protected deque_base +class deque : protected deque_base::type> { #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED private: - typedef deque_base Base; + typedef deque_base::type> Base; #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED + typedef typename real_allocator::type ValAllocator; public: @@ -499,13 +512,13 @@ class deque : protected deque_base ////////////////////////////////////////////// typedef T value_type; - typedef typename ::boost::container::allocator_traits::pointer pointer; - typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; - typedef typename ::boost::container::allocator_traits::reference reference; - typedef typename ::boost::container::allocator_traits::const_reference const_reference; - typedef typename ::boost::container::allocator_traits::size_type size_type; - typedef typename ::boost::container::allocator_traits::difference_type difference_type; - typedef Allocator allocator_type; + typedef ValAllocator allocator_type; + typedef typename ::boost::container::allocator_traits::pointer pointer; + typedef typename ::boost::container::allocator_traits::const_pointer const_pointer; + typedef typename ::boost::container::allocator_traits::reference reference; + typedef typename ::boost::container::allocator_traits::const_reference const_reference; + typedef typename ::boost::container::allocator_traits::size_type size_type; + typedef typename ::boost::container::allocator_traits::difference_type difference_type; typedef BOOST_CONTAINER_IMPDEF(allocator_type) stored_allocator_type; typedef BOOST_CONTAINER_IMPDEF(typename Base::iterator) iterator; typedef BOOST_CONTAINER_IMPDEF(typename Base::const_iterator) const_iterator; @@ -517,9 +530,9 @@ class deque : protected deque_base private: // Internal typedefs BOOST_COPYABLE_AND_MOVABLE(deque) typedef typename Base::ptr_alloc_ptr index_pointer; - static size_type s_buffer_size() + BOOST_CONTAINER_FORCEINLINE static size_type s_buffer_size() { return Base::s_buffer_size(); } - typedef allocator_traits allocator_traits_type; + typedef allocator_traits allocator_traits_type; #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED @@ -535,7 +548,7 @@ class deque : protected deque_base //! Throws: If allocator_type's default constructor throws. //! //! Complexity: Constant. - deque() BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible::value) + BOOST_CONTAINER_FORCEINLINE deque() BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible::value) : Base() {} @@ -544,7 +557,7 @@ class deque : protected deque_base //! Throws: Nothing //! //! Complexity: Constant. - explicit deque(const allocator_type& a) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE explicit deque(const allocator_type& a) BOOST_NOEXCEPT_OR_NOTHROW : Base(a) {} @@ -555,10 +568,10 @@ class deque : protected deque_base //! throws or T's value initialization throws. //! //! Complexity: Linear to n. - explicit deque(size_type n) + BOOST_CONTAINER_FORCEINLINE explicit deque(size_type n) : Base(n, allocator_type()) { - container_detail::insert_value_initialized_n_proxy proxy; + dtl::insert_value_initialized_n_proxy proxy; proxy.uninitialized_copy_n_and_update(this->alloc(), this->begin(), n); //deque_base will deallocate in case of exception... } @@ -572,10 +585,10 @@ class deque : protected deque_base //! Complexity: Linear to n. //! //! Note: Non-standard extension - deque(size_type n, default_init_t) + BOOST_CONTAINER_FORCEINLINE deque(size_type n, default_init_t) : Base(n, allocator_type()) { - container_detail::insert_default_initialized_n_proxy proxy; + dtl::insert_default_initialized_n_proxy proxy; proxy.uninitialized_copy_n_and_update(this->alloc(), this->begin(), n); //deque_base will deallocate in case of exception... } @@ -587,10 +600,10 @@ class deque : protected deque_base //! throws or T's value initialization throws. //! //! Complexity: Linear to n. - explicit deque(size_type n, const allocator_type &a) + BOOST_CONTAINER_FORCEINLINE explicit deque(size_type n, const allocator_type &a) : Base(n, a) { - container_detail::insert_value_initialized_n_proxy proxy; + dtl::insert_value_initialized_n_proxy proxy; proxy.uninitialized_copy_n_and_update(this->alloc(), this->begin(), n); //deque_base will deallocate in case of exception... } @@ -604,10 +617,10 @@ class deque : protected deque_base //! Complexity: Linear to n. //! //! Note: Non-standard extension - deque(size_type n, default_init_t, const allocator_type &a) + BOOST_CONTAINER_FORCEINLINE deque(size_type n, default_init_t, const allocator_type &a) : Base(n, a) { - container_detail::insert_default_initialized_n_proxy proxy; + dtl::insert_default_initialized_n_proxy proxy; proxy.uninitialized_copy_n_and_update(this->alloc(), this->begin(), n); //deque_base will deallocate in case of exception... } @@ -619,7 +632,7 @@ class deque : protected deque_base //! throws or T's copy constructor throws. //! //! Complexity: Linear to n. - deque(size_type n, const value_type& value) + BOOST_CONTAINER_FORCEINLINE deque(size_type n, const value_type& value) : Base(n, allocator_type()) { this->priv_fill_initialize(value); } @@ -630,7 +643,7 @@ class deque : protected deque_base //! throws or T's copy constructor throws. //! //! Complexity: Linear to n. - deque(size_type n, const value_type& value, const allocator_type& a) + BOOST_CONTAINER_FORCEINLINE deque(size_type n, const value_type& value, const allocator_type& a) : Base(n, a) { this->priv_fill_initialize(value); } @@ -642,9 +655,9 @@ class deque : protected deque_base //! //! Complexity: Linear to the range [first, last). template - deque(InIt first, InIt last + BOOST_CONTAINER_FORCEINLINE deque(InIt first, InIt last #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - , typename container_detail::disable_if_convertible + , typename dtl::disable_if_convertible ::type * = 0 #endif ) @@ -661,9 +674,9 @@ class deque : protected deque_base //! //! Complexity: Linear to the range [first, last). template - deque(InIt first, InIt last, const allocator_type& a + BOOST_CONTAINER_FORCEINLINE deque(InIt first, InIt last, const allocator_type& a #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - , typename container_detail::disable_if_convertible + , typename dtl::disable_if_convertible ::type * = 0 #endif ) @@ -680,7 +693,7 @@ class deque : protected deque_base //! throws or T's constructor taking a dereferenced std::initializer_list iterator throws. //! //! Complexity: Linear to the range [il.begin(), il.end()). - deque(std::initializer_list il, const allocator_type& a = allocator_type()) + BOOST_CONTAINER_FORCEINLINE deque(std::initializer_list il, const allocator_type& a = allocator_type()) : Base(a) { this->priv_range_initialize(il.begin(), il.end()); @@ -692,7 +705,7 @@ class deque : protected deque_base //! Postcondition: x == *this. //! //! Complexity: Linear to the elements x contains. - deque(const deque& x) + BOOST_CONTAINER_FORCEINLINE deque(const deque& x) : Base(allocator_traits_type::select_on_container_copy_construction(x.alloc())) { if(x.size()){ @@ -707,7 +720,7 @@ class deque : protected deque_base //! Throws: If allocator_type's copy constructor throws. //! //! Complexity: Constant. - deque(BOOST_RV_REF(deque) x) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE deque(BOOST_RV_REF(deque) x) BOOST_NOEXCEPT_OR_NOTHROW : Base(BOOST_MOVE_BASE(Base, x)) { this->swap_members(x); } @@ -758,7 +771,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Linear to the number of elements. - ~deque() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE ~deque() BOOST_NOEXCEPT_OR_NOTHROW { this->priv_destroy_range(this->members_.m_start, this->members_.m_finish); } @@ -776,14 +789,14 @@ class deque : protected deque_base if (&x != this){ allocator_type &this_alloc = this->alloc(); const allocator_type &x_alloc = x.alloc(); - container_detail::bool_ flag; if(flag && this_alloc != x_alloc){ this->clear(); this->shrink_to_fit(); } - container_detail::assign_alloc(this->alloc(), x.alloc(), flag); - container_detail::assign_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); + dtl::assign_alloc(this->alloc(), x.alloc(), flag); + dtl::assign_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); this->assign(x.cbegin(), x.cend()); } return *this; @@ -806,7 +819,7 @@ class deque : protected deque_base allocator_type &x_alloc = x.alloc(); const bool propagate_alloc = allocator_traits_type:: propagate_on_container_move_assignment::value; - container_detail::bool_ flag; + dtl::bool_ flag; const bool allocators_equal = this_alloc == x_alloc; (void)allocators_equal; //Resources can be transferred if both allocators are //going to be equal after this function (either propagated or already equal) @@ -814,8 +827,8 @@ class deque : protected deque_base //Destroy objects but retain memory in case x reuses it in the future this->clear(); //Move allocator if needed - container_detail::move_alloc(this_alloc, x_alloc, flag); - container_detail::move_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); + dtl::move_alloc(this_alloc, x_alloc, flag); + dtl::move_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); //Nothrow swap this->swap_members(x); } @@ -836,7 +849,7 @@ class deque : protected deque_base //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to the number of elements in il. - deque& operator=(std::initializer_list il) + BOOST_CONTAINER_FORCEINLINE deque& operator=(std::initializer_list il) { this->assign(il.begin(), il.end()); return *this; @@ -848,7 +861,7 @@ class deque : protected deque_base //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to n. - void assign(size_type n, const T& val) + BOOST_CONTAINER_FORCEINLINE void assign(size_type n, const T& val) { typedef constant_iterator c_it; this->assign(c_it(val, n), c_it()); @@ -863,10 +876,10 @@ class deque : protected deque_base template void assign(InIt first, InIt last #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - , typename container_detail::disable_if_or + , typename dtl::disable_if_or < void - , container_detail::is_convertible - , container_detail::is_not_input_iterator + , dtl::is_convertible + , dtl::is_not_input_iterator >::type * = 0 #endif ) @@ -886,10 +899,10 @@ class deque : protected deque_base #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) template void assign(FwdIt first, FwdIt last - , typename container_detail::disable_if_or + , typename dtl::disable_if_or < void - , container_detail::is_convertible - , container_detail::is_input_iterator + , dtl::is_convertible + , dtl::is_input_iterator >::type * = 0 ) { @@ -913,7 +926,7 @@ class deque : protected deque_base //! T's constructor from dereferencing std::initializer_list iterator throws. //! //! Complexity: Linear to il.size(). - void assign(std::initializer_list il) + BOOST_CONTAINER_FORCEINLINE void assign(std::initializer_list il) { this->assign(il.begin(), il.end()); } #endif @@ -922,7 +935,7 @@ class deque : protected deque_base //! Throws: If allocator's copy constructor throws. //! //! Complexity: Constant. - allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW { return Base::alloc(); } //! Effects: Returns a reference to the internal allocator. @@ -932,7 +945,7 @@ class deque : protected deque_base //! Complexity: Constant. //! //! Note: Non-standard extension. - const stored_allocator_type &get_stored_allocator() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const stored_allocator_type &get_stored_allocator() const BOOST_NOEXCEPT_OR_NOTHROW { return Base::alloc(); } ////////////////////////////////////////////// @@ -948,7 +961,7 @@ class deque : protected deque_base //! Complexity: Constant. //! //! Note: Non-standard extension. - stored_allocator_type &get_stored_allocator() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE stored_allocator_type &get_stored_allocator() BOOST_NOEXCEPT_OR_NOTHROW { return Base::alloc(); } //! Effects: Returns an iterator to the first element contained in the deque. @@ -956,7 +969,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - iterator begin() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE iterator begin() BOOST_NOEXCEPT_OR_NOTHROW { return this->members_.m_start; } //! Effects: Returns a const_iterator to the first element contained in the deque. @@ -964,7 +977,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW { return this->members_.m_start; } //! Effects: Returns an iterator to the end of the deque. @@ -972,7 +985,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - iterator end() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE iterator end() BOOST_NOEXCEPT_OR_NOTHROW { return this->members_.m_finish; } //! Effects: Returns a const_iterator to the end of the deque. @@ -980,7 +993,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW { return this->members_.m_finish; } //! Effects: Returns a reverse_iterator pointing to the beginning @@ -989,7 +1002,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW { return reverse_iterator(this->members_.m_finish); } //! Effects: Returns a const_reverse_iterator pointing to the beginning @@ -998,7 +1011,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW { return const_reverse_iterator(this->members_.m_finish); } //! Effects: Returns a reverse_iterator pointing to the end @@ -1007,7 +1020,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW { return reverse_iterator(this->members_.m_start); } //! Effects: Returns a const_reverse_iterator pointing to the end @@ -1016,7 +1029,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW { return const_reverse_iterator(this->members_.m_start); } //! Effects: Returns a const_iterator to the first element contained in the deque. @@ -1024,7 +1037,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW { return this->members_.m_start; } //! Effects: Returns a const_iterator to the end of the deque. @@ -1032,7 +1045,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW { return this->members_.m_finish; } //! Effects: Returns a const_reverse_iterator pointing to the beginning @@ -1041,7 +1054,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW { return const_reverse_iterator(this->members_.m_finish); } //! Effects: Returns a const_reverse_iterator pointing to the end @@ -1050,7 +1063,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW { return const_reverse_iterator(this->members_.m_start); } ////////////////////////////////////////////// @@ -1064,7 +1077,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - bool empty() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE bool empty() const BOOST_NOEXCEPT_OR_NOTHROW { return this->members_.m_finish == this->members_.m_start; } //! Effects: Returns the number of the elements contained in the deque. @@ -1072,7 +1085,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - size_type size() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE size_type size() const BOOST_NOEXCEPT_OR_NOTHROW { return this->members_.m_finish - this->members_.m_start; } //! Effects: Returns the largest possible size of the deque. @@ -1080,7 +1093,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW { return allocator_traits_type::max_size(this->alloc()); } //! Effects: Inserts or erases elements at the end such that @@ -1096,7 +1109,7 @@ class deque : protected deque_base this->priv_erase_last_n(len - new_size); else{ const size_type n = new_size - this->size(); - container_detail::insert_value_initialized_n_proxy proxy; + dtl::insert_value_initialized_n_proxy proxy; priv_insert_back_aux_impl(n, proxy); } } @@ -1116,7 +1129,7 @@ class deque : protected deque_base this->priv_erase_last_n(len - new_size); else{ const size_type n = new_size - this->size(); - container_detail::insert_default_initialized_n_proxy proxy; + dtl::insert_default_initialized_n_proxy proxy; priv_insert_back_aux_impl(n, proxy); } } @@ -1167,7 +1180,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - reference front() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE reference front() BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); return *this->members_.m_start; @@ -1181,7 +1194,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_reference front() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_reference front() const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); return *this->members_.m_start; @@ -1195,7 +1208,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - reference back() BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE reference back() BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); return *(end()-1); @@ -1209,7 +1222,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_reference back() const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_reference back() const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(!this->empty()); return *(cend()-1); @@ -1223,7 +1236,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - reference operator[](size_type n) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE reference operator[](size_type n) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(this->size() > n); return this->members_.m_start[difference_type(n)]; @@ -1237,7 +1250,7 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - const_reference operator[](size_type n) const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_reference operator[](size_type n) const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(this->size() > n); return this->members_.m_start[difference_type(n)]; @@ -1254,7 +1267,7 @@ class deque : protected deque_base //! Complexity: Constant. //! //! Note: Non-standard extension - iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(this->size() >= n); return iterator(this->begin()+n); @@ -1271,7 +1284,7 @@ class deque : protected deque_base //! Complexity: Constant. //! //! Note: Non-standard extension - const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW { BOOST_ASSERT(this->size() >= n); return const_iterator(this->cbegin()+n); @@ -1287,7 +1300,7 @@ class deque : protected deque_base //! Complexity: Constant. //! //! Note: Non-standard extension - size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW { //Range checked priv_index_of return this->priv_index_of(p); @@ -1303,7 +1316,7 @@ class deque : protected deque_base //! Complexity: Constant. //! //! Note: Non-standard extension - size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW + BOOST_CONTAINER_FORCEINLINE size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW { //Range checked priv_index_of return this->priv_index_of(p); @@ -1317,7 +1330,7 @@ class deque : protected deque_base //! Throws: std::range_error if n >= size() //! //! Complexity: Constant. - reference at(size_type n) + BOOST_CONTAINER_FORCEINLINE reference at(size_type n) { this->priv_throw_if_out_of_range(n); return (*this)[n]; @@ -1331,7 +1344,7 @@ class deque : protected deque_base //! Throws: std::range_error if n >= size() //! //! Complexity: Constant. - const_reference at(size_type n) const + BOOST_CONTAINER_FORCEINLINE const_reference at(size_type n) const { this->priv_throw_if_out_of_range(n); return (*this)[n]; @@ -1366,7 +1379,7 @@ class deque : protected deque_base return r; } else{ - typedef container_detail::insert_nonmovable_emplace_proxy type; + typedef dtl::insert_nonmovable_emplace_proxy type; return *this->priv_insert_front_aux_impl(1, type(boost::forward(args)...)); } } @@ -1392,7 +1405,7 @@ class deque : protected deque_base return r; } else{ - typedef container_detail::insert_nonmovable_emplace_proxy type; + typedef dtl::insert_nonmovable_emplace_proxy type; return *this->priv_insert_back_aux_impl(1, type(boost::forward(args)...)); } } @@ -1419,7 +1432,7 @@ class deque : protected deque_base return (this->end()-1); } else{ - typedef container_detail::insert_emplace_proxy type; + typedef dtl::insert_emplace_proxy type; return this->priv_insert_aux_impl(p, 1, type(boost::forward(args)...)); } } @@ -1438,8 +1451,8 @@ class deque : protected deque_base return r;\ }\ else{\ - typedef container_detail::insert_nonmovable_emplace_proxy##N\ - type;\ + typedef dtl::insert_nonmovable_emplace_proxy##N\ + type;\ return *priv_insert_front_aux_impl(1, type(BOOST_MOVE_FWD##N));\ }\ }\ @@ -1455,8 +1468,8 @@ class deque : protected deque_base return r;\ }\ else{\ - typedef container_detail::insert_nonmovable_emplace_proxy##N\ - type;\ + typedef dtl::insert_nonmovable_emplace_proxy##N\ + type;\ return *priv_insert_back_aux_impl(1, type(BOOST_MOVE_FWD##N));\ }\ }\ @@ -1474,8 +1487,8 @@ class deque : protected deque_base return (--this->end());\ }\ else{\ - typedef container_detail::insert_emplace_proxy_arg##N\ - type;\ + typedef dtl::insert_emplace_proxy_arg##N\ + type;\ return this->priv_insert_aux_impl(p, 1, type(BOOST_MOVE_FWD##N));\ }\ } @@ -1563,7 +1576,7 @@ class deque : protected deque_base //! Throws: If memory allocation throws or T's copy constructor throws. //! //! Complexity: Linear to n. - iterator insert(const_iterator pos, size_type n, const value_type& x) + BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator pos, size_type n, const value_type& x) { //Range check of p is done by insert() typedef constant_iterator c_it; @@ -1583,10 +1596,10 @@ class deque : protected deque_base template iterator insert(const_iterator pos, InIt first, InIt last #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - , typename container_detail::disable_if_or + , typename dtl::disable_if_or < void - , container_detail::is_convertible - , container_detail::is_not_input_iterator + , dtl::is_convertible + , dtl::is_not_input_iterator >::type * = 0 #endif ) @@ -1613,7 +1626,7 @@ class deque : protected deque_base //! dereferenced std::initializer_list throws or T's copy constructor throws. //! //! Complexity: Linear to distance [il.begin(), il.end()). - iterator insert(const_iterator pos, std::initializer_list il) + BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator pos, std::initializer_list il) { //Range check os pos is done in insert() return insert(pos, il.begin(), il.end()); @@ -1622,18 +1635,18 @@ class deque : protected deque_base #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) template - iterator insert(const_iterator p, FwdIt first, FwdIt last + BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, FwdIt first, FwdIt last #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED) - , typename container_detail::disable_if_or + , typename dtl::disable_if_or < void - , container_detail::is_convertible - , container_detail::is_input_iterator + , dtl::is_convertible + , dtl::is_input_iterator >::type * = 0 #endif ) { BOOST_ASSERT(this->priv_in_range_or_end(p)); - container_detail::insert_range_proxy proxy(first); + dtl::insert_range_proxy proxy(first); return priv_insert_aux_impl(p, boost::container::iterator_distance(first, last), proxy); } #endif @@ -1649,7 +1662,7 @@ class deque : protected deque_base if (this->members_.m_start.m_cur != this->members_.m_start.m_last - 1) { allocator_traits_type::destroy ( this->alloc() - , container_detail::to_raw_pointer(this->members_.m_start.m_cur) + , boost::movelib::to_raw_pointer(this->members_.m_start.m_cur) ); ++this->members_.m_start.m_cur; } @@ -1669,7 +1682,7 @@ class deque : protected deque_base --this->members_.m_finish.m_cur; allocator_traits_type::destroy ( this->alloc() - , container_detail::to_raw_pointer(this->members_.m_finish.m_cur) + , boost::movelib::to_raw_pointer(this->members_.m_finish.m_cur) ); } else @@ -1743,14 +1756,14 @@ class deque : protected deque_base //! Throws: Nothing. //! //! Complexity: Constant. - void swap(deque &x) + BOOST_CONTAINER_FORCEINLINE void swap(deque &x) BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_swap::value || allocator_traits_type::is_always_equal::value) { this->swap_members(x); - container_detail::bool_ flag; - container_detail::swap_alloc(this->alloc(), x.alloc(), flag); - container_detail::swap_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); + dtl::bool_ flag; + dtl::swap_alloc(this->alloc(), x.alloc(), flag); + dtl::swap_alloc(this->ptr_alloc(), x.ptr_alloc(), flag); } //! Effects: Erases all the elements of the deque. @@ -1781,49 +1794,49 @@ class deque : protected deque_base //! Effects: Returns true if x and y are equal //! //! Complexity: Linear to the number of elements in the container. - friend bool operator==(const deque& x, const deque& y) + BOOST_CONTAINER_FORCEINLINE friend bool operator==(const deque& x, const deque& y) { return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); } //! Effects: Returns true if x and y are unequal //! //! Complexity: Linear to the number of elements in the container. - friend bool operator!=(const deque& x, const deque& y) + BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const deque& x, const deque& y) { return !(x == y); } //! Effects: Returns true if x is less than y //! //! Complexity: Linear to the number of elements in the container. - friend bool operator<(const deque& x, const deque& y) + BOOST_CONTAINER_FORCEINLINE friend bool operator<(const deque& x, const deque& y) { return ::boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); } //! Effects: Returns true if x is greater than y //! //! Complexity: Linear to the number of elements in the container. - friend bool operator>(const deque& x, const deque& y) + BOOST_CONTAINER_FORCEINLINE friend bool operator>(const deque& x, const deque& y) { return y < x; } //! Effects: Returns true if x is equal or less than y //! //! Complexity: Linear to the number of elements in the container. - friend bool operator<=(const deque& x, const deque& y) + BOOST_CONTAINER_FORCEINLINE friend bool operator<=(const deque& x, const deque& y) { return !(y < x); } //! Effects: Returns true if x is equal or greater than y //! //! Complexity: Linear to the number of elements in the container. - friend bool operator>=(const deque& x, const deque& y) + BOOST_CONTAINER_FORCEINLINE friend bool operator>=(const deque& x, const deque& y) { return !(x < y); } //! Effects: x.swap(y) //! //! Complexity: Constant. - friend void swap(deque& x, deque& y) + BOOST_CONTAINER_FORCEINLINE friend void swap(deque& x, deque& y) { x.swap(y); } #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED private: - size_type priv_index_of(const_iterator p) const + BOOST_CONTAINER_FORCEINLINE size_type priv_index_of(const_iterator p) const { BOOST_ASSERT(this->cbegin() <= p); BOOST_ASSERT(p <= this->cend()); @@ -1849,12 +1862,12 @@ class deque : protected deque_base throw_out_of_range("deque::at out of range"); } - bool priv_in_range(const_iterator pos) const + BOOST_CONTAINER_FORCEINLINE bool priv_in_range(const_iterator pos) const { return (this->begin() <= pos) && (pos < this->end()); } - bool priv_in_range_or_end(const_iterator pos) const + BOOST_CONTAINER_FORCEINLINE bool priv_in_range_or_end(const_iterator pos) const { return (this->begin() <= pos) && (pos <= this->end()); } @@ -1874,7 +1887,7 @@ class deque : protected deque_base else { return priv_insert_aux_impl ( p, (size_type)1 - , container_detail::get_insert_value_proxy(::boost::forward(x))); + , dtl::get_insert_value_proxy(::boost::forward(x))); } } @@ -1889,7 +1902,7 @@ class deque : protected deque_base else{ priv_insert_aux_impl ( this->cbegin(), (size_type)1 - , container_detail::get_insert_value_proxy(::boost::forward(x))); + , dtl::get_insert_value_proxy(::boost::forward(x))); } } @@ -1904,43 +1917,43 @@ class deque : protected deque_base else{ priv_insert_aux_impl ( this->cend(), (size_type)1 - , container_detail::get_insert_value_proxy(::boost::forward(x))); + , dtl::get_insert_value_proxy(::boost::forward(x))); } } - bool priv_push_back_simple_available() const + BOOST_CONTAINER_FORCEINLINE bool priv_push_back_simple_available() const { return this->members_.m_map && (this->members_.m_finish.m_cur != (this->members_.m_finish.m_last - 1)); } - T *priv_push_back_simple_pos() const + BOOST_CONTAINER_FORCEINLINE T *priv_push_back_simple_pos() const { - return container_detail::to_raw_pointer(this->members_.m_finish.m_cur); + return boost::movelib::to_raw_pointer(this->members_.m_finish.m_cur); } - void priv_push_back_simple_commit() + BOOST_CONTAINER_FORCEINLINE void priv_push_back_simple_commit() { ++this->members_.m_finish.m_cur; } - bool priv_push_front_simple_available() const + BOOST_CONTAINER_FORCEINLINE bool priv_push_front_simple_available() const { return this->members_.m_map && (this->members_.m_start.m_cur != this->members_.m_start.m_first); } - T *priv_push_front_simple_pos() const - { return container_detail::to_raw_pointer(this->members_.m_start.m_cur) - 1; } + BOOST_CONTAINER_FORCEINLINE T *priv_push_front_simple_pos() const + { return boost::movelib::to_raw_pointer(this->members_.m_start.m_cur) - 1; } - void priv_push_front_simple_commit() + BOOST_CONTAINER_FORCEINLINE void priv_push_front_simple_commit() { --this->members_.m_start.m_cur; } void priv_destroy_range(iterator p, iterator p2) { if(!Base::traits_t::trivial_dctr){ for(;p != p2; ++p){ - allocator_traits_type::destroy(this->alloc(), container_detail::iterator_to_raw_pointer(p)); + allocator_traits_type::destroy(this->alloc(), boost::movelib::iterator_to_raw_pointer(p)); } } } @@ -1949,7 +1962,7 @@ class deque : protected deque_base { if(!Base::traits_t::trivial_dctr){ for(;p != p2; ++p){ - allocator_traits_type::destroy(this->alloc(), container_detail::iterator_to_raw_pointer(p)); + allocator_traits_type::destroy(this->alloc(), boost::movelib::iterator_to_raw_pointer(p)); } } } @@ -2060,7 +2073,7 @@ class deque : protected deque_base return new_start; } - iterator priv_fill_insert(const_iterator pos, size_type n, const value_type& x) + BOOST_CONTAINER_FORCEINLINE iterator priv_fill_insert(const_iterator pos, size_type n, const value_type& x) { typedef constant_iterator c_it; return this->insert(pos, c_it(x, n), c_it()); @@ -2133,7 +2146,7 @@ class deque : protected deque_base this->members_.m_finish.m_cur = this->members_.m_finish.m_last - 1; allocator_traits_type::destroy ( this->alloc() - , container_detail::to_raw_pointer(this->members_.m_finish.m_cur) + , boost::movelib::to_raw_pointer(this->members_.m_finish.m_cur) ); } @@ -2145,7 +2158,7 @@ class deque : protected deque_base { allocator_traits_type::destroy ( this->alloc() - , container_detail::to_raw_pointer(this->members_.m_start.m_cur) + , boost::movelib::to_raw_pointer(this->members_.m_start.m_cur) ); this->priv_deallocate_node(this->members_.m_start.m_first); this->members_.m_start.priv_set_node(this->members_.m_start.m_node + 1); @@ -2220,7 +2233,7 @@ class deque : protected deque_base } else { size_type new_map_size = - this->members_.m_map_size + container_detail::max_value(this->members_.m_map_size, nodes_to_add) + 2; + this->members_.m_map_size + dtl::max_value(this->members_.m_map_size, nodes_to_add) + 2; index_pointer new_map = this->priv_allocate_map(new_map_size); new_nstart = new_map + (new_map_size - new_num_nodes) / 2 @@ -2238,6 +2251,13 @@ class deque : protected deque_base #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED }; +#ifndef BOOST_CONTAINER_NO_CXX17_CTAD +template +deque(InputIterator, InputIterator) -> deque::value_type>; +template +deque(InputIterator, InputIterator, Allocator const&) -> deque::value_type, Allocator>; +#endif + }} #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED diff --git a/bundled/boost-1.62.0/include/boost/container/detail/adaptive_node_pool.hpp b/bundled/boost-1.62.0/include/boost/container/detail/adaptive_node_pool.hpp index 20696100f5..d14e865d85 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/adaptive_node_pool.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/adaptive_node_pool.hpp @@ -37,18 +37,7 @@ namespace boost { namespace container { -namespace container_detail { - -template -struct select_private_adaptive_node_pool_impl -{ - typedef boost::container::container_detail:: - private_adaptive_node_pool_impl - < fake_segment_manager - , unsigned(AlignOnly)*::boost::container::adaptive_pool_flag::align_only - | ::boost::container::adaptive_pool_flag::size_ordered | ::boost::container::adaptive_pool_flag::address_ordered - > type; -}; +namespace dtl { //!Pooled memory allocator using an smart adaptive pool. Includes //!a reference count but the class does not delete itself, this is @@ -60,24 +49,38 @@ template< std::size_t NodeSize , std::size_t OverheadPercent > class private_adaptive_node_pool - : public select_private_adaptive_node_pool_impl<(OverheadPercent == 0)>::type + : public private_adaptive_node_pool_impl_ct + < fake_segment_manager + , MaxFreeBlocks + , NodeSize + , NodesPerBlock + , OverheadPercent + , unsigned(OverheadPercent == 0)*::boost::container::adaptive_pool_flag::align_only + | ::boost::container::adaptive_pool_flag::size_ordered + | ::boost::container::adaptive_pool_flag::address_ordered + > { - typedef typename select_private_adaptive_node_pool_impl::type base_t; + typedef private_adaptive_node_pool_impl_ct + < fake_segment_manager + , MaxFreeBlocks + , NodeSize + , NodesPerBlock + , OverheadPercent + , unsigned(OverheadPercent == 0)*::boost::container::adaptive_pool_flag::align_only + | ::boost::container::adaptive_pool_flag::size_ordered + | ::boost::container::adaptive_pool_flag::address_ordered + > base_t; + //Non-copyable private_adaptive_node_pool(const private_adaptive_node_pool &); private_adaptive_node_pool &operator=(const private_adaptive_node_pool &); public: - typedef typename base_t::multiallocation_chain multiallocation_chain; static const std::size_t nodes_per_block = NodesPerBlock; //!Constructor. Never throws private_adaptive_node_pool() - : base_t(0 - , NodeSize - , NodesPerBlock - , MaxFreeBlocks - , (unsigned char)OverheadPercent) + : base_t(0) {} }; @@ -157,7 +160,7 @@ class shared_adaptive_node_pool default_mutex mutex_; }; -} //namespace container_detail { +} //namespace dtl { } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/detail/adaptive_node_pool_impl.hpp b/bundled/boost-1.62.0/include/boost/container/detail/adaptive_node_pool_impl.hpp index 24c81dda3b..b2070921d9 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/adaptive_node_pool_impl.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/adaptive_node_pool_impl.hpp @@ -28,10 +28,10 @@ // container/detail #include #include -#include +#include #include #include -#include +#include #include // intrusive #include @@ -55,7 +55,7 @@ static const unsigned int address_ordered = 1u << 2u; } //namespace adaptive_pool_flag{ -namespace container_detail { +namespace dtl { template struct hdr_offset_holder_t @@ -87,7 +87,7 @@ template struct less_func { static bool less(SizeType, SizeType, const void *la, const void *ra) - { return &la < &ra; } + { return la < ra; } }; template @@ -97,7 +97,7 @@ struct less_func +template struct block_container_traits { typedef typename bi::make_set_base_hook @@ -116,11 +116,21 @@ struct block_container_traits static void reinsert_was_used(Container &container, typename Container::reference v, bool) { typedef typename Container::const_iterator const_block_iterator; - const const_block_iterator this_block - (Container::s_iterator_to(const_cast(v))); - const_block_iterator next_block(this_block); - if(++next_block != container.cend()){ - if(this_block->free_nodes.size() > next_block->free_nodes.size()){ + typedef typename Container::iterator block_iterator; + typedef typename Container::value_compare value_compare; + + const block_iterator this_block(Container::s_iterator_to(v)); + const const_block_iterator cendit(container.cend()); + block_iterator next_block(this_block); + + if(++next_block != cendit && value_compare()(*next_block, v)){ + const_block_iterator next2_block(next_block); + //Test if v should be swapped with next (optimization) + if(++next2_block == cendit || !value_compare()(*next2_block, v)){ + v.swap_nodes(*next_block); + BOOST_ASSERT(++next_block == this_block); + } + else{ container.erase(this_block); container.insert(v); } @@ -147,7 +157,7 @@ struct block_container_traits }; template -struct block_container_traits +struct block_container_traits { typedef typename bi::make_list_base_hook < bi::void_pointer @@ -193,11 +203,16 @@ struct block_container_traits } }; +///////////////////////////// +// +// adaptive_pool_types +// +///////////////////////////// template struct adaptive_pool_types { typedef VoidPointer void_pointer; - static const bool ordered = (Flags & (adaptive_pool_flag::size_ordered | adaptive_pool_flag::address_ordered)) != 0; + static const unsigned ordered = (Flags & (adaptive_pool_flag::size_ordered | adaptive_pool_flag::address_ordered)); typedef block_container_traits block_container_traits_t; typedef typename block_container_traits_t::hook_t hook_t; typedef hdr_offset_holder_t hdr_offset_holder; @@ -222,95 +237,210 @@ struct adaptive_pool_types typedef typename block_container_traits_t:: template container::type block_container_t; }; -template -inline size_type calculate_alignment - ( size_type overhead_percent, size_type real_node_size - , size_type hdr_size, size_type hdr_offset_size, size_type payload_per_allocation) + +///////////////////////////////////////////// +// +// candidate_power_of_2_ct +// +///////////////////////////////////////////// +template< std::size_t alignment + , std::size_t real_node_size + , std::size_t payload_per_allocation + , std::size_t min_elements_per_block + , std::size_t hdr_size + , std::size_t hdr_offset_size + , std::size_t overhead_percent> +struct candidate_power_of_2_ct_helper { - //to-do: handle real_node_size != node_size - const size_type divisor = overhead_percent*real_node_size; - const size_type dividend = hdr_offset_size*100; - size_type elements_per_subblock = (dividend - 1)/divisor + 1; - size_type candidate_power_of_2 = - upper_power_of_2(elements_per_subblock*real_node_size + hdr_offset_size); - bool overhead_satisfied = false; - //Now calculate the wors-case overhead for a subblock - const size_type max_subblock_overhead = hdr_size + payload_per_allocation; - while(!overhead_satisfied){ - elements_per_subblock = (candidate_power_of_2 - max_subblock_overhead)/real_node_size; - const size_type overhead_size = candidate_power_of_2 - elements_per_subblock*real_node_size; - if(overhead_size*100/candidate_power_of_2 < overhead_percent){ - overhead_satisfied = true; - } - else{ - candidate_power_of_2 <<= 1; - } - } - return candidate_power_of_2; -} + static const std::size_t hdr_subblock_elements_alone = (alignment - hdr_size - payload_per_allocation)/real_node_size; + static const std::size_t hdr_subblock_elements_first = (alignment - hdr_size - payload_per_allocation)/real_node_size; + static const std::size_t elements_per_b_subblock_mid = (alignment - hdr_offset_size)/real_node_size; + static const std::size_t elements_per_b_subblock_end = (alignment - hdr_offset_size - payload_per_allocation)/real_node_size; + static const std::size_t num_b_subblock = + hdr_subblock_elements_alone >= min_elements_per_block + ? 0 + : ( ((hdr_subblock_elements_first + elements_per_b_subblock_end) >= min_elements_per_block) + ? 1 + : 2 + (min_elements_per_block - hdr_subblock_elements_first - elements_per_b_subblock_end - 1)/elements_per_b_subblock_mid + ) + ; + + static const std::size_t num_b_subblock_mid = (num_b_subblock > 1) ? (num_b_subblock - 1) : 0; + + static const std::size_t total_nodes = (num_b_subblock == 0) + ? hdr_subblock_elements_alone + : ( (num_b_subblock == 1) + ? (hdr_subblock_elements_first + elements_per_b_subblock_end) + : (hdr_subblock_elements_first + num_b_subblock_mid*elements_per_b_subblock_mid + elements_per_b_subblock_end) + ) + ; + static const std::size_t total_data = total_nodes*real_node_size; + static const std::size_t total_size = alignment*(num_b_subblock+1); + static const bool overhead_satisfied = (total_size - total_data)*100/total_size < overhead_percent; +}; -template -inline void calculate_num_subblocks - (size_type alignment, size_type real_node_size, size_type elements_per_block - , size_type &num_subblocks, size_type &real_num_node, size_type overhead_percent - , size_type hdr_size, size_type hdr_offset_size, size_type payload_per_allocation) +template< std::size_t initial_alignment + , std::size_t real_node_size + , std::size_t payload_per_allocation + , std::size_t min_elements_per_block + , std::size_t hdr_size + , std::size_t hdr_offset_size + , std::size_t overhead_percent + , bool Loop = true> +struct candidate_power_of_2_ct +{ + typedef candidate_power_of_2_ct_helper + < initial_alignment + , real_node_size + , payload_per_allocation + , min_elements_per_block + , hdr_size + , hdr_offset_size + , overhead_percent> helper_t; + + static const std::size_t candidate_power_of_2 = initial_alignment << std::size_t(!helper_t::overhead_satisfied); + + typedef typename candidate_power_of_2_ct + < candidate_power_of_2 + , real_node_size + , payload_per_allocation + , min_elements_per_block + , hdr_size + , hdr_offset_size + , overhead_percent + , !helper_t::overhead_satisfied + >::type type; + + static const std::size_t alignment = type::alignment; + static const std::size_t num_subblocks = type::num_subblocks; + static const std::size_t real_num_node = type::real_num_node; +}; + +template< std::size_t initial_alignment + , std::size_t real_node_size + , std::size_t payload_per_allocation + , std::size_t min_elements_per_block + , std::size_t hdr_size + , std::size_t hdr_offset_size + , std::size_t overhead_percent + > +struct candidate_power_of_2_ct + < initial_alignment + , real_node_size + , payload_per_allocation + , min_elements_per_block + , hdr_size + , hdr_offset_size + , overhead_percent + , false> +{ + typedef candidate_power_of_2_ct + < initial_alignment + , real_node_size + , payload_per_allocation + , min_elements_per_block + , hdr_size + , hdr_offset_size + , overhead_percent + , false> type; + + typedef candidate_power_of_2_ct_helper + < initial_alignment + , real_node_size + , payload_per_allocation + , min_elements_per_block + , hdr_size + , hdr_offset_size + , overhead_percent> helper_t; + + static const std::size_t alignment = initial_alignment; + static const std::size_t num_subblocks = helper_t::num_b_subblock+1; + static const std::size_t real_num_node = helper_t::total_nodes; +}; + +///////////////////////////////////////////// +// +// candidate_power_of_2_rt +// +///////////////////////////////////////////// +inline void candidate_power_of_2_rt ( std::size_t initial_alignment + , std::size_t real_node_size + , std::size_t payload_per_allocation + , std::size_t min_elements_per_block + , std::size_t hdr_size + , std::size_t hdr_offset_size + , std::size_t overhead_percent + , std::size_t &alignment + , std::size_t &num_subblocks + , std::size_t &real_num_node) { - const size_type hdr_subblock_elements = (alignment - hdr_size - payload_per_allocation)/real_node_size; - size_type elements_per_subblock = (alignment - hdr_offset_size)/real_node_size; - size_type possible_num_subblock = (elements_per_block - 1)/elements_per_subblock + 1; - while(((possible_num_subblock-1)*elements_per_subblock + hdr_subblock_elements) < elements_per_block){ - ++possible_num_subblock; - } - elements_per_subblock = (alignment - hdr_offset_size)/real_node_size; bool overhead_satisfied = false; - while(!overhead_satisfied){ - const size_type total_data = (elements_per_subblock*(possible_num_subblock-1) + hdr_subblock_elements)*real_node_size; - const size_type total_size = alignment*possible_num_subblock; - if((total_size - total_data)*100/total_size < overhead_percent){ - overhead_satisfied = true; - } - else{ - ++possible_num_subblock; - } + std::size_t num_b_subblock = 0; + std::size_t total_nodes = 0; + + while(!overhead_satisfied) + { + std::size_t hdr_subblock_elements_alone = (initial_alignment - hdr_size - payload_per_allocation)/real_node_size; + std::size_t hdr_subblock_elements_first = (initial_alignment - hdr_size - payload_per_allocation)/real_node_size; + std::size_t elements_per_b_subblock_mid = (initial_alignment - hdr_offset_size)/real_node_size; + std::size_t elements_per_b_subblock_end = (initial_alignment - hdr_offset_size - payload_per_allocation)/real_node_size; + + num_b_subblock = + hdr_subblock_elements_alone >= min_elements_per_block + ? 0 + : ( ((hdr_subblock_elements_first + elements_per_b_subblock_end) >= min_elements_per_block) + ? 1 + : 2 + (min_elements_per_block - hdr_subblock_elements_first - elements_per_b_subblock_end - 1)/elements_per_b_subblock_mid + ) + ; + + std::size_t num_b_subblock_mid = (num_b_subblock > 1) ? (num_b_subblock - 1) : 0; + + total_nodes = (num_b_subblock == 0) + ? hdr_subblock_elements_alone + : ( (num_b_subblock == 1) + ? (hdr_subblock_elements_first + elements_per_b_subblock_end) + : (hdr_subblock_elements_first + num_b_subblock_mid*elements_per_b_subblock_mid + elements_per_b_subblock_end) + ) + ; + std::size_t total_data = total_nodes*real_node_size; + std::size_t total_size = initial_alignment*(num_b_subblock+1); + overhead_satisfied = (total_size - total_data)*100/total_size < overhead_percent; + initial_alignment = initial_alignment << std::size_t(!overhead_satisfied); } - num_subblocks = possible_num_subblock; - real_num_node = (possible_num_subblock-1)*elements_per_subblock + hdr_subblock_elements; + alignment = initial_alignment; + num_subblocks = num_b_subblock+1; + real_num_node = total_nodes; } -template -class private_adaptive_node_pool_impl +///////////////////////////////////////////// +// +// private_adaptive_node_pool_impl_common +// +///////////////////////////////////////////// +template< class SegmentManagerBase, unsigned int Flags> +class private_adaptive_node_pool_impl_common { - //Non-copyable - private_adaptive_node_pool_impl(); - private_adaptive_node_pool_impl(const private_adaptive_node_pool_impl &); - private_adaptive_node_pool_impl &operator=(const private_adaptive_node_pool_impl &); - typedef private_adaptive_node_pool_impl this_type; - - typedef typename SegmentManagerBase::void_pointer void_pointer; - static const typename SegmentManagerBase:: - size_type PayloadPerAllocation = SegmentManagerBase::PayloadPerAllocation; + public: + //!Segment manager typedef + typedef SegmentManagerBase segment_manager_base_type; + typedef typename SegmentManagerBase::multiallocation_chain multiallocation_chain; + typedef typename SegmentManagerBase::size_type size_type; //Flags //align_only static const bool AlignOnly = (Flags & adaptive_pool_flag::align_only) != 0; typedef bool_ IsAlignOnly; typedef true_ AlignOnlyTrue; typedef false_ AlignOnlyFalse; - //size_ordered - static const bool SizeOrdered = (Flags & adaptive_pool_flag::size_ordered) != 0; - typedef bool_ IsSizeOrdered; - typedef true_ SizeOrderedTrue; - typedef false_ SizeOrderedFalse; - //address_ordered - static const bool AddressOrdered = (Flags & adaptive_pool_flag::address_ordered) != 0; - typedef bool_ IsAddressOrdered; - typedef true_ AddressOrderedTrue; - typedef false_ AddressOrderedFalse; - public: - typedef typename SegmentManagerBase::multiallocation_chain multiallocation_chain; - typedef typename SegmentManagerBase::size_type size_type; + typedef typename SegmentManagerBase::void_pointer void_pointer; + static const typename SegmentManagerBase:: + size_type PayloadPerAllocation = SegmentManagerBase::PayloadPerAllocation; - private: + typedef typename boost::intrusive::pointer_traits + ::template rebind_pointer::type segment_mngr_base_ptr_t; + + protected: typedef adaptive_pool_types adaptive_pool_types_t; typedef typename adaptive_pool_types_t::free_nodes_t free_nodes_t; @@ -320,125 +450,328 @@ class private_adaptive_node_pool_impl typedef typename block_container_t::iterator block_iterator; typedef typename block_container_t::const_iterator const_block_iterator; typedef typename adaptive_pool_types_t::hdr_offset_holder hdr_offset_holder; + typedef private_adaptive_node_pool_impl_common this_type; static const size_type MaxAlign = alignment_of::value; static const size_type HdrSize = ((sizeof(block_info_t)-1)/MaxAlign+1)*MaxAlign; static const size_type HdrOffsetSize = ((sizeof(hdr_offset_holder)-1)/MaxAlign+1)*MaxAlign; - public: - //!Segment manager typedef - typedef SegmentManagerBase segment_manager_base_type; + segment_mngr_base_ptr_t mp_segment_mngr_base; //Segment manager + block_container_t m_block_container; //Intrusive block list + size_type m_totally_free_blocks; //Free blocks - //!Constructor from a segment manager. Never throws - private_adaptive_node_pool_impl - ( segment_manager_base_type *segment_mngr_base - , size_type node_size - , size_type nodes_per_block - , size_type max_free_blocks - , unsigned char overhead_percent - ) - : m_max_free_blocks(max_free_blocks) - , m_real_node_size(lcm(node_size, size_type(alignment_of::value))) - //Round the size to a power of two value. - //This is the total memory size (including payload) that we want to - //allocate from the general-purpose allocator - , m_real_block_alignment - (AlignOnly ? - upper_power_of_2(HdrSize + m_real_node_size*nodes_per_block) : - calculate_alignment( (size_type)overhead_percent, m_real_node_size - , HdrSize, HdrOffsetSize, PayloadPerAllocation)) - //This is the real number of nodes per block - , m_num_subblocks(0) - , m_real_num_node(AlignOnly ? (m_real_block_alignment - PayloadPerAllocation - HdrSize)/m_real_node_size : 0) - //General purpose allocator - , mp_segment_mngr_base(segment_mngr_base) - , m_block_container() - , m_totally_free_blocks(0) + class block_destroyer; + friend class block_destroyer; + + class block_destroyer + { + public: + block_destroyer(const this_type *impl, multiallocation_chain &chain, const size_type num_subblocks, const size_type real_block_alignment, const size_type real_num_node) + : mp_impl(impl), m_chain(chain), m_num_subblocks(num_subblocks), m_real_block_alignment(real_block_alignment), m_real_num_node(real_num_node) + {} + + void operator()(typename block_container_t::pointer to_deallocate) + { return this->do_destroy(to_deallocate, IsAlignOnly()); } + + private: + void do_destroy(typename block_container_t::pointer to_deallocate, AlignOnlyTrue) + { + BOOST_ASSERT(to_deallocate->free_nodes.size() == m_real_num_node); + m_chain.push_back(to_deallocate); + } + + void do_destroy(typename block_container_t::pointer to_deallocate, AlignOnlyFalse) + { + BOOST_ASSERT(to_deallocate->free_nodes.size() == m_real_num_node); + BOOST_ASSERT(0 == to_deallocate->hdr_offset); + hdr_offset_holder *hdr_off_holder = + mp_impl->priv_first_subblock_from_block(boost::movelib::to_raw_pointer(to_deallocate), m_num_subblocks, m_real_block_alignment); + m_chain.push_back(hdr_off_holder); + } + + const this_type *mp_impl; + multiallocation_chain &m_chain; + const size_type m_num_subblocks; + const size_type m_real_block_alignment; + const size_type m_real_num_node; + }; + + //This macro will activate invariant checking. Slow, but helpful for debugging the code. + //#define BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS + void priv_invariants(const size_type real_num_node, const size_type num_subblocks, const size_type real_block_alignment) const { - if(!AlignOnly){ - calculate_num_subblocks - ( m_real_block_alignment - , m_real_node_size - , nodes_per_block - , m_num_subblocks - , m_real_num_node - , (size_type)overhead_percent - , HdrSize - , HdrOffsetSize - , PayloadPerAllocation); + (void)real_num_node; (void)num_subblocks; (void)real_block_alignment; + #ifdef BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS + //Check that the total totally free blocks are correct + BOOST_ASSERT(m_block_container.size() >= m_totally_free_blocks); + + const const_block_iterator itend(m_block_container.cend()); + const const_block_iterator itbeg(m_block_container.cbegin()); + + { //Try to do checks in a single iteration + const_block_iterator it(itbeg); + size_type total_free_nodes = 0; + size_type total_free_blocks = 0u; + for(; it != itend; ++it){ + if(it != itbeg){ + //Check order invariant + const_block_iterator prev(it); + --prev; + BOOST_ASSERT(!(m_block_container.key_comp()(*it, *prev))); + (void)prev; (void)it; + } + + //free_nodes invariant + const size_type free_nodes = it->free_nodes.size(); + BOOST_ASSERT(free_nodes <= real_num_node); + BOOST_ASSERT(free_nodes != 0); + + //Acummulate total_free_nodes and total_free_blocks + total_free_nodes += free_nodes; + total_free_blocks += it->free_nodes.size() == real_num_node; + + if (!AlignOnly) { + //Check that header offsets are correct + hdr_offset_holder *hdr_off_holder = this->priv_first_subblock_from_block(const_cast(&*it), num_subblocks, real_block_alignment); + for (size_type i = 0, max = num_subblocks; i < max; ++i) { + const size_type offset = reinterpret_cast(const_cast(&*it)) - reinterpret_cast(hdr_off_holder); + (void)offset; + BOOST_ASSERT(hdr_off_holder->hdr_offset == offset); + BOOST_ASSERT(0 == (reinterpret_cast(hdr_off_holder) & (real_block_alignment - 1))); + BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (real_block_alignment - 1))); + hdr_off_holder = reinterpret_cast(reinterpret_cast(hdr_off_holder) + real_block_alignment); + } + } + } + BOOST_ASSERT(total_free_blocks == m_totally_free_blocks); + BOOST_ASSERT(total_free_nodes >= m_totally_free_blocks*real_num_node); } + #endif } - //!Destructor. Deallocates all allocated blocks. Never throws - ~private_adaptive_node_pool_impl() - { this->priv_clear(); } + void priv_deallocate_free_blocks( const size_type max_free_blocks, const size_type real_num_node + , const size_type num_subblocks, const size_type real_block_alignment) + { //Trampoline function to ease inlining + if(m_totally_free_blocks > max_free_blocks){ + this->priv_deallocate_free_blocks_impl(max_free_blocks, real_num_node, num_subblocks, real_block_alignment); + } + } - size_type get_real_num_node() const - { return m_real_num_node; } + hdr_offset_holder *priv_first_subblock_from_block(block_info_t *block, const size_type num_subblocks, const size_type real_block_alignment) const + { return this->priv_first_subblock_from_block(block, num_subblocks, real_block_alignment, IsAlignOnly()); } - //!Returns the segment manager. Never throws - segment_manager_base_type* get_segment_manager_base()const - { return container_detail::to_raw_pointer(mp_segment_mngr_base); } + hdr_offset_holder *priv_first_subblock_from_block(block_info_t *block, const size_type num_subblocks, const size_type real_block_alignment, AlignOnlyFalse) const + { + hdr_offset_holder *const hdr_off_holder = reinterpret_cast + (reinterpret_cast(block) - (num_subblocks-1)*real_block_alignment); + BOOST_ASSERT(hdr_off_holder->hdr_offset == size_type(reinterpret_cast(block) - reinterpret_cast(hdr_off_holder))); + BOOST_ASSERT(0 == ((std::size_t)hdr_off_holder & (real_block_alignment - 1))); + BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (real_block_alignment - 1))); + return hdr_off_holder; + } + + hdr_offset_holder *priv_first_subblock_from_block(block_info_t *block, const size_type num_subblocks, const size_type real_block_alignment, AlignOnlyTrue) const + { + (void)num_subblocks; (void)real_block_alignment; + return reinterpret_cast(block); + } + + void priv_deallocate_free_blocks_impl( const size_type max_free_blocks, const size_type real_num_node + , const size_type num_subblocks, const size_type real_block_alignment) + { + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); + //Now check if we've reached the free nodes limit + //and check if we have free blocks. If so, deallocate as much + //as we can to stay below the limit + multiallocation_chain chain; + { + if(Flags & adaptive_pool_flag::size_ordered){ + const_block_iterator it = m_block_container.cend(); + --it; + size_type totally_free_blocks = m_totally_free_blocks; + + for( ; totally_free_blocks > max_free_blocks; --totally_free_blocks){ + BOOST_ASSERT(it->free_nodes.size() == real_num_node); + void *addr = priv_first_subblock_from_block(const_cast(&*it), num_subblocks, real_block_alignment); + --it; + block_container_traits_t::erase_last(m_block_container); + chain.push_front(void_pointer(addr)); + } + } + else{ + const_block_iterator it = m_block_container.cend(); + size_type totally_free_blocks = m_totally_free_blocks; + + while(totally_free_blocks > max_free_blocks){ + --it; + if(it->free_nodes.size() == real_num_node){ + void *addr = priv_first_subblock_from_block(const_cast(&*it), num_subblocks, real_block_alignment); + it = m_block_container.erase(it); + chain.push_front(void_pointer(addr)); + --totally_free_blocks; + } + } + } + BOOST_ASSERT((m_totally_free_blocks - max_free_blocks) == chain.size()); + m_totally_free_blocks = max_free_blocks; + } + this->mp_segment_mngr_base->deallocate_many(chain); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); + } + + void priv_fill_chain_remaining_to_block + ( multiallocation_chain &chain, size_type target_elem_in_chain, block_info_t &c_info + , char *mem_address, size_type max_node_in_mem + , const size_type real_node_size) + { + BOOST_ASSERT(chain.size() <= target_elem_in_chain); + + //First add all possible nodes to the chain + const size_type left = target_elem_in_chain - chain.size(); + const size_type add_to_chain = (max_node_in_mem < left) ? max_node_in_mem : left; + char *free_mem_address = static_cast(boost::movelib::to_raw_pointer + (chain.incorporate_after(chain.last(), void_pointer(mem_address), real_node_size, add_to_chain))); + //Now store remaining nodes in the free list + if(const size_type free = max_node_in_mem - add_to_chain){ + free_nodes_t & free_nodes = c_info.free_nodes; + free_nodes.incorporate_after(free_nodes.last(), void_pointer(free_mem_address), real_node_size, free); + } + } + + //!Allocates a several blocks of nodes. Can throw + void priv_append_from_new_blocks( size_type min_elements, multiallocation_chain &chain + , const size_type max_free_blocks + , const size_type real_block_alignment, const size_type real_node_size + , const size_type real_num_node, const size_type num_subblocks + , AlignOnlyTrue) + { + (void)num_subblocks; + BOOST_ASSERT(m_block_container.empty()); + BOOST_ASSERT(min_elements > 0); + const size_type n = (min_elements - 1)/real_num_node + 1; + const size_type real_block_size = real_block_alignment - PayloadPerAllocation; + const size_type target_elem_in_chain = chain.size() + min_elements; + for(size_type i = 0; i != n; ++i){ + //We allocate a new NodeBlock and put it the last + //element of the tree + char *mem_address = static_cast + (mp_segment_mngr_base->allocate_aligned(real_block_size, real_block_alignment)); + if(!mem_address){ + //In case of error, free memory deallocating all nodes (the new ones allocated + //in this function plus previously stored nodes in chain). + this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment); + throw_bad_alloc(); + } + block_info_t &c_info = *new(mem_address)block_info_t(); + mem_address += HdrSize; + this->priv_fill_chain_remaining_to_block(chain, target_elem_in_chain, c_info, mem_address, real_num_node, real_node_size); + const size_type free_nodes = c_info.free_nodes.size(); + if(free_nodes){ + const bool is_full = free_nodes == real_num_node; + BOOST_ASSERT(free_nodes < real_num_node); + m_totally_free_blocks += static_cast(is_full); + block_container_traits_t::insert_was_empty(m_block_container, c_info, is_full); + } + } + } + + void priv_append_from_new_blocks( size_type min_elements, multiallocation_chain &chain + , const size_type max_free_blocks + , const size_type real_block_alignment, const size_type real_node_size + , const size_type real_num_node, const size_type num_subblocks + , AlignOnlyFalse) + { + BOOST_ASSERT(m_block_container.empty()); + BOOST_ASSERT(min_elements > 0); + const size_type n = (min_elements - 1)/real_num_node + 1; + const size_type real_block_size = real_block_alignment*num_subblocks - PayloadPerAllocation; + const size_type elements_per_subblock_mid = (real_block_alignment - HdrOffsetSize)/real_node_size; + const size_type elements_per_subblock_end = (real_block_alignment - HdrOffsetSize - PayloadPerAllocation) / real_node_size; + const size_type hdr_subblock_elements = (real_block_alignment - HdrSize - PayloadPerAllocation)/real_node_size; + const size_type target_elem_in_chain = chain.size() + min_elements; + + for(size_type i = 0; i != n; ++i){ + //We allocate a new NodeBlock and put it the last + //element of the tree + char *mem_address = static_cast + (mp_segment_mngr_base->allocate_aligned(real_block_size, real_block_alignment)); + if(!mem_address){ + //In case of error, free memory deallocating all nodes (the new ones allocated + //in this function plus previously stored nodes in chain). + this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment); + throw_bad_alloc(); + } + //First initialize header information on the last subblock + char *hdr_addr = mem_address + real_block_alignment*(num_subblocks-1); + block_info_t &c_info = *new(hdr_addr)block_info_t(); + //Some structural checks + BOOST_ASSERT(static_cast(&static_cast(c_info).hdr_offset) == + static_cast(&c_info)); (void)c_info; + for( size_type subblock = 0, maxsubblock = num_subblocks - 1 + ; subblock < maxsubblock + ; ++subblock, mem_address += real_block_alignment){ + //Initialize header offset mark + new(mem_address) hdr_offset_holder(size_type(hdr_addr - mem_address)); + const size_type elements_per_subblock = (subblock != (maxsubblock - 1)) ? elements_per_subblock_mid : elements_per_subblock_end; + this->priv_fill_chain_remaining_to_block + (chain, target_elem_in_chain, c_info, mem_address + HdrOffsetSize, elements_per_subblock, real_node_size); + } + this->priv_fill_chain_remaining_to_block + (chain, target_elem_in_chain, c_info, hdr_addr + HdrSize, hdr_subblock_elements, real_node_size); + m_totally_free_blocks += static_cast(c_info.free_nodes.size() == real_num_node); + if (c_info.free_nodes.size()) + m_block_container.push_front(c_info); + } + } //!Allocates array of count elements. Can throw - void *allocate_node() + void *priv_allocate_node( const size_type max_free_blocks, const size_type real_block_alignment, const size_type real_node_size + , const size_type real_num_node, const size_type num_subblocks) { - this->priv_invariants(); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); //If there are no free nodes we allocate a new block if(!m_block_container.empty()){ //We take the first free node the multiset can't be empty free_nodes_t &free_nodes = m_block_container.begin()->free_nodes; BOOST_ASSERT(!free_nodes.empty()); const size_type free_nodes_count = free_nodes.size(); - void *first_node = container_detail::to_raw_pointer(free_nodes.pop_front()); + void *first_node = boost::movelib::to_raw_pointer(free_nodes.pop_front()); if(free_nodes.empty()){ block_container_traits_t::erase_first(m_block_container); } - m_totally_free_blocks -= static_cast(free_nodes_count == m_real_num_node); - this->priv_invariants(); + m_totally_free_blocks -= static_cast(free_nodes_count == real_num_node); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); return first_node; } else{ multiallocation_chain chain; - this->priv_append_from_new_blocks(1, chain, IsAlignOnly()); - return container_detail::to_raw_pointer(chain.pop_front()); + this->priv_append_from_new_blocks + (1, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, IsAlignOnly()); + void *node = boost::movelib::to_raw_pointer(chain.pop_front()); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); + return node; } } - //!Deallocates an array pointed by ptr. Never throws - void deallocate_node(void *pElem) - { - this->priv_invariants(); - block_info_t &block_info = *this->priv_block_from_node(pElem); - BOOST_ASSERT(block_info.free_nodes.size() < m_real_num_node); - - //We put the node at the beginning of the free node list - block_info.free_nodes.push_back(void_pointer(pElem)); - - //The loop reinserts all blocks except the last one - this->priv_reinsert_block(block_info, block_info.free_nodes.size() == 1); - this->priv_deallocate_free_blocks(m_max_free_blocks); - this->priv_invariants(); - } - - //!Allocates n nodes. - //!Can throw - void allocate_nodes(const size_type n, multiallocation_chain &chain) + void priv_allocate_nodes( const size_type n, multiallocation_chain &chain + , const size_type max_free_blocks, const size_type real_block_alignment, const size_type real_node_size + , const size_type real_num_node, const size_type num_subblocks) { size_type i = 0; BOOST_TRY{ - this->priv_invariants(); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); while(i != n){ //If there are no free nodes we allocate all needed blocks if (m_block_container.empty()){ - this->priv_append_from_new_blocks(n - i, chain, IsAlignOnly()); + this->priv_append_from_new_blocks + (n - i, chain, max_free_blocks, real_block_alignment, real_node_size, real_num_node, num_subblocks, IsAlignOnly()); BOOST_ASSERT(m_block_container.empty() || (++m_block_container.cbegin() == m_block_container.cend())); BOOST_ASSERT(chain.size() == n); break; } free_nodes_t &free_nodes = m_block_container.begin()->free_nodes; const size_type free_nodes_count_before = free_nodes.size(); - m_totally_free_blocks -= static_cast(free_nodes_count_before == m_real_num_node); + m_totally_free_blocks -= static_cast(free_nodes_count_before == real_num_node); const size_type num_left = n-i; const size_type num_elems = (num_left < free_nodes_count_before) ? num_left : free_nodes_count_before; typedef typename free_nodes_t::iterator free_nodes_iterator; @@ -466,17 +799,38 @@ class private_adaptive_node_pool_impl } } BOOST_CATCH(...){ - this->deallocate_nodes(chain); + this->priv_deallocate_nodes(chain, max_free_blocks, real_num_node, num_subblocks, real_block_alignment); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); BOOST_RETHROW } BOOST_CATCH_END - this->priv_invariants(); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); } - //!Deallocates a linked list of nodes. Never throws - void deallocate_nodes(multiallocation_chain &nodes) + //!Deallocates an array pointed by ptr. Never throws + void priv_deallocate_node( void *pElem + , const size_type max_free_blocks, const size_type real_num_node + , const size_type num_subblocks, const size_type real_block_alignment) + { + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); + block_info_t &block_info = *this->priv_block_from_node(pElem, real_block_alignment); + const size_type prev_free_nodes = block_info.free_nodes.size(); + BOOST_ASSERT(block_info.free_nodes.size() < real_num_node); + + //We put the node at the beginning of the free node list + block_info.free_nodes.push_back(void_pointer(pElem)); + + //The loop reinserts all blocks except the last one + this->priv_reinsert_block(block_info, prev_free_nodes == 0, real_num_node); + this->priv_deallocate_free_blocks(max_free_blocks, real_num_node, num_subblocks, real_block_alignment); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); + } + + void priv_deallocate_nodes( multiallocation_chain &nodes + , const size_type max_free_blocks, const size_type real_num_node + , const size_type num_subblocks, const size_type real_block_alignment) { - this->priv_invariants(); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); //To take advantage of node locality, wait until two //nodes belong to different blocks. Only then reinsert //the block of the first node in the block tree. @@ -492,9 +846,9 @@ class private_adaptive_node_pool_impl free_nodes_iterator itf(nodes.begin()), itbf(itbb); size_type splice_node_count = size_type(-1); while(itf != ite){ - void *pElem = container_detail::to_raw_pointer(container_detail::iterator_to_raw_pointer(itf)); - block_info_t &block_info = *this->priv_block_from_node(pElem); - BOOST_ASSERT(block_info.free_nodes.size() < m_real_num_node); + void *pElem = boost::movelib::to_raw_pointer(boost::movelib::iterator_to_raw_pointer(itf)); + block_info_t &block_info = *this->priv_block_from_node(pElem, real_block_alignment); + BOOST_ASSERT(block_info.free_nodes.size() < real_num_node); ++splice_node_count; //If block change is detected calculate the cached block position in the tree @@ -503,7 +857,7 @@ class private_adaptive_node_pool_impl free_nodes_iterator it(itbb); ++it; nodes.erase_after(itbb, itf, splice_node_count); prev_block_info->free_nodes.incorporate_after(prev_block_info->free_nodes.last(), &*it, &*itbf, splice_node_count); - this->priv_reinsert_block(*prev_block_info, prev_block_was_empty); + this->priv_reinsert_block(*prev_block_info, prev_block_was_empty, real_num_node); splice_node_count = 0; } //Update cache with new data @@ -520,183 +874,50 @@ class private_adaptive_node_pool_impl const size_type splice_node_count = nodes.size(); nodes.clear(); prev_block_info->free_nodes.incorporate_after(prev_block_info->free_nodes.last(), &*itfirst, &*itlast, splice_node_count); - this->priv_reinsert_block(*prev_block_info, prev_block_was_empty); - this->priv_invariants(); - this->priv_deallocate_free_blocks(m_max_free_blocks); + this->priv_reinsert_block(*prev_block_info, prev_block_was_empty, real_num_node); + this->priv_deallocate_free_blocks(max_free_blocks, real_num_node, num_subblocks, real_block_alignment); } + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); } - void deallocate_free_blocks() - { this->priv_deallocate_free_blocks(0); } - - size_type num_free_nodes() + void priv_reinsert_block(block_info_t &prev_block_info, const bool prev_block_was_empty, const size_type real_num_node) { - typedef typename block_container_t::const_iterator citerator; - size_type count = 0; - citerator it (m_block_container.begin()), itend(m_block_container.end()); - for(; it != itend; ++it){ - count += it->free_nodes.size(); + //Cache the free nodes from the block + const size_type this_block_free_nodes = prev_block_info.free_nodes.size(); + const bool is_full = this_block_free_nodes == real_num_node; + + //Update free block count + m_totally_free_blocks += static_cast(is_full); + if(prev_block_was_empty){ + block_container_traits_t::insert_was_empty(m_block_container, prev_block_info, is_full); + } + else{ + block_container_traits_t::reinsert_was_used(m_block_container, prev_block_info, is_full); } - return count; } - void swap(private_adaptive_node_pool_impl &other) + block_info_t *priv_block_from_node(void *node, const size_type real_block_alignment, AlignOnlyFalse) const { - BOOST_ASSERT(m_max_free_blocks == other.m_max_free_blocks); - BOOST_ASSERT(m_real_node_size == other.m_real_node_size); - BOOST_ASSERT(m_real_block_alignment == other.m_real_block_alignment); - BOOST_ASSERT(m_real_num_node == other.m_real_num_node); - std::swap(mp_segment_mngr_base, other.mp_segment_mngr_base); - std::swap(m_totally_free_blocks, other.m_totally_free_blocks); - m_block_container.swap(other.m_block_container); + hdr_offset_holder *hdr_off_holder = + reinterpret_cast((std::size_t)node & size_type(~(real_block_alignment - 1))); + BOOST_ASSERT(0 == ((std::size_t)hdr_off_holder & (real_block_alignment - 1))); + BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (real_block_alignment - 1))); + block_info_t *block = reinterpret_cast + (reinterpret_cast(hdr_off_holder) + hdr_off_holder->hdr_offset); + BOOST_ASSERT(block->hdr_offset == 0); + return block; } - //Deprecated, use deallocate_free_blocks - void deallocate_free_chunks() - { this->priv_deallocate_free_blocks(0); } + block_info_t *priv_block_from_node(void *node, const size_type real_block_alignment, AlignOnlyTrue) const + { + return (block_info_t *)((std::size_t)node & std::size_t(~(real_block_alignment - 1))); + } - private: - - void priv_deallocate_free_blocks(size_type max_free_blocks) - { //Trampoline function to ease inlining - if(m_totally_free_blocks > max_free_blocks){ - this->priv_deallocate_free_blocks_impl(max_free_blocks); - } - } - - void priv_deallocate_free_blocks_impl(size_type max_free_blocks) - { - this->priv_invariants(); - //Now check if we've reached the free nodes limit - //and check if we have free blocks. If so, deallocate as much - //as we can to stay below the limit - multiallocation_chain chain; - { - const const_block_iterator itend = m_block_container.cend(); - const_block_iterator it = itend; - --it; - size_type totally_free_blocks = m_totally_free_blocks; - - for( ; totally_free_blocks > max_free_blocks; --totally_free_blocks){ - BOOST_ASSERT(it->free_nodes.size() == m_real_num_node); - void *addr = priv_first_subblock_from_block(const_cast(&*it)); - --it; - block_container_traits_t::erase_last(m_block_container); - chain.push_front(void_pointer(addr)); - } - BOOST_ASSERT((m_totally_free_blocks - max_free_blocks) == chain.size()); - m_totally_free_blocks = max_free_blocks; - } - this->mp_segment_mngr_base->deallocate_many(chain); - } - - void priv_reinsert_block(block_info_t &prev_block_info, const bool prev_block_was_empty) - { - //Cache the free nodes from the block - const size_type this_block_free_nodes = prev_block_info.free_nodes.size(); - const bool is_full = this_block_free_nodes == m_real_num_node; - - //Update free block count - m_totally_free_blocks += static_cast(is_full); - if(prev_block_was_empty){ - block_container_traits_t::insert_was_empty(m_block_container, prev_block_info, is_full); - } - else{ - block_container_traits_t::reinsert_was_used(m_block_container, prev_block_info, is_full); - } - } - - class block_destroyer; - friend class block_destroyer; - - class block_destroyer - { - public: - block_destroyer(const this_type *impl, multiallocation_chain &chain) - : mp_impl(impl), m_chain(chain) - {} - - void operator()(typename block_container_t::pointer to_deallocate) - { return this->do_destroy(to_deallocate, IsAlignOnly()); } - - private: - void do_destroy(typename block_container_t::pointer to_deallocate, AlignOnlyTrue) - { - BOOST_ASSERT(to_deallocate->free_nodes.size() == mp_impl->m_real_num_node); - m_chain.push_back(to_deallocate); - } - - void do_destroy(typename block_container_t::pointer to_deallocate, AlignOnlyFalse) - { - BOOST_ASSERT(to_deallocate->free_nodes.size() == mp_impl->m_real_num_node); - BOOST_ASSERT(0 == to_deallocate->hdr_offset); - hdr_offset_holder *hdr_off_holder = - mp_impl->priv_first_subblock_from_block(container_detail::to_raw_pointer(to_deallocate)); - m_chain.push_back(hdr_off_holder); - } - - const this_type *mp_impl; - multiallocation_chain &m_chain; - }; - - //This macro will activate invariant checking. Slow, but helpful for debugging the code. - //#define BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS - void priv_invariants() - #ifdef BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS - #undef BOOST_CONTAINER_ADAPTIVE_NODE_POOL_CHECK_INVARIANTS - { - const const_block_iterator itend(m_block_container.end()); - - { //We iterate through the block tree to free the memory - const_block_iterator it(m_block_container.begin()); - - if(it != itend){ - for(++it; it != itend; ++it){ - const_block_iterator prev(it); - --prev; - BOOST_ASSERT(*prev < *it); - (void)prev; (void)it; - } - } - } - { //Check that the total free nodes are correct - const_block_iterator it(m_block_container.cbegin()); - size_type total_free_nodes = 0; - for(; it != itend; ++it){ - total_free_nodes += it->free_nodes.size(); - } - BOOST_ASSERT(total_free_nodes >= m_totally_free_blocks*m_real_num_node); - } - { //Check that the total totally free blocks are correct - BOOST_ASSERT(m_block_container.size() >= m_totally_free_blocks); - const_block_iterator it = m_block_container.cend(); - size_type total_free_blocks = m_totally_free_blocks; - while(total_free_blocks--){ - BOOST_ASSERT((--it)->free_nodes.size() == m_real_num_node); - } - } - - if(!AlignOnly){ - //Check that header offsets are correct - const_block_iterator it = m_block_container.begin(); - for(; it != itend; ++it){ - hdr_offset_holder *hdr_off_holder = this->priv_first_subblock_from_block(const_cast(&*it)); - for(size_type i = 0, max = m_num_subblocks; i < max; ++i){ - const size_type offset = reinterpret_cast(const_cast(&*it)) - reinterpret_cast(hdr_off_holder); - BOOST_ASSERT(hdr_off_holder->hdr_offset == offset); - BOOST_ASSERT(0 == ((size_type)hdr_off_holder & (m_real_block_alignment - 1))); - BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1))); - hdr_off_holder = reinterpret_cast(reinterpret_cast(hdr_off_holder) + m_real_block_alignment); - } - } - } - } - #else - {} //empty - #endif + block_info_t *priv_block_from_node(void *node, const size_type real_block_alignment) const + { return this->priv_block_from_node(node, real_block_alignment, IsAlignOnly()); } //!Deallocates all used memory. Never throws - void priv_clear() + void priv_clear(const size_type num_subblocks, const size_type real_block_alignment, const size_type real_num_node) { #ifndef NDEBUG block_iterator it = m_block_container.begin(); @@ -704,179 +925,332 @@ class private_adaptive_node_pool_impl size_type n_free_nodes = 0; for(; it != itend; ++it){ //Check for memory leak - BOOST_ASSERT(it->free_nodes.size() == m_real_num_node); + BOOST_ASSERT(it->free_nodes.size() == real_num_node); ++n_free_nodes; } BOOST_ASSERT(n_free_nodes == m_totally_free_blocks); #endif //Check for memory leaks - this->priv_invariants(); + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); multiallocation_chain chain; - m_block_container.clear_and_dispose(block_destroyer(this, chain)); + m_block_container.clear_and_dispose(block_destroyer(this, chain, num_subblocks, real_block_alignment, real_num_node)); this->mp_segment_mngr_base->deallocate_many(chain); m_totally_free_blocks = 0; + this->priv_invariants(real_num_node, num_subblocks, real_block_alignment); } - block_info_t *priv_block_from_node(void *node, AlignOnlyFalse) const + public: + private_adaptive_node_pool_impl_common(segment_manager_base_type *segment_mngr_base) + //General purpose allocator + : mp_segment_mngr_base(segment_mngr_base) + , m_block_container() + , m_totally_free_blocks(0) + {} + + size_type num_free_nodes() { - hdr_offset_holder *hdr_off_holder = - reinterpret_cast((std::size_t)node & size_type(~(m_real_block_alignment - 1))); - BOOST_ASSERT(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1))); - BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1))); - block_info_t *block = reinterpret_cast - (reinterpret_cast(hdr_off_holder) + hdr_off_holder->hdr_offset); - BOOST_ASSERT(block->hdr_offset == 0); - return block; + typedef typename block_container_t::const_iterator citerator; + size_type count = 0; + citerator it (m_block_container.begin()), itend(m_block_container.end()); + for(; it != itend; ++it){ + count += it->free_nodes.size(); + } + return count; } - block_info_t *priv_block_from_node(void *node, AlignOnlyTrue) const + void swap(private_adaptive_node_pool_impl_common &other) { - return (block_info_t *)((std::size_t)node & std::size_t(~(m_real_block_alignment - 1))); + std::swap(mp_segment_mngr_base, other.mp_segment_mngr_base); + std::swap(m_totally_free_blocks, other.m_totally_free_blocks); + m_block_container.swap(other.m_block_container); } - block_info_t *priv_block_from_node(void *node) const - { return this->priv_block_from_node(node, IsAlignOnly()); } + //!Returns the segment manager. Never throws + segment_manager_base_type* get_segment_manager_base()const + { return boost::movelib::to_raw_pointer(mp_segment_mngr_base); } +}; + +template< class SizeType + , std::size_t HdrSize + , std::size_t PayloadPerAllocation + , std::size_t RealNodeSize + , std::size_t NodesPerBlock + , std::size_t HdrOffsetSize + , std::size_t OverheadPercent + , bool AlignOnly> +struct calculate_alignment_ct +{ + static const std::size_t alignment = upper_power_of_2_ct::value; + static const std::size_t num_subblocks = 0; + static const std::size_t real_num_node = (alignment - PayloadPerAllocation - HdrSize)/RealNodeSize; +}; + +template< class SizeType + , std::size_t HdrSize + , std::size_t PayloadPerAllocation + , std::size_t RealNodeSize + , std::size_t NodesPerBlock + , std::size_t HdrOffsetSize + , std::size_t OverheadPercent> +struct calculate_alignment_ct + < SizeType + , HdrSize + , PayloadPerAllocation + , RealNodeSize + , NodesPerBlock + , HdrOffsetSize + , OverheadPercent + , false> +{ + typedef typename candidate_power_of_2_ct + < upper_power_of_2_ct::value + , RealNodeSize + , PayloadPerAllocation + , NodesPerBlock + , HdrSize + , HdrOffsetSize + , OverheadPercent + >::type type; + + static const std::size_t alignment = type::alignment; + static const std::size_t num_subblocks = type::num_subblocks; + static const std::size_t real_num_node = type::real_num_node; +}; + + +///////////////////////////////////////////// +// +// private_adaptive_node_pool_impl_ct +// +///////////////////////////////////////////// +template< class SegmentManagerBase + , std::size_t MaxFreeBlocks + , std::size_t NodeSize + , std::size_t NodesPerBlock + , std::size_t OverheadPercent + , unsigned int Flags> +class private_adaptive_node_pool_impl_ct + : public private_adaptive_node_pool_impl_common +{ + typedef private_adaptive_node_pool_impl_common base_t; + + //Non-copyable + private_adaptive_node_pool_impl_ct(); + private_adaptive_node_pool_impl_ct(const private_adaptive_node_pool_impl_ct &); + private_adaptive_node_pool_impl_ct &operator=(const private_adaptive_node_pool_impl_ct &); + + public: + typedef typename base_t::void_pointer void_pointer; + typedef typename base_t::size_type size_type; + typedef typename base_t::multiallocation_chain multiallocation_chain; + typedef typename base_t::segment_manager_base_type segment_manager_base_type; + + static const typename base_t::size_type PayloadPerAllocation = base_t::PayloadPerAllocation; - hdr_offset_holder *priv_first_subblock_from_block(block_info_t *block) const - { return this->priv_first_subblock_from_block(block, IsAlignOnly()); } + //align_only + static const bool AlignOnly = base_t::AlignOnly; + + private: + static const size_type MaxAlign = base_t::MaxAlign; + static const size_type HdrSize = base_t::HdrSize; + static const size_type HdrOffsetSize = base_t::HdrOffsetSize; + + static const size_type RealNodeSize = lcm_ct::value>::value; + + typedef calculate_alignment_ct + < size_type, HdrSize, PayloadPerAllocation + , RealNodeSize, NodesPerBlock, HdrOffsetSize, OverheadPercent, AlignOnly> data_t; + + //Round the size to a power of two value. + //This is the total memory size (including payload) that we want to + //allocate from the general-purpose allocator + static const size_type NumSubBlocks = data_t::num_subblocks; + static const size_type RealNumNode = data_t::real_num_node; + static const size_type RealBlockAlignment = data_t::alignment; + + public: + + //!Constructor from a segment manager. Never throws + private_adaptive_node_pool_impl_ct(typename base_t::segment_manager_base_type *segment_mngr_base) + //General purpose allocator + : base_t(segment_mngr_base) + {} + + //!Destructor. Deallocates all allocated blocks. Never throws + ~private_adaptive_node_pool_impl_ct() + { this->priv_clear(NumSubBlocks, data_t::alignment, RealNumNode); } - hdr_offset_holder *priv_first_subblock_from_block(block_info_t *block, AlignOnlyFalse) const + size_type get_real_num_node() const + { return RealNumNode; } + + //!Allocates array of count elements. Can throw + void *allocate_node() { - hdr_offset_holder *const hdr_off_holder = reinterpret_cast - (reinterpret_cast(block) - (m_num_subblocks-1)*m_real_block_alignment); - BOOST_ASSERT(hdr_off_holder->hdr_offset == size_type(reinterpret_cast(block) - reinterpret_cast(hdr_off_holder))); - BOOST_ASSERT(0 == ((std::size_t)hdr_off_holder & (m_real_block_alignment - 1))); - BOOST_ASSERT(0 == (hdr_off_holder->hdr_offset & (m_real_block_alignment - 1))); - return hdr_off_holder; + return this->priv_allocate_node + (MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks); } - hdr_offset_holder *priv_first_subblock_from_block(block_info_t *block, AlignOnlyTrue) const + //!Allocates n nodes. + //!Can throw + void allocate_nodes(const size_type n, multiallocation_chain &chain) { - return reinterpret_cast(block); + this->priv_allocate_nodes + (n, chain, MaxFreeBlocks, data_t::alignment, RealNodeSize, RealNumNode, NumSubBlocks); } - void priv_dispatch_block_chain_or_free - ( multiallocation_chain &chain, block_info_t &c_info, size_type num_node - , char *mem_address, size_type total_elements, bool insert_block_if_free) + //!Deallocates an array pointed by ptr. Never throws + void deallocate_node(void *pElem) { - BOOST_ASSERT(chain.size() <= total_elements); - //First add all possible nodes to the chain - const size_type left = total_elements - chain.size(); - const size_type max_chain = (num_node < left) ? num_node : left; - mem_address = static_cast(container_detail::to_raw_pointer - (chain.incorporate_after(chain.last(), void_pointer(mem_address), m_real_node_size, max_chain))); - //Now store remaining nodes in the free list - if(const size_type max_free = num_node - max_chain){ - free_nodes_t & free_nodes = c_info.free_nodes; - free_nodes.incorporate_after(free_nodes.last(), void_pointer(mem_address), m_real_node_size, max_free); - if(insert_block_if_free){ - m_block_container.push_front(c_info); - } - } + this->priv_deallocate_node(pElem, MaxFreeBlocks, RealNumNode, NumSubBlocks, RealBlockAlignment); } - //!Allocates a several blocks of nodes. Can throw - void priv_append_from_new_blocks(size_type min_elements, multiallocation_chain &chain, AlignOnlyTrue) + //!Deallocates a linked list of nodes. Never throws + void deallocate_nodes(multiallocation_chain &nodes) { - BOOST_ASSERT(m_block_container.empty()); - BOOST_ASSERT(min_elements > 0); - const size_type n = (min_elements - 1)/m_real_num_node + 1; - const size_type real_block_size = m_real_block_alignment - PayloadPerAllocation; - const size_type total_elements = chain.size() + min_elements; - for(size_type i = 0; i != n; ++i){ - //We allocate a new NodeBlock and put it the last - //element of the tree - char *mem_address = static_cast - (mp_segment_mngr_base->allocate_aligned(real_block_size, m_real_block_alignment)); - if(!mem_address){ - //In case of error, free memory deallocating all nodes (the new ones allocated - //in this function plus previously stored nodes in chain). - this->deallocate_nodes(chain); - throw_bad_alloc(); - } - block_info_t &c_info = *new(mem_address)block_info_t(); - mem_address += HdrSize; - if(i != (n-1)){ - chain.incorporate_after(chain.last(), void_pointer(mem_address), m_real_node_size, m_real_num_node); - } - else{ - this->priv_dispatch_block_chain_or_free(chain, c_info, m_real_num_node, mem_address, total_elements, true); - } - } + this->priv_deallocate_nodes(nodes, MaxFreeBlocks, RealNumNode, NumSubBlocks, data_t::alignment); } - void priv_append_from_new_blocks(size_type min_elements, multiallocation_chain &chain, AlignOnlyFalse) - { - BOOST_ASSERT(m_block_container.empty()); - BOOST_ASSERT(min_elements > 0); - const size_type n = (min_elements - 1)/m_real_num_node + 1; - const size_type real_block_size = m_real_block_alignment*m_num_subblocks - PayloadPerAllocation; - const size_type elements_per_subblock = (m_real_block_alignment - HdrOffsetSize)/m_real_node_size; - const size_type hdr_subblock_elements = (m_real_block_alignment - HdrSize - PayloadPerAllocation)/m_real_node_size; - const size_type total_elements = chain.size() + min_elements; + void deallocate_free_blocks() + { this->priv_deallocate_free_blocks(0, RealNumNode, NumSubBlocks, data_t::alignment); } - for(size_type i = 0; i != n; ++i){ - //We allocate a new NodeBlock and put it the last - //element of the tree - char *mem_address = static_cast - (mp_segment_mngr_base->allocate_aligned(real_block_size, m_real_block_alignment)); - if(!mem_address){ - //In case of error, free memory deallocating all nodes (the new ones allocated - //in this function plus previously stored nodes in chain). - this->deallocate_nodes(chain); - throw_bad_alloc(); - } - //First initialize header information on the last subblock - char *hdr_addr = mem_address + m_real_block_alignment*(m_num_subblocks-1); - block_info_t &c_info = *new(hdr_addr)block_info_t(); - //Some structural checks - BOOST_ASSERT(static_cast(&static_cast(c_info).hdr_offset) == - static_cast(&c_info)); (void)c_info; - if(i != (n-1)){ - for( size_type subblock = 0, maxsubblock = m_num_subblocks - 1 - ; subblock < maxsubblock - ; ++subblock, mem_address += m_real_block_alignment){ - //Initialize header offset mark - new(mem_address) hdr_offset_holder(size_type(hdr_addr - mem_address)); - chain.incorporate_after - (chain.last(), void_pointer(mem_address + HdrOffsetSize), m_real_node_size, elements_per_subblock); - } - chain.incorporate_after(chain.last(), void_pointer(hdr_addr + HdrSize), m_real_node_size, hdr_subblock_elements); - } - else{ - for( size_type subblock = 0, maxsubblock = m_num_subblocks - 1 - ; subblock < maxsubblock - ; ++subblock, mem_address += m_real_block_alignment){ - //Initialize header offset mark - new(mem_address) hdr_offset_holder(size_type(hdr_addr - mem_address)); - this->priv_dispatch_block_chain_or_free - (chain, c_info, elements_per_subblock, mem_address + HdrOffsetSize, total_elements, false); - } - this->priv_dispatch_block_chain_or_free - (chain, c_info, hdr_subblock_elements, hdr_addr + HdrSize, total_elements, true); - } - } - } + //Deprecated, use deallocate_free_blocks + void deallocate_free_chunks() + { this->priv_deallocate_free_blocks(0, RealNumNode, NumSubBlocks, data_t::alignment); } +}; + +///////////////////////////////////////////// +// +// private_adaptive_node_pool_impl_rt +// +///////////////////////////////////////////// +template +struct private_adaptive_node_pool_impl_rt_data +{ + typedef SizeType size_type; + + private_adaptive_node_pool_impl_rt_data(size_type max_free_blocks, size_type real_node_size) + : m_max_free_blocks(max_free_blocks), m_real_node_size(real_node_size) + , m_real_block_alignment(), m_num_subblocks(), m_real_num_node() + {} - private: - typedef typename boost::intrusive::pointer_traits - ::template rebind_pointer::type segment_mngr_base_ptr_t; const size_type m_max_free_blocks; const size_type m_real_node_size; //Round the size to a power of two value. //This is the total memory size (including payload) that we want to //allocate from the general-purpose allocator - const size_type m_real_block_alignment; + size_type m_real_block_alignment; size_type m_num_subblocks; //This is the real number of nodes per block - //const size_type m_real_num_node; - segment_mngr_base_ptr_t mp_segment_mngr_base; //Segment manager - block_container_t m_block_container; //Intrusive block list - size_type m_totally_free_blocks; //Free blocks }; -} //namespace container_detail { + +template +class private_adaptive_node_pool_impl_rt + : private private_adaptive_node_pool_impl_rt_data + , public private_adaptive_node_pool_impl_common +{ + typedef private_adaptive_node_pool_impl_common impl_t; + typedef private_adaptive_node_pool_impl_rt_data data_t; + + //Non-copyable + private_adaptive_node_pool_impl_rt(); + private_adaptive_node_pool_impl_rt(const private_adaptive_node_pool_impl_rt &); + private_adaptive_node_pool_impl_rt &operator=(const private_adaptive_node_pool_impl_rt &); + + protected: + + typedef typename impl_t::void_pointer void_pointer; + typedef typename impl_t::size_type size_type; + typedef typename impl_t::multiallocation_chain multiallocation_chain; + + static const typename impl_t::size_type PayloadPerAllocation = impl_t::PayloadPerAllocation; + + //Flags + //align_only + static const bool AlignOnly = impl_t::AlignOnly; + + static const size_type HdrSize = impl_t::HdrSize; + static const size_type HdrOffsetSize = impl_t::HdrOffsetSize; + + public: + + //!Segment manager typedef + typedef SegmentManagerBase segment_manager_base_type; + + //!Constructor from a segment manager. Never throws + private_adaptive_node_pool_impl_rt + ( segment_manager_base_type *segment_mngr_base + , size_type node_size + , size_type nodes_per_block + , size_type max_free_blocks + , unsigned char overhead_percent + ) + : data_t(max_free_blocks, lcm(node_size, size_type(alignment_of::value))) + , impl_t(segment_mngr_base) + { + if(AlignOnly){ + this->m_real_block_alignment = upper_power_of_2(HdrSize + this->m_real_node_size*nodes_per_block); + this->m_real_num_node = (this->m_real_block_alignment - PayloadPerAllocation - HdrSize)/this->m_real_node_size; + } + else{ + candidate_power_of_2_rt ( upper_power_of_2(HdrSize + PayloadPerAllocation + this->m_real_node_size) + , this->m_real_node_size + , PayloadPerAllocation + , nodes_per_block + , HdrSize + , HdrOffsetSize + , overhead_percent + , this->m_real_block_alignment + , this->m_num_subblocks + , this->m_real_num_node); + } + } + + //!Destructor. Deallocates all allocated blocks. Never throws + ~private_adaptive_node_pool_impl_rt() + { this->priv_clear(this->m_num_subblocks, this->m_real_block_alignment, this->m_real_num_node); } + + size_type get_real_num_node() const + { return this->m_real_num_node; } + + //!Allocates array of count elements. Can throw + void *allocate_node() + { + return this->priv_allocate_node + (this->m_max_free_blocks, this->m_real_block_alignment, this->m_real_node_size, this->m_real_num_node, this->m_num_subblocks); + } + + //!Allocates n nodes. + //!Can throw + void allocate_nodes(const size_type n, multiallocation_chain &chain) + { + + this->priv_allocate_nodes + (n, chain, this->m_max_free_blocks, this->m_real_block_alignment, this->m_real_node_size, this->m_real_num_node, this->m_num_subblocks); + } + + //!Deallocates an array pointed by ptr. Never throws + void deallocate_node(void *pElem) + { + this->priv_deallocate_node(pElem, this->m_max_free_blocks, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment); + } + + //!Deallocates a linked list of nodes. Never throws + void deallocate_nodes(multiallocation_chain &nodes) + { + this->priv_deallocate_nodes(nodes, this->m_max_free_blocks, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment); + } + + void deallocate_free_blocks() + { this->priv_deallocate_free_blocks(0, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment); } + + //Deprecated, use deallocate_free_blocks + void deallocate_free_chunks() + { this->priv_deallocate_free_blocks(0, this->m_real_num_node, this->m_num_subblocks, this->m_real_block_alignment); } +}; + +} //namespace dtl { } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/detail/addressof.hpp b/bundled/boost-1.62.0/include/boost/container/detail/addressof.hpp index fedbdb91d1..b3b8a4dd6f 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/addressof.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/addressof.hpp @@ -22,7 +22,7 @@ namespace boost { namespace container { -namespace container_detail { +namespace dtl { template BOOST_CONTAINER_FORCEINLINE T* addressof(T& obj) @@ -34,7 +34,7 @@ BOOST_CONTAINER_FORCEINLINE T* addressof(T& obj) ))); } -} //namespace container_detail { +} //namespace dtl { } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/detail/advanced_insert_int.hpp b/bundled/boost-1.62.0/include/boost/container/detail/advanced_insert_int.hpp index 278cd1b3f1..17ceb013fd 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/advanced_insert_int.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/advanced_insert_int.hpp @@ -31,7 +31,7 @@ #include #include #include -#include +#include #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) #include #endif @@ -41,7 +41,7 @@ #include #include -namespace boost { namespace container { namespace container_detail { +namespace boost { namespace container { namespace dtl { template struct move_insert_range_proxy @@ -107,8 +107,8 @@ struct insert_n_copies_proxy void copy_n_and_update(Allocator &, Iterator p, size_type n) const { - for (; 0 < n; --n, ++p){ - *p = v_; + for (; 0 < n; --n, ++p){ + *p = v_; } } @@ -125,8 +125,16 @@ struct insert_value_initialized_n_proxy void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const { boost::container::uninitialized_value_init_alloc_n(a, n, p); } - void copy_n_and_update(Allocator &, Iterator, size_type) const - { BOOST_ASSERT(false); } + void copy_n_and_update(Allocator &a, Iterator p, size_type n) const + { + for (; 0 < n; --n, ++p){ + typename aligned_storage::value>::type v; + value_type *vp = reinterpret_cast(v.data); + alloc_traits::construct(a, vp); + value_destructor on_exit(a, *vp); (void)on_exit; + *p = ::boost::move(*vp); + } + } }; template @@ -139,8 +147,18 @@ struct insert_default_initialized_n_proxy void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const { boost::container::uninitialized_default_init_alloc_n(a, n, p); } - void copy_n_and_update(Allocator &, Iterator, size_type) const - { BOOST_ASSERT(false); } + void copy_n_and_update(Allocator &a, Iterator p, size_type n) const + { + if(!is_pod::value){ + for (; 0 < n; --n, ++p){ + typename aligned_storage::value>::type v; + value_type *vp = reinterpret_cast(v.data); + alloc_traits::construct(a, vp, default_init); + value_destructor on_exit(a, *vp); (void)on_exit; + *p = ::boost::move(*vp); + } + } + } }; template @@ -157,13 +175,13 @@ struct insert_copy_proxy void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const { BOOST_ASSERT(n == 1); (void)n; - alloc_traits::construct( a, iterator_to_raw_pointer(p), v_); + alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), v_); } void copy_n_and_update(Allocator &, Iterator p, size_type n) const { BOOST_ASSERT(n == 1); (void)n; - *p =v_; + *p = v_; } const value_type &v_; @@ -184,7 +202,7 @@ struct insert_move_proxy void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n) const { BOOST_ASSERT(n == 1); (void)n; - alloc_traits::construct( a, iterator_to_raw_pointer(p), ::boost::move(v_) ); + alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), ::boost::move(v_) ); } void copy_n_and_update(Allocator &, Iterator p, size_type n) const @@ -208,7 +226,7 @@ insert_copy_proxy get_insert_value_proxy(const typename boost::co return insert_copy_proxy(v); } -}}} //namespace boost { namespace container { namespace container_detail { +}}} //namespace boost { namespace container { namespace dtl { #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) @@ -217,7 +235,7 @@ insert_copy_proxy get_insert_value_proxy(const typename boost::co namespace boost { namespace container { -namespace container_detail { +namespace dtl { template struct insert_nonmovable_emplace_proxy @@ -240,7 +258,7 @@ struct insert_nonmovable_emplace_proxy void priv_uninitialized_copy_some_and_update(Allocator &a, const index_tuple&, Iterator p, size_type n) { BOOST_ASSERT(n == 1); (void)n; - alloc_traits::construct( a, iterator_to_raw_pointer(p), ::boost::forward(get(this->args_))... ); + alloc_traits::construct( a, boost::movelib::iterator_to_raw_pointer(p), ::boost::forward(get(this->args_))... ); } protected: @@ -271,7 +289,7 @@ struct insert_emplace_proxy { BOOST_ASSERT(n ==1); (void)n; typename aligned_storage::value>::type v; - value_type *vp = static_cast(static_cast(&v)); + value_type *vp = reinterpret_cast(v.data); alloc_traits::construct(a, vp, ::boost::forward(get(this->args_))...); BOOST_TRY{ @@ -301,7 +319,7 @@ struct insert_emplace_proxy struct insert_emplace_proxy::value_type>::type + , typename boost::container::dtl::add_const::value_type>::type > : public insert_copy_proxy { @@ -321,7 +339,7 @@ struct insert_emplace_proxy struct insert_emplace_proxy::value_type>::type & + , typename boost::container::dtl::add_const::value_type>::type & > : public insert_copy_proxy { @@ -330,7 +348,7 @@ struct insert_emplace_proxy\ @@ -354,7 +372,7 @@ struct insert_nonmovable_emplace_proxy##N\ void uninitialized_copy_n_and_update(Allocator &a, Iterator p, size_type n)\ {\ BOOST_ASSERT(n == 1); (void)n;\ - alloc_traits::construct(a, iterator_to_raw_pointer(p) BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\ + alloc_traits::construct(a, boost::movelib::iterator_to_raw_pointer(p) BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\ }\ \ void copy_n_and_update(Allocator &, Iterator, size_type)\ @@ -382,7 +400,7 @@ struct insert_emplace_proxy_arg##N\ BOOST_ASSERT(n == 1); (void)n;\ typename aligned_storage::value>::type v;\ BOOST_ASSERT((((size_type)(&v)) % alignment_of::value) == 0);\ - value_type *vp = static_cast(static_cast(&v));\ + value_type *vp = reinterpret_cast(v.data);\ alloc_traits::construct(a, vp BOOST_MOVE_I##N BOOST_MOVE_MFWD##N);\ BOOST_TRY{\ *p = ::boost::move(*vp);\ @@ -437,7 +455,7 @@ struct insert_emplace_proxy_arg1 struct insert_emplace_proxy_arg1::value_type>::type + , typename boost::container::dtl::add_const::value_type>::type > : public insert_copy_proxy { @@ -457,7 +475,7 @@ struct insert_emplace_proxy_arg1 struct insert_emplace_proxy_arg1::value_type>::type & + , typename boost::container::dtl::add_const::value_type>::type & > : public insert_copy_proxy { @@ -468,7 +486,7 @@ struct insert_emplace_proxy_arg1 +class binder1st +{ + public: + typedef typename Func::second_argument_type argument_type; + typedef typename Func::result_type result_type; + + binder1st(const Func& func, const typename Func::first_argument_type& arg) + : op(func), value(arg) + {} + + result_type operator()(const argument_type& arg) const + { return op(value, arg); } + + result_type operator()(argument_type& arg) const + { return op(value, arg); } + + private: + Func op; + typename Func::first_argument_type value; +}; + +template +inline binder1st bind1st(const Func& func, const T& arg) +{ return boost::container::binder1st(func, arg); } + +template +class binder2nd +{ + public: + typedef typename Func::first_argument_type argument_type; + typedef typename Func::result_type result_type; + + binder2nd(const Func& func, const typename Func::second_argument_type& arg) + : op(func), value(arg) + {} + + result_type operator()(const argument_type& arg) const + { return op(arg, value); } + + result_type operator()(argument_type& arg) const + { return op(arg, value); } + + private: + Func op; + typename Func::second_argument_type value; +}; + +template +inline binder2nd bind2nd(const Func& func, const T& arg) +{ + return (boost::container::binder2nd(func, arg)); +} + +template +class unary_negate +{ + public: + typedef typename Func::argument_type argument_type; + typedef typename Func::result_type result_type; + + explicit unary_negate(const Func& func) + : m_func(func) + {} + + bool operator()(const typename Func::argument_type& arg) const + { return !m_func(arg); } + + private: + Func m_func; +}; + +template inline +unary_negate not1(const Func& func) +{ + return boost::container::unary_negate(func); +} + +template +InputIt find_if(InputIt first, InputIt last, UnaryPredicate p) +{ + for (; first != last; ++first) { + if (p(*first)) { + return first; + } + } + return last; +} + +template +InputIt find_first_of(InputIt first1, InputIt last1, ForwardIt first2, ForwardIt last2, BinaryPredicate p) +{ + for (; first1 != last1; ++first1) { + for (ForwardIt it = first2; it != last2; ++it) { + if (p(*first1, *it)) { + return first1; + } + } + } + return last1; +} + +template +ForwardIt1 search(ForwardIt1 first1, ForwardIt1 last1, + ForwardIt2 first2, ForwardIt2 last2, BinaryPredicate p) +{ + for (; ; ++first1) { + ForwardIt1 it = first1; + for (ForwardIt2 it2 = first2; ; ++it, ++it2) { + if (it2 == last2) { + return first1; + } + if (it == last1) { + return last1; + } + if (!p(*it, *it2)) { + break; + } + } + } +} + } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/detail/algorithms.hpp b/bundled/boost-1.62.0/include/boost/container/detail/algorithms.hpp deleted file mode 100644 index 9358995127..0000000000 --- a/bundled/boost-1.62.0/include/boost/container/detail/algorithms.hpp +++ /dev/null @@ -1,90 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2013. -// -// Distributed under the Boost Software License, Version 1.0. -// (See accompanying file LICENSE_1_0.txt or copy at -// http://www.boost.org/LICENSE_1_0.txt) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// - -#ifndef BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP -#define BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP - -#if defined(_MSC_VER) -# pragma once -#endif - -#include -#include - -#include -#include -#include - -#include -#include -#include - - -#include - -namespace boost { -namespace container { - -template -struct is_value_init_construct_iterator -{ - static const bool value = false; -}; - -template -struct is_value_init_construct_iterator > -{ - static const bool value = true; -}; - -template -struct is_emplace_iterator -{ - static const bool value = false; -}; - -template -struct is_emplace_iterator > -{ - static const bool value = true; -}; - -template -inline void construct_in_place(A &a, T* dest, InpIt source) -{ boost::container::allocator_traits::construct(a, dest, *source); } -//#endif - -template -inline void construct_in_place(A &a, T *dest, value_init_construct_iterator) -{ - boost::container::allocator_traits::construct(a, dest); -} - -template -inline void construct_in_place(A &a, T *dest, default_init_construct_iterator) -{ - boost::container::allocator_traits::construct(a, dest, default_init); -} - -template -inline void construct_in_place(A &a, T *dest, emplace_iterator ei) -{ - ei.construct_in_place(a, dest); -} - -} //namespace container { -} //namespace boost { - -#include - -#endif //#ifndef BOOST_CONTAINER_DETAIL_ALGORITHMS_HPP - diff --git a/bundled/boost-1.62.0/include/boost/container/detail/alloc_helpers.hpp b/bundled/boost-1.62.0/include/boost/container/detail/alloc_helpers.hpp index 656e0c2a5e..57c59e46c1 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/alloc_helpers.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/alloc_helpers.hpp @@ -24,36 +24,36 @@ namespace boost { namespace container { -namespace container_detail { +namespace dtl { template -inline void swap_alloc(AllocatorType &, AllocatorType &, container_detail::false_type) +inline void swap_alloc(AllocatorType &, AllocatorType &, dtl::false_type) BOOST_NOEXCEPT_OR_NOTHROW {} template -inline void swap_alloc(AllocatorType &l, AllocatorType &r, container_detail::true_type) +inline void swap_alloc(AllocatorType &l, AllocatorType &r, dtl::true_type) { boost::adl_move_swap(l, r); } template -inline void assign_alloc(AllocatorType &, const AllocatorType &, container_detail::false_type) +inline void assign_alloc(AllocatorType &, const AllocatorType &, dtl::false_type) BOOST_NOEXCEPT_OR_NOTHROW {} template -inline void assign_alloc(AllocatorType &l, const AllocatorType &r, container_detail::true_type) +inline void assign_alloc(AllocatorType &l, const AllocatorType &r, dtl::true_type) { l = r; } template -inline void move_alloc(AllocatorType &, AllocatorType &, container_detail::false_type) +inline void move_alloc(AllocatorType &, AllocatorType &, dtl::false_type) BOOST_NOEXCEPT_OR_NOTHROW {} template -inline void move_alloc(AllocatorType &l, AllocatorType &r, container_detail::true_type) +inline void move_alloc(AllocatorType &l, AllocatorType &r, dtl::true_type) { l = ::boost::move(r); } -} //namespace container_detail { +} //namespace dtl { } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/detail/alloc_lib_auto_link.hpp b/bundled/boost-1.62.0/include/boost/container/detail/alloc_lib_auto_link.hpp deleted file mode 100644 index e424890f13..0000000000 --- a/bundled/boost-1.62.0/include/boost/container/detail/alloc_lib_auto_link.hpp +++ /dev/null @@ -1,16 +0,0 @@ -////////////////////////////////////////////////////////////////////////////// -// -// (C) Copyright Ion Gaztanaga 2005-2013. Distributed under the Boost -// Software License, Version 1.0. (See accompanying file -// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// -// See http://www.boost.org/libs/container for documentation. -// -////////////////////////////////////////////////////////////////////////////// -#ifndef BOOST_CONTAINER_DETAIL_BOOST_CONT_EXT_AUTO_LINK_HPP -#define BOOST_CONTAINER_DETAIL_BOOST_CONT_EXT_AUTO_LINK_HPP - -#include -#include - -#endif //#ifndef BOOST_CONTAINER_DETAIL_BOOST_CONT_EXT_AUTO_LINK_HPP diff --git a/bundled/boost-1.62.0/include/boost/container/detail/allocator_version_traits.hpp b/bundled/boost-1.62.0/include/boost/container/detail/allocator_version_traits.hpp index 62492da091..d037e0e392 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/allocator_version_traits.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/allocator_version_traits.hpp @@ -33,12 +33,12 @@ namespace boost { namespace container { -namespace container_detail { +namespace dtl { -template::value> +template::value> struct allocator_version_traits { - typedef ::boost::container::container_detail::integral_constant + typedef ::boost::container::dtl::integral_constant alloc_version; typedef typename Allocator::multiallocation_chain multiallocation_chain; @@ -67,7 +67,7 @@ struct allocator_version_traits template struct allocator_version_traits { - typedef ::boost::container::container_detail::integral_constant + typedef ::boost::container::dtl::integral_constant alloc_version; typedef typename boost::container::allocator_traits::pointer pointer; @@ -76,9 +76,9 @@ struct allocator_version_traits typedef typename boost::intrusive::pointer_traits:: template rebind_pointer::type void_ptr; - typedef container_detail::basic_multiallocation_chain + typedef dtl::basic_multiallocation_chain multialloc_cached_counted; - typedef boost::container::container_detail:: + typedef boost::container::dtl:: transform_multiallocation_chain < multialloc_cached_counted, value_type> multiallocation_chain; @@ -93,7 +93,8 @@ struct allocator_version_traits { size_type n = holder.size(); typename multiallocation_chain::iterator it = holder.begin(); - while(n--){ + while(n){ + --n; pointer p = boost::intrusive::pointer_traits::pointer_to(*it); ++it; a.deallocate(p, 1); @@ -153,7 +154,7 @@ struct allocator_version_traits } }; -} //namespace container_detail { +} //namespace dtl { } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/detail/block_list.hpp b/bundled/boost-1.62.0/include/boost/container/detail/block_list.hpp index 1a6057cb4a..0ed0e2279a 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/block_list.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/block_list.hpp @@ -27,6 +27,7 @@ #include #include #include +#include #include @@ -100,7 +101,7 @@ class block_list_base if((size_t(-1) - header_size) < size) throw_bad_alloc(); void *p = mr.allocate(size+header_size); - block_list_header &mb = *::new((void*)p) DerivedFromBlockListHeader; + block_list_header &mb = *::new((void*)p, boost_container_new_t()) DerivedFromBlockListHeader; mb.size = size+header_size; list_algo::link_after(&m_list, &mb); return (char *)p + header_size; diff --git a/bundled/boost-1.62.0/include/boost/container/detail/block_slist.hpp b/bundled/boost-1.62.0/include/boost/container/detail/block_slist.hpp index 278e6414a7..890e72588e 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/block_slist.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/block_slist.hpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -94,7 +95,7 @@ class block_slist_base if((size_t(-1) - header_size) < size) throw_bad_alloc(); void *p = mr.allocate(size+header_size); - block_slist_header &mb = *::new((void*)p) DerivedFromBlockSlistHeader; + block_slist_header &mb = *::new((void*)p, boost_container_new_t()) DerivedFromBlockSlistHeader; mb.size = size+header_size; slist_algo::link_after(&m_slist, &mb); return (char *)p + header_size; diff --git a/bundled/boost-1.62.0/include/boost/container/detail/compare_functors.hpp b/bundled/boost-1.62.0/include/boost/container/detail/compare_functors.hpp index 28f9093b9a..21f222bfa3 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/compare_functors.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/compare_functors.hpp @@ -19,13 +19,15 @@ # pragma once #endif +#include + namespace boost { namespace container { -template +template class equal_to_value { - typedef typename Allocator::value_type value_type; + typedef ValueType value_type; const value_type &t_; public: @@ -37,7 +39,7 @@ class equal_to_value { return t_ == t; } }; -template +template struct value_to_node_compare : Pred { @@ -52,22 +54,76 @@ struct value_to_node_compare : Pred(pred) {} - bool operator()(const Node &a, const Node &b) const + Ret operator()(const Node &a, const Node &b) const { return static_cast(*this)(a.get_data(), b.get_data()); } - bool operator()(const Node &a) const + Ret operator()(const Node &a) const { return static_cast(*this)(a.get_data()); } - bool operator()(const Node &a, const Node &b) + Ret operator()(const Node &a, const Node &b) { return static_cast(*this)(a.get_data(), b.get_data()); } - bool operator()(const Node &a) + Ret operator()(const Node &a) { return static_cast(*this)(a.get_data()); } predicate_type & predicate() { return static_cast(*this); } const predicate_type & predicate() const { return static_cast(*this); } }; +template +struct key_node_pred + : public boost::intrusive::detail::ebo_functor_holder +{ + BOOST_CONTAINER_FORCEINLINE explicit key_node_pred(const KeyPred &comp) + : base_t(comp) + {} + + typedef boost::intrusive::detail::ebo_functor_holder base_t; + typedef KeyPred key_predicate; + typedef KeyOfValue key_of_value; + typedef typename KeyOfValue::type key_type; + + + BOOST_CONTAINER_FORCEINLINE static const key_type &key_from(const Node &n) + { + return key_of_value()(n.get_data()); + } + + template + BOOST_CONTAINER_FORCEINLINE static const T & + key_from(const T &t) + { return t; } + + BOOST_CONTAINER_FORCEINLINE const key_predicate &key_pred() const + { return static_cast(*this); } + + BOOST_CONTAINER_FORCEINLINE key_predicate &key_pred() + { return static_cast(*this); } + + BOOST_CONTAINER_FORCEINLINE Ret operator()(const key_type &key) const + { return this->key_pred()(key); } + + template + BOOST_CONTAINER_FORCEINLINE Ret operator()(const U &nonkey) const + { return this->key_pred()(this->key_from(nonkey)); } + + BOOST_CONTAINER_FORCEINLINE bool operator()(const key_type &key1, const key_type &key2) const + { return this->key_pred()(key1, key2); } + + template + BOOST_CONTAINER_FORCEINLINE bool operator()(const key_type &key1, const U &nonkey2) const + { return this->key_pred()(key1, this->key_from(nonkey2)); } + + template + BOOST_CONTAINER_FORCEINLINE bool operator()(const U &nonkey1, const key_type &key2) const + { return this->key_pred()(this->key_from(nonkey1), key2); } + + template + BOOST_CONTAINER_FORCEINLINE bool operator()(const U &nonkey1, const V &nonkey2) const + { return this->key_pred()(this->key_from(nonkey1), this->key_from(nonkey2)); } +}; + + } //namespace container { } //namespace boost { diff --git a/bundled/boost-1.62.0/include/boost/container/detail/construct_in_place.hpp b/bundled/boost-1.62.0/include/boost/container/detail/construct_in_place.hpp index 9fecd24a8f..b131f06a86 100644 --- a/bundled/boost-1.62.0/include/boost/container/detail/construct_in_place.hpp +++ b/bundled/boost-1.62.0/include/boost/container/detail/construct_in_place.hpp @@ -67,7 +67,7 @@ BOOST_CONTAINER_FORCEINLINE void assign_in_place(DstIt dest, InpIt source) template BOOST_CONTAINER_FORCEINLINE void assign_in_place(DstIt dest, value_init_construct_iterator) { - container_detail::value_init val; + dtl::value_init val; *dest = boost::move(val.get()); } diff --git a/bundled/boost-1.62.0/include/boost/container/detail/container_or_allocator_rebind.hpp b/bundled/boost-1.62.0/include/boost/container/detail/container_or_allocator_rebind.hpp new file mode 100644 index 0000000000..1525e41d9d --- /dev/null +++ b/bundled/boost-1.62.0/include/boost/container/detail/container_or_allocator_rebind.hpp @@ -0,0 +1,53 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_CONTAINER_DETAIL_CONTAINER_OR_ALLOCATOR_REBIND_HPP +#define BOOST_CONTAINER_DETAIL_CONTAINER_OR_ALLOCATOR_REBIND_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif + +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include +#include +#include + +namespace boost { +namespace container { +namespace dtl { + +template::value> +struct container_or_allocator_rebind_impl + : container_rebind +{}; + +template +struct container_or_allocator_rebind_impl + : allocator_traits::template portable_rebind_alloc +{}; + +template +struct container_or_allocator_rebind_impl + : real_allocator +{}; + +template +struct container_or_allocator_rebind + : container_or_allocator_rebind_impl +{}; + +} //namespace dtl { +} //namespace container { +} //namespace boost { + +#endif //#ifndef BOOST_CONTAINER_DETAIL_CONTAINER_OR_ALLOCATOR_REBIND_HPP diff --git a/bundled/boost-1.62.0/include/boost/container/detail/container_rebind.hpp b/bundled/boost-1.62.0/include/boost/container/detail/container_rebind.hpp new file mode 100644 index 0000000000..0ebb4789e4 --- /dev/null +++ b/bundled/boost-1.62.0/include/boost/container/detail/container_rebind.hpp @@ -0,0 +1,258 @@ +////////////////////////////////////////////////////////////////////////////// +// +// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost +// Software License, Version 1.0. (See accompanying file +// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See http://www.boost.org/libs/container for documentation. +// +////////////////////////////////////////////////////////////////////////////// +#ifndef BOOST_CONTAINER_DETAIL_CONTAINER_REBIND_HPP +#define BOOST_CONTAINER_DETAIL_CONTAINER_REBIND_HPP + +#ifndef BOOST_CONFIG_HPP +# include +#endif + +#if defined(BOOST_HAS_PRAGMA_ONCE) +# pragma once +#endif + +#include + + +namespace boost { +namespace container { +namespace dtl { + + template + struct container_rebind; + +#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) + + template