passenger 5.3.3 → 5.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +8 -0
- data/build/support/cxx_dependency_map.rb +151 -83
- data/dev/configkit-schemas/index.json +3 -3
- data/src/agent/Core/AdminPanelConnector.h +5 -3
- data/src/agent/Core/ApplicationPool/Common.h +1 -2
- data/src/agent/Core/ApplicationPool/Context.h +1 -2
- data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +2 -2
- data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +2 -2
- data/src/agent/Core/Config.h +1 -1
- data/src/agent/Core/Controller.h +2 -1
- data/src/agent/Core/Controller/Config.h +6 -5
- data/src/agent/Core/Controller/Hooks.cpp +11 -0
- data/src/agent/Core/Controller/SendRequest.cpp +7 -7
- data/src/agent/Core/CoreMain.cpp +0 -2
- data/src/agent/Core/SpawningKit/Context.h +1 -3
- data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +2 -2
- data/src/agent/Core/SpawningKit/Handshake/Perform.h +2 -2
- data/src/agent/Core/SpawningKit/Handshake/Prepare.h +17 -38
- data/src/agent/Core/SpawningKit/PipeWatcher.h +5 -3
- data/src/agent/Core/SpawningKit/UserSwitchingRules.h +13 -5
- data/src/agent/Shared/ApiServerUtils.h +2 -2
- data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +33 -18
- data/src/agent/Watchdog/Config.h +1 -1
- data/src/agent/Watchdog/WatchdogMain.cpp +20 -20
- data/src/apache2_module/Config.cpp +7 -6
- data/src/cxx_supportlib/ConfigKit/Store.h +2 -2
- data/src/cxx_supportlib/Constants.h +1 -1
- data/src/cxx_supportlib/Exceptions.h +0 -1
- data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +3 -2
- data/src/cxx_supportlib/ResourceLocator.h +3 -21
- data/src/cxx_supportlib/SafeLibev.h +6 -6
- data/src/cxx_supportlib/ServerKit/Channel.h +2 -2
- data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +3 -3
- data/src/cxx_supportlib/ServerKit/FileBufferedFdSinkChannel.h +2 -2
- data/src/cxx_supportlib/ServerKit/HttpServer.h +27 -15
- data/src/cxx_supportlib/ServerKit/Server.h +2 -2
- data/src/cxx_supportlib/SystemTools/README.md +1 -0
- data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +222 -0
- data/src/cxx_supportlib/SystemTools/UserDatabase.h +151 -0
- data/src/cxx_supportlib/Utils.cpp +1 -113
- data/src/cxx_supportlib/Utils.h +1 -29
- data/src/cxx_supportlib/Utils/MessagePassing.h +3 -3
- data/src/cxx_supportlib/WatchdogLauncher.h +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/case_conv.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/util.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +31 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +133 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +151 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +149 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +140 -49
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +145 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +75 -41
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +139 -49
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +98 -45
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +42 -49
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +45 -38
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +349 -109
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +959 -108
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +198 -54
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +424 -284
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +116 -47
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +99 -16
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +235 -49
- data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +613 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +1139 -1216
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +27 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +26 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +27 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +61 -21
- data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +462 -226
- data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/datagram_socket_service.hpp +94 -64
- data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer_service.hpp +20 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +109 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +404 -77
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +212 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +68 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +94 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +114 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +151 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +398 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +287 -165
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +33 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +15 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +65 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +17 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +17 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +27 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +41 -17
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +86 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{function.hpp → functional.hpp} +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +54 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +158 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +90 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +117 -39
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +97 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +24 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +17 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +34 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +17 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +152 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +80 -27
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +19 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +93 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +76 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +13 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +11 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +27 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +43 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +54 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/{task_io_service.ipp → scheduler.ipp} +167 -70
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +17 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +46 -26
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +36 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +39 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +43 -21
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +129 -26
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +181 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +136 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +13 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +15 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +12 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -51
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +241 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +128 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +36 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +42 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +17 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +10 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +29 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +7 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +26 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +7 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +37 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +82 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +10 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +86 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +9 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +10 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +101 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +14 -7
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +20 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +13 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +25 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +15 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +99 -31
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +96 -35
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +92 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +7 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +106 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +25 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +6 -92
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +136 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +38 -22
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +30 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service.hpp → scheduler.hpp} +57 -45
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service_operation.hpp → scheduler_operation.hpp} +19 -17
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service_thread_info.hpp → scheduler_thread_info.hpp} +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +37 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +54 -34
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +14 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +9 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +72 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +7 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +144 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +9 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +44 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +45 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +29 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +11 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +29 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +74 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +74 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +110 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +17 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +413 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +343 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +172 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental.hpp +22 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +228 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detached.hpp +67 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_spawn.hpp +878 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/detached.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/redirect_error.hpp +296 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/redirect_error.hpp +69 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/handler_type.hpp +11 -73
- data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +4 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +86 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +92 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +549 -119
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +79 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +80 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +109 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +84 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +388 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +7 -32
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +347 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +176 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +79 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +341 -379
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +173 -343
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +559 -206
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +254 -72
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +12 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +36 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +75 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +87 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +129 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +78 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +855 -94
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +358 -449
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +165 -418
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +878 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +386 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +6 -743
- data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +79 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +111 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +164 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +136 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +104 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +185 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +131 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +50 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +821 -71
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +23 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +31 -99
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +313 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +5 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +16 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +28 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +55 -47
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +28 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +76 -44
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +28 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +85 -33
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +2 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +56 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +218 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +187 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +263 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +237 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +131 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +3 -90
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_service.hpp +48 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +48 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +23 -21
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +128 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +30 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +138 -46
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +646 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +17 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +326 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor_service.hpp +63 -44
- data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +109 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/raw_socket_service.hpp +94 -64
- data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +328 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +13 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +1148 -247
- data/src/cxx_supportlib/vendor-modified/boost/asio/seq_packet_socket_service.hpp +88 -56
- data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +736 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +11 -11
- data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_service.hpp +41 -45
- data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +422 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_service.hpp +32 -24
- data/src/cxx_supportlib/vendor-modified/boost/asio/socket_acceptor_service.hpp +114 -48
- data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +85 -46
- data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +89 -18
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +1 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +33 -62
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +27 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +10 -14
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +2 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +22 -25
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +40 -17
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +4 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +3 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +2 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +27 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +2 -8
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +3 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +8 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +86 -102
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +7 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +7 -13
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +90 -85
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +3 -9
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +4 -23
- data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +209 -175
- data/src/cxx_supportlib/vendor-modified/boost/asio/stream_socket_service.hpp +88 -56
- data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +80 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +131 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +4 -19
- data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +234 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +40 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +199 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +27 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +70 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +73 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +17 -2
- data/src/cxx_supportlib/vendor-modified/boost/asio/waitable_timer_service.hpp +62 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_handle.hpp +22 -30
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +14 -10
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +346 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle_service.hpp +26 -20
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +333 -0
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +344 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle_service.hpp +31 -37
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +328 -3
- data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle_service.hpp +29 -37
- data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +321 -12
- data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +13 -6
- data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/capabilities.hpp +50 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +688 -220
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +25 -21
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +86 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_arm.hpp +1 -18
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_atomic.hpp +9 -10
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_ppc.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sync.hpp +7 -8
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +1 -36
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +108 -34
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations_fwd.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +107 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +189 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations_fwd.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +238 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +1111 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +840 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +1656 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +402 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +106 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +1301 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +142 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations.hpp +28 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations_fwd.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +72 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +83 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_arm.hpp +67 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_ppc.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_x86.hpp +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_extend.hpp +105 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +35 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_lockfree.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_cas_based.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +8 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_extending_cas_based.hpp +8 -7
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +548 -126
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +134 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +36 -44
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +524 -96
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +70 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +14 -16
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +27 -59
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +104 -57
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +268 -340
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +22 -24
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +55 -80
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +88 -46
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_type.hpp +30 -103
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/string_ops.hpp +61 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +46 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind_cc.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +36 -36
- data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +0 -10
- data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +28 -30
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +14 -8
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_units.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +2 -4
- data/src/cxx_supportlib/vendor-modified/boost/chrono/process_cpu_clocks.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/config.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +26 -4
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +30 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +13 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +32 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/diab.hpp +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +33 -6
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +11 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +28 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +17 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +8 -142
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +14 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +16 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +37 -9
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +19 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +169 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/{posix_features.hpp → detail/posix_features.hpp} +0 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/{select_compiler_config.hpp → detail/select_compiler_config.hpp} +15 -5
- data/src/cxx_supportlib/vendor-modified/boost/config/{select_platform_config.hpp → detail/select_platform_config.hpp} +8 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/{select_stdlib_config.hpp → detail/select_stdlib_config.hpp} +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/{suffix.hpp → detail/suffix.hpp} +27 -27
- data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/helper_macros.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/aix.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/beos.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/bsd.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/cray.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +12 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/haiku.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/hpux.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/irix.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +4 -3
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/macos.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/qnxnto.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/solaris.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/symbian.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/vxworks.hpp +155 -91
- data/src/cxx_supportlib/vendor-modified/boost/config/platform/zos.hpp +32 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/pragma_message.hpp +31 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +21 -2
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/xlcpp_zos.hpp +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +279 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +58 -58
- data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +7 -28
- data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +57 -57
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +18 -18
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +122 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_or_allocator_rebind.hpp +49 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +258 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +119 -134
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +55 -55
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +714 -282
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_sorted.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator_to_raw_pointer.hpp +4 -29
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +9 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/min_max.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +37 -35
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +41 -41
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +69 -16
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair_key_mapped_of_value.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/singleton.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +180 -116
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_functors.hpp +36 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +0 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +874 -572
- data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +497 -248
- data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +33 -42
- data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +326 -246
- data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +122 -78
- data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +165 -0
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +4 -8
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +285 -110
- data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +35 -53
- data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +18 -19
- data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +25 -25
- data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +24 -9
- data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +194 -142
- data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +15 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +395 -421
- data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/float_functions.hpp +0 -0
- data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/hash_float.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/limits.hpp +0 -0
- data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/extensions.hpp +112 -16
- data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/hash.hpp +195 -7
- data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/hash_fwd.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +53 -44
- data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +80 -2
- data/src/cxx_supportlib/vendor-modified/boost/core/no_exceptions_support.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +233 -0
- data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/cstdint.hpp +26 -16
- data/src/cxx_supportlib/vendor-modified/boost/date_time/adjust_functors.hpp +20 -34
- data/src/cxx_supportlib/vendor-modified/boost/date_time/c_local_time_adjustor.hpp +8 -5
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting_locales.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_rules.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/date_time/filetime_functions.hpp +8 -94
- data/src/cxx_supportlib/vendor-modified/boost/date_time/format_date_parser.hpp +1 -8
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/gregorian_io.hpp +52 -52
- data/src/cxx_supportlib/vendor-modified/boost/date_time/int_adapter.hpp +14 -27
- data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/custom_time_zone.hpp +0 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/locale_config.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/date_time/microsec_time_clock.hpp +36 -5
- data/src/cxx_supportlib/vendor-modified/boost/date_time/period_formatter.hpp +10 -9
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +10 -12
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +18 -10
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_serialize.hpp +65 -20
- data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +32 -23
- data/src/cxx_supportlib/vendor-modified/boost/date_time/string_parse_tree.hpp +6 -5
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +8 -3
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_resolution_traits.hpp +31 -8
- data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_split.hpp +10 -4
- data/src/cxx_supportlib/vendor-modified/boost/date_time/tz_db_base.hpp +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +2 -264
- data/src/cxx_supportlib/vendor-modified/boost/enable_shared_from_this.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +38 -21
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +10 -9
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +10 -7
- data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +8 -6
- data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +13 -47
- data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +5 -4
- data/src/cxx_supportlib/vendor-modified/boost/function.hpp +12 -4
- data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +102 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +20 -0
- data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +1 -6
- data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +508 -390
- data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +9 -1
- data/src/cxx_supportlib/vendor-modified/boost/integer_fwd.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +11 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +7 -20
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +5 -5
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +108 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +15 -5
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +8 -4
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +147 -64
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +9 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +3 -3
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +9 -2
- data/src/cxx_supportlib/vendor-modified/boost/intrusive_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +84 -0
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +0 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +8 -10
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +7 -6
- data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +7 -4
- data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +7 -7
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +36 -92
- data/src/cxx_supportlib/vendor-modified/boost/make_shared.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +57 -3
- data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/sign.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +12 -1
- data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +40 -9
- data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +253 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +563 -4
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +324 -1071
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +111 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +12 -11
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/is_sorted.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +59 -143
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +334 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +207 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +86 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/algo/unique.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +1 -9
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/destruct_n.hpp +3 -4
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +25 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +59 -0
- data/src/cxx_supportlib/vendor-modified/boost/{intrusive → move}/detail/pointer_element.hpp +12 -12
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +45 -0
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +19 -5
- data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/mpl/get_tag.hpp +26 -0
- data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +85 -55
- data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/cast.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/conversion_traits.hpp +0 -7
- data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/converter.hpp +4 -13
- data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +26 -7
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +98 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +17 -21
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +25 -6
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +15 -15
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +499 -0
- data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +126 -21
- data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/arg_list.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/pointer_cast.hpp +10 -9
- data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/parisc.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm.h +3 -1
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/c.h +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/cloudabi.h +53 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/android.h +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/free.h +10 -3
- data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/open.h +80 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/other/workaround.h +87 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform.h +9 -2
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/cloudabi.h +43 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/ios.h +58 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw.h +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw32.h +63 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw64.h +63 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_desktop.h +9 -3
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_phone.h +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_runtime.h +13 -5
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_server.h +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_store.h +11 -4
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_system.h +47 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_uwp.h +60 -0
- data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +11 -9
- data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +27 -27
- data/src/cxx_supportlib/vendor-modified/boost/random/detail/vector_io.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +0 -11
- data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +12 -0
- data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +5 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/poisson_distribution.hpp +17 -17
- data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/random/uniform_on_sphere.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +6 -4
- data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +56 -11
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +10 -10
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +7 -2
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +6 -1
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +37 -13
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +9 -6
- data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/scoped_array.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/scoped_ptr.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/shared_array.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/shared_ptr.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +333 -656
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +148 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_sp_deleter.hpp +91 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/operator_bool.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +15 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +3 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +21 -3
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +6 -6
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +26 -26
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +17 -16
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +11 -12
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +15 -16
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +22 -22
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +135 -90
- data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +23 -23
- data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +140 -111
- data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +297 -49
- data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +4 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_bounded_queue.hpp +4 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_deque.hpp +5 -7
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_priority_queue.hpp +19 -19
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_queue.hpp +5 -15
- data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +118 -183
- data/src/cxx_supportlib/vendor-modified/boost/{detail → thread/detail}/atomic_redef_macros.hpp +0 -0
- data/src/cxx_supportlib/vendor-modified/boost/{detail → thread/detail}/atomic_undef_macros.hpp +0 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +62 -11
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/log.hpp +15 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +0 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform_time.hpp +478 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +51 -85
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +11 -3
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/detail/priority_executor_base.hpp +10 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduled_thread_pool.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduler.hpp +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduling_adaptor.hpp +15 -4
- data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +320 -92
- data/src/cxx_supportlib/vendor-modified/boost/thread/once.hpp +10 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +187 -112
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +137 -164
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +67 -37
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +42 -0
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +15 -9
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +65 -33
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +84 -158
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +143 -35
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_heap_alloc.hpp +32 -2
- data/src/cxx_supportlib/vendor-modified/boost/thread/shared_mutex.hpp +8 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/thread_only.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +579 -589
- data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/token_iterator.hpp +5 -2
- data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +7 -9
- data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +8 -8
- data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +6 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +5 -8
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_const.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_cv.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_lvalue_reference.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_pointer.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_rvalue_reference.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_volatile.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/conditional.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_cv.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/decay.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +12 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +37 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_binary_operator.hpp +71 -14
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +1 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +4 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +370 -102
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +94 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +1177 -572
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +24 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +25 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/floating_point_promotion.hpp +8 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_equal_to.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_greater.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_greater_equal.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_less.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_less_equal.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +93 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +95 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_not_equal_to.hpp +3 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +11 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_promotion.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +2 -1
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +90 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complex.hpp +1 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_constructible.hpp +12 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_convertible.hpp +20 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +16 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +10 -2
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +29 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_list_constructible.hpp +48 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +14 -3
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +14 -4
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +67 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_signed.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_unsigned.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +35 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/promote.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_bounds.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv_ref.hpp +30 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +7 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_reference.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +5 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_identity.hpp +9 -0
- data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +2 -3
- data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +34 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -85
- data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +1 -2
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +6 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +2 -0
- data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +24 -14
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +18 -12
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +4018 -4052
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +57 -97
- data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +56 -95
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +2150 -1777
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +41 -38
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +1630 -1420
- data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +40 -37
- data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +6 -3
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +55 -0
- data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_iterate.hpp +14 -17
- data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +44 -20
- data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +30 -30
- data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
- data/src/cxx_supportlib/vendor-modified/boost/weak_ptr.hpp +1 -1
- data/src/ruby_supportlib/phusion_passenger.rb +1 -1
- data/src/ruby_supportlib/phusion_passenger/common_library.rb +3 -0
- data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +8 -1
- data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +7 -1
- data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -2
- data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +4 -4
- metadata +201 -47
- data/src/cxx_supportlib/ConfigKit/VariantMapUtils.h +0 -96
- data/src/cxx_supportlib/MessageClient.h +0 -309
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/addressof.hpp +0 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/task_io_service.hpp +0 -80
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/shared_ptr.hpp +0 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/weak_ptr.hpp +0 -40
- data/src/cxx_supportlib/vendor-modified/boost/asio/detail/win_iocp_serial_port_service.hpp +0 -230
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.hpp +0 -156
- data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.ipp +0 -157
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/basic_context.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_service.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/basic_context.hpp +0 -436
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/context_service.hpp +0 -176
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_context_service.hpp +0 -396
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_operation.hpp +0 -526
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_stream_service.hpp +0 -573
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream.hpp +0 -503
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream_service.hpp +0 -186
- data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_service.hpp +0 -42
- data/src/cxx_supportlib/vendor-modified/boost/container/detail/to_raw_pointer.hpp +0 -33
- data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +0 -47
- data/src/cxx_supportlib/vendor-modified/boost/iterator.hpp +0 -20
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex_assert.hpp +0 -724
- data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/timespec.hpp +0 -149
- data/src/cxx_supportlib/vendor-modified/boost/thread/v2/thread.hpp +0 -155
- data/src/cxx_supportlib/vendor-modified/boost/utility/empty_deleter.hpp +0 -43
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
namespace boost {
|
|
30
30
|
namespace container {
|
|
31
|
-
namespace
|
|
31
|
+
namespace dtl {
|
|
32
32
|
|
|
33
33
|
using ::boost::move_detail::enable_if;
|
|
34
34
|
using ::boost::move_detail::enable_if_and;
|
|
@@ -63,7 +63,7 @@ using ::boost::move_detail::aligned_storage;
|
|
|
63
63
|
using ::boost::move_detail::nat;
|
|
64
64
|
using ::boost::move_detail::max_align_t;
|
|
65
65
|
|
|
66
|
-
} //namespace
|
|
66
|
+
} //namespace dtl {
|
|
67
67
|
} //namespace container {
|
|
68
68
|
} //namespace boost {
|
|
69
69
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#ifndef BOOST_CONTAINER_DETAIL_VALUE_FUNCTORS_HPP
|
|
2
|
+
#define BOOST_CONTAINER_DETAIL_VALUE_FUNCTORS_HPP
|
|
3
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
4
|
+
//
|
|
5
|
+
// (C) Copyright Ion Gaztanaga 2017-2017. Distributed under the Boost
|
|
6
|
+
// Software License, Version 1.0. (See accompanying file
|
|
7
|
+
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
8
|
+
//
|
|
9
|
+
// See http://www.boost.org/libs/container for documentation.
|
|
10
|
+
//
|
|
11
|
+
///////////////////////////////////////////////////////////////////////////////
|
|
12
|
+
|
|
13
|
+
#ifndef BOOST_CONFIG_HPP
|
|
14
|
+
# include <boost/config.hpp>
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
#if defined(BOOST_HAS_PRAGMA_ONCE)
|
|
18
|
+
# pragma once
|
|
19
|
+
#endif
|
|
20
|
+
|
|
21
|
+
//Functors for member algorithm defaults
|
|
22
|
+
template<class ValueType>
|
|
23
|
+
struct value_less
|
|
24
|
+
{
|
|
25
|
+
bool operator()(const ValueType &a, const ValueType &b) const
|
|
26
|
+
{ return a < b; }
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
template<class ValueType>
|
|
30
|
+
struct value_equal
|
|
31
|
+
{
|
|
32
|
+
bool operator()(const ValueType &a, const ValueType &b) const
|
|
33
|
+
{ return a == b; }
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
#endif //BOOST_CONTAINER_DETAIL_VALUE_FUNCTORS_HPP
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
|
|
27
27
|
namespace boost {
|
|
28
28
|
namespace container {
|
|
29
|
-
namespace
|
|
29
|
+
namespace dtl {
|
|
30
30
|
|
|
31
31
|
template<class T>
|
|
32
32
|
struct value_init
|
|
@@ -42,7 +42,7 @@ struct value_init
|
|
|
42
42
|
T m_t;
|
|
43
43
|
};
|
|
44
44
|
|
|
45
|
-
} //namespace
|
|
45
|
+
} //namespace dtl {
|
|
46
46
|
} //namespace container {
|
|
47
47
|
} //namespace boost {
|
|
48
48
|
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
namespace boost {
|
|
30
30
|
namespace container {
|
|
31
|
-
namespace
|
|
31
|
+
namespace dtl {
|
|
32
32
|
|
|
33
33
|
template<typename... Values>
|
|
34
34
|
class tuple;
|
|
@@ -156,7 +156,7 @@ struct build_number_seq
|
|
|
156
156
|
template<> struct build_number_seq<0> : index_tuple<>{};
|
|
157
157
|
template<> struct build_number_seq<1> : index_tuple<0>{};
|
|
158
158
|
|
|
159
|
-
}}} //namespace boost { namespace container { namespace
|
|
159
|
+
}}} //namespace boost { namespace container { namespace dtl {
|
|
160
160
|
|
|
161
161
|
#include <boost/container/detail/config_end.hpp>
|
|
162
162
|
|
|
@@ -32,11 +32,11 @@
|
|
|
32
32
|
|
|
33
33
|
namespace boost{
|
|
34
34
|
namespace container {
|
|
35
|
-
namespace
|
|
35
|
+
namespace dtl {
|
|
36
36
|
|
|
37
37
|
template <class T, unsigned V>
|
|
38
38
|
struct version_type
|
|
39
|
-
: public
|
|
39
|
+
: public dtl::integral_constant<unsigned, V>
|
|
40
40
|
{
|
|
41
41
|
typedef T type;
|
|
42
42
|
|
|
@@ -46,7 +46,7 @@ struct version_type
|
|
|
46
46
|
namespace impl{
|
|
47
47
|
|
|
48
48
|
template <class T,
|
|
49
|
-
bool =
|
|
49
|
+
bool = dtl::is_convertible<version_type<T, 0>, typename T::version>::value>
|
|
50
50
|
struct extract_version
|
|
51
51
|
{
|
|
52
52
|
static const unsigned value = 1;
|
|
@@ -86,7 +86,7 @@ struct version<T, true>
|
|
|
86
86
|
|
|
87
87
|
template <class T>
|
|
88
88
|
struct version
|
|
89
|
-
: public
|
|
89
|
+
: public dtl::integral_constant<unsigned, impl::version<T>::value>
|
|
90
90
|
{};
|
|
91
91
|
|
|
92
92
|
template<class T, unsigned N>
|
|
@@ -96,11 +96,11 @@ struct is_version
|
|
|
96
96
|
is_same< typename version<T>::type, integral_constant<unsigned, N> >::value;
|
|
97
97
|
};
|
|
98
98
|
|
|
99
|
-
} //namespace
|
|
99
|
+
} //namespace dtl {
|
|
100
100
|
|
|
101
|
-
typedef
|
|
102
|
-
typedef
|
|
103
|
-
typedef
|
|
101
|
+
typedef dtl::integral_constant<unsigned, 0> version_0;
|
|
102
|
+
typedef dtl::integral_constant<unsigned, 1> version_1;
|
|
103
|
+
typedef dtl::integral_constant<unsigned, 2> version_2;
|
|
104
104
|
|
|
105
105
|
} //namespace container {
|
|
106
106
|
} //namespace boost{
|
|
@@ -43,12 +43,6 @@
|
|
|
43
43
|
# endif
|
|
44
44
|
#endif
|
|
45
45
|
|
|
46
|
-
#if !defined(BOOST_FALLTHOUGH)
|
|
47
|
-
#define BOOST_CONTAINER_FALLTHOUGH
|
|
48
|
-
#else
|
|
49
|
-
#define BOOST_CONTAINER_FALLTHOUGH BOOST_FALLTHOUGH;
|
|
50
|
-
#endif
|
|
51
|
-
|
|
52
46
|
#if defined(BOOST_MSVC) && (_MSC_VER < 1400)
|
|
53
47
|
#define BOOST_CONTAINER_TEMPLATED_CONVERSION_OPERATOR_BROKEN
|
|
54
48
|
#endif
|
|
@@ -30,6 +30,7 @@
|
|
|
30
30
|
#include <boost/container/detail/type_traits.hpp>
|
|
31
31
|
#include <boost/container/detail/mpl.hpp>
|
|
32
32
|
#include <boost/container/detail/algorithm.hpp> //equal()
|
|
33
|
+
#include <boost/container/detail/container_or_allocator_rebind.hpp>
|
|
33
34
|
// move
|
|
34
35
|
#include <boost/move/utility_core.hpp>
|
|
35
36
|
#include <boost/move/traits.hpp>
|
|
@@ -53,59 +54,60 @@ namespace container {
|
|
|
53
54
|
|
|
54
55
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
55
56
|
|
|
56
|
-
template <class Key, class T, class Compare, class
|
|
57
|
+
template <class Key, class T, class Compare, class AllocatorOrContainer>
|
|
57
58
|
class flat_multimap;
|
|
58
59
|
|
|
59
|
-
namespace
|
|
60
|
+
namespace dtl{
|
|
60
61
|
|
|
61
62
|
template<class D, class S>
|
|
62
|
-
BOOST_CONTAINER_FORCEINLINE static D &force(
|
|
63
|
-
{ return *
|
|
63
|
+
BOOST_CONTAINER_FORCEINLINE static D &force(S &s)
|
|
64
|
+
{ return *reinterpret_cast<D*>(&s); }
|
|
64
65
|
|
|
65
66
|
template<class D, class S>
|
|
66
|
-
BOOST_CONTAINER_FORCEINLINE static D force_copy(S s)
|
|
67
|
+
BOOST_CONTAINER_FORCEINLINE static D force_copy(const S &s)
|
|
67
68
|
{
|
|
68
|
-
D *vp = reinterpret_cast<D *>(&s);
|
|
69
|
-
|
|
69
|
+
const D *const vp = reinterpret_cast<const D *>(&s);
|
|
70
|
+
D ret_val(*vp);
|
|
71
|
+
return ret_val;
|
|
70
72
|
}
|
|
71
73
|
|
|
72
|
-
} //namespace
|
|
74
|
+
} //namespace dtl{
|
|
73
75
|
|
|
74
76
|
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
75
77
|
|
|
76
78
|
//! A flat_map is a kind of associative container that supports unique keys (contains at
|
|
77
79
|
//! most one of each key value) and provides for fast retrieval of values of another
|
|
78
|
-
//! type T based on the keys.
|
|
80
|
+
//! type T based on the keys.
|
|
79
81
|
//!
|
|
80
|
-
//! A flat_map satisfies all of the requirements of a container
|
|
81
|
-
//! container and
|
|
82
|
+
//! A flat_map satisfies all of the requirements of a container, a reversible
|
|
83
|
+
//! container and an associative container. A flat_map also provides
|
|
82
84
|
//! most operations described for unique keys. For a
|
|
83
85
|
//! flat_map<Key,T> the key_type is Key and the value_type is std::pair<Key,T>
|
|
84
86
|
//! (unlike std::map<Key, T> which value_type is std::pair<<b>const</b> Key, T>).
|
|
85
87
|
//!
|
|
86
|
-
//!
|
|
88
|
+
//! flat_map is similar to std::map but it's implemented by as an ordered sequence container.
|
|
89
|
+
//! The underlying sequence container is by default <i>vector</i> but it can also work
|
|
90
|
+
//! user-provided vector-like SequenceContainers (like <i>static_vector</i> or <i>small_vector</i>).
|
|
87
91
|
//!
|
|
88
|
-
//!
|
|
89
|
-
//! (
|
|
90
|
-
//!
|
|
91
|
-
//!
|
|
92
|
-
//! This means that inserting a new element into a flat_map invalidates
|
|
93
|
-
//! previous iterators and references
|
|
94
|
-
//!
|
|
95
|
-
//! Erasing an element invalidates iterators and references
|
|
96
|
-
//! pointing to elements that come after (their keys are bigger) the erased element.
|
|
92
|
+
//! Using vector-like sequence containers means that inserting a new element into a flat_map might invalidate
|
|
93
|
+
//! previous iterators and references (unless that sequence container is <i>stable_vector</i> or a similar
|
|
94
|
+
//! container that offers stable pointers and references). Similarly, erasing an element might invalidate
|
|
95
|
+
//! iterators and references pointing to elements that come after (their keys are bigger) the erased element.
|
|
97
96
|
//!
|
|
98
97
|
//! This container provides random-access iterators.
|
|
99
98
|
//!
|
|
100
99
|
//! \tparam Key is the key_type of the map
|
|
101
100
|
//! \tparam Value is the <code>mapped_type</code>
|
|
102
101
|
//! \tparam Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
|
|
103
|
-
//! \tparam
|
|
104
|
-
//! (e.g. <i>allocator< std::pair<Key, T> > </i>).
|
|
102
|
+
//! \tparam AllocatorOrContainer is either:
|
|
103
|
+
//! - The allocator to allocate <code>value_type</code>s (e.g. <i>allocator< std::pair<Key, T> > </i>).
|
|
104
|
+
//! (in this case <i>sequence_type</i> will be vector<value_type, AllocatorOrContainer>)
|
|
105
|
+
//! - The SequenceContainer to be used as the underlying <i>sequence_type</i>. It must be a vector-like
|
|
106
|
+
//! sequence container with random-access iterators..
|
|
105
107
|
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
106
|
-
template <class Key, class T, class Compare = std::less<Key>, class
|
|
108
|
+
template <class Key, class T, class Compare = std::less<Key>, class AllocatorOrContainer = new_allocator< std::pair< Key, T> > >
|
|
107
109
|
#else
|
|
108
|
-
template <class Key, class T, class Compare, class
|
|
110
|
+
template <class Key, class T, class Compare, class AllocatorOrContainer>
|
|
109
111
|
#endif
|
|
110
112
|
class flat_map
|
|
111
113
|
{
|
|
@@ -113,47 +115,54 @@ class flat_map
|
|
|
113
115
|
private:
|
|
114
116
|
BOOST_COPYABLE_AND_MOVABLE(flat_map)
|
|
115
117
|
//This is the tree that we should store if pair was movable
|
|
116
|
-
typedef
|
|
118
|
+
typedef dtl::flat_tree<
|
|
117
119
|
std::pair<Key, T>,
|
|
118
|
-
|
|
120
|
+
dtl::select1st<Key>,
|
|
119
121
|
Compare,
|
|
120
|
-
|
|
122
|
+
AllocatorOrContainer> tree_t;
|
|
121
123
|
|
|
122
124
|
//This is the real tree stored here. It's based on a movable pair
|
|
123
|
-
typedef
|
|
124
|
-
|
|
125
|
-
|
|
125
|
+
typedef dtl::flat_tree<
|
|
126
|
+
dtl::pair<Key, T>,
|
|
127
|
+
dtl::select1st<Key>,
|
|
126
128
|
Compare,
|
|
127
|
-
typename
|
|
128
|
-
|
|
129
|
+
typename dtl::container_or_allocator_rebind<AllocatorOrContainer, dtl::pair<Key, T> >::type
|
|
130
|
+
> impl_tree_t;
|
|
129
131
|
impl_tree_t m_flat_tree; // flat tree representing flat_map
|
|
130
132
|
|
|
131
133
|
typedef typename impl_tree_t::value_type impl_value_type;
|
|
132
134
|
typedef typename impl_tree_t::const_iterator impl_const_iterator;
|
|
133
135
|
typedef typename impl_tree_t::iterator impl_iterator;
|
|
134
136
|
typedef typename impl_tree_t::allocator_type impl_allocator_type;
|
|
135
|
-
|
|
137
|
+
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
138
|
+
typedef std::initializer_list<impl_value_type> impl_initializer_list;
|
|
139
|
+
#endif
|
|
140
|
+
|
|
141
|
+
typedef dtl::flat_tree_value_compare
|
|
136
142
|
< Compare
|
|
137
|
-
,
|
|
138
|
-
, std::pair<Key, T> >
|
|
139
|
-
typedef typename
|
|
140
|
-
|
|
141
|
-
typedef typename
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
<typename allocator_traits<Allocator>::pointer>::reverse_iterator reverse_iterator_impl;
|
|
145
|
-
typedef typename container_detail::get_flat_tree_iterators
|
|
146
|
-
<typename allocator_traits<Allocator>::pointer>::const_reverse_iterator const_reverse_iterator_impl;
|
|
143
|
+
, dtl::select1st<Key>
|
|
144
|
+
, std::pair<Key, T> > value_compare_t;
|
|
145
|
+
typedef typename tree_t::iterator iterator_t;
|
|
146
|
+
typedef typename tree_t::const_iterator const_iterator_t;
|
|
147
|
+
typedef typename tree_t::reverse_iterator reverse_iterator_t;
|
|
148
|
+
typedef typename tree_t::const_reverse_iterator const_reverse_iterator_t;
|
|
149
|
+
|
|
147
150
|
public:
|
|
148
151
|
typedef typename impl_tree_t::stored_allocator_type impl_stored_allocator_type;
|
|
152
|
+
typedef typename impl_tree_t::sequence_type impl_sequence_type;
|
|
149
153
|
|
|
150
|
-
impl_tree_t &tree()
|
|
154
|
+
BOOST_CONTAINER_FORCEINLINE impl_tree_t &tree()
|
|
151
155
|
{ return m_flat_tree; }
|
|
152
156
|
|
|
153
|
-
const impl_tree_t &tree() const
|
|
157
|
+
BOOST_CONTAINER_FORCEINLINE const impl_tree_t &tree() const
|
|
154
158
|
{ return m_flat_tree; }
|
|
155
159
|
|
|
156
160
|
private:
|
|
161
|
+
typedef typename tree_t::get_stored_allocator_const_return_t get_stored_allocator_const_return_t;
|
|
162
|
+
typedef typename tree_t::get_stored_allocator_noconst_return_t get_stored_allocator_noconst_return_t;
|
|
163
|
+
typedef typename impl_tree_t::get_stored_allocator_const_return_t impl_get_stored_allocator_const_return_t;
|
|
164
|
+
typedef typename impl_tree_t::get_stored_allocator_noconst_return_t impl_get_stored_allocator_noconst_return_t;
|
|
165
|
+
|
|
157
166
|
#endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
158
167
|
|
|
159
168
|
public:
|
|
@@ -165,25 +174,29 @@ class flat_map
|
|
|
165
174
|
//////////////////////////////////////////////
|
|
166
175
|
typedef Key key_type;
|
|
167
176
|
typedef T mapped_type;
|
|
168
|
-
typedef std::pair<Key, T> value_type;
|
|
169
|
-
typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
|
|
170
|
-
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
|
|
171
|
-
typedef typename boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
|
|
172
|
-
typedef typename boost::container::allocator_traits<Allocator>::reference reference;
|
|
173
|
-
typedef typename boost::container::allocator_traits<Allocator>::const_reference const_reference;
|
|
174
|
-
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
|
|
175
|
-
typedef typename boost::container::allocator_traits<Allocator>::difference_type difference_type;
|
|
176
|
-
typedef Allocator allocator_type;
|
|
177
|
-
typedef BOOST_CONTAINER_IMPDEF(Allocator) stored_allocator_type;
|
|
178
|
-
typedef BOOST_CONTAINER_IMPDEF(value_compare_impl) value_compare;
|
|
179
177
|
typedef Compare key_compare;
|
|
180
|
-
typedef
|
|
181
|
-
typedef BOOST_CONTAINER_IMPDEF(
|
|
182
|
-
typedef
|
|
183
|
-
typedef
|
|
178
|
+
typedef std::pair<Key, T> value_type;
|
|
179
|
+
typedef typename BOOST_CONTAINER_IMPDEF(tree_t::sequence_type) sequence_type;
|
|
180
|
+
typedef typename sequence_type::allocator_type allocator_type;
|
|
181
|
+
typedef ::boost::container::allocator_traits<allocator_type> allocator_traits_type;
|
|
182
|
+
typedef typename sequence_type::pointer pointer;
|
|
183
|
+
typedef typename sequence_type::const_pointer const_pointer;
|
|
184
|
+
typedef typename sequence_type::reference reference;
|
|
185
|
+
typedef typename sequence_type::const_reference const_reference;
|
|
186
|
+
typedef typename sequence_type::size_type size_type;
|
|
187
|
+
typedef typename sequence_type::difference_type difference_type;
|
|
188
|
+
typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type;
|
|
189
|
+
typedef typename BOOST_CONTAINER_IMPDEF(tree_t::value_compare) value_compare;
|
|
190
|
+
|
|
191
|
+
typedef typename sequence_type::iterator iterator;
|
|
192
|
+
typedef typename sequence_type::const_iterator const_iterator;
|
|
193
|
+
typedef typename sequence_type::reverse_iterator reverse_iterator;
|
|
194
|
+
typedef typename sequence_type::const_reverse_iterator const_reverse_iterator;
|
|
184
195
|
typedef BOOST_CONTAINER_IMPDEF(impl_value_type) movable_value_type;
|
|
185
196
|
|
|
186
|
-
|
|
197
|
+
//AllocatorOrContainer::value_type must be std::pair<Key, T>
|
|
198
|
+
BOOST_STATIC_ASSERT((dtl::is_same<std::pair<Key, T>, typename allocator_type::value_type>::value));
|
|
199
|
+
|
|
187
200
|
//////////////////////////////////////////////
|
|
188
201
|
//
|
|
189
202
|
// construct/copy/destroy
|
|
@@ -193,106 +206,200 @@ class flat_map
|
|
|
193
206
|
//! <b>Effects</b>: Default constructs an empty flat_map.
|
|
194
207
|
//!
|
|
195
208
|
//! <b>Complexity</b>: Constant.
|
|
196
|
-
flat_map()
|
|
197
|
-
|
|
209
|
+
BOOST_CONTAINER_FORCEINLINE flat_map() BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<AllocatorOrContainer>::value &&
|
|
210
|
+
dtl::is_nothrow_default_constructible<Compare>::value)
|
|
198
211
|
: m_flat_tree()
|
|
199
|
-
{
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
212
|
+
{}
|
|
213
|
+
|
|
214
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified allocator.
|
|
215
|
+
//!
|
|
216
|
+
//! <b>Complexity</b>: Constant.
|
|
217
|
+
BOOST_CONTAINER_FORCEINLINE explicit flat_map(const allocator_type& a)
|
|
218
|
+
: m_flat_tree(dtl::force<const impl_allocator_type>(a))
|
|
219
|
+
{}
|
|
203
220
|
|
|
204
221
|
//! <b>Effects</b>: Constructs an empty flat_map using the specified
|
|
205
|
-
//! comparison object
|
|
222
|
+
//! comparison object.
|
|
206
223
|
//!
|
|
207
224
|
//! <b>Complexity</b>: Constant.
|
|
208
|
-
explicit flat_map(const Compare& comp
|
|
209
|
-
: m_flat_tree(comp
|
|
210
|
-
{
|
|
211
|
-
//value_type must be std::pair<Key, T>
|
|
212
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
213
|
-
}
|
|
225
|
+
BOOST_CONTAINER_FORCEINLINE explicit flat_map(const Compare& comp)
|
|
226
|
+
: m_flat_tree(comp)
|
|
227
|
+
{}
|
|
214
228
|
|
|
215
|
-
//! <b>Effects</b>: Constructs an empty flat_map using the specified
|
|
229
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified
|
|
230
|
+
//! comparison object and allocator.
|
|
216
231
|
//!
|
|
217
232
|
//! <b>Complexity</b>: Constant.
|
|
218
|
-
|
|
219
|
-
: m_flat_tree(
|
|
220
|
-
{
|
|
221
|
-
//value_type must be std::pair<Key, T>
|
|
222
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
223
|
-
}
|
|
233
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(const Compare& comp, const allocator_type& a)
|
|
234
|
+
: m_flat_tree(comp, dtl::force<const impl_allocator_type>(a))
|
|
235
|
+
{}
|
|
224
236
|
|
|
225
|
-
//! <b>Effects</b>: Constructs an empty flat_map
|
|
226
|
-
//!
|
|
237
|
+
//! <b>Effects</b>: Constructs an empty flat_map and
|
|
238
|
+
//! and inserts elements from the range [first ,last ).
|
|
227
239
|
//!
|
|
228
240
|
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
|
|
229
|
-
//!
|
|
241
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
230
242
|
template <class InputIterator>
|
|
231
|
-
flat_map(InputIterator first, InputIterator last
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
{
|
|
235
|
-
//value_type must be std::pair<Key, T>
|
|
236
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
237
|
-
}
|
|
243
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(InputIterator first, InputIterator last)
|
|
244
|
+
: m_flat_tree(true, first, last)
|
|
245
|
+
{}
|
|
238
246
|
|
|
239
247
|
//! <b>Effects</b>: Constructs an empty flat_map using the specified
|
|
240
248
|
//! allocator, and inserts elements from the range [first ,last ).
|
|
241
249
|
//!
|
|
242
250
|
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
|
|
243
|
-
//!
|
|
251
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
244
252
|
template <class InputIterator>
|
|
245
|
-
flat_map(InputIterator first, InputIterator last, const allocator_type& a)
|
|
246
|
-
: m_flat_tree(true, first, last,
|
|
247
|
-
{
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
253
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(InputIterator first, InputIterator last, const allocator_type& a)
|
|
254
|
+
: m_flat_tree(true, first, last, dtl::force<const impl_allocator_type>(a))
|
|
255
|
+
{}
|
|
256
|
+
|
|
257
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
258
|
+
//! and inserts elements from the range [first ,last ).
|
|
259
|
+
//!
|
|
260
|
+
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
|
|
261
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
262
|
+
template <class InputIterator>
|
|
263
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(InputIterator first, InputIterator last, const Compare& comp)
|
|
264
|
+
: m_flat_tree(true, first, last, comp)
|
|
265
|
+
{}
|
|
251
266
|
|
|
252
267
|
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
253
|
-
//! allocator, and inserts elements from the
|
|
268
|
+
//! allocator, and inserts elements from the range [first ,last ).
|
|
269
|
+
//!
|
|
270
|
+
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
|
|
271
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
272
|
+
template <class InputIterator>
|
|
273
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a)
|
|
274
|
+
: m_flat_tree(true, first, last, comp, dtl::force<const impl_allocator_type>(a))
|
|
275
|
+
{}
|
|
276
|
+
|
|
277
|
+
//! <b>Effects</b>: Constructs an empty flat_map
|
|
278
|
+
//! and inserts elements from the ordered range [first ,last). This function
|
|
254
279
|
//! is more efficient than the normal range creation for ordered ranges.
|
|
255
280
|
//!
|
|
256
|
-
//! <b>Requires</b>: [first ,last) must be ordered according to the predicate
|
|
257
|
-
//! unique values.
|
|
281
|
+
//! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
|
|
258
282
|
//!
|
|
259
283
|
//! <b>Complexity</b>: Linear in N.
|
|
260
284
|
//!
|
|
261
285
|
//! <b>Note</b>: Non-standard extension.
|
|
262
286
|
template <class InputIterator>
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
: m_flat_tree(
|
|
266
|
-
{
|
|
267
|
-
//value_type must be std::pair<Key, T>
|
|
268
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
269
|
-
}
|
|
287
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
288
|
+
flat_map(ordered_unique_range_t, InputIterator first, InputIterator last)
|
|
289
|
+
: m_flat_tree(ordered_range, first, last)
|
|
290
|
+
{}
|
|
270
291
|
|
|
271
|
-
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
272
292
|
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
273
|
-
//!
|
|
293
|
+
//! inserts elements from the ordered range [first ,last). This function
|
|
294
|
+
//! is more efficient than the normal range creation for ordered ranges.
|
|
295
|
+
//!
|
|
296
|
+
//! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
|
|
297
|
+
//!
|
|
298
|
+
//! <b>Complexity</b>: Linear in N.
|
|
299
|
+
//!
|
|
300
|
+
//! <b>Note</b>: Non-standard extension.
|
|
301
|
+
template <class InputIterator>
|
|
302
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
303
|
+
flat_map(ordered_unique_range_t, InputIterator first, InputIterator last, const Compare& comp)
|
|
304
|
+
: m_flat_tree(ordered_range, first, last, comp)
|
|
305
|
+
{}
|
|
306
|
+
|
|
307
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
308
|
+
//! allocator, and inserts elements from the ordered range [first ,last). This function
|
|
309
|
+
//! is more efficient than the normal range creation for ordered ranges.
|
|
310
|
+
//!
|
|
311
|
+
//! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
|
|
312
|
+
//!
|
|
313
|
+
//! <b>Complexity</b>: Linear in N.
|
|
314
|
+
//!
|
|
315
|
+
//! <b>Note</b>: Non-standard extension.
|
|
316
|
+
template <class InputIterator>
|
|
317
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
318
|
+
flat_map(ordered_unique_range_t, InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a)
|
|
319
|
+
: m_flat_tree(ordered_range, first, last, comp, dtl::force<const impl_allocator_type>(a))
|
|
320
|
+
{}
|
|
321
|
+
|
|
322
|
+
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
323
|
+
//! <b>Effects</b>: Constructs an empty flat_map and
|
|
324
|
+
//! inserts elements from the range [il.begin() ,il.end()).
|
|
274
325
|
//!
|
|
275
326
|
//! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using
|
|
276
|
-
//!
|
|
277
|
-
flat_map(std::initializer_list<value_type> il
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
283
|
-
}
|
|
327
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
328
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(std::initializer_list<value_type> il)
|
|
329
|
+
: m_flat_tree( true
|
|
330
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
331
|
+
, dtl::force<impl_initializer_list>(il).end())
|
|
332
|
+
{}
|
|
284
333
|
|
|
285
334
|
//! <b>Effects</b>: Constructs an empty flat_map using the specified
|
|
286
335
|
//! allocator, and inserts elements from the range [il.begin() ,il.end()).
|
|
287
336
|
//!
|
|
288
337
|
//! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using
|
|
289
|
-
//!
|
|
290
|
-
flat_map(std::initializer_list<value_type> il, const allocator_type& a)
|
|
291
|
-
: m_flat_tree(true
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
}
|
|
338
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
339
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(std::initializer_list<value_type> il, const allocator_type& a)
|
|
340
|
+
: m_flat_tree( true
|
|
341
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
342
|
+
, dtl::force<impl_initializer_list>(il).end()
|
|
343
|
+
, dtl::force<const impl_allocator_type>(a))
|
|
344
|
+
{}
|
|
345
|
+
|
|
346
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
347
|
+
//! inserts elements from the range [il.begin() ,il.end()).
|
|
348
|
+
//!
|
|
349
|
+
//! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using
|
|
350
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
351
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(std::initializer_list<value_type> il, const Compare& comp)
|
|
352
|
+
: m_flat_tree(true
|
|
353
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
354
|
+
, dtl::force<impl_initializer_list>(il).end()
|
|
355
|
+
, comp)
|
|
356
|
+
{}
|
|
357
|
+
|
|
358
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
359
|
+
//! allocator, and inserts elements from the range [il.begin() ,il.end()).
|
|
360
|
+
//!
|
|
361
|
+
//! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using
|
|
362
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
363
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a)
|
|
364
|
+
: m_flat_tree(true
|
|
365
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
366
|
+
, dtl::force<impl_initializer_list>(il).end()
|
|
367
|
+
, comp
|
|
368
|
+
, dtl::force<const impl_allocator_type>(a))
|
|
369
|
+
{}
|
|
370
|
+
|
|
371
|
+
//! <b>Effects</b>: Constructs an empty flat_map using and
|
|
372
|
+
//! inserts elements from the ordered unique range [il.begin(), il.end()). This function
|
|
373
|
+
//! is more efficient than the normal range creation for ordered ranges.
|
|
374
|
+
//!
|
|
375
|
+
//! <b>Requires</b>: [il.begin(), il.end()) must be ordered according to the predicate and must be
|
|
376
|
+
//! unique values.
|
|
377
|
+
//!
|
|
378
|
+
//! <b>Complexity</b>: Linear in N.
|
|
379
|
+
//!
|
|
380
|
+
//! <b>Note</b>: Non-standard extension.
|
|
381
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(ordered_unique_range_t, std::initializer_list<value_type> il)
|
|
382
|
+
: m_flat_tree(ordered_unique_range
|
|
383
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
384
|
+
, dtl::force<impl_initializer_list>(il).end())
|
|
385
|
+
{}
|
|
386
|
+
|
|
387
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
388
|
+
//! inserts elements from the ordered unique range [il.begin(), il.end()). This function
|
|
389
|
+
//! is more efficient than the normal range creation for ordered ranges.
|
|
390
|
+
//!
|
|
391
|
+
//! <b>Requires</b>: [il.begin(), il.end()) must be ordered according to the predicate and must be
|
|
392
|
+
//! unique values.
|
|
393
|
+
//!
|
|
394
|
+
//! <b>Complexity</b>: Linear in N.
|
|
395
|
+
//!
|
|
396
|
+
//! <b>Note</b>: Non-standard extension.
|
|
397
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(ordered_unique_range_t, std::initializer_list<value_type> il, const Compare& comp)
|
|
398
|
+
: m_flat_tree(ordered_unique_range
|
|
399
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
400
|
+
, dtl::force<impl_initializer_list>(il).end()
|
|
401
|
+
, comp)
|
|
402
|
+
{}
|
|
296
403
|
|
|
297
404
|
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
298
405
|
//! allocator, and inserts elements from the ordered unique range [il.begin(), il.end()). This function
|
|
@@ -304,24 +411,21 @@ class flat_map
|
|
|
304
411
|
//! <b>Complexity</b>: Linear in N.
|
|
305
412
|
//!
|
|
306
413
|
//! <b>Note</b>: Non-standard extension.
|
|
307
|
-
flat_map(ordered_unique_range_t, std::initializer_list<value_type> il, const Compare& comp
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
}
|
|
414
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(ordered_unique_range_t, std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a)
|
|
415
|
+
: m_flat_tree( ordered_unique_range
|
|
416
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
417
|
+
, dtl::force<impl_initializer_list>(il).end()
|
|
418
|
+
, comp
|
|
419
|
+
, dtl::force<const impl_allocator_type>(a))
|
|
420
|
+
{}
|
|
314
421
|
#endif
|
|
315
422
|
|
|
316
423
|
//! <b>Effects</b>: Copy constructs a flat_map.
|
|
317
424
|
//!
|
|
318
425
|
//! <b>Complexity</b>: Linear in x.size().
|
|
319
|
-
flat_map(const flat_map& x)
|
|
426
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(const flat_map& x)
|
|
320
427
|
: m_flat_tree(x.m_flat_tree)
|
|
321
|
-
{
|
|
322
|
-
//value_type must be std::pair<Key, T>
|
|
323
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
324
|
-
}
|
|
428
|
+
{}
|
|
325
429
|
|
|
326
430
|
//! <b>Effects</b>: Move constructs a flat_map.
|
|
327
431
|
//! Constructs *this using x's resources.
|
|
@@ -329,39 +433,30 @@ class flat_map
|
|
|
329
433
|
//! <b>Complexity</b>: Constant.
|
|
330
434
|
//!
|
|
331
435
|
//! <b>Postcondition</b>: x is emptied.
|
|
332
|
-
flat_map(BOOST_RV_REF(flat_map) x)
|
|
333
|
-
BOOST_NOEXCEPT_IF(boost::container::
|
|
436
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(BOOST_RV_REF(flat_map) x)
|
|
437
|
+
BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<Compare>::value)
|
|
334
438
|
: m_flat_tree(boost::move(x.m_flat_tree))
|
|
335
|
-
{
|
|
336
|
-
//value_type must be std::pair<Key, T>
|
|
337
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
338
|
-
}
|
|
439
|
+
{}
|
|
339
440
|
|
|
340
441
|
//! <b>Effects</b>: Copy constructs a flat_map using the specified allocator.
|
|
341
442
|
//!
|
|
342
443
|
//! <b>Complexity</b>: Linear in x.size().
|
|
343
|
-
flat_map(const flat_map& x, const allocator_type &a)
|
|
344
|
-
: m_flat_tree(x.m_flat_tree, a)
|
|
345
|
-
{
|
|
346
|
-
//value_type must be std::pair<Key, T>
|
|
347
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
348
|
-
}
|
|
444
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(const flat_map& x, const allocator_type &a)
|
|
445
|
+
: m_flat_tree(x.m_flat_tree, dtl::force<const impl_allocator_type>(a))
|
|
446
|
+
{}
|
|
349
447
|
|
|
350
448
|
//! <b>Effects</b>: Move constructs a flat_map using the specified allocator.
|
|
351
449
|
//! Constructs *this using x's resources.
|
|
352
450
|
//!
|
|
353
451
|
//! <b>Complexity</b>: Constant if x.get_allocator() == a, linear otherwise.
|
|
354
|
-
flat_map(BOOST_RV_REF(flat_map) x, const allocator_type &a)
|
|
355
|
-
: m_flat_tree(boost::move(x.m_flat_tree), a)
|
|
356
|
-
{
|
|
357
|
-
//value_type must be std::pair<Key, T>
|
|
358
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
359
|
-
}
|
|
452
|
+
BOOST_CONTAINER_FORCEINLINE flat_map(BOOST_RV_REF(flat_map) x, const allocator_type &a)
|
|
453
|
+
: m_flat_tree(boost::move(x.m_flat_tree), dtl::force<const impl_allocator_type>(a))
|
|
454
|
+
{}
|
|
360
455
|
|
|
361
456
|
//! <b>Effects</b>: Makes *this a copy of x.
|
|
362
457
|
//!
|
|
363
458
|
//! <b>Complexity</b>: Linear in x.size().
|
|
364
|
-
flat_map& operator=(BOOST_COPY_ASSIGN_REF(flat_map) x)
|
|
459
|
+
BOOST_CONTAINER_FORCEINLINE flat_map& operator=(BOOST_COPY_ASSIGN_REF(flat_map) x)
|
|
365
460
|
{ m_flat_tree = x.m_flat_tree; return *this; }
|
|
366
461
|
|
|
367
462
|
//! <b>Effects</b>: Move constructs a flat_map.
|
|
@@ -373,10 +468,10 @@ class flat_map
|
|
|
373
468
|
//! <b>Complexity</b>: Constant if allocator_traits_type::
|
|
374
469
|
//! propagate_on_container_move_assignment is true or
|
|
375
470
|
//! this->get>allocator() == x.get_allocator(). Linear otherwise.
|
|
376
|
-
flat_map& operator=(BOOST_RV_REF(flat_map) x)
|
|
471
|
+
BOOST_CONTAINER_FORCEINLINE flat_map& operator=(BOOST_RV_REF(flat_map) x)
|
|
377
472
|
BOOST_NOEXCEPT_IF( (allocator_traits_type::propagate_on_container_move_assignment::value ||
|
|
378
473
|
allocator_traits_type::is_always_equal::value) &&
|
|
379
|
-
boost::container::
|
|
474
|
+
boost::container::dtl::is_nothrow_move_assignable<Compare>::value)
|
|
380
475
|
{ m_flat_tree = boost::move(x.m_flat_tree); return *this; }
|
|
381
476
|
|
|
382
477
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
@@ -393,8 +488,8 @@ class flat_map
|
|
|
393
488
|
//! was passed to the object's constructor.
|
|
394
489
|
//!
|
|
395
490
|
//! <b>Complexity</b>: Constant.
|
|
396
|
-
allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
397
|
-
{ return
|
|
491
|
+
BOOST_CONTAINER_FORCEINLINE allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
492
|
+
{ return dtl::force_copy<allocator_type>(m_flat_tree.get_allocator()); }
|
|
398
493
|
|
|
399
494
|
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
|
400
495
|
//!
|
|
@@ -403,8 +498,11 @@ class flat_map
|
|
|
403
498
|
//! <b>Complexity</b>: Constant.
|
|
404
499
|
//!
|
|
405
500
|
//! <b>Note</b>: Non-standard extension.
|
|
406
|
-
|
|
407
|
-
|
|
501
|
+
BOOST_CONTAINER_FORCEINLINE get_stored_allocator_noconst_return_t get_stored_allocator() BOOST_NOEXCEPT_OR_NOTHROW
|
|
502
|
+
{
|
|
503
|
+
impl_get_stored_allocator_noconst_return_t r = m_flat_tree.get_stored_allocator();
|
|
504
|
+
return dtl::force<stored_allocator_type>(r);
|
|
505
|
+
}
|
|
408
506
|
|
|
409
507
|
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
|
410
508
|
//!
|
|
@@ -413,8 +511,11 @@ class flat_map
|
|
|
413
511
|
//! <b>Complexity</b>: Constant.
|
|
414
512
|
//!
|
|
415
513
|
//! <b>Note</b>: Non-standard extension.
|
|
416
|
-
|
|
417
|
-
|
|
514
|
+
BOOST_CONTAINER_FORCEINLINE get_stored_allocator_const_return_t get_stored_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
515
|
+
{
|
|
516
|
+
impl_get_stored_allocator_const_return_t r = m_flat_tree.get_stored_allocator();
|
|
517
|
+
return dtl::force<const stored_allocator_type>(r);
|
|
518
|
+
}
|
|
418
519
|
|
|
419
520
|
//////////////////////////////////////////////
|
|
420
521
|
//
|
|
@@ -427,32 +528,32 @@ class flat_map
|
|
|
427
528
|
//! <b>Throws</b>: Nothing.
|
|
428
529
|
//!
|
|
429
530
|
//! <b>Complexity</b>: Constant.
|
|
430
|
-
iterator begin() BOOST_NOEXCEPT_OR_NOTHROW
|
|
431
|
-
{ return
|
|
531
|
+
BOOST_CONTAINER_FORCEINLINE iterator begin() BOOST_NOEXCEPT_OR_NOTHROW
|
|
532
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.begin()); }
|
|
432
533
|
|
|
433
534
|
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
|
|
434
535
|
//!
|
|
435
536
|
//! <b>Throws</b>: Nothing.
|
|
436
537
|
//!
|
|
437
538
|
//! <b>Complexity</b>: Constant.
|
|
438
|
-
const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
439
|
-
{ return
|
|
539
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
540
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.begin()); }
|
|
440
541
|
|
|
441
542
|
//! <b>Effects</b>: Returns an iterator to the end of the container.
|
|
442
543
|
//!
|
|
443
544
|
//! <b>Throws</b>: Nothing.
|
|
444
545
|
//!
|
|
445
546
|
//! <b>Complexity</b>: Constant.
|
|
446
|
-
iterator end() BOOST_NOEXCEPT_OR_NOTHROW
|
|
447
|
-
{ return
|
|
547
|
+
BOOST_CONTAINER_FORCEINLINE iterator end() BOOST_NOEXCEPT_OR_NOTHROW
|
|
548
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.end()); }
|
|
448
549
|
|
|
449
550
|
//! <b>Effects</b>: Returns a const_iterator to the end of the container.
|
|
450
551
|
//!
|
|
451
552
|
//! <b>Throws</b>: Nothing.
|
|
452
553
|
//!
|
|
453
554
|
//! <b>Complexity</b>: Constant.
|
|
454
|
-
const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
455
|
-
{ return
|
|
555
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
556
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.end()); }
|
|
456
557
|
|
|
457
558
|
//! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
|
|
458
559
|
//! of the reversed container.
|
|
@@ -460,8 +561,8 @@ class flat_map
|
|
|
460
561
|
//! <b>Throws</b>: Nothing.
|
|
461
562
|
//!
|
|
462
563
|
//! <b>Complexity</b>: Constant.
|
|
463
|
-
reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW
|
|
464
|
-
{ return
|
|
564
|
+
BOOST_CONTAINER_FORCEINLINE reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW
|
|
565
|
+
{ return dtl::force_copy<reverse_iterator>(m_flat_tree.rbegin()); }
|
|
465
566
|
|
|
466
567
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
|
467
568
|
//! of the reversed container.
|
|
@@ -469,8 +570,8 @@ class flat_map
|
|
|
469
570
|
//! <b>Throws</b>: Nothing.
|
|
470
571
|
//!
|
|
471
572
|
//! <b>Complexity</b>: Constant.
|
|
472
|
-
const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
473
|
-
{ return
|
|
573
|
+
BOOST_CONTAINER_FORCEINLINE const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
574
|
+
{ return dtl::force_copy<const_reverse_iterator>(m_flat_tree.rbegin()); }
|
|
474
575
|
|
|
475
576
|
//! <b>Effects</b>: Returns a reverse_iterator pointing to the end
|
|
476
577
|
//! of the reversed container.
|
|
@@ -478,8 +579,8 @@ class flat_map
|
|
|
478
579
|
//! <b>Throws</b>: Nothing.
|
|
479
580
|
//!
|
|
480
581
|
//! <b>Complexity</b>: Constant.
|
|
481
|
-
reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW
|
|
482
|
-
{ return
|
|
582
|
+
BOOST_CONTAINER_FORCEINLINE reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW
|
|
583
|
+
{ return dtl::force_copy<reverse_iterator>(m_flat_tree.rend()); }
|
|
483
584
|
|
|
484
585
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
|
485
586
|
//! of the reversed container.
|
|
@@ -487,24 +588,24 @@ class flat_map
|
|
|
487
588
|
//! <b>Throws</b>: Nothing.
|
|
488
589
|
//!
|
|
489
590
|
//! <b>Complexity</b>: Constant.
|
|
490
|
-
const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
491
|
-
{ return
|
|
591
|
+
BOOST_CONTAINER_FORCEINLINE const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
592
|
+
{ return dtl::force_copy<const_reverse_iterator>(m_flat_tree.rend()); }
|
|
492
593
|
|
|
493
594
|
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
|
|
494
595
|
//!
|
|
495
596
|
//! <b>Throws</b>: Nothing.
|
|
496
597
|
//!
|
|
497
598
|
//! <b>Complexity</b>: Constant.
|
|
498
|
-
const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
499
|
-
{ return
|
|
599
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
600
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.cbegin()); }
|
|
500
601
|
|
|
501
602
|
//! <b>Effects</b>: Returns a const_iterator to the end of the container.
|
|
502
603
|
//!
|
|
503
604
|
//! <b>Throws</b>: Nothing.
|
|
504
605
|
//!
|
|
505
606
|
//! <b>Complexity</b>: Constant.
|
|
506
|
-
const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
507
|
-
{ return
|
|
607
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
608
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.cend()); }
|
|
508
609
|
|
|
509
610
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
|
510
611
|
//! of the reversed container.
|
|
@@ -512,8 +613,8 @@ class flat_map
|
|
|
512
613
|
//! <b>Throws</b>: Nothing.
|
|
513
614
|
//!
|
|
514
615
|
//! <b>Complexity</b>: Constant.
|
|
515
|
-
const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
516
|
-
{ return
|
|
616
|
+
BOOST_CONTAINER_FORCEINLINE const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
617
|
+
{ return dtl::force_copy<const_reverse_iterator>(m_flat_tree.crbegin()); }
|
|
517
618
|
|
|
518
619
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
|
519
620
|
//! of the reversed container.
|
|
@@ -521,8 +622,8 @@ class flat_map
|
|
|
521
622
|
//! <b>Throws</b>: Nothing.
|
|
522
623
|
//!
|
|
523
624
|
//! <b>Complexity</b>: Constant.
|
|
524
|
-
const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
525
|
-
{ return
|
|
625
|
+
BOOST_CONTAINER_FORCEINLINE const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
626
|
+
{ return dtl::force_copy<const_reverse_iterator>(m_flat_tree.crend()); }
|
|
526
627
|
|
|
527
628
|
//////////////////////////////////////////////
|
|
528
629
|
//
|
|
@@ -535,7 +636,7 @@ class flat_map
|
|
|
535
636
|
//! <b>Throws</b>: Nothing.
|
|
536
637
|
//!
|
|
537
638
|
//! <b>Complexity</b>: Constant.
|
|
538
|
-
bool empty() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
639
|
+
BOOST_CONTAINER_FORCEINLINE bool empty() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
539
640
|
{ return m_flat_tree.empty(); }
|
|
540
641
|
|
|
541
642
|
//! <b>Effects</b>: Returns the number of the elements contained in the container.
|
|
@@ -543,7 +644,7 @@ class flat_map
|
|
|
543
644
|
//! <b>Throws</b>: Nothing.
|
|
544
645
|
//!
|
|
545
646
|
//! <b>Complexity</b>: Constant.
|
|
546
|
-
size_type size() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
647
|
+
BOOST_CONTAINER_FORCEINLINE size_type size() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
547
648
|
{ return m_flat_tree.size(); }
|
|
548
649
|
|
|
549
650
|
//! <b>Effects</b>: Returns the largest possible size of the container.
|
|
@@ -551,7 +652,7 @@ class flat_map
|
|
|
551
652
|
//! <b>Throws</b>: Nothing.
|
|
552
653
|
//!
|
|
553
654
|
//! <b>Complexity</b>: Constant.
|
|
554
|
-
size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
655
|
+
BOOST_CONTAINER_FORCEINLINE size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
555
656
|
{ return m_flat_tree.max_size(); }
|
|
556
657
|
|
|
557
658
|
//! <b>Effects</b>: Number of elements for which memory has been allocated.
|
|
@@ -560,10 +661,11 @@ class flat_map
|
|
|
560
661
|
//! <b>Throws</b>: Nothing.
|
|
561
662
|
//!
|
|
562
663
|
//! <b>Complexity</b>: Constant.
|
|
563
|
-
size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
664
|
+
BOOST_CONTAINER_FORCEINLINE size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
564
665
|
{ return m_flat_tree.capacity(); }
|
|
565
666
|
|
|
566
|
-
//! <b>Effects</b>: If n is less than or equal to capacity(),
|
|
667
|
+
//! <b>Effects</b>: If n is less than or equal to capacity(), or the
|
|
668
|
+
//! underlying container has no `reserve` member, this call has no
|
|
567
669
|
//! effect. Otherwise, it is a request for allocation of additional memory.
|
|
568
670
|
//! If the request is successful, then capacity() is greater than or equal to
|
|
569
671
|
//! n; otherwise, capacity() is unchanged. In either case, size() is unchanged.
|
|
@@ -572,7 +674,7 @@ class flat_map
|
|
|
572
674
|
//!
|
|
573
675
|
//! <b>Note</b>: If capacity() is less than "cnt", iterators and references to
|
|
574
676
|
//! to values might be invalidated.
|
|
575
|
-
void reserve(size_type cnt)
|
|
677
|
+
BOOST_CONTAINER_FORCEINLINE void reserve(size_type cnt)
|
|
576
678
|
{ m_flat_tree.reserve(cnt); }
|
|
577
679
|
|
|
578
680
|
//! <b>Effects</b>: Tries to deallocate the excess of memory created
|
|
@@ -581,7 +683,7 @@ class flat_map
|
|
|
581
683
|
//! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
|
|
582
684
|
//!
|
|
583
685
|
//! <b>Complexity</b>: Linear to size().
|
|
584
|
-
void shrink_to_fit()
|
|
686
|
+
BOOST_CONTAINER_FORCEINLINE void shrink_to_fit()
|
|
585
687
|
{ m_flat_tree.shrink_to_fit(); }
|
|
586
688
|
|
|
587
689
|
//////////////////////////////////////////////
|
|
@@ -608,8 +710,8 @@ class flat_map
|
|
|
608
710
|
mapped_type &operator[](key_type &&k) ;
|
|
609
711
|
#elif defined(BOOST_MOVE_HELPERS_RETURN_SFINAE_BROKEN)
|
|
610
712
|
//in compilers like GCC 3.4, we can't catch temporaries
|
|
611
|
-
mapped_type& operator[](const key_type &k) { return this->priv_subscript(k); }
|
|
612
|
-
mapped_type& operator[](BOOST_RV_REF(key_type) k) { return this->priv_subscript(::boost::move(k)); }
|
|
713
|
+
BOOST_CONTAINER_FORCEINLINE mapped_type& operator[](const key_type &k) { return this->priv_subscript(k); }
|
|
714
|
+
BOOST_CONTAINER_FORCEINLINE mapped_type& operator[](BOOST_RV_REF(key_type) k) { return this->priv_subscript(::boost::move(k)); }
|
|
613
715
|
#else
|
|
614
716
|
BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, this->priv_subscript)
|
|
615
717
|
#endif
|
|
@@ -629,7 +731,7 @@ class flat_map
|
|
|
629
731
|
template <class M>
|
|
630
732
|
BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> insert_or_assign(const key_type& k, BOOST_FWD_REF(M) obj)
|
|
631
733
|
{
|
|
632
|
-
return
|
|
734
|
+
return dtl::force_copy< std::pair<iterator, bool> >
|
|
633
735
|
(this->m_flat_tree.insert_or_assign
|
|
634
736
|
( impl_const_iterator(), k, ::boost::forward<M>(obj))
|
|
635
737
|
);
|
|
@@ -650,7 +752,7 @@ class flat_map
|
|
|
650
752
|
template <class M>
|
|
651
753
|
BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> insert_or_assign(BOOST_RV_REF(key_type) k, BOOST_FWD_REF(M) obj)
|
|
652
754
|
{
|
|
653
|
-
return
|
|
755
|
+
return dtl::force_copy< std::pair<iterator, bool> >
|
|
654
756
|
(this->m_flat_tree.insert_or_assign
|
|
655
757
|
( impl_const_iterator(), ::boost::move(k), ::boost::forward<M>(obj))
|
|
656
758
|
);
|
|
@@ -673,9 +775,9 @@ class flat_map
|
|
|
673
775
|
template <class M>
|
|
674
776
|
BOOST_CONTAINER_FORCEINLINE iterator insert_or_assign(const_iterator hint, const key_type& k, BOOST_FWD_REF(M) obj)
|
|
675
777
|
{
|
|
676
|
-
return
|
|
778
|
+
return dtl::force_copy< std::pair<iterator, bool> >
|
|
677
779
|
(this->m_flat_tree.insert_or_assign
|
|
678
|
-
(
|
|
780
|
+
( dtl::force_copy<impl_const_iterator>(hint)
|
|
679
781
|
, k, ::boost::forward<M>(obj))
|
|
680
782
|
);
|
|
681
783
|
}
|
|
@@ -697,28 +799,28 @@ class flat_map
|
|
|
697
799
|
template <class M>
|
|
698
800
|
BOOST_CONTAINER_FORCEINLINE iterator insert_or_assign(const_iterator hint, BOOST_RV_REF(key_type) k, BOOST_FWD_REF(M) obj)
|
|
699
801
|
{
|
|
700
|
-
return
|
|
802
|
+
return dtl::force_copy< std::pair<iterator, bool> >
|
|
701
803
|
(this->m_flat_tree.insert_or_assign
|
|
702
|
-
(
|
|
804
|
+
( dtl::force_copy<impl_const_iterator>(hint)
|
|
703
805
|
, ::boost::move(k), ::boost::forward<M>(obj))
|
|
704
806
|
);
|
|
705
807
|
}
|
|
706
808
|
|
|
707
809
|
//! @copydoc ::boost::container::flat_set::nth(size_type)
|
|
708
|
-
iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
|
|
709
|
-
{ return
|
|
810
|
+
BOOST_CONTAINER_FORCEINLINE iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
|
|
811
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.nth(n)); }
|
|
710
812
|
|
|
711
813
|
//! @copydoc ::boost::container::flat_set::nth(size_type) const
|
|
712
|
-
const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
713
|
-
{ return
|
|
814
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
815
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.nth(n)); }
|
|
714
816
|
|
|
715
817
|
//! @copydoc ::boost::container::flat_set::index_of(iterator)
|
|
716
|
-
size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
|
|
717
|
-
{ return m_flat_tree.index_of(
|
|
818
|
+
BOOST_CONTAINER_FORCEINLINE size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
|
|
819
|
+
{ return m_flat_tree.index_of(dtl::force_copy<impl_iterator>(p)); }
|
|
718
820
|
|
|
719
821
|
//! @copydoc ::boost::container::flat_set::index_of(const_iterator) const
|
|
720
|
-
size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
721
|
-
{ return m_flat_tree.index_of(
|
|
822
|
+
BOOST_CONTAINER_FORCEINLINE size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
823
|
+
{ return m_flat_tree.index_of(dtl::force_copy<impl_const_iterator>(p)); }
|
|
722
824
|
|
|
723
825
|
//! Returns: A reference to the element whose key is equivalent to x.
|
|
724
826
|
//!
|
|
@@ -769,8 +871,8 @@ class flat_map
|
|
|
769
871
|
//!
|
|
770
872
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
771
873
|
template <class... Args>
|
|
772
|
-
std::pair<iterator,bool> emplace(BOOST_FWD_REF(Args)... args)
|
|
773
|
-
{ return
|
|
874
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<iterator,bool> emplace(BOOST_FWD_REF(Args)... args)
|
|
875
|
+
{ return dtl::force_copy< std::pair<iterator, bool> >(m_flat_tree.emplace_unique(boost::forward<Args>(args)...)); }
|
|
774
876
|
|
|
775
877
|
//! <b>Effects</b>: Inserts an object of type T constructed with
|
|
776
878
|
//! std::forward<Args>(args)... in the container if and only if there is
|
|
@@ -785,10 +887,10 @@ class flat_map
|
|
|
785
887
|
//!
|
|
786
888
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
787
889
|
template <class... Args>
|
|
788
|
-
iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(Args)... args)
|
|
890
|
+
BOOST_CONTAINER_FORCEINLINE iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(Args)... args)
|
|
789
891
|
{
|
|
790
|
-
return
|
|
791
|
-
(m_flat_tree.emplace_hint_unique(
|
|
892
|
+
return dtl::force_copy<iterator>
|
|
893
|
+
(m_flat_tree.emplace_hint_unique( dtl::force_copy<impl_const_iterator>(hint)
|
|
792
894
|
, boost::forward<Args>(args)...));
|
|
793
895
|
}
|
|
794
896
|
|
|
@@ -806,7 +908,7 @@ class flat_map
|
|
|
806
908
|
template <class... Args>
|
|
807
909
|
BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> try_emplace(const key_type& k, BOOST_FWD_REF(Args)... args)
|
|
808
910
|
{
|
|
809
|
-
return
|
|
911
|
+
return dtl::force_copy< std::pair<iterator, bool> >(
|
|
810
912
|
m_flat_tree.try_emplace(impl_const_iterator(), k, boost::forward<Args>(args)...));
|
|
811
913
|
}
|
|
812
914
|
|
|
@@ -824,8 +926,8 @@ class flat_map
|
|
|
824
926
|
template <class... Args>
|
|
825
927
|
BOOST_CONTAINER_FORCEINLINE iterator try_emplace(const_iterator hint, const key_type &k, BOOST_FWD_REF(Args)... args)
|
|
826
928
|
{
|
|
827
|
-
return
|
|
828
|
-
(
|
|
929
|
+
return dtl::force_copy<iterator>(m_flat_tree.try_emplace
|
|
930
|
+
(dtl::force_copy<impl_const_iterator>(hint), k, boost::forward<Args>(args)...).first);
|
|
829
931
|
}
|
|
830
932
|
|
|
831
933
|
//! <b>Requires</b>: value_type shall be EmplaceConstructible into map from piecewise_construct,
|
|
@@ -842,7 +944,7 @@ class flat_map
|
|
|
842
944
|
template <class... Args>
|
|
843
945
|
BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> try_emplace(BOOST_RV_REF(key_type) k, BOOST_FWD_REF(Args)... args)
|
|
844
946
|
{
|
|
845
|
-
return
|
|
947
|
+
return dtl::force_copy< std::pair<iterator, bool> >
|
|
846
948
|
(m_flat_tree.try_emplace(impl_const_iterator(), boost::move(k), boost::forward<Args>(args)...));
|
|
847
949
|
}
|
|
848
950
|
|
|
@@ -860,8 +962,8 @@ class flat_map
|
|
|
860
962
|
template <class... Args>
|
|
861
963
|
BOOST_CONTAINER_FORCEINLINE iterator try_emplace(const_iterator hint, BOOST_RV_REF(key_type) k, BOOST_FWD_REF(Args)... args)
|
|
862
964
|
{
|
|
863
|
-
return
|
|
864
|
-
(m_flat_tree.try_emplace(
|
|
965
|
+
return dtl::force_copy<iterator>
|
|
966
|
+
(m_flat_tree.try_emplace(dtl::force_copy
|
|
865
967
|
<impl_const_iterator>(hint), boost::move(k), boost::forward<Args>(args)...).first);
|
|
866
968
|
}
|
|
867
969
|
|
|
@@ -869,41 +971,41 @@ class flat_map
|
|
|
869
971
|
|
|
870
972
|
#define BOOST_CONTAINER_FLAT_MAP_EMPLACE_CODE(N) \
|
|
871
973
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
872
|
-
std::pair<iterator,bool> emplace(BOOST_MOVE_UREF##N)\
|
|
974
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<iterator,bool> emplace(BOOST_MOVE_UREF##N)\
|
|
873
975
|
{\
|
|
874
|
-
return
|
|
976
|
+
return dtl::force_copy< std::pair<iterator, bool> >\
|
|
875
977
|
(m_flat_tree.emplace_unique(BOOST_MOVE_FWD##N));\
|
|
876
978
|
}\
|
|
877
979
|
\
|
|
878
980
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
879
|
-
iterator emplace_hint(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
981
|
+
BOOST_CONTAINER_FORCEINLINE iterator emplace_hint(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
880
982
|
{\
|
|
881
|
-
return
|
|
882
|
-
(
|
|
983
|
+
return dtl::force_copy<iterator>(m_flat_tree.emplace_hint_unique\
|
|
984
|
+
(dtl::force_copy<impl_const_iterator>(hint) BOOST_MOVE_I##N BOOST_MOVE_FWD##N));\
|
|
883
985
|
}\
|
|
884
986
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
885
987
|
BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> try_emplace(const key_type& k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
886
988
|
{\
|
|
887
|
-
return
|
|
989
|
+
return dtl::force_copy< std::pair<iterator, bool> >\
|
|
888
990
|
(m_flat_tree.try_emplace(impl_const_iterator(), k BOOST_MOVE_I##N BOOST_MOVE_FWD##N));\
|
|
889
991
|
}\
|
|
890
992
|
\
|
|
891
993
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
892
994
|
BOOST_CONTAINER_FORCEINLINE iterator try_emplace(const_iterator hint, const key_type &k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
893
|
-
{ return
|
|
894
|
-
(
|
|
995
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.try_emplace\
|
|
996
|
+
(dtl::force_copy<impl_const_iterator>(hint), k BOOST_MOVE_I##N BOOST_MOVE_FWD##N).first); }\
|
|
895
997
|
\
|
|
896
998
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
897
999
|
BOOST_CONTAINER_FORCEINLINE std::pair<iterator, bool> try_emplace(BOOST_RV_REF(key_type) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
898
1000
|
{\
|
|
899
|
-
return
|
|
1001
|
+
return dtl::force_copy< std::pair<iterator, bool> >\
|
|
900
1002
|
(m_flat_tree.try_emplace(impl_const_iterator(), boost::move(k) BOOST_MOVE_I##N BOOST_MOVE_FWD##N));\
|
|
901
1003
|
}\
|
|
902
1004
|
\
|
|
903
1005
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
904
1006
|
BOOST_CONTAINER_FORCEINLINE iterator try_emplace(const_iterator hint, BOOST_RV_REF(key_type) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
905
|
-
{ return
|
|
906
|
-
(
|
|
1007
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.try_emplace\
|
|
1008
|
+
(dtl::force_copy<impl_const_iterator>(hint), boost::move(k) BOOST_MOVE_I##N BOOST_MOVE_FWD##N).first); }\
|
|
907
1009
|
//
|
|
908
1010
|
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_FLAT_MAP_EMPLACE_CODE)
|
|
909
1011
|
#undef BOOST_CONTAINER_FLAT_MAP_EMPLACE_CODE
|
|
@@ -921,9 +1023,9 @@ class flat_map
|
|
|
921
1023
|
//! to the elements with bigger keys than x.
|
|
922
1024
|
//!
|
|
923
1025
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
924
|
-
std::pair<iterator,bool> insert(const value_type& x)
|
|
925
|
-
{ return
|
|
926
|
-
m_flat_tree.insert_unique(
|
|
1026
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<iterator,bool> insert(const value_type& x)
|
|
1027
|
+
{ return dtl::force_copy<std::pair<iterator,bool> >(
|
|
1028
|
+
m_flat_tree.insert_unique(dtl::force<const impl_value_type>(x))); }
|
|
927
1029
|
|
|
928
1030
|
//! <b>Effects</b>: Inserts a new value_type move constructed from the pair if and
|
|
929
1031
|
//! only if there is no element in the container with key equivalent to the key of x.
|
|
@@ -936,9 +1038,9 @@ class flat_map
|
|
|
936
1038
|
//! to the elements with bigger keys than x.
|
|
937
1039
|
//!
|
|
938
1040
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
939
|
-
std::pair<iterator,bool> insert(BOOST_RV_REF(value_type) x)
|
|
940
|
-
{ return
|
|
941
|
-
m_flat_tree.insert_unique(boost::move(
|
|
1041
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<iterator,bool> insert(BOOST_RV_REF(value_type) x)
|
|
1042
|
+
{ return dtl::force_copy<std::pair<iterator,bool> >(
|
|
1043
|
+
m_flat_tree.insert_unique(boost::move(dtl::force<impl_value_type>(x)))); }
|
|
942
1044
|
|
|
943
1045
|
//! <b>Effects</b>: Inserts a new value_type move constructed from the pair if and
|
|
944
1046
|
//! only if there is no element in the container with key equivalent to the key of x.
|
|
@@ -951,9 +1053,9 @@ class flat_map
|
|
|
951
1053
|
//! to the elements with bigger keys than x.
|
|
952
1054
|
//!
|
|
953
1055
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
954
|
-
std::pair<iterator,bool> insert(BOOST_RV_REF(movable_value_type) x)
|
|
1056
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<iterator,bool> insert(BOOST_RV_REF(movable_value_type) x)
|
|
955
1057
|
{
|
|
956
|
-
return
|
|
1058
|
+
return dtl::force_copy<std::pair<iterator,bool> >
|
|
957
1059
|
(m_flat_tree.insert_unique(boost::move(x)));
|
|
958
1060
|
}
|
|
959
1061
|
|
|
@@ -968,11 +1070,11 @@ class flat_map
|
|
|
968
1070
|
//! right before p) plus insertion linear to the elements with bigger keys than x.
|
|
969
1071
|
//!
|
|
970
1072
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
971
|
-
iterator insert(const_iterator p, const value_type& x)
|
|
1073
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, const value_type& x)
|
|
972
1074
|
{
|
|
973
|
-
return
|
|
974
|
-
m_flat_tree.insert_unique(
|
|
975
|
-
,
|
|
1075
|
+
return dtl::force_copy<iterator>(
|
|
1076
|
+
m_flat_tree.insert_unique( dtl::force_copy<impl_const_iterator>(p)
|
|
1077
|
+
, dtl::force<const impl_value_type>(x)));
|
|
976
1078
|
}
|
|
977
1079
|
|
|
978
1080
|
//! <b>Effects</b>: Inserts an element move constructed from x in the container.
|
|
@@ -984,11 +1086,11 @@ class flat_map
|
|
|
984
1086
|
//! right before p) plus insertion linear to the elements with bigger keys than x.
|
|
985
1087
|
//!
|
|
986
1088
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
987
|
-
iterator insert(const_iterator p, BOOST_RV_REF(value_type) x)
|
|
1089
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, BOOST_RV_REF(value_type) x)
|
|
988
1090
|
{
|
|
989
|
-
return
|
|
990
|
-
(m_flat_tree.insert_unique(
|
|
991
|
-
, boost::move(
|
|
1091
|
+
return dtl::force_copy<iterator>
|
|
1092
|
+
(m_flat_tree.insert_unique( dtl::force_copy<impl_const_iterator>(p)
|
|
1093
|
+
, boost::move(dtl::force<impl_value_type>(x))));
|
|
992
1094
|
}
|
|
993
1095
|
|
|
994
1096
|
//! <b>Effects</b>: Inserts an element move constructed from x in the container.
|
|
@@ -1000,10 +1102,10 @@ class flat_map
|
|
|
1000
1102
|
//! right before p) plus insertion linear to the elements with bigger keys than x.
|
|
1001
1103
|
//!
|
|
1002
1104
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1003
|
-
iterator insert(const_iterator p, BOOST_RV_REF(movable_value_type) x)
|
|
1105
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, BOOST_RV_REF(movable_value_type) x)
|
|
1004
1106
|
{
|
|
1005
|
-
return
|
|
1006
|
-
m_flat_tree.insert_unique(
|
|
1107
|
+
return dtl::force_copy<iterator>(
|
|
1108
|
+
m_flat_tree.insert_unique(dtl::force_copy<impl_const_iterator>(p), boost::move(x)));
|
|
1007
1109
|
}
|
|
1008
1110
|
|
|
1009
1111
|
//! <b>Requires</b>: first, last are not iterators into *this.
|
|
@@ -1011,12 +1113,11 @@ class flat_map
|
|
|
1011
1113
|
//! <b>Effects</b>: inserts each element from the range [first,last) if and only
|
|
1012
1114
|
//! if there is no element with key equivalent to the key of that element.
|
|
1013
1115
|
//!
|
|
1014
|
-
//! <b>Complexity</b>:
|
|
1015
|
-
//! search time plus N*size() insertion time.
|
|
1116
|
+
//! <b>Complexity</b>: N log(size()+N).
|
|
1016
1117
|
//!
|
|
1017
1118
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1018
1119
|
template <class InputIterator>
|
|
1019
|
-
void insert(InputIterator first, InputIterator last)
|
|
1120
|
+
BOOST_CONTAINER_FORCEINLINE void insert(InputIterator first, InputIterator last)
|
|
1020
1121
|
{ m_flat_tree.insert_unique(first, last); }
|
|
1021
1122
|
|
|
1022
1123
|
//! <b>Requires</b>: first, last are not iterators into *this.
|
|
@@ -1028,26 +1129,27 @@ class flat_map
|
|
|
1028
1129
|
//! if there is no element with key equivalent to the key of that element. This
|
|
1029
1130
|
//! function is more efficient than the normal range creation for ordered ranges.
|
|
1030
1131
|
//!
|
|
1031
|
-
//! <b>Complexity</b>:
|
|
1032
|
-
//! search time plus N*size() insertion time.
|
|
1132
|
+
//! <b>Complexity</b>: Linear.
|
|
1033
1133
|
//!
|
|
1034
1134
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1035
1135
|
//!
|
|
1036
1136
|
//! <b>Note</b>: Non-standard extension.
|
|
1037
1137
|
template <class InputIterator>
|
|
1038
|
-
void insert(ordered_unique_range_t, InputIterator first, InputIterator last)
|
|
1138
|
+
BOOST_CONTAINER_FORCEINLINE void insert(ordered_unique_range_t, InputIterator first, InputIterator last)
|
|
1039
1139
|
{ m_flat_tree.insert_unique(ordered_unique_range, first, last); }
|
|
1040
1140
|
|
|
1041
1141
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
1042
1142
|
//! <b>Effects</b>: inserts each element from the range [il.begin(), il.end()) if and only
|
|
1043
1143
|
//! if there is no element with key equivalent to the key of that element.
|
|
1044
1144
|
//!
|
|
1045
|
-
//! <b>Complexity</b>:
|
|
1046
|
-
//! search time plus N*size() insertion time.
|
|
1145
|
+
//! <b>Complexity</b>: N log(N).
|
|
1047
1146
|
//!
|
|
1048
1147
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1049
|
-
void insert(std::initializer_list<value_type> il)
|
|
1050
|
-
{
|
|
1148
|
+
BOOST_CONTAINER_FORCEINLINE void insert(std::initializer_list<value_type> il)
|
|
1149
|
+
{
|
|
1150
|
+
m_flat_tree.insert_unique( dtl::force<impl_initializer_list>(il).begin()
|
|
1151
|
+
, dtl::force<impl_initializer_list>(il).end());
|
|
1152
|
+
}
|
|
1051
1153
|
|
|
1052
1154
|
//! <b>Requires</b>: [il.begin(), il.end()) must be ordered according to the predicate and must be
|
|
1053
1155
|
//! unique values.
|
|
@@ -1056,14 +1158,17 @@ class flat_map
|
|
|
1056
1158
|
//! if there is no element with key equivalent to the key of that element. This
|
|
1057
1159
|
//! function is more efficient than the normal range creation for ordered ranges.
|
|
1058
1160
|
//!
|
|
1059
|
-
//! <b>Complexity</b>:
|
|
1060
|
-
//! search time plus N*size() insertion time.
|
|
1161
|
+
//! <b>Complexity</b>: Linear.
|
|
1061
1162
|
//!
|
|
1062
1163
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1063
1164
|
//!
|
|
1064
1165
|
//! <b>Note</b>: Non-standard extension.
|
|
1065
|
-
void insert(ordered_unique_range_t, std::initializer_list<value_type> il)
|
|
1066
|
-
{
|
|
1166
|
+
BOOST_CONTAINER_FORCEINLINE void insert(ordered_unique_range_t, std::initializer_list<value_type> il)
|
|
1167
|
+
{
|
|
1168
|
+
m_flat_tree.insert_unique(ordered_unique_range
|
|
1169
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
1170
|
+
, dtl::force<impl_initializer_list>(il).end());
|
|
1171
|
+
}
|
|
1067
1172
|
#endif
|
|
1068
1173
|
|
|
1069
1174
|
//! <b>Requires</b>: this->get_allocator() == source.get_allocator().
|
|
@@ -1081,23 +1186,23 @@ class flat_map
|
|
|
1081
1186
|
//!
|
|
1082
1187
|
//! <b>Complexity</b>: N log(a.size() + N) (N has the value source.size())
|
|
1083
1188
|
template<class C2>
|
|
1084
|
-
BOOST_CONTAINER_FORCEINLINE void merge(flat_map<Key, T, C2,
|
|
1189
|
+
BOOST_CONTAINER_FORCEINLINE void merge(flat_map<Key, T, C2, AllocatorOrContainer>& source)
|
|
1085
1190
|
{ m_flat_tree.merge_unique(source.tree()); }
|
|
1086
1191
|
|
|
1087
|
-
//! @copydoc ::boost::container::flat_map::merge(flat_map<Key, T, C2,
|
|
1192
|
+
//! @copydoc ::boost::container::flat_map::merge(flat_map<Key, T, C2, AllocatorOrContainer>&)
|
|
1088
1193
|
template<class C2>
|
|
1089
|
-
BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG flat_map<Key, T, C2,
|
|
1090
|
-
{ return this->merge(static_cast<flat_map<Key, T, C2,
|
|
1194
|
+
BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG flat_map<Key, T, C2, AllocatorOrContainer> BOOST_RV_REF_END source)
|
|
1195
|
+
{ return this->merge(static_cast<flat_map<Key, T, C2, AllocatorOrContainer>&>(source)); }
|
|
1091
1196
|
|
|
1092
|
-
//! @copydoc ::boost::container::flat_map::merge(flat_map<Key, T, C2,
|
|
1197
|
+
//! @copydoc ::boost::container::flat_map::merge(flat_map<Key, T, C2, AllocatorOrContainer>&)
|
|
1093
1198
|
template<class C2>
|
|
1094
|
-
BOOST_CONTAINER_FORCEINLINE void merge(flat_multimap<Key, T, C2,
|
|
1199
|
+
BOOST_CONTAINER_FORCEINLINE void merge(flat_multimap<Key, T, C2, AllocatorOrContainer>& source)
|
|
1095
1200
|
{ m_flat_tree.merge_unique(source.tree()); }
|
|
1096
1201
|
|
|
1097
|
-
//! @copydoc ::boost::container::flat_map::merge(flat_map<Key, T, C2,
|
|
1202
|
+
//! @copydoc ::boost::container::flat_map::merge(flat_map<Key, T, C2, AllocatorOrContainer>&)
|
|
1098
1203
|
template<class C2>
|
|
1099
|
-
BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG flat_multimap<Key, T, C2,
|
|
1100
|
-
{ return this->merge(static_cast<flat_multimap<Key, T, C2,
|
|
1204
|
+
BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG flat_multimap<Key, T, C2, AllocatorOrContainer> BOOST_RV_REF_END source)
|
|
1205
|
+
{ return this->merge(static_cast<flat_multimap<Key, T, C2, AllocatorOrContainer>&>(source)); }
|
|
1101
1206
|
|
|
1102
1207
|
//! <b>Effects</b>: Erases the element pointed to by p.
|
|
1103
1208
|
//!
|
|
@@ -1109,10 +1214,10 @@ class flat_map
|
|
|
1109
1214
|
//!
|
|
1110
1215
|
//! <b>Note</b>: Invalidates elements with keys
|
|
1111
1216
|
//! not less than the erased element.
|
|
1112
|
-
iterator erase(const_iterator p)
|
|
1217
|
+
BOOST_CONTAINER_FORCEINLINE iterator erase(const_iterator p)
|
|
1113
1218
|
{
|
|
1114
|
-
return
|
|
1115
|
-
(m_flat_tree.erase(
|
|
1219
|
+
return dtl::force_copy<iterator>
|
|
1220
|
+
(m_flat_tree.erase(dtl::force_copy<impl_const_iterator>(p)));
|
|
1116
1221
|
}
|
|
1117
1222
|
|
|
1118
1223
|
//! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
|
|
@@ -1121,7 +1226,7 @@ class flat_map
|
|
|
1121
1226
|
//!
|
|
1122
1227
|
//! <b>Complexity</b>: Logarithmic search time plus erasure time
|
|
1123
1228
|
//! linear to the elements with bigger keys.
|
|
1124
|
-
size_type erase(const key_type& x)
|
|
1229
|
+
BOOST_CONTAINER_FORCEINLINE size_type erase(const key_type& x)
|
|
1125
1230
|
{ return m_flat_tree.erase(x); }
|
|
1126
1231
|
|
|
1127
1232
|
//! <b>Effects</b>: Erases all the elements in the range [first, last).
|
|
@@ -1132,11 +1237,11 @@ class flat_map
|
|
|
1132
1237
|
//!
|
|
1133
1238
|
//! <b>Complexity</b>: Logarithmic search time plus erasure time
|
|
1134
1239
|
//! linear to the elements with bigger keys.
|
|
1135
|
-
iterator erase(const_iterator first, const_iterator last)
|
|
1240
|
+
BOOST_CONTAINER_FORCEINLINE iterator erase(const_iterator first, const_iterator last)
|
|
1136
1241
|
{
|
|
1137
|
-
return
|
|
1138
|
-
m_flat_tree.erase(
|
|
1139
|
-
,
|
|
1242
|
+
return dtl::force_copy<iterator>(
|
|
1243
|
+
m_flat_tree.erase( dtl::force_copy<impl_const_iterator>(first)
|
|
1244
|
+
, dtl::force_copy<impl_const_iterator>(last)));
|
|
1140
1245
|
}
|
|
1141
1246
|
|
|
1142
1247
|
//! <b>Effects</b>: Swaps the contents of *this and x.
|
|
@@ -1144,9 +1249,9 @@ class flat_map
|
|
|
1144
1249
|
//! <b>Throws</b>: Nothing.
|
|
1145
1250
|
//!
|
|
1146
1251
|
//! <b>Complexity</b>: Constant.
|
|
1147
|
-
void swap(flat_map& x)
|
|
1252
|
+
BOOST_CONTAINER_FORCEINLINE void swap(flat_map& x)
|
|
1148
1253
|
BOOST_NOEXCEPT_IF( allocator_traits_type::is_always_equal::value
|
|
1149
|
-
&& boost::container::
|
|
1254
|
+
&& boost::container::dtl::is_nothrow_swappable<Compare>::value )
|
|
1150
1255
|
{ m_flat_tree.swap(x.m_flat_tree); }
|
|
1151
1256
|
|
|
1152
1257
|
//! <b>Effects</b>: erase(a.begin(),a.end()).
|
|
@@ -1154,7 +1259,7 @@ class flat_map
|
|
|
1154
1259
|
//! <b>Postcondition</b>: size() == 0.
|
|
1155
1260
|
//!
|
|
1156
1261
|
//! <b>Complexity</b>: linear in size().
|
|
1157
|
-
void clear() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1262
|
+
BOOST_CONTAINER_FORCEINLINE void clear() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1158
1263
|
{ m_flat_tree.clear(); }
|
|
1159
1264
|
|
|
1160
1265
|
//////////////////////////////////////////////
|
|
@@ -1167,15 +1272,15 @@ class flat_map
|
|
|
1167
1272
|
//! of which a was constructed.
|
|
1168
1273
|
//!
|
|
1169
1274
|
//! <b>Complexity</b>: Constant.
|
|
1170
|
-
key_compare key_comp() const
|
|
1171
|
-
{ return
|
|
1275
|
+
BOOST_CONTAINER_FORCEINLINE key_compare key_comp() const
|
|
1276
|
+
{ return dtl::force_copy<key_compare>(m_flat_tree.key_comp()); }
|
|
1172
1277
|
|
|
1173
1278
|
//! <b>Effects</b>: Returns an object of value_compare constructed out
|
|
1174
1279
|
//! of the comparison object.
|
|
1175
1280
|
//!
|
|
1176
1281
|
//! <b>Complexity</b>: Constant.
|
|
1177
|
-
value_compare value_comp() const
|
|
1178
|
-
{ return value_compare(
|
|
1282
|
+
BOOST_CONTAINER_FORCEINLINE value_compare value_comp() const
|
|
1283
|
+
{ return value_compare(dtl::force_copy<key_compare>(m_flat_tree.key_comp())); }
|
|
1179
1284
|
|
|
1180
1285
|
//////////////////////////////////////////////
|
|
1181
1286
|
//
|
|
@@ -1187,102 +1292,135 @@ class flat_map
|
|
|
1187
1292
|
//! equivalent to x, or end() if such an element is not found.
|
|
1188
1293
|
//!
|
|
1189
1294
|
//! <b>Complexity</b>: Logarithmic.
|
|
1190
|
-
iterator find(const key_type& x)
|
|
1191
|
-
{ return
|
|
1295
|
+
BOOST_CONTAINER_FORCEINLINE iterator find(const key_type& x)
|
|
1296
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.find(x)); }
|
|
1192
1297
|
|
|
1193
1298
|
//! <b>Returns</b>: A const_iterator pointing to an element with the key
|
|
1194
1299
|
//! equivalent to x, or end() if such an element is not found.
|
|
1195
1300
|
//!
|
|
1196
1301
|
//! <b>Complexity</b>: Logarithmic.
|
|
1197
|
-
const_iterator find(const key_type& x) const
|
|
1198
|
-
{ return
|
|
1302
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator find(const key_type& x) const
|
|
1303
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.find(x)); }
|
|
1199
1304
|
|
|
1200
1305
|
//! <b>Returns</b>: The number of elements with key equivalent to x.
|
|
1201
1306
|
//!
|
|
1202
1307
|
//! <b>Complexity</b>: log(size())+count(k)
|
|
1203
|
-
size_type count(const key_type& x) const
|
|
1308
|
+
BOOST_CONTAINER_FORCEINLINE size_type count(const key_type& x) const
|
|
1204
1309
|
{ return static_cast<size_type>(m_flat_tree.find(x) != m_flat_tree.end()); }
|
|
1205
1310
|
|
|
1206
1311
|
//! <b>Returns</b>: An iterator pointing to the first element with key not less
|
|
1207
1312
|
//! than k, or a.end() if such an element is not found.
|
|
1208
1313
|
//!
|
|
1209
1314
|
//! <b>Complexity</b>: Logarithmic.
|
|
1210
|
-
iterator lower_bound(const key_type& x)
|
|
1211
|
-
{ return
|
|
1315
|
+
BOOST_CONTAINER_FORCEINLINE iterator lower_bound(const key_type& x)
|
|
1316
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.lower_bound(x)); }
|
|
1212
1317
|
|
|
1213
1318
|
//! <b>Returns</b>: A const iterator pointing to the first element with key not
|
|
1214
1319
|
//! less than k, or a.end() if such an element is not found.
|
|
1215
1320
|
//!
|
|
1216
1321
|
//! <b>Complexity</b>: Logarithmic.
|
|
1217
|
-
const_iterator lower_bound(const key_type& x) const
|
|
1218
|
-
{ return
|
|
1322
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator lower_bound(const key_type& x) const
|
|
1323
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.lower_bound(x)); }
|
|
1219
1324
|
|
|
1220
1325
|
//! <b>Returns</b>: An iterator pointing to the first element with key not less
|
|
1221
1326
|
//! than x, or end() if such an element is not found.
|
|
1222
1327
|
//!
|
|
1223
1328
|
//! <b>Complexity</b>: Logarithmic.
|
|
1224
|
-
iterator upper_bound(const key_type& x)
|
|
1225
|
-
{ return
|
|
1329
|
+
BOOST_CONTAINER_FORCEINLINE iterator upper_bound(const key_type& x)
|
|
1330
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.upper_bound(x)); }
|
|
1226
1331
|
|
|
1227
1332
|
//! <b>Returns</b>: A const iterator pointing to the first element with key not
|
|
1228
1333
|
//! less than x, or end() if such an element is not found.
|
|
1229
1334
|
//!
|
|
1230
1335
|
//! <b>Complexity</b>: Logarithmic.
|
|
1231
|
-
const_iterator upper_bound(const key_type& x) const
|
|
1232
|
-
{ return
|
|
1336
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator upper_bound(const key_type& x) const
|
|
1337
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.upper_bound(x)); }
|
|
1233
1338
|
|
|
1234
1339
|
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
|
|
1235
1340
|
//!
|
|
1236
1341
|
//! <b>Complexity</b>: Logarithmic.
|
|
1237
|
-
std::pair<iterator,iterator> equal_range(const key_type& x)
|
|
1238
|
-
{ return
|
|
1342
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const key_type& x)
|
|
1343
|
+
{ return dtl::force_copy<std::pair<iterator,iterator> >(m_flat_tree.lower_bound_range(x)); }
|
|
1239
1344
|
|
|
1240
1345
|
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
|
|
1241
1346
|
//!
|
|
1242
1347
|
//! <b>Complexity</b>: Logarithmic.
|
|
1243
|
-
std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const
|
|
1244
|
-
{ return
|
|
1348
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const
|
|
1349
|
+
{ return dtl::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.lower_bound_range(x)); }
|
|
1350
|
+
|
|
1351
|
+
//! <b>Effects</b>: Extracts the internal sequence container.
|
|
1352
|
+
//!
|
|
1353
|
+
//! <b>Complexity</b>: Same as the move constructor of sequence_type, usually constant.
|
|
1354
|
+
//!
|
|
1355
|
+
//! <b>Postcondition</b>: this->empty()
|
|
1356
|
+
//!
|
|
1357
|
+
//! <b>Throws</b>: If secuence_type's move constructor throws
|
|
1358
|
+
BOOST_CONTAINER_FORCEINLINE sequence_type extract_sequence()
|
|
1359
|
+
{
|
|
1360
|
+
return boost::move(dtl::force<sequence_type>(m_flat_tree.get_sequence_ref()));
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
//! <b>Effects</b>: Discards the internally hold sequence container and adopts the
|
|
1364
|
+
//! one passed externally using the move assignment. Erases non-unique elements.
|
|
1365
|
+
//!
|
|
1366
|
+
//! <b>Complexity</b>: Assuming O(1) move assignment, O(NlogN) with N = seq.size()
|
|
1367
|
+
//!
|
|
1368
|
+
//! <b>Throws</b>: If the comparison or the move constructor throws
|
|
1369
|
+
BOOST_CONTAINER_FORCEINLINE void adopt_sequence(BOOST_RV_REF(sequence_type) seq)
|
|
1370
|
+
{ this->m_flat_tree.adopt_sequence_unique(boost::move(dtl::force<impl_sequence_type>(seq))); }
|
|
1371
|
+
|
|
1372
|
+
//! <b>Requires</b>: seq shall be ordered according to this->compare()
|
|
1373
|
+
//! and shall contain unique elements.
|
|
1374
|
+
//!
|
|
1375
|
+
//! <b>Effects</b>: Discards the internally hold sequence container and adopts the
|
|
1376
|
+
//! one passed externally using the move assignment.
|
|
1377
|
+
//!
|
|
1378
|
+
//! <b>Complexity</b>: Assuming O(1) move assignment, O(1)
|
|
1379
|
+
//!
|
|
1380
|
+
//! <b>Throws</b>: If the move assignment throws
|
|
1381
|
+
BOOST_CONTAINER_FORCEINLINE void adopt_sequence(ordered_unique_range_t, BOOST_RV_REF(sequence_type) seq)
|
|
1382
|
+
{ this->m_flat_tree.adopt_sequence_unique(ordered_unique_range_t(), boost::move(dtl::force<impl_sequence_type>(seq))); }
|
|
1245
1383
|
|
|
1246
1384
|
//! <b>Effects</b>: Returns true if x and y are equal
|
|
1247
1385
|
//!
|
|
1248
1386
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
1249
|
-
friend bool operator==(const flat_map& x, const flat_map& y)
|
|
1387
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator==(const flat_map& x, const flat_map& y)
|
|
1250
1388
|
{ return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); }
|
|
1251
1389
|
|
|
1252
1390
|
//! <b>Effects</b>: Returns true if x and y are unequal
|
|
1253
1391
|
//!
|
|
1254
1392
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
1255
|
-
friend bool operator!=(const flat_map& x, const flat_map& y)
|
|
1393
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const flat_map& x, const flat_map& y)
|
|
1256
1394
|
{ return !(x == y); }
|
|
1257
1395
|
|
|
1258
1396
|
//! <b>Effects</b>: Returns true if x is less than y
|
|
1259
1397
|
//!
|
|
1260
1398
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
1261
|
-
friend bool operator<(const flat_map& x, const flat_map& y)
|
|
1399
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator<(const flat_map& x, const flat_map& y)
|
|
1262
1400
|
{ return ::boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
|
|
1263
1401
|
|
|
1264
1402
|
//! <b>Effects</b>: Returns true if x is greater than y
|
|
1265
1403
|
//!
|
|
1266
1404
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
1267
|
-
friend bool operator>(const flat_map& x, const flat_map& y)
|
|
1405
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator>(const flat_map& x, const flat_map& y)
|
|
1268
1406
|
{ return y < x; }
|
|
1269
1407
|
|
|
1270
1408
|
//! <b>Effects</b>: Returns true if x is equal or less than y
|
|
1271
1409
|
//!
|
|
1272
1410
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
1273
|
-
friend bool operator<=(const flat_map& x, const flat_map& y)
|
|
1411
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator<=(const flat_map& x, const flat_map& y)
|
|
1274
1412
|
{ return !(y < x); }
|
|
1275
1413
|
|
|
1276
1414
|
//! <b>Effects</b>: Returns true if x is equal or greater than y
|
|
1277
1415
|
//!
|
|
1278
1416
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
1279
|
-
friend bool operator>=(const flat_map& x, const flat_map& y)
|
|
1417
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator>=(const flat_map& x, const flat_map& y)
|
|
1280
1418
|
{ return !(x < y); }
|
|
1281
1419
|
|
|
1282
1420
|
//! <b>Effects</b>: x.swap(y)
|
|
1283
1421
|
//!
|
|
1284
1422
|
//! <b>Complexity</b>: Constant.
|
|
1285
|
-
friend void swap(flat_map& x, flat_map& y)
|
|
1423
|
+
BOOST_CONTAINER_FORCEINLINE friend void swap(flat_map& x, flat_map& y)
|
|
1286
1424
|
{ x.swap(y); }
|
|
1287
1425
|
|
|
1288
1426
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
@@ -1292,7 +1430,7 @@ class flat_map
|
|
|
1292
1430
|
iterator i = lower_bound(k);
|
|
1293
1431
|
// i->first is greater than or equivalent to k.
|
|
1294
1432
|
if (i == end() || key_comp()(k, (*i).first)){
|
|
1295
|
-
|
|
1433
|
+
dtl::value_init<mapped_type> m;
|
|
1296
1434
|
i = insert(i, impl_value_type(k, ::boost::move(m.m_t)));
|
|
1297
1435
|
}
|
|
1298
1436
|
return (*i).second;
|
|
@@ -1303,7 +1441,7 @@ class flat_map
|
|
|
1303
1441
|
iterator i = lower_bound(k);
|
|
1304
1442
|
// i->first is greater than or equivalent to k.
|
|
1305
1443
|
if (i == end() || key_comp()(k, (*i).first)){
|
|
1306
|
-
|
|
1444
|
+
dtl::value_init<mapped_type> m;
|
|
1307
1445
|
i = insert(i, impl_value_type(boost::move(k), ::boost::move(m.m_t)));
|
|
1308
1446
|
}
|
|
1309
1447
|
return (*i).second;
|
|
@@ -1317,11 +1455,11 @@ class flat_map
|
|
|
1317
1455
|
|
|
1318
1456
|
//!has_trivial_destructor_after_move<> == true_type
|
|
1319
1457
|
//!specialization for optimizations
|
|
1320
|
-
template <class Key, class T, class Compare, class
|
|
1321
|
-
struct has_trivial_destructor_after_move<boost::container::flat_map<Key, T, Compare,
|
|
1458
|
+
template <class Key, class T, class Compare, class AllocatorOrContainer>
|
|
1459
|
+
struct has_trivial_destructor_after_move<boost::container::flat_map<Key, T, Compare, AllocatorOrContainer> >
|
|
1322
1460
|
{
|
|
1323
|
-
typedef typename ::boost::container::allocator_traits<
|
|
1324
|
-
static const bool value = ::boost::has_trivial_destructor_after_move<
|
|
1461
|
+
typedef typename ::boost::container::allocator_traits<AllocatorOrContainer>::pointer pointer;
|
|
1462
|
+
static const bool value = ::boost::has_trivial_destructor_after_move<AllocatorOrContainer>::value &&
|
|
1325
1463
|
::boost::has_trivial_destructor_after_move<pointer>::value &&
|
|
1326
1464
|
::boost::has_trivial_destructor_after_move<Compare>::value;
|
|
1327
1465
|
};
|
|
@@ -1332,80 +1470,81 @@ namespace container {
|
|
|
1332
1470
|
|
|
1333
1471
|
//! A flat_multimap is a kind of associative container that supports equivalent keys
|
|
1334
1472
|
//! (possibly containing multiple copies of the same key value) and provides for
|
|
1335
|
-
//! fast retrieval of values of another type T based on the keys.
|
|
1336
|
-
//! class supports random-access iterators.
|
|
1473
|
+
//! fast retrieval of values of another type T based on the keys.
|
|
1337
1474
|
//!
|
|
1338
1475
|
//! A flat_multimap satisfies all of the requirements of a container and of a reversible
|
|
1339
1476
|
//! container and of an associative container. For a
|
|
1340
1477
|
//! flat_multimap<Key,T> the key_type is Key and the value_type is std::pair<Key,T>
|
|
1341
1478
|
//! (unlike std::multimap<Key, T> which value_type is std::pair<<b>const</b> Key, T>).
|
|
1342
1479
|
//!
|
|
1343
|
-
//!
|
|
1480
|
+
//! flat_multimap is similar to std::multimap but it's implemented by as an ordered sequence container.
|
|
1481
|
+
//! The underlying sequence container is by default <i>vector</i> but it can also work
|
|
1482
|
+
//! user-provided vector-like SequenceContainers (like <i>static_vector</i> or <i>small_vector</i>).
|
|
1344
1483
|
//!
|
|
1345
|
-
//!
|
|
1346
|
-
//! (
|
|
1347
|
-
//!
|
|
1348
|
-
//!
|
|
1349
|
-
//! This means that inserting a new element into a flat_map invalidates
|
|
1350
|
-
//! previous iterators and references
|
|
1351
|
-
//!
|
|
1352
|
-
//! Erasing an element invalidates iterators and references
|
|
1353
|
-
//! pointing to elements that come after (their keys are bigger) the erased element.
|
|
1484
|
+
//! Using vector-like sequence containers means that inserting a new element into a flat_multimap might invalidate
|
|
1485
|
+
//! previous iterators and references (unless that sequence container is <i>stable_vector</i> or a similar
|
|
1486
|
+
//! container that offers stable pointers and references). Similarly, erasing an element might invalidate
|
|
1487
|
+
//! iterators and references pointing to elements that come after (their keys are bigger) the erased element.
|
|
1354
1488
|
//!
|
|
1355
1489
|
//! This container provides random-access iterators.
|
|
1356
1490
|
//!
|
|
1357
1491
|
//! \tparam Key is the key_type of the map
|
|
1358
1492
|
//! \tparam Value is the <code>mapped_type</code>
|
|
1359
1493
|
//! \tparam Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
|
|
1360
|
-
//! \tparam
|
|
1361
|
-
//! (e.g. <i>allocator< std::pair<Key, T> > </i>).
|
|
1494
|
+
//! \tparam AllocatorOrContainer is either:
|
|
1495
|
+
//! - The allocator to allocate <code>value_type</code>s (e.g. <i>allocator< std::pair<Key, T> > </i>).
|
|
1496
|
+
//! (in this case <i>sequence_type</i> will be vector<value_type, AllocatorOrContainer>)
|
|
1497
|
+
//! - The SequenceContainer to be used as the underlying <i>sequence_type</i>. It must be a vector-like
|
|
1498
|
+
//! sequence container with random-access iterators.
|
|
1362
1499
|
#ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
1363
|
-
template <class Key, class T, class Compare = std::less<Key>, class
|
|
1500
|
+
template <class Key, class T, class Compare = std::less<Key>, class AllocatorOrContainer = new_allocator< std::pair< Key, T> > >
|
|
1364
1501
|
#else
|
|
1365
|
-
template <class Key, class T, class Compare, class
|
|
1502
|
+
template <class Key, class T, class Compare, class AllocatorOrContainer>
|
|
1366
1503
|
#endif
|
|
1367
1504
|
class flat_multimap
|
|
1368
1505
|
{
|
|
1369
1506
|
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
|
|
1370
1507
|
private:
|
|
1371
1508
|
BOOST_COPYABLE_AND_MOVABLE(flat_multimap)
|
|
1372
|
-
typedef
|
|
1509
|
+
typedef dtl::flat_tree<
|
|
1373
1510
|
std::pair<Key, T>,
|
|
1374
|
-
|
|
1511
|
+
dtl::select1st<Key>,
|
|
1375
1512
|
Compare,
|
|
1376
|
-
|
|
1513
|
+
AllocatorOrContainer> tree_t;
|
|
1377
1514
|
//This is the real tree stored here. It's based on a movable pair
|
|
1378
|
-
typedef
|
|
1379
|
-
|
|
1380
|
-
|
|
1515
|
+
typedef dtl::flat_tree<
|
|
1516
|
+
dtl::pair<Key, T>,
|
|
1517
|
+
dtl::select1st<Key>,
|
|
1381
1518
|
Compare,
|
|
1382
|
-
typename
|
|
1383
|
-
|
|
1519
|
+
typename dtl::container_or_allocator_rebind<AllocatorOrContainer, dtl::pair<Key, T> >::type
|
|
1520
|
+
> impl_tree_t;
|
|
1384
1521
|
impl_tree_t m_flat_tree; // flat tree representing flat_map
|
|
1385
1522
|
|
|
1386
1523
|
typedef typename impl_tree_t::value_type impl_value_type;
|
|
1387
1524
|
typedef typename impl_tree_t::const_iterator impl_const_iterator;
|
|
1388
1525
|
typedef typename impl_tree_t::iterator impl_iterator;
|
|
1389
1526
|
typedef typename impl_tree_t::allocator_type impl_allocator_type;
|
|
1390
|
-
|
|
1527
|
+
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
1528
|
+
typedef std::initializer_list<impl_value_type> impl_initializer_list;
|
|
1529
|
+
#endif
|
|
1530
|
+
|
|
1531
|
+
typedef dtl::flat_tree_value_compare
|
|
1391
1532
|
< Compare
|
|
1392
|
-
,
|
|
1393
|
-
, std::pair<Key, T> >
|
|
1394
|
-
typedef typename
|
|
1395
|
-
|
|
1396
|
-
typedef typename
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
<typename allocator_traits<Allocator>::pointer>::reverse_iterator reverse_iterator_impl;
|
|
1400
|
-
typedef typename container_detail::get_flat_tree_iterators
|
|
1401
|
-
<typename allocator_traits<Allocator>::pointer>::const_reverse_iterator const_reverse_iterator_impl;
|
|
1533
|
+
, dtl::select1st<Key>
|
|
1534
|
+
, std::pair<Key, T> > value_compare_t;
|
|
1535
|
+
typedef typename tree_t::iterator iterator_t;
|
|
1536
|
+
typedef typename tree_t::const_iterator const_iterator_t;
|
|
1537
|
+
typedef typename tree_t::reverse_iterator reverse_iterator_t;
|
|
1538
|
+
typedef typename tree_t::const_reverse_iterator const_reverse_iterator_t;
|
|
1539
|
+
|
|
1402
1540
|
public:
|
|
1403
|
-
typedef typename impl_tree_t::stored_allocator_type
|
|
1541
|
+
typedef typename impl_tree_t::stored_allocator_type impl_stored_allocator_type;
|
|
1542
|
+
typedef typename impl_tree_t::sequence_type impl_sequence_type;
|
|
1404
1543
|
|
|
1405
|
-
impl_tree_t &tree()
|
|
1544
|
+
BOOST_CONTAINER_FORCEINLINE impl_tree_t &tree()
|
|
1406
1545
|
{ return m_flat_tree; }
|
|
1407
1546
|
|
|
1408
|
-
const impl_tree_t &tree() const
|
|
1547
|
+
BOOST_CONTAINER_FORCEINLINE const impl_tree_t &tree() const
|
|
1409
1548
|
{ return m_flat_tree; }
|
|
1410
1549
|
|
|
1411
1550
|
private:
|
|
@@ -1420,24 +1559,29 @@ class flat_multimap
|
|
|
1420
1559
|
//////////////////////////////////////////////
|
|
1421
1560
|
typedef Key key_type;
|
|
1422
1561
|
typedef T mapped_type;
|
|
1423
|
-
typedef std::pair<Key, T> value_type;
|
|
1424
|
-
typedef ::boost::container::allocator_traits<Allocator> allocator_traits_type;
|
|
1425
|
-
typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
|
|
1426
|
-
typedef typename boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
|
|
1427
|
-
typedef typename boost::container::allocator_traits<Allocator>::reference reference;
|
|
1428
|
-
typedef typename boost::container::allocator_traits<Allocator>::const_reference const_reference;
|
|
1429
|
-
typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
|
|
1430
|
-
typedef typename boost::container::allocator_traits<Allocator>::difference_type difference_type;
|
|
1431
|
-
typedef Allocator allocator_type;
|
|
1432
|
-
typedef BOOST_CONTAINER_IMPDEF(Allocator) stored_allocator_type;
|
|
1433
|
-
typedef BOOST_CONTAINER_IMPDEF(value_compare_impl) value_compare;
|
|
1434
1562
|
typedef Compare key_compare;
|
|
1435
|
-
typedef
|
|
1436
|
-
typedef BOOST_CONTAINER_IMPDEF(
|
|
1437
|
-
typedef
|
|
1438
|
-
typedef
|
|
1563
|
+
typedef std::pair<Key, T> value_type;
|
|
1564
|
+
typedef typename BOOST_CONTAINER_IMPDEF(tree_t::sequence_type) sequence_type;
|
|
1565
|
+
typedef typename sequence_type::allocator_type allocator_type;
|
|
1566
|
+
typedef ::boost::container::allocator_traits<allocator_type> allocator_traits_type;
|
|
1567
|
+
typedef typename sequence_type::pointer pointer;
|
|
1568
|
+
typedef typename sequence_type::const_pointer const_pointer;
|
|
1569
|
+
typedef typename sequence_type::reference reference;
|
|
1570
|
+
typedef typename sequence_type::const_reference const_reference;
|
|
1571
|
+
typedef typename sequence_type::size_type size_type;
|
|
1572
|
+
typedef typename sequence_type::difference_type difference_type;
|
|
1573
|
+
typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type;
|
|
1574
|
+
typedef typename BOOST_CONTAINER_IMPDEF(tree_t::value_compare) value_compare;
|
|
1575
|
+
|
|
1576
|
+
typedef typename sequence_type::iterator iterator;
|
|
1577
|
+
typedef typename sequence_type::const_iterator const_iterator;
|
|
1578
|
+
typedef typename sequence_type::reverse_iterator reverse_iterator;
|
|
1579
|
+
typedef typename sequence_type::const_reverse_iterator const_reverse_iterator;
|
|
1439
1580
|
typedef BOOST_CONTAINER_IMPDEF(impl_value_type) movable_value_type;
|
|
1440
1581
|
|
|
1582
|
+
//AllocatorOrContainer::value_type must be std::pair<Key, T>
|
|
1583
|
+
BOOST_STATIC_ASSERT((dtl::is_same<std::pair<Key, T>, typename AllocatorOrContainer::value_type>::value));
|
|
1584
|
+
|
|
1441
1585
|
//////////////////////////////////////////////
|
|
1442
1586
|
//
|
|
1443
1587
|
// construct/copy/destroy
|
|
@@ -1447,63 +1591,109 @@ class flat_multimap
|
|
|
1447
1591
|
//! <b>Effects</b>: Default constructs an empty flat_map.
|
|
1448
1592
|
//!
|
|
1449
1593
|
//! <b>Complexity</b>: Constant.
|
|
1450
|
-
flat_multimap()
|
|
1451
|
-
|
|
1594
|
+
BOOST_CONTAINER_FORCEINLINE flat_multimap()
|
|
1595
|
+
BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<AllocatorOrContainer>::value &&
|
|
1596
|
+
dtl::is_nothrow_default_constructible<Compare>::value)
|
|
1452
1597
|
: m_flat_tree()
|
|
1453
|
-
{
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1598
|
+
{}
|
|
1599
|
+
|
|
1600
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified allocator.
|
|
1601
|
+
//!
|
|
1602
|
+
//! <b>Complexity</b>: Constant.
|
|
1603
|
+
BOOST_CONTAINER_FORCEINLINE explicit flat_multimap(const allocator_type& a)
|
|
1604
|
+
: m_flat_tree(dtl::force<const impl_allocator_type>(a))
|
|
1605
|
+
{}
|
|
1457
1606
|
|
|
1458
1607
|
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison
|
|
1459
|
-
//! object
|
|
1608
|
+
//! object .
|
|
1460
1609
|
//!
|
|
1461
1610
|
//! <b>Complexity</b>: Constant.
|
|
1462
|
-
explicit flat_multimap(const Compare& comp
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
{
|
|
1466
|
-
//value_type must be std::pair<Key, T>
|
|
1467
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
1468
|
-
}
|
|
1611
|
+
BOOST_CONTAINER_FORCEINLINE explicit flat_multimap(const Compare& comp)
|
|
1612
|
+
: m_flat_tree(comp)
|
|
1613
|
+
{}
|
|
1469
1614
|
|
|
1470
|
-
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified
|
|
1615
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison
|
|
1616
|
+
//! object and allocator.
|
|
1471
1617
|
//!
|
|
1472
1618
|
//! <b>Complexity</b>: Constant.
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
1478
|
-
}
|
|
1619
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1620
|
+
flat_multimap(const Compare& comp, const allocator_type& a)
|
|
1621
|
+
: m_flat_tree(comp, dtl::force<const impl_allocator_type>(a))
|
|
1622
|
+
{}
|
|
1479
1623
|
|
|
1480
|
-
//! <b>Effects</b>: Constructs an empty flat_multimap
|
|
1481
|
-
//! and
|
|
1624
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap
|
|
1625
|
+
//! and inserts elements from the range [first ,last ).
|
|
1482
1626
|
//!
|
|
1483
1627
|
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
|
|
1484
|
-
//!
|
|
1628
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
1485
1629
|
template <class InputIterator>
|
|
1486
|
-
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
{
|
|
1491
|
-
//value_type must be std::pair<Key, T>
|
|
1492
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
1493
|
-
}
|
|
1630
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1631
|
+
flat_multimap(InputIterator first, InputIterator last)
|
|
1632
|
+
: m_flat_tree(false, first, last)
|
|
1633
|
+
{}
|
|
1494
1634
|
|
|
1495
1635
|
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified
|
|
1496
1636
|
//! allocator, and inserts elements from the range [first ,last ).
|
|
1497
1637
|
//!
|
|
1498
1638
|
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
|
|
1499
|
-
//!
|
|
1639
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
1500
1640
|
template <class InputIterator>
|
|
1641
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1501
1642
|
flat_multimap(InputIterator first, InputIterator last, const allocator_type& a)
|
|
1502
|
-
: m_flat_tree(false, first, last,
|
|
1503
|
-
{
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1643
|
+
: m_flat_tree(false, first, last, dtl::force<const impl_allocator_type>(a))
|
|
1644
|
+
{}
|
|
1645
|
+
|
|
1646
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object
|
|
1647
|
+
//! and inserts elements from the range [first ,last ).
|
|
1648
|
+
//!
|
|
1649
|
+
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
|
|
1650
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
1651
|
+
template <class InputIterator>
|
|
1652
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1653
|
+
flat_multimap(InputIterator first, InputIterator last, const Compare& comp)
|
|
1654
|
+
: m_flat_tree(false, first, last, comp)
|
|
1655
|
+
{}
|
|
1656
|
+
|
|
1657
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object
|
|
1658
|
+
//! and allocator, and inserts elements from the range [first ,last ).
|
|
1659
|
+
//!
|
|
1660
|
+
//! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
|
|
1661
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
1662
|
+
template <class InputIterator>
|
|
1663
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1664
|
+
flat_multimap(InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a)
|
|
1665
|
+
: m_flat_tree(false, first, last, comp, dtl::force<const impl_allocator_type>(a))
|
|
1666
|
+
{}
|
|
1667
|
+
|
|
1668
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap
|
|
1669
|
+
//! and inserts elements from the ordered range [first ,last). This function
|
|
1670
|
+
//! is more efficient than the normal range creation for ordered ranges.
|
|
1671
|
+
//!
|
|
1672
|
+
//! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
|
|
1673
|
+
//!
|
|
1674
|
+
//! <b>Complexity</b>: Linear in N.
|
|
1675
|
+
//!
|
|
1676
|
+
//! <b>Note</b>: Non-standard extension.
|
|
1677
|
+
template <class InputIterator>
|
|
1678
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1679
|
+
flat_multimap(ordered_range_t, InputIterator first, InputIterator last)
|
|
1680
|
+
: m_flat_tree(ordered_range, first, last)
|
|
1681
|
+
{}
|
|
1682
|
+
|
|
1683
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object and
|
|
1684
|
+
//! inserts elements from the ordered range [first ,last). This function
|
|
1685
|
+
//! is more efficient than the normal range creation for ordered ranges.
|
|
1686
|
+
//!
|
|
1687
|
+
//! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
|
|
1688
|
+
//!
|
|
1689
|
+
//! <b>Complexity</b>: Linear in N.
|
|
1690
|
+
//!
|
|
1691
|
+
//! <b>Note</b>: Non-standard extension.
|
|
1692
|
+
template <class InputIterator>
|
|
1693
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1694
|
+
flat_multimap(ordered_range_t, InputIterator first, InputIterator last, const Compare& comp)
|
|
1695
|
+
: m_flat_tree(ordered_range, first, last, comp)
|
|
1696
|
+
{}
|
|
1507
1697
|
|
|
1508
1698
|
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object and
|
|
1509
1699
|
//! allocator, and inserts elements from the ordered range [first ,last). This function
|
|
@@ -1515,39 +1705,93 @@ class flat_multimap
|
|
|
1515
1705
|
//!
|
|
1516
1706
|
//! <b>Note</b>: Non-standard extension.
|
|
1517
1707
|
template <class InputIterator>
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
const allocator_type& a = allocator_type())
|
|
1708
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1709
|
+
flat_multimap(ordered_range_t, InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a)
|
|
1521
1710
|
: m_flat_tree(ordered_range, first, last, comp, a)
|
|
1522
|
-
{
|
|
1523
|
-
//value_type must be std::pair<Key, T>
|
|
1524
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
1525
|
-
}
|
|
1711
|
+
{}
|
|
1526
1712
|
|
|
1527
1713
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
1528
|
-
//! <b>Effects</b>: Constructs an empty flat_map
|
|
1529
|
-
//!
|
|
1714
|
+
//! <b>Effects</b>: Constructs an empty flat_map and
|
|
1715
|
+
//! inserts elements from the range [il.begin(), il.end()).
|
|
1530
1716
|
//!
|
|
1531
1717
|
//! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using
|
|
1532
|
-
//!
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
}
|
|
1718
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
1719
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1720
|
+
flat_multimap(std::initializer_list<value_type> il)
|
|
1721
|
+
: m_flat_tree( false
|
|
1722
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
1723
|
+
, dtl::force<impl_initializer_list>(il).end())
|
|
1724
|
+
{}
|
|
1539
1725
|
|
|
1540
1726
|
//! <b>Effects</b>: Constructs an empty flat_map using the specified
|
|
1541
1727
|
//! allocator, and inserts elements from the range [il.begin(), il.end()).
|
|
1542
1728
|
//!
|
|
1543
1729
|
//! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using
|
|
1544
|
-
//!
|
|
1730
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
1731
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1545
1732
|
flat_multimap(std::initializer_list<value_type> il, const allocator_type& a)
|
|
1546
|
-
: m_flat_tree(false
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
}
|
|
1733
|
+
: m_flat_tree(false
|
|
1734
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
1735
|
+
, dtl::force<impl_initializer_list>(il).end()
|
|
1736
|
+
, dtl::force<const impl_allocator_type>(a))
|
|
1737
|
+
{}
|
|
1738
|
+
|
|
1739
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
1740
|
+
//! inserts elements from the range [il.begin(), il.end()).
|
|
1741
|
+
//!
|
|
1742
|
+
//! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using
|
|
1743
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
1744
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1745
|
+
flat_multimap(std::initializer_list<value_type> il, const Compare& comp)
|
|
1746
|
+
: m_flat_tree(false
|
|
1747
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
1748
|
+
, dtl::force<impl_initializer_list>(il).end(), comp)
|
|
1749
|
+
{}
|
|
1750
|
+
|
|
1751
|
+
//! <b>Effects</b>: Constructs an empty flat_map using the specified comparison object and
|
|
1752
|
+
//! allocator, and inserts elements from the range [il.begin(), il.end()).
|
|
1753
|
+
//!
|
|
1754
|
+
//! <b>Complexity</b>: Linear in N if the range [il.begin(), il.end()) is already sorted using
|
|
1755
|
+
//! the predicate and otherwise N logN, where N is last - first.
|
|
1756
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1757
|
+
flat_multimap(std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a)
|
|
1758
|
+
: m_flat_tree( false
|
|
1759
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
1760
|
+
, dtl::force<impl_initializer_list>(il).end()
|
|
1761
|
+
, comp, dtl::force<const impl_allocator_type>(a))
|
|
1762
|
+
{}
|
|
1763
|
+
|
|
1764
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap and
|
|
1765
|
+
//! inserts elements from the ordered range [il.begin(), il.end()). This function
|
|
1766
|
+
//! is more efficient than the normal range creation for ordered ranges.
|
|
1767
|
+
//!
|
|
1768
|
+
//! <b>Requires</b>: [il.begin(), il.end()) must be ordered according to the predicate.
|
|
1769
|
+
//!
|
|
1770
|
+
//! <b>Complexity</b>: Linear in N.
|
|
1771
|
+
//!
|
|
1772
|
+
//! <b>Note</b>: Non-standard extension.
|
|
1773
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1774
|
+
flat_multimap(ordered_range_t, std::initializer_list<value_type> il)
|
|
1775
|
+
: m_flat_tree( ordered_range
|
|
1776
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
1777
|
+
, dtl::force<impl_initializer_list>(il).end())
|
|
1778
|
+
{}
|
|
1779
|
+
|
|
1780
|
+
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object and
|
|
1781
|
+
//! inserts elements from the ordered range [il.begin(), il.end()). This function
|
|
1782
|
+
//! is more efficient than the normal range creation for ordered ranges.
|
|
1783
|
+
//!
|
|
1784
|
+
//! <b>Requires</b>: [il.begin(), il.end()) must be ordered according to the predicate.
|
|
1785
|
+
//!
|
|
1786
|
+
//! <b>Complexity</b>: Linear in N.
|
|
1787
|
+
//!
|
|
1788
|
+
//! <b>Note</b>: Non-standard extension.
|
|
1789
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1790
|
+
flat_multimap(ordered_range_t, std::initializer_list<value_type> il, const Compare& comp)
|
|
1791
|
+
: m_flat_tree( ordered_range
|
|
1792
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
1793
|
+
, dtl::force<impl_initializer_list>(il).end(), comp)
|
|
1794
|
+
{}
|
|
1551
1795
|
|
|
1552
1796
|
//! <b>Effects</b>: Constructs an empty flat_multimap using the specified comparison object and
|
|
1553
1797
|
//! allocator, and inserts elements from the ordered range [il.begin(), il.end()). This function
|
|
@@ -1558,78 +1802,73 @@ class flat_multimap
|
|
|
1558
1802
|
//! <b>Complexity</b>: Linear in N.
|
|
1559
1803
|
//!
|
|
1560
1804
|
//! <b>Note</b>: Non-standard extension.
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
: m_flat_tree(ordered_range
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
}
|
|
1805
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1806
|
+
flat_multimap(ordered_range_t, std::initializer_list<value_type> il, const Compare& comp, const allocator_type& a)
|
|
1807
|
+
: m_flat_tree( ordered_range
|
|
1808
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
1809
|
+
, dtl::force<impl_initializer_list>(il).end()
|
|
1810
|
+
, comp, dtl::force<const impl_allocator_type>(a))
|
|
1811
|
+
{}
|
|
1568
1812
|
#endif
|
|
1569
1813
|
|
|
1570
1814
|
//! <b>Effects</b>: Copy constructs a flat_multimap.
|
|
1571
1815
|
//!
|
|
1572
1816
|
//! <b>Complexity</b>: Linear in x.size().
|
|
1817
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1573
1818
|
flat_multimap(const flat_multimap& x)
|
|
1574
1819
|
: m_flat_tree(x.m_flat_tree)
|
|
1575
|
-
{
|
|
1576
|
-
//value_type must be std::pair<Key, T>
|
|
1577
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
1578
|
-
}
|
|
1820
|
+
{}
|
|
1579
1821
|
|
|
1580
1822
|
//! <b>Effects</b>: Move constructs a flat_multimap. Constructs *this using x's resources.
|
|
1581
1823
|
//!
|
|
1582
1824
|
//! <b>Complexity</b>: Constant.
|
|
1583
1825
|
//!
|
|
1584
1826
|
//! <b>Postcondition</b>: x is emptied.
|
|
1827
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1585
1828
|
flat_multimap(BOOST_RV_REF(flat_multimap) x)
|
|
1586
|
-
BOOST_NOEXCEPT_IF(boost::container::
|
|
1829
|
+
BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<Compare>::value)
|
|
1587
1830
|
: m_flat_tree(boost::move(x.m_flat_tree))
|
|
1588
|
-
{
|
|
1589
|
-
//value_type must be std::pair<Key, T>
|
|
1590
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
1591
|
-
}
|
|
1831
|
+
{}
|
|
1592
1832
|
|
|
1593
1833
|
//! <b>Effects</b>: Copy constructs a flat_multimap using the specified allocator.
|
|
1594
1834
|
//!
|
|
1595
1835
|
//! <b>Complexity</b>: Linear in x.size().
|
|
1836
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1596
1837
|
flat_multimap(const flat_multimap& x, const allocator_type &a)
|
|
1597
|
-
: m_flat_tree(x.m_flat_tree, a)
|
|
1598
|
-
{
|
|
1599
|
-
//value_type must be std::pair<Key, T>
|
|
1600
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
1601
|
-
}
|
|
1838
|
+
: m_flat_tree(x.m_flat_tree, dtl::force<const impl_allocator_type>(a))
|
|
1839
|
+
{}
|
|
1602
1840
|
|
|
1603
1841
|
//! <b>Effects</b>: Move constructs a flat_multimap using the specified allocator.
|
|
1604
1842
|
//! Constructs *this using x's resources.
|
|
1605
1843
|
//!
|
|
1606
1844
|
//! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
|
|
1845
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1607
1846
|
flat_multimap(BOOST_RV_REF(flat_multimap) x, const allocator_type &a)
|
|
1608
|
-
: m_flat_tree(boost::move(x.m_flat_tree), a)
|
|
1609
|
-
{
|
|
1610
|
-
//value_type must be std::pair<Key, T>
|
|
1611
|
-
BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<Key, T>, typename Allocator::value_type>::value));
|
|
1612
|
-
}
|
|
1847
|
+
: m_flat_tree(boost::move(x.m_flat_tree), dtl::force<const impl_allocator_type>(a))
|
|
1848
|
+
{}
|
|
1613
1849
|
|
|
1614
1850
|
//! <b>Effects</b>: Makes *this a copy of x.
|
|
1615
1851
|
//!
|
|
1616
1852
|
//! <b>Complexity</b>: Linear in x.size().
|
|
1853
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1617
1854
|
flat_multimap& operator=(BOOST_COPY_ASSIGN_REF(flat_multimap) x)
|
|
1618
1855
|
{ m_flat_tree = x.m_flat_tree; return *this; }
|
|
1619
1856
|
|
|
1620
1857
|
//! <b>Effects</b>: this->swap(x.get()).
|
|
1621
1858
|
//!
|
|
1622
1859
|
//! <b>Complexity</b>: Constant.
|
|
1860
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1623
1861
|
flat_multimap& operator=(BOOST_RV_REF(flat_multimap) x)
|
|
1624
1862
|
BOOST_NOEXCEPT_IF( (allocator_traits_type::propagate_on_container_move_assignment::value ||
|
|
1625
1863
|
allocator_traits_type::is_always_equal::value) &&
|
|
1626
|
-
boost::container::
|
|
1864
|
+
boost::container::dtl::is_nothrow_move_assignable<Compare>::value)
|
|
1627
1865
|
{ m_flat_tree = boost::move(x.m_flat_tree); return *this; }
|
|
1628
1866
|
|
|
1629
1867
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
1630
1868
|
//! <b>Effects</b>: Assign content of il to *this
|
|
1631
1869
|
//!
|
|
1632
1870
|
//! <b>Complexity</b>: Linear in il.size().
|
|
1871
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1633
1872
|
flat_multimap& operator=(std::initializer_list<value_type> il)
|
|
1634
1873
|
{
|
|
1635
1874
|
this->clear();
|
|
@@ -1642,8 +1881,9 @@ class flat_multimap
|
|
|
1642
1881
|
//! was passed to the object's constructor.
|
|
1643
1882
|
//!
|
|
1644
1883
|
//! <b>Complexity</b>: Constant.
|
|
1884
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1645
1885
|
allocator_type get_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1646
|
-
{ return
|
|
1886
|
+
{ return dtl::force_copy<allocator_type>(m_flat_tree.get_allocator()); }
|
|
1647
1887
|
|
|
1648
1888
|
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
|
1649
1889
|
//!
|
|
@@ -1652,8 +1892,9 @@ class flat_multimap
|
|
|
1652
1892
|
//! <b>Complexity</b>: Constant.
|
|
1653
1893
|
//!
|
|
1654
1894
|
//! <b>Note</b>: Non-standard extension.
|
|
1895
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1655
1896
|
stored_allocator_type &get_stored_allocator() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1656
|
-
{ return
|
|
1897
|
+
{ return dtl::force<stored_allocator_type>(m_flat_tree.get_stored_allocator()); }
|
|
1657
1898
|
|
|
1658
1899
|
//! <b>Effects</b>: Returns a reference to the internal allocator.
|
|
1659
1900
|
//!
|
|
@@ -1662,8 +1903,9 @@ class flat_multimap
|
|
|
1662
1903
|
//! <b>Complexity</b>: Constant.
|
|
1663
1904
|
//!
|
|
1664
1905
|
//! <b>Note</b>: Non-standard extension.
|
|
1906
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1665
1907
|
const stored_allocator_type &get_stored_allocator() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1666
|
-
{ return
|
|
1908
|
+
{ return dtl::force<const stored_allocator_type>(m_flat_tree.get_stored_allocator()); }
|
|
1667
1909
|
|
|
1668
1910
|
//////////////////////////////////////////////
|
|
1669
1911
|
//
|
|
@@ -1676,32 +1918,36 @@ class flat_multimap
|
|
|
1676
1918
|
//! <b>Throws</b>: Nothing.
|
|
1677
1919
|
//!
|
|
1678
1920
|
//! <b>Complexity</b>: Constant.
|
|
1921
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1679
1922
|
iterator begin() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1680
|
-
{ return
|
|
1923
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.begin()); }
|
|
1681
1924
|
|
|
1682
1925
|
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
|
|
1683
1926
|
//!
|
|
1684
1927
|
//! <b>Throws</b>: Nothing.
|
|
1685
1928
|
//!
|
|
1686
1929
|
//! <b>Complexity</b>: Constant.
|
|
1930
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1687
1931
|
const_iterator begin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1688
|
-
{ return
|
|
1932
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.begin()); }
|
|
1689
1933
|
|
|
1690
1934
|
//! <b>Effects</b>: Returns an iterator to the end of the container.
|
|
1691
1935
|
//!
|
|
1692
1936
|
//! <b>Throws</b>: Nothing.
|
|
1693
1937
|
//!
|
|
1694
1938
|
//! <b>Complexity</b>: Constant.
|
|
1939
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1695
1940
|
iterator end() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1696
|
-
{ return
|
|
1941
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.end()); }
|
|
1697
1942
|
|
|
1698
1943
|
//! <b>Effects</b>: Returns a const_iterator to the end of the container.
|
|
1699
1944
|
//!
|
|
1700
1945
|
//! <b>Throws</b>: Nothing.
|
|
1701
1946
|
//!
|
|
1702
1947
|
//! <b>Complexity</b>: Constant.
|
|
1948
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1703
1949
|
const_iterator end() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1704
|
-
{ return
|
|
1950
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.end()); }
|
|
1705
1951
|
|
|
1706
1952
|
//! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
|
|
1707
1953
|
//! of the reversed container.
|
|
@@ -1709,8 +1955,9 @@ class flat_multimap
|
|
|
1709
1955
|
//! <b>Throws</b>: Nothing.
|
|
1710
1956
|
//!
|
|
1711
1957
|
//! <b>Complexity</b>: Constant.
|
|
1958
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1712
1959
|
reverse_iterator rbegin() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1713
|
-
{ return
|
|
1960
|
+
{ return dtl::force_copy<reverse_iterator>(m_flat_tree.rbegin()); }
|
|
1714
1961
|
|
|
1715
1962
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
|
1716
1963
|
//! of the reversed container.
|
|
@@ -1718,8 +1965,9 @@ class flat_multimap
|
|
|
1718
1965
|
//! <b>Throws</b>: Nothing.
|
|
1719
1966
|
//!
|
|
1720
1967
|
//! <b>Complexity</b>: Constant.
|
|
1968
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1721
1969
|
const_reverse_iterator rbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1722
|
-
{ return
|
|
1970
|
+
{ return dtl::force_copy<const_reverse_iterator>(m_flat_tree.rbegin()); }
|
|
1723
1971
|
|
|
1724
1972
|
//! <b>Effects</b>: Returns a reverse_iterator pointing to the end
|
|
1725
1973
|
//! of the reversed container.
|
|
@@ -1727,8 +1975,9 @@ class flat_multimap
|
|
|
1727
1975
|
//! <b>Throws</b>: Nothing.
|
|
1728
1976
|
//!
|
|
1729
1977
|
//! <b>Complexity</b>: Constant.
|
|
1978
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1730
1979
|
reverse_iterator rend() BOOST_NOEXCEPT_OR_NOTHROW
|
|
1731
|
-
{ return
|
|
1980
|
+
{ return dtl::force_copy<reverse_iterator>(m_flat_tree.rend()); }
|
|
1732
1981
|
|
|
1733
1982
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
|
1734
1983
|
//! of the reversed container.
|
|
@@ -1736,24 +1985,27 @@ class flat_multimap
|
|
|
1736
1985
|
//! <b>Throws</b>: Nothing.
|
|
1737
1986
|
//!
|
|
1738
1987
|
//! <b>Complexity</b>: Constant.
|
|
1988
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1739
1989
|
const_reverse_iterator rend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1740
|
-
{ return
|
|
1990
|
+
{ return dtl::force_copy<const_reverse_iterator>(m_flat_tree.rend()); }
|
|
1741
1991
|
|
|
1742
1992
|
//! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
|
|
1743
1993
|
//!
|
|
1744
1994
|
//! <b>Throws</b>: Nothing.
|
|
1745
1995
|
//!
|
|
1746
1996
|
//! <b>Complexity</b>: Constant.
|
|
1997
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1747
1998
|
const_iterator cbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1748
|
-
{ return
|
|
1999
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.cbegin()); }
|
|
1749
2000
|
|
|
1750
2001
|
//! <b>Effects</b>: Returns a const_iterator to the end of the container.
|
|
1751
2002
|
//!
|
|
1752
2003
|
//! <b>Throws</b>: Nothing.
|
|
1753
2004
|
//!
|
|
1754
2005
|
//! <b>Complexity</b>: Constant.
|
|
2006
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1755
2007
|
const_iterator cend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1756
|
-
{ return
|
|
2008
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.cend()); }
|
|
1757
2009
|
|
|
1758
2010
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
|
|
1759
2011
|
//! of the reversed container.
|
|
@@ -1761,8 +2013,9 @@ class flat_multimap
|
|
|
1761
2013
|
//! <b>Throws</b>: Nothing.
|
|
1762
2014
|
//!
|
|
1763
2015
|
//! <b>Complexity</b>: Constant.
|
|
2016
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1764
2017
|
const_reverse_iterator crbegin() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1765
|
-
{ return
|
|
2018
|
+
{ return dtl::force_copy<const_reverse_iterator>(m_flat_tree.crbegin()); }
|
|
1766
2019
|
|
|
1767
2020
|
//! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
|
|
1768
2021
|
//! of the reversed container.
|
|
@@ -1770,8 +2023,9 @@ class flat_multimap
|
|
|
1770
2023
|
//! <b>Throws</b>: Nothing.
|
|
1771
2024
|
//!
|
|
1772
2025
|
//! <b>Complexity</b>: Constant.
|
|
2026
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1773
2027
|
const_reverse_iterator crend() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1774
|
-
{ return
|
|
2028
|
+
{ return dtl::force_copy<const_reverse_iterator>(m_flat_tree.crend()); }
|
|
1775
2029
|
|
|
1776
2030
|
//////////////////////////////////////////////
|
|
1777
2031
|
//
|
|
@@ -1784,6 +2038,7 @@ class flat_multimap
|
|
|
1784
2038
|
//! <b>Throws</b>: Nothing.
|
|
1785
2039
|
//!
|
|
1786
2040
|
//! <b>Complexity</b>: Constant.
|
|
2041
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1787
2042
|
bool empty() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1788
2043
|
{ return m_flat_tree.empty(); }
|
|
1789
2044
|
|
|
@@ -1792,6 +2047,7 @@ class flat_multimap
|
|
|
1792
2047
|
//! <b>Throws</b>: Nothing.
|
|
1793
2048
|
//!
|
|
1794
2049
|
//! <b>Complexity</b>: Constant.
|
|
2050
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1795
2051
|
size_type size() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1796
2052
|
{ return m_flat_tree.size(); }
|
|
1797
2053
|
|
|
@@ -1800,6 +2056,7 @@ class flat_multimap
|
|
|
1800
2056
|
//! <b>Throws</b>: Nothing.
|
|
1801
2057
|
//!
|
|
1802
2058
|
//! <b>Complexity</b>: Constant.
|
|
2059
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1803
2060
|
size_type max_size() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1804
2061
|
{ return m_flat_tree.max_size(); }
|
|
1805
2062
|
|
|
@@ -1809,10 +2066,12 @@ class flat_multimap
|
|
|
1809
2066
|
//! <b>Throws</b>: Nothing.
|
|
1810
2067
|
//!
|
|
1811
2068
|
//! <b>Complexity</b>: Constant.
|
|
2069
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1812
2070
|
size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1813
2071
|
{ return m_flat_tree.capacity(); }
|
|
1814
2072
|
|
|
1815
|
-
//! <b>Effects</b>: If n is less than or equal to capacity(),
|
|
2073
|
+
//! <b>Effects</b>: If n is less than or equal to capacity(), or the
|
|
2074
|
+
//! underlying container has no `reserve` member, this call has no
|
|
1816
2075
|
//! effect. Otherwise, it is a request for allocation of additional memory.
|
|
1817
2076
|
//! If the request is successful, then capacity() is greater than or equal to
|
|
1818
2077
|
//! n; otherwise, capacity() is unchanged. In either case, size() is unchanged.
|
|
@@ -1821,6 +2080,7 @@ class flat_multimap
|
|
|
1821
2080
|
//!
|
|
1822
2081
|
//! <b>Note</b>: If capacity() is less than "cnt", iterators and references to
|
|
1823
2082
|
//! to values might be invalidated.
|
|
2083
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1824
2084
|
void reserve(size_type cnt)
|
|
1825
2085
|
{ m_flat_tree.reserve(cnt); }
|
|
1826
2086
|
|
|
@@ -1830,24 +2090,29 @@ class flat_multimap
|
|
|
1830
2090
|
//! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
|
|
1831
2091
|
//!
|
|
1832
2092
|
//! <b>Complexity</b>: Linear to size().
|
|
2093
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1833
2094
|
void shrink_to_fit()
|
|
1834
2095
|
{ m_flat_tree.shrink_to_fit(); }
|
|
1835
2096
|
|
|
1836
2097
|
//! @copydoc ::boost::container::flat_set::nth(size_type)
|
|
2098
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1837
2099
|
iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
|
|
1838
|
-
{ return
|
|
2100
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.nth(n)); }
|
|
1839
2101
|
|
|
1840
2102
|
//! @copydoc ::boost::container::flat_set::nth(size_type) const
|
|
2103
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1841
2104
|
const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1842
|
-
{ return
|
|
2105
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.nth(n)); }
|
|
1843
2106
|
|
|
1844
2107
|
//! @copydoc ::boost::container::flat_set::index_of(iterator)
|
|
2108
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1845
2109
|
size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
|
|
1846
|
-
{ return m_flat_tree.index_of(
|
|
2110
|
+
{ return m_flat_tree.index_of(dtl::force_copy<impl_iterator>(p)); }
|
|
1847
2111
|
|
|
1848
2112
|
//! @copydoc ::boost::container::flat_set::index_of(const_iterator) const
|
|
2113
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1849
2114
|
size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
|
|
1850
|
-
{ return m_flat_tree.index_of(
|
|
2115
|
+
{ return m_flat_tree.index_of(dtl::force_copy<impl_const_iterator>(p)); }
|
|
1851
2116
|
|
|
1852
2117
|
#if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
|
|
1853
2118
|
|
|
@@ -1860,8 +2125,9 @@ class flat_multimap
|
|
|
1860
2125
|
//!
|
|
1861
2126
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1862
2127
|
template <class... Args>
|
|
2128
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1863
2129
|
iterator emplace(BOOST_FWD_REF(Args)... args)
|
|
1864
|
-
{ return
|
|
2130
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.emplace_equal(boost::forward<Args>(args)...)); }
|
|
1865
2131
|
|
|
1866
2132
|
//! <b>Effects</b>: Inserts an object of type T constructed with
|
|
1867
2133
|
//! std::forward<Args>(args)... in the container.
|
|
@@ -1876,24 +2142,25 @@ class flat_multimap
|
|
|
1876
2142
|
//!
|
|
1877
2143
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1878
2144
|
template <class... Args>
|
|
2145
|
+
BOOST_CONTAINER_FORCEINLINE
|
|
1879
2146
|
iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(Args)... args)
|
|
1880
2147
|
{
|
|
1881
|
-
return
|
|
1882
|
-
(
|
|
2148
|
+
return dtl::force_copy<iterator>(m_flat_tree.emplace_hint_equal
|
|
2149
|
+
(dtl::force_copy<impl_const_iterator>(hint), boost::forward<Args>(args)...));
|
|
1883
2150
|
}
|
|
1884
2151
|
|
|
1885
2152
|
#else // !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
|
|
1886
2153
|
|
|
1887
2154
|
#define BOOST_CONTAINER_FLAT_MULTIMAP_EMPLACE_CODE(N) \
|
|
1888
2155
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
1889
|
-
iterator emplace(BOOST_MOVE_UREF##N)\
|
|
1890
|
-
{ return
|
|
2156
|
+
BOOST_CONTAINER_FORCEINLINE iterator emplace(BOOST_MOVE_UREF##N)\
|
|
2157
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.emplace_equal(BOOST_MOVE_FWD##N)); }\
|
|
1891
2158
|
\
|
|
1892
2159
|
BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
|
|
1893
|
-
iterator emplace_hint(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
2160
|
+
BOOST_CONTAINER_FORCEINLINE iterator emplace_hint(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
|
|
1894
2161
|
{\
|
|
1895
|
-
return
|
|
1896
|
-
(
|
|
2162
|
+
return dtl::force_copy<iterator>(m_flat_tree.emplace_hint_equal\
|
|
2163
|
+
(dtl::force_copy<impl_const_iterator>(hint) BOOST_MOVE_I##N BOOST_MOVE_FWD##N));\
|
|
1897
2164
|
}\
|
|
1898
2165
|
//
|
|
1899
2166
|
BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_FLAT_MULTIMAP_EMPLACE_CODE)
|
|
@@ -1908,10 +2175,10 @@ class flat_multimap
|
|
|
1908
2175
|
//! to the elements with bigger keys than x.
|
|
1909
2176
|
//!
|
|
1910
2177
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1911
|
-
iterator insert(const value_type& x)
|
|
2178
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(const value_type& x)
|
|
1912
2179
|
{
|
|
1913
|
-
return
|
|
1914
|
-
m_flat_tree.insert_equal(
|
|
2180
|
+
return dtl::force_copy<iterator>(
|
|
2181
|
+
m_flat_tree.insert_equal(dtl::force<const impl_value_type>(x)));
|
|
1915
2182
|
}
|
|
1916
2183
|
|
|
1917
2184
|
//! <b>Effects</b>: Inserts a new value move-constructed from x and returns
|
|
@@ -1921,8 +2188,8 @@ class flat_multimap
|
|
|
1921
2188
|
//! to the elements with bigger keys than x.
|
|
1922
2189
|
//!
|
|
1923
2190
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1924
|
-
iterator insert(BOOST_RV_REF(value_type) x)
|
|
1925
|
-
{ return
|
|
2191
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(BOOST_RV_REF(value_type) x)
|
|
2192
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.insert_equal(boost::move(x))); }
|
|
1926
2193
|
|
|
1927
2194
|
//! <b>Effects</b>: Inserts a new value move-constructed from x and returns
|
|
1928
2195
|
//! the iterator pointing to the newly inserted element.
|
|
@@ -1931,8 +2198,8 @@ class flat_multimap
|
|
|
1931
2198
|
//! to the elements with bigger keys than x.
|
|
1932
2199
|
//!
|
|
1933
2200
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1934
|
-
iterator insert(BOOST_RV_REF(impl_value_type) x)
|
|
1935
|
-
{ return
|
|
2201
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(BOOST_RV_REF(impl_value_type) x)
|
|
2202
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.insert_equal(boost::move(x))); }
|
|
1936
2203
|
|
|
1937
2204
|
//! <b>Effects</b>: Inserts a copy of x in the container.
|
|
1938
2205
|
//! p is a hint pointing to where the insert should start to search.
|
|
@@ -1945,11 +2212,11 @@ class flat_multimap
|
|
|
1945
2212
|
//! to the elements with bigger keys than x.
|
|
1946
2213
|
//!
|
|
1947
2214
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1948
|
-
iterator insert(const_iterator p, const value_type& x)
|
|
2215
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, const value_type& x)
|
|
1949
2216
|
{
|
|
1950
|
-
return
|
|
1951
|
-
(m_flat_tree.insert_equal(
|
|
1952
|
-
,
|
|
2217
|
+
return dtl::force_copy<iterator>
|
|
2218
|
+
(m_flat_tree.insert_equal( dtl::force_copy<impl_const_iterator>(p)
|
|
2219
|
+
, dtl::force<const impl_value_type>(x)));
|
|
1953
2220
|
}
|
|
1954
2221
|
|
|
1955
2222
|
//! <b>Effects</b>: Inserts a value move constructed from x in the container.
|
|
@@ -1963,10 +2230,10 @@ class flat_multimap
|
|
|
1963
2230
|
//! to the elements with bigger keys than x.
|
|
1964
2231
|
//!
|
|
1965
2232
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1966
|
-
iterator insert(const_iterator p, BOOST_RV_REF(value_type) x)
|
|
2233
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, BOOST_RV_REF(value_type) x)
|
|
1967
2234
|
{
|
|
1968
|
-
return
|
|
1969
|
-
(m_flat_tree.insert_equal(
|
|
2235
|
+
return dtl::force_copy<iterator>
|
|
2236
|
+
(m_flat_tree.insert_equal(dtl::force_copy<impl_const_iterator>(p)
|
|
1970
2237
|
, boost::move(x)));
|
|
1971
2238
|
}
|
|
1972
2239
|
|
|
@@ -1981,22 +2248,21 @@ class flat_multimap
|
|
|
1981
2248
|
//! to the elements with bigger keys than x.
|
|
1982
2249
|
//!
|
|
1983
2250
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1984
|
-
iterator insert(const_iterator p, BOOST_RV_REF(impl_value_type) x)
|
|
2251
|
+
BOOST_CONTAINER_FORCEINLINE iterator insert(const_iterator p, BOOST_RV_REF(impl_value_type) x)
|
|
1985
2252
|
{
|
|
1986
|
-
return
|
|
1987
|
-
m_flat_tree.insert_equal(
|
|
2253
|
+
return dtl::force_copy<iterator>(
|
|
2254
|
+
m_flat_tree.insert_equal(dtl::force_copy<impl_const_iterator>(p), boost::move(x)));
|
|
1988
2255
|
}
|
|
1989
2256
|
|
|
1990
2257
|
//! <b>Requires</b>: first, last are not iterators into *this.
|
|
1991
2258
|
//!
|
|
1992
2259
|
//! <b>Effects</b>: inserts each element from the range [first,last) .
|
|
1993
2260
|
//!
|
|
1994
|
-
//! <b>Complexity</b>:
|
|
1995
|
-
//! search time plus N*size() insertion time.
|
|
2261
|
+
//! <b>Complexity</b>: N log(N).
|
|
1996
2262
|
//!
|
|
1997
2263
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
1998
2264
|
template <class InputIterator>
|
|
1999
|
-
void insert(InputIterator first, InputIterator last)
|
|
2265
|
+
BOOST_CONTAINER_FORCEINLINE void insert(InputIterator first, InputIterator last)
|
|
2000
2266
|
{ m_flat_tree.insert_equal(first, last); }
|
|
2001
2267
|
|
|
2002
2268
|
//! <b>Requires</b>: first, last are not iterators into *this.
|
|
@@ -2007,25 +2273,26 @@ class flat_multimap
|
|
|
2007
2273
|
//! if there is no element with key equivalent to the key of that element. This
|
|
2008
2274
|
//! function is more efficient than the normal range creation for ordered ranges.
|
|
2009
2275
|
//!
|
|
2010
|
-
//! <b>Complexity</b>:
|
|
2011
|
-
//! search time plus N*size() insertion time.
|
|
2276
|
+
//! <b>Complexity</b>: Linear.
|
|
2012
2277
|
//!
|
|
2013
2278
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
2014
2279
|
//!
|
|
2015
2280
|
//! <b>Note</b>: Non-standard extension.
|
|
2016
2281
|
template <class InputIterator>
|
|
2017
|
-
void insert(ordered_range_t, InputIterator first, InputIterator last)
|
|
2282
|
+
BOOST_CONTAINER_FORCEINLINE void insert(ordered_range_t, InputIterator first, InputIterator last)
|
|
2018
2283
|
{ m_flat_tree.insert_equal(ordered_range, first, last); }
|
|
2019
2284
|
|
|
2020
2285
|
#if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
|
|
2021
2286
|
//! <b>Effects</b>: inserts each element from the range [il.begin(), il.end()) .
|
|
2022
2287
|
//!
|
|
2023
|
-
//! <b>Complexity</b>:
|
|
2024
|
-
//! search time plus N*size() insertion time.
|
|
2288
|
+
//! <b>Complexity</b>: N log(N).
|
|
2025
2289
|
//!
|
|
2026
2290
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
2027
|
-
void insert(std::initializer_list<value_type> il)
|
|
2028
|
-
{
|
|
2291
|
+
BOOST_CONTAINER_FORCEINLINE void insert(std::initializer_list<value_type> il)
|
|
2292
|
+
{
|
|
2293
|
+
m_flat_tree.insert_equal( dtl::force<impl_initializer_list>(il).begin()
|
|
2294
|
+
, dtl::force<impl_initializer_list>(il).end());
|
|
2295
|
+
}
|
|
2029
2296
|
|
|
2030
2297
|
//! <b>Requires</b>: [il.begin(), il.end()) must be ordered according to the predicate.
|
|
2031
2298
|
//!
|
|
@@ -2033,14 +2300,17 @@ class flat_multimap
|
|
|
2033
2300
|
//! if there is no element with key equivalent to the key of that element. This
|
|
2034
2301
|
//! function is more efficient than the normal range creation for ordered ranges.
|
|
2035
2302
|
//!
|
|
2036
|
-
//! <b>Complexity</b>:
|
|
2037
|
-
//! search time plus N*size() insertion time.
|
|
2303
|
+
//! <b>Complexity</b>: Linear.
|
|
2038
2304
|
//!
|
|
2039
2305
|
//! <b>Note</b>: If an element is inserted it might invalidate elements.
|
|
2040
2306
|
//!
|
|
2041
2307
|
//! <b>Note</b>: Non-standard extension.
|
|
2042
|
-
void insert(ordered_range_t, std::initializer_list<value_type> il)
|
|
2043
|
-
{
|
|
2308
|
+
BOOST_CONTAINER_FORCEINLINE void insert(ordered_range_t, std::initializer_list<value_type> il)
|
|
2309
|
+
{
|
|
2310
|
+
m_flat_tree.insert_equal( ordered_range
|
|
2311
|
+
, dtl::force<impl_initializer_list>(il).begin()
|
|
2312
|
+
, dtl::force<impl_initializer_list>(il).end());
|
|
2313
|
+
}
|
|
2044
2314
|
#endif
|
|
2045
2315
|
|
|
2046
2316
|
//! <b>Requires</b>: this->get_allocator() == source.get_allocator().
|
|
@@ -2057,23 +2327,23 @@ class flat_multimap
|
|
|
2057
2327
|
//!
|
|
2058
2328
|
//! <b>Complexity</b>: N log(a.size() + N) (N has the value source.size())
|
|
2059
2329
|
template<class C2>
|
|
2060
|
-
void merge(flat_multimap<Key, T, C2,
|
|
2330
|
+
BOOST_CONTAINER_FORCEINLINE void merge(flat_multimap<Key, T, C2, AllocatorOrContainer>& source)
|
|
2061
2331
|
{ m_flat_tree.merge_equal(source.tree()); }
|
|
2062
2332
|
|
|
2063
|
-
//! @copydoc ::boost::container::flat_multimap::merge(flat_multimap<Key, T, C2,
|
|
2333
|
+
//! @copydoc ::boost::container::flat_multimap::merge(flat_multimap<Key, T, C2, AllocatorOrContainer>&)
|
|
2064
2334
|
template<class C2>
|
|
2065
|
-
void merge(BOOST_RV_REF_BEG flat_multimap<Key, T, C2,
|
|
2066
|
-
{ return this->merge(static_cast<flat_multimap<Key, T, C2,
|
|
2335
|
+
BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG flat_multimap<Key, T, C2, AllocatorOrContainer> BOOST_RV_REF_END source)
|
|
2336
|
+
{ return this->merge(static_cast<flat_multimap<Key, T, C2, AllocatorOrContainer>&>(source)); }
|
|
2067
2337
|
|
|
2068
|
-
//! @copydoc ::boost::container::flat_multimap::merge(flat_multimap<Key, T, C2,
|
|
2338
|
+
//! @copydoc ::boost::container::flat_multimap::merge(flat_multimap<Key, T, C2, AllocatorOrContainer>&)
|
|
2069
2339
|
template<class C2>
|
|
2070
|
-
void merge(flat_map<Key, T, C2,
|
|
2340
|
+
BOOST_CONTAINER_FORCEINLINE void merge(flat_map<Key, T, C2, AllocatorOrContainer>& source)
|
|
2071
2341
|
{ m_flat_tree.merge_equal(source.tree()); }
|
|
2072
2342
|
|
|
2073
|
-
//! @copydoc ::boost::container::flat_multimap::merge(
|
|
2343
|
+
//! @copydoc ::boost::container::flat_multimap::merge(flat_map<Key, T, C2, AllocatorOrContainer>&)
|
|
2074
2344
|
template<class C2>
|
|
2075
|
-
void merge(BOOST_RV_REF_BEG flat_map<Key, T, C2,
|
|
2076
|
-
{ return this->merge(static_cast<flat_map<Key, T, C2,
|
|
2345
|
+
BOOST_CONTAINER_FORCEINLINE void merge(BOOST_RV_REF_BEG flat_map<Key, T, C2, AllocatorOrContainer> BOOST_RV_REF_END source)
|
|
2346
|
+
{ return this->merge(static_cast<flat_map<Key, T, C2, AllocatorOrContainer>&>(source)); }
|
|
2077
2347
|
|
|
2078
2348
|
//! <b>Effects</b>: Erases the element pointed to by p.
|
|
2079
2349
|
//!
|
|
@@ -2085,10 +2355,10 @@ class flat_multimap
|
|
|
2085
2355
|
//!
|
|
2086
2356
|
//! <b>Note</b>: Invalidates elements with keys
|
|
2087
2357
|
//! not less than the erased element.
|
|
2088
|
-
iterator erase(const_iterator p)
|
|
2358
|
+
BOOST_CONTAINER_FORCEINLINE iterator erase(const_iterator p)
|
|
2089
2359
|
{
|
|
2090
|
-
return
|
|
2091
|
-
m_flat_tree.erase(
|
|
2360
|
+
return dtl::force_copy<iterator>(
|
|
2361
|
+
m_flat_tree.erase(dtl::force_copy<impl_const_iterator>(p)));
|
|
2092
2362
|
}
|
|
2093
2363
|
|
|
2094
2364
|
//! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
|
|
@@ -2097,7 +2367,7 @@ class flat_multimap
|
|
|
2097
2367
|
//!
|
|
2098
2368
|
//! <b>Complexity</b>: Logarithmic search time plus erasure time
|
|
2099
2369
|
//! linear to the elements with bigger keys.
|
|
2100
|
-
size_type erase(const key_type& x)
|
|
2370
|
+
BOOST_CONTAINER_FORCEINLINE size_type erase(const key_type& x)
|
|
2101
2371
|
{ return m_flat_tree.erase(x); }
|
|
2102
2372
|
|
|
2103
2373
|
//! <b>Effects</b>: Erases all the elements in the range [first, last).
|
|
@@ -2108,11 +2378,11 @@ class flat_multimap
|
|
|
2108
2378
|
//!
|
|
2109
2379
|
//! <b>Complexity</b>: Logarithmic search time plus erasure time
|
|
2110
2380
|
//! linear to the elements with bigger keys.
|
|
2111
|
-
iterator erase(const_iterator first, const_iterator last)
|
|
2381
|
+
BOOST_CONTAINER_FORCEINLINE iterator erase(const_iterator first, const_iterator last)
|
|
2112
2382
|
{
|
|
2113
|
-
return
|
|
2114
|
-
(m_flat_tree.erase(
|
|
2115
|
-
,
|
|
2383
|
+
return dtl::force_copy<iterator>
|
|
2384
|
+
(m_flat_tree.erase( dtl::force_copy<impl_const_iterator>(first)
|
|
2385
|
+
, dtl::force_copy<impl_const_iterator>(last)));
|
|
2116
2386
|
}
|
|
2117
2387
|
|
|
2118
2388
|
//! <b>Effects</b>: Swaps the contents of *this and x.
|
|
@@ -2120,9 +2390,9 @@ class flat_multimap
|
|
|
2120
2390
|
//! <b>Throws</b>: Nothing.
|
|
2121
2391
|
//!
|
|
2122
2392
|
//! <b>Complexity</b>: Constant.
|
|
2123
|
-
void swap(flat_multimap& x)
|
|
2393
|
+
BOOST_CONTAINER_FORCEINLINE void swap(flat_multimap& x)
|
|
2124
2394
|
BOOST_NOEXCEPT_IF( allocator_traits_type::is_always_equal::value
|
|
2125
|
-
&& boost::container::
|
|
2395
|
+
&& boost::container::dtl::is_nothrow_swappable<Compare>::value )
|
|
2126
2396
|
{ m_flat_tree.swap(x.m_flat_tree); }
|
|
2127
2397
|
|
|
2128
2398
|
//! <b>Effects</b>: erase(a.begin(),a.end()).
|
|
@@ -2130,7 +2400,7 @@ class flat_multimap
|
|
|
2130
2400
|
//! <b>Postcondition</b>: size() == 0.
|
|
2131
2401
|
//!
|
|
2132
2402
|
//! <b>Complexity</b>: linear in size().
|
|
2133
|
-
void clear() BOOST_NOEXCEPT_OR_NOTHROW
|
|
2403
|
+
BOOST_CONTAINER_FORCEINLINE void clear() BOOST_NOEXCEPT_OR_NOTHROW
|
|
2134
2404
|
{ m_flat_tree.clear(); }
|
|
2135
2405
|
|
|
2136
2406
|
//////////////////////////////////////////////
|
|
@@ -2143,15 +2413,15 @@ class flat_multimap
|
|
|
2143
2413
|
//! of which a was constructed.
|
|
2144
2414
|
//!
|
|
2145
2415
|
//! <b>Complexity</b>: Constant.
|
|
2146
|
-
key_compare key_comp() const
|
|
2147
|
-
{ return
|
|
2416
|
+
BOOST_CONTAINER_FORCEINLINE key_compare key_comp() const
|
|
2417
|
+
{ return dtl::force_copy<key_compare>(m_flat_tree.key_comp()); }
|
|
2148
2418
|
|
|
2149
2419
|
//! <b>Effects</b>: Returns an object of value_compare constructed out
|
|
2150
2420
|
//! of the comparison object.
|
|
2151
2421
|
//!
|
|
2152
2422
|
//! <b>Complexity</b>: Constant.
|
|
2153
|
-
value_compare value_comp() const
|
|
2154
|
-
{ return value_compare(
|
|
2423
|
+
BOOST_CONTAINER_FORCEINLINE value_compare value_comp() const
|
|
2424
|
+
{ return value_compare(dtl::force_copy<key_compare>(m_flat_tree.key_comp())); }
|
|
2155
2425
|
|
|
2156
2426
|
//////////////////////////////////////////////
|
|
2157
2427
|
//
|
|
@@ -2163,102 +2433,134 @@ class flat_multimap
|
|
|
2163
2433
|
//! equivalent to x, or end() if such an element is not found.
|
|
2164
2434
|
//!
|
|
2165
2435
|
//! <b>Complexity</b>: Logarithmic.
|
|
2166
|
-
iterator find(const key_type& x)
|
|
2167
|
-
{ return
|
|
2436
|
+
BOOST_CONTAINER_FORCEINLINE iterator find(const key_type& x)
|
|
2437
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.find(x)); }
|
|
2168
2438
|
|
|
2169
2439
|
//! <b>Returns</b>: An const_iterator pointing to an element with the key
|
|
2170
2440
|
//! equivalent to x, or end() if such an element is not found.
|
|
2171
2441
|
//!
|
|
2172
2442
|
//! <b>Complexity</b>: Logarithmic.
|
|
2173
|
-
const_iterator find(const key_type& x) const
|
|
2174
|
-
{ return
|
|
2443
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator find(const key_type& x) const
|
|
2444
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.find(x)); }
|
|
2175
2445
|
|
|
2176
2446
|
//! <b>Returns</b>: The number of elements with key equivalent to x.
|
|
2177
2447
|
//!
|
|
2178
2448
|
//! <b>Complexity</b>: log(size())+count(k)
|
|
2179
|
-
size_type count(const key_type& x) const
|
|
2449
|
+
BOOST_CONTAINER_FORCEINLINE size_type count(const key_type& x) const
|
|
2180
2450
|
{ return m_flat_tree.count(x); }
|
|
2181
2451
|
|
|
2182
2452
|
//! <b>Returns</b>: An iterator pointing to the first element with key not less
|
|
2183
2453
|
//! than k, or a.end() if such an element is not found.
|
|
2184
2454
|
//!
|
|
2185
2455
|
//! <b>Complexity</b>: Logarithmic
|
|
2186
|
-
iterator lower_bound(const key_type& x)
|
|
2187
|
-
{ return
|
|
2456
|
+
BOOST_CONTAINER_FORCEINLINE iterator lower_bound(const key_type& x)
|
|
2457
|
+
{ return dtl::force_copy<iterator>(m_flat_tree.lower_bound(x)); }
|
|
2188
2458
|
|
|
2189
2459
|
//! <b>Returns</b>: A const iterator pointing to the first element with key
|
|
2190
2460
|
//! not less than k, or a.end() if such an element is not found.
|
|
2191
2461
|
//!
|
|
2192
2462
|
//! <b>Complexity</b>: Logarithmic
|
|
2193
|
-
const_iterator lower_bound(const key_type& x) const
|
|
2194
|
-
{ return
|
|
2463
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator lower_bound(const key_type& x) const
|
|
2464
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.lower_bound(x)); }
|
|
2195
2465
|
|
|
2196
2466
|
//! <b>Returns</b>: An iterator pointing to the first element with key not less
|
|
2197
2467
|
//! than x, or end() if such an element is not found.
|
|
2198
2468
|
//!
|
|
2199
2469
|
//! <b>Complexity</b>: Logarithmic
|
|
2200
|
-
iterator upper_bound(const key_type& x)
|
|
2201
|
-
{return
|
|
2470
|
+
BOOST_CONTAINER_FORCEINLINE iterator upper_bound(const key_type& x)
|
|
2471
|
+
{return dtl::force_copy<iterator>(m_flat_tree.upper_bound(x)); }
|
|
2202
2472
|
|
|
2203
2473
|
//! <b>Returns</b>: A const iterator pointing to the first element with key
|
|
2204
2474
|
//! not less than x, or end() if such an element is not found.
|
|
2205
2475
|
//!
|
|
2206
2476
|
//! <b>Complexity</b>: Logarithmic
|
|
2207
|
-
const_iterator upper_bound(const key_type& x) const
|
|
2208
|
-
{ return
|
|
2477
|
+
BOOST_CONTAINER_FORCEINLINE const_iterator upper_bound(const key_type& x) const
|
|
2478
|
+
{ return dtl::force_copy<const_iterator>(m_flat_tree.upper_bound(x)); }
|
|
2209
2479
|
|
|
2210
2480
|
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
|
|
2211
2481
|
//!
|
|
2212
2482
|
//! <b>Complexity</b>: Logarithmic
|
|
2213
|
-
std::pair<iterator,iterator> equal_range(const key_type& x)
|
|
2214
|
-
{ return
|
|
2483
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<iterator,iterator> equal_range(const key_type& x)
|
|
2484
|
+
{ return dtl::force_copy<std::pair<iterator,iterator> >(m_flat_tree.equal_range(x)); }
|
|
2215
2485
|
|
|
2216
2486
|
//! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
|
|
2217
2487
|
//!
|
|
2218
2488
|
//! <b>Complexity</b>: Logarithmic
|
|
2219
|
-
std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const
|
|
2220
|
-
{ return
|
|
2489
|
+
BOOST_CONTAINER_FORCEINLINE std::pair<const_iterator, const_iterator> equal_range(const key_type& x) const
|
|
2490
|
+
{ return dtl::force_copy<std::pair<const_iterator,const_iterator> >(m_flat_tree.equal_range(x)); }
|
|
2491
|
+
|
|
2492
|
+
//! <b>Effects</b>: Extracts the internal sequence container.
|
|
2493
|
+
//!
|
|
2494
|
+
//! <b>Complexity</b>: Same as the move constructor of sequence_type, usually constant.
|
|
2495
|
+
//!
|
|
2496
|
+
//! <b>Postcondition</b>: this->empty()
|
|
2497
|
+
//!
|
|
2498
|
+
//! <b>Throws</b>: If secuence_type's move constructor throws
|
|
2499
|
+
BOOST_CONTAINER_FORCEINLINE sequence_type extract_sequence()
|
|
2500
|
+
{
|
|
2501
|
+
return boost::move(dtl::force<sequence_type>(m_flat_tree.get_sequence_ref()));
|
|
2502
|
+
}
|
|
2503
|
+
|
|
2504
|
+
//! <b>Effects</b>: Discards the internally hold sequence container and adopts the
|
|
2505
|
+
//! one passed externally using the move assignment.
|
|
2506
|
+
//!
|
|
2507
|
+
//! <b>Complexity</b>: Assuming O(1) move assignment, O(NlogN) with N = seq.size()
|
|
2508
|
+
//!
|
|
2509
|
+
//! <b>Throws</b>: If the comparison or the move constructor throws
|
|
2510
|
+
BOOST_CONTAINER_FORCEINLINE void adopt_sequence(BOOST_RV_REF(sequence_type) seq)
|
|
2511
|
+
{ this->m_flat_tree.adopt_sequence_equal(boost::move(dtl::force<impl_sequence_type>(seq))); }
|
|
2512
|
+
|
|
2513
|
+
//! <b>Requires</b>: seq shall be ordered according to this->compare().
|
|
2514
|
+
//!
|
|
2515
|
+
//! <b>Effects</b>: Discards the internally hold sequence container and adopts the
|
|
2516
|
+
//! one passed externally using the move assignment.
|
|
2517
|
+
//!
|
|
2518
|
+
//! <b>Complexity</b>: Assuming O(1) move assignment, O(1)
|
|
2519
|
+
//!
|
|
2520
|
+
//! <b>Throws</b>: If the move assignment throws
|
|
2521
|
+
BOOST_CONTAINER_FORCEINLINE void adopt_sequence(ordered_range_t, BOOST_RV_REF(sequence_type) seq)
|
|
2522
|
+
{ this->m_flat_tree.adopt_sequence_equal(ordered_range_t(), boost::move(dtl::force<impl_sequence_type>(seq))); }
|
|
2221
2523
|
|
|
2222
2524
|
//! <b>Effects</b>: Returns true if x and y are equal
|
|
2223
2525
|
//!
|
|
2224
2526
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2225
|
-
friend bool operator==(const flat_multimap& x, const flat_multimap& y)
|
|
2527
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator==(const flat_multimap& x, const flat_multimap& y)
|
|
2226
2528
|
{ return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); }
|
|
2227
2529
|
|
|
2228
2530
|
//! <b>Effects</b>: Returns true if x and y are unequal
|
|
2229
2531
|
//!
|
|
2230
2532
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2231
|
-
friend bool operator!=(const flat_multimap& x, const flat_multimap& y)
|
|
2533
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const flat_multimap& x, const flat_multimap& y)
|
|
2232
2534
|
{ return !(x == y); }
|
|
2233
2535
|
|
|
2234
2536
|
//! <b>Effects</b>: Returns true if x is less than y
|
|
2235
2537
|
//!
|
|
2236
2538
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2237
|
-
friend bool operator<(const flat_multimap& x, const flat_multimap& y)
|
|
2539
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator<(const flat_multimap& x, const flat_multimap& y)
|
|
2238
2540
|
{ return ::boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
|
|
2239
2541
|
|
|
2240
2542
|
//! <b>Effects</b>: Returns true if x is greater than y
|
|
2241
2543
|
//!
|
|
2242
2544
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2243
|
-
friend bool operator>(const flat_multimap& x, const flat_multimap& y)
|
|
2545
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator>(const flat_multimap& x, const flat_multimap& y)
|
|
2244
2546
|
{ return y < x; }
|
|
2245
2547
|
|
|
2246
2548
|
//! <b>Effects</b>: Returns true if x is equal or less than y
|
|
2247
2549
|
//!
|
|
2248
2550
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2249
|
-
friend bool operator<=(const flat_multimap& x, const flat_multimap& y)
|
|
2551
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator<=(const flat_multimap& x, const flat_multimap& y)
|
|
2250
2552
|
{ return !(y < x); }
|
|
2251
2553
|
|
|
2252
2554
|
//! <b>Effects</b>: Returns true if x is equal or greater than y
|
|
2253
2555
|
//!
|
|
2254
2556
|
//! <b>Complexity</b>: Linear to the number of elements in the container.
|
|
2255
|
-
friend bool operator>=(const flat_multimap& x, const flat_multimap& y)
|
|
2557
|
+
BOOST_CONTAINER_FORCEINLINE friend bool operator>=(const flat_multimap& x, const flat_multimap& y)
|
|
2256
2558
|
{ return !(x < y); }
|
|
2257
2559
|
|
|
2258
2560
|
//! <b>Effects</b>: x.swap(y)
|
|
2259
2561
|
//!
|
|
2260
2562
|
//! <b>Complexity</b>: Constant.
|
|
2261
|
-
friend void swap(flat_multimap& x, flat_multimap& y)
|
|
2563
|
+
BOOST_CONTAINER_FORCEINLINE friend void swap(flat_multimap& x, flat_multimap& y)
|
|
2262
2564
|
{ x.swap(y); }
|
|
2263
2565
|
};
|
|
2264
2566
|
|
|
@@ -2270,11 +2572,11 @@ namespace boost {
|
|
|
2270
2572
|
|
|
2271
2573
|
//!has_trivial_destructor_after_move<> == true_type
|
|
2272
2574
|
//!specialization for optimizations
|
|
2273
|
-
template <class Key, class T, class Compare, class
|
|
2274
|
-
struct has_trivial_destructor_after_move< boost::container::flat_multimap<Key, T, Compare,
|
|
2575
|
+
template <class Key, class T, class Compare, class AllocatorOrContainer>
|
|
2576
|
+
struct has_trivial_destructor_after_move< boost::container::flat_multimap<Key, T, Compare, AllocatorOrContainer> >
|
|
2275
2577
|
{
|
|
2276
|
-
typedef typename ::boost::container::allocator_traits<
|
|
2277
|
-
static const bool value = ::boost::has_trivial_destructor_after_move<
|
|
2578
|
+
typedef typename ::boost::container::allocator_traits<AllocatorOrContainer>::pointer pointer;
|
|
2579
|
+
static const bool value = ::boost::has_trivial_destructor_after_move<AllocatorOrContainer>::value &&
|
|
2278
2580
|
::boost::has_trivial_destructor_after_move<pointer>::value &&
|
|
2279
2581
|
::boost::has_trivial_destructor_after_move<Compare>::value;
|
|
2280
2582
|
};
|