From 46d8f5f4a9d307fbaa36d80a7f5a4c19a2ebce36 Mon Sep 17 00:00:00 2001 From: Adriano dos Santos Fernandes Date: Wed, 16 Oct 2024 23:22:31 -0300 Subject: [PATCH] Update boost to version 1.86.0. --- extern/boost/boost/algorithm/string.hpp | 31 + .../boost/algorithm/string/case_conv.hpp | 176 + .../algorithm/string/detail/case_conv.hpp | 130 + .../algorithm/string/detail/find_format.hpp | 204 + .../string/detail/find_format_all.hpp | 275 ++ .../string/detail/find_format_store.hpp | 89 + .../algorithm/string/detail/find_iterator.hpp | 14 +- .../algorithm/string/detail/formatter.hpp | 119 + .../algorithm/string/detail/predicate.hpp | 77 + .../string/detail/replace_storage.hpp | 159 + .../algorithm/string/detail/sequence.hpp | 200 + extern/boost/boost/algorithm/string/erase.hpp | 844 ++++ extern/boost/boost/algorithm/string/find.hpp | 334 ++ .../boost/algorithm/string/find_format.hpp | 286 ++ .../boost/algorithm/string/find_iterator.hpp | 28 +- .../boost/algorithm/string/formatter.hpp | 119 + extern/boost/boost/algorithm/string/join.hpp | 145 + .../boost/algorithm/string/predicate.hpp | 476 ++ .../boost/boost/algorithm/string/replace.hpp | 926 ++++ .../algorithm/string/sequence_traits.hpp | 120 + .../algorithm/string/std/list_traits.hpp | 68 + .../algorithm/string/std/slist_traits.hpp | 69 + .../algorithm/string/std/string_traits.hpp | 44 + .../string/std_containers_traits.hpp | 26 + .../boost/algorithm/string/yes_no_type.hpp | 33 + extern/boost/boost/align/aligned_alloc.hpp | 2 +- extern/boost/boost/array.hpp | 456 -- extern/boost/boost/asio.hpp | 204 + .../boost/asio/any_completion_executor.hpp | 338 ++ .../boost/asio/any_completion_handler.hpp | 824 ++++ extern/boost/boost/asio/any_io_executor.hpp | 353 ++ extern/boost/boost/asio/append.hpp | 67 + extern/boost/boost/asio/as_tuple.hpp | 154 + .../boost/boost/asio/associated_allocator.hpp | 216 + .../asio/associated_cancellation_slot.hpp | 223 + .../boost/boost/asio/associated_executor.hpp | 237 + .../asio/associated_immediate_executor.hpp | 283 ++ extern/boost/boost/asio/associator.hpp | 37 + extern/boost/boost/asio/async_result.hpp | 950 ++++ extern/boost/boost/asio/awaitable.hpp | 144 + .../boost/asio/basic_datagram_socket.hpp | 1364 ++++++ .../boost/boost/asio/basic_deadline_timer.hpp | 712 +++ extern/boost/boost/asio/basic_file.hpp | 826 ++++ extern/boost/boost/asio/basic_io_object.hpp | 288 ++ .../boost/asio/basic_random_access_file.hpp | 691 +++ extern/boost/boost/asio/basic_raw_socket.hpp | 1358 ++++++ .../boost/boost/asio/basic_readable_pipe.hpp | 628 +++ .../boost/asio/basic_seq_packet_socket.hpp | 825 ++++ extern/boost/boost/asio/basic_serial_port.hpp | 989 ++++ extern/boost/boost/asio/basic_signal_set.hpp | 650 +++ extern/boost/boost/asio/basic_socket.hpp | 1938 ++++++++ .../boost/asio/basic_socket_acceptor.hpp | 2710 +++++++++++ .../boost/asio/basic_socket_iostream.hpp | 333 ++ .../boost/asio/basic_socket_streambuf.hpp | 644 +++ extern/boost/boost/asio/basic_stream_file.hpp | 746 +++ .../boost/boost/asio/basic_stream_socket.hpp | 1165 +++++ extern/boost/boost/asio/basic_streambuf.hpp | 452 ++ .../boost/boost/asio/basic_streambuf_fwd.hpp | 38 + .../boost/boost/asio/basic_waitable_timer.hpp | 826 ++++ .../boost/boost/asio/basic_writable_pipe.hpp | 624 +++ extern/boost/boost/asio/bind_allocator.hpp | 598 +++ .../boost/asio/bind_cancellation_slot.hpp | 615 +++ extern/boost/boost/asio/bind_executor.hpp | 666 +++ .../boost/asio/bind_immediate_executor.hpp | 618 +++ extern/boost/boost/asio/buffer.hpp | 2755 +++++++++++ .../boost/boost/asio/buffer_registration.hpp | 320 ++ .../boost/boost/asio/buffered_read_stream.hpp | 275 ++ .../boost/asio/buffered_read_stream_fwd.hpp | 27 + extern/boost/boost/asio/buffered_stream.hpp | 294 ++ .../boost/boost/asio/buffered_stream_fwd.hpp | 27 + .../boost/asio/buffered_write_stream.hpp | 267 ++ .../boost/asio/buffered_write_stream_fwd.hpp | 27 + extern/boost/boost/asio/buffers_iterator.hpp | 523 +++ extern/boost/boost/asio/cancel_after.hpp | 303 ++ extern/boost/boost/asio/cancel_at.hpp | 296 ++ .../boost/boost/asio/cancellation_signal.hpp | 247 + .../boost/boost/asio/cancellation_state.hpp | 237 + extern/boost/boost/asio/cancellation_type.hpp | 159 + extern/boost/boost/asio/co_composed.hpp | 1323 ++++++ extern/boost/boost/asio/co_spawn.hpp | 525 +++ .../boost/boost/asio/completion_condition.hpp | 269 ++ extern/boost/boost/asio/compose.hpp | 130 + extern/boost/boost/asio/composed.hpp | 415 ++ extern/boost/boost/asio/connect.hpp | 1348 ++++++ extern/boost/boost/asio/connect_pipe.hpp | 85 + extern/boost/boost/asio/consign.hpp | 77 + extern/boost/boost/asio/coroutine.hpp | 330 ++ extern/boost/boost/asio/deadline_timer.hpp | 40 + .../boost/asio/default_completion_token.hpp | 91 + extern/boost/boost/asio/defer.hpp | 220 + extern/boost/boost/asio/deferred.hpp | 721 +++ extern/boost/boost/asio/detached.hpp | 107 + extern/boost/boost/asio/detail/array.hpp | 32 + extern/boost/boost/asio/detail/array_fwd.hpp | 32 + extern/boost/boost/asio/detail/assert.hpp | 32 + .../boost/boost/asio/detail/atomic_count.hpp | 61 + .../detail/base_from_cancellation_state.hpp | 166 + .../asio/detail/base_from_completion_cond.hpp | 71 + .../boost/boost/asio/detail/bind_handler.hpp | 713 +++ .../asio/detail/blocking_executor_op.hpp | 109 + .../boost/asio/detail/buffer_resize_guard.hpp | 68 + .../asio/detail/buffer_sequence_adapter.hpp | 839 ++++ .../asio/detail/buffered_stream_storage.hpp | 128 + extern/boost/boost/asio/detail/call_stack.hpp | 127 + extern/boost/boost/asio/detail/chrono.hpp | 47 + .../boost/asio/detail/chrono_time_traits.hpp | 192 + .../boost/asio/detail/completion_handler.hpp | 90 + .../boost/asio/detail/completion_message.hpp | 129 + .../boost/asio/detail/completion_payload.hpp | 222 + .../detail/completion_payload_handler.hpp | 81 + .../boost/boost/asio/detail/composed_work.hpp | 254 ++ .../boost/asio/detail/concurrency_hint.hpp | 94 + .../detail/conditionally_enabled_event.hpp | 122 + .../detail/conditionally_enabled_mutex.hpp | 151 + extern/boost/boost/asio/detail/config.hpp | 1413 ++++++ .../boost/asio/detail/consuming_buffers.hpp | 445 ++ extern/boost/boost/asio/detail/cstddef.hpp | 29 + extern/boost/boost/asio/detail/cstdint.hpp | 42 + .../boost/boost/asio/detail/date_time_fwd.hpp | 34 + .../asio/detail/deadline_timer_service.hpp | 341 ++ .../boost/asio/detail/dependent_type.hpp | 38 + .../boost/asio/detail/descriptor_ops.hpp | 181 + .../boost/asio/detail/descriptor_read_op.hpp | 190 + .../boost/asio/detail/descriptor_write_op.hpp | 189 + .../boost/asio/detail/dev_poll_reactor.hpp | 249 + .../boost/boost/asio/detail/epoll_reactor.hpp | 297 ++ extern/boost/boost/asio/detail/event.hpp | 48 + .../detail/eventfd_select_interrupter.hpp | 85 + .../boost/asio/detail/executor_function.hpp | 154 + .../boost/boost/asio/detail/executor_op.hpp | 86 + .../boost/asio/detail/fd_set_adapter.hpp | 41 + .../boost/boost/asio/detail/fenced_block.hpp | 42 + extern/boost/boost/asio/detail/functional.hpp | 35 + extern/boost/boost/asio/detail/future.hpp | 32 + extern/boost/boost/asio/detail/global.hpp | 52 + .../asio/detail/handler_alloc_helpers.hpp | 123 + .../asio/detail/handler_cont_helpers.hpp | 45 + .../boost/asio/detail/handler_tracking.hpp | 268 ++ .../asio/detail/handler_type_requirements.hpp | 555 +++ .../boost/boost/asio/detail/handler_work.hpp | 513 +++ extern/boost/boost/asio/detail/hash_map.hpp | 333 ++ .../detail/impl/buffer_sequence_adapter.ipp | 120 + .../boost/asio/detail/impl/descriptor_ops.ipp | 996 ++++ .../asio/detail/impl/dev_poll_reactor.hpp | 113 + .../asio/detail/impl/dev_poll_reactor.ipp | 471 ++ .../boost/asio/detail/impl/epoll_reactor.hpp | 111 + .../boost/asio/detail/impl/epoll_reactor.ipp | 828 ++++ .../impl/eventfd_select_interrupter.ipp | 173 + .../asio/detail/impl/handler_tracking.ipp | 400 ++ .../impl/io_uring_descriptor_service.ipp | 207 + .../detail/impl/io_uring_file_service.ipp | 142 + .../asio/detail/impl/io_uring_service.hpp | 114 + .../asio/detail/impl/io_uring_service.ipp | 916 ++++ .../impl/io_uring_socket_service_base.ipp | 251 + .../boost/asio/detail/impl/kqueue_reactor.hpp | 115 + .../boost/asio/detail/impl/kqueue_reactor.ipp | 610 +++ .../boost/asio/detail/impl/null_event.ipp | 76 + .../detail/impl/pipe_select_interrupter.ipp | 131 + .../boost/asio/detail/impl/posix_event.ipp | 65 + .../boost/asio/detail/impl/posix_mutex.ipp | 48 + .../detail/impl/posix_serial_port_service.ipp | 170 + .../boost/asio/detail/impl/posix_thread.ipp | 86 + .../boost/asio/detail/impl/posix_tss_ptr.ipp | 48 + .../impl/reactive_descriptor_service.ipp | 234 + .../impl/reactive_socket_service_base.ipp | 314 ++ .../detail/impl/resolver_service_base.ipp | 160 + .../boost/asio/detail/impl/scheduler.ipp | 677 +++ .../boost/asio/detail/impl/select_reactor.hpp | 126 + .../boost/asio/detail/impl/select_reactor.ipp | 402 ++ .../asio/detail/impl/service_registry.hpp | 95 + .../asio/detail/impl/service_registry.ipp | 199 + .../asio/detail/impl/signal_set_service.ipp | 828 ++++ .../boost/asio/detail/impl/socket_ops.ipp | 4046 +++++++++++++++++ .../detail/impl/socket_select_interrupter.ipp | 187 + .../detail/impl/strand_executor_service.hpp | 348 ++ .../detail/impl/strand_executor_service.ipp | 160 + .../boost/asio/detail/impl/strand_service.hpp | 88 + .../boost/asio/detail/impl/strand_service.ipp | 204 + .../boost/asio/detail/impl/thread_context.ipp | 37 + .../boost/asio/detail/impl/throw_error.ipp | 51 + .../asio/detail/impl/timer_queue_ptime.ipp | 99 + .../asio/detail/impl/timer_queue_set.ipp | 103 + .../boost/asio/detail/impl/win_event.ipp | 78 + .../detail/impl/win_iocp_file_service.ipp | 290 ++ .../detail/impl/win_iocp_handle_service.ipp | 621 +++ .../asio/detail/impl/win_iocp_io_context.hpp | 121 + .../asio/detail/impl/win_iocp_io_context.ipp | 616 +++ .../impl/win_iocp_serial_port_service.ipp | 202 + .../impl/win_iocp_socket_service_base.ipp | 823 ++++ .../boost/asio/detail/impl/win_mutex.ipp | 86 + .../detail/impl/win_object_handle_service.ipp | 454 ++ .../asio/detail/impl/win_static_mutex.ipp | 138 + .../boost/asio/detail/impl/win_thread.ipp | 152 + .../boost/asio/detail/impl/win_tss_ptr.ipp | 59 + .../detail/impl/winrt_timer_scheduler.hpp | 94 + .../detail/impl/winrt_timer_scheduler.ipp | 123 + .../boost/asio/detail/impl/winsock_init.ipp | 84 + .../boost/asio/detail/initiate_defer.hpp | 209 + .../boost/asio/detail/initiate_dispatch.hpp | 195 + .../boost/boost/asio/detail/initiate_post.hpp | 209 + .../boost/asio/detail/initiation_base.hpp | 64 + extern/boost/boost/asio/detail/io_control.hpp | 86 + .../boost/asio/detail/io_object_impl.hpp | 179 + .../detail/io_uring_descriptor_read_at_op.hpp | 197 + .../detail/io_uring_descriptor_read_op.hpp | 192 + .../detail/io_uring_descriptor_service.hpp | 689 +++ .../io_uring_descriptor_write_at_op.hpp | 191 + .../detail/io_uring_descriptor_write_op.hpp | 187 + .../asio/detail/io_uring_file_service.hpp | 263 ++ .../asio/detail/io_uring_null_buffers_op.hpp | 116 + .../boost/asio/detail/io_uring_operation.hpp | 86 + .../boost/asio/detail/io_uring_service.hpp | 321 ++ .../asio/detail/io_uring_socket_accept_op.hpp | 282 ++ .../detail/io_uring_socket_connect_op.hpp | 142 + .../asio/detail/io_uring_socket_recv_op.hpp | 207 + .../detail/io_uring_socket_recvfrom_op.hpp | 208 + .../detail/io_uring_socket_recvmsg_op.hpp | 194 + .../asio/detail/io_uring_socket_send_op.hpp | 193 + .../asio/detail/io_uring_socket_sendto_op.hpp | 196 + .../asio/detail/io_uring_socket_service.hpp | 631 +++ .../detail/io_uring_socket_service_base.hpp | 665 +++ .../boost/asio/detail/io_uring_wait_op.hpp | 114 + .../boost/asio/detail/is_buffer_sequence.hpp | 298 ++ .../boost/boost/asio/detail/is_executor.hpp | 128 + .../boost/asio/detail/keyword_tss_ptr.hpp | 72 + .../boost/asio/detail/kqueue_reactor.hpp | 273 ++ extern/boost/boost/asio/detail/limits.hpp | 21 + extern/boost/boost/asio/detail/memory.hpp | 128 + extern/boost/boost/asio/detail/mutex.hpp | 48 + .../boost/asio/detail/non_const_lvalue.hpp | 45 + .../boost/boost/asio/detail/noncopyable.hpp | 45 + extern/boost/boost/asio/detail/null_event.hpp | 108 + .../boost/asio/detail/null_fenced_block.hpp | 49 + .../boost/boost/asio/detail/null_global.hpp | 61 + extern/boost/boost/asio/detail/null_mutex.hpp | 62 + .../boost/boost/asio/detail/null_reactor.hpp | 85 + .../boost/asio/detail/null_signal_blocker.hpp | 71 + .../boost/asio/detail/null_socket_service.hpp | 521 +++ .../boost/asio/detail/null_static_mutex.hpp | 62 + .../boost/boost/asio/detail/null_thread.hpp | 69 + .../boost/boost/asio/detail/null_tss_ptr.hpp | 70 + .../boost/boost/asio/detail/object_pool.hpp | 173 + .../boost/asio/detail/old_win_sdk_compat.hpp | 216 + extern/boost/boost/asio/detail/op_queue.hpp | 164 + extern/boost/boost/asio/detail/operation.hpp | 40 + .../asio/detail/pipe_select_interrupter.hpp | 91 + .../boost/boost/asio/detail/pop_options.hpp | 157 + .../boost/boost/asio/detail/posix_event.hpp | 177 + .../asio/detail/posix_fd_set_adapter.hpp | 120 + .../boost/boost/asio/detail/posix_global.hpp | 82 + .../boost/boost/asio/detail/posix_mutex.hpp | 78 + .../asio/detail/posix_serial_port_service.hpp | 251 + .../asio/detail/posix_signal_blocker.hpp | 87 + .../boost/asio/detail/posix_static_mutex.hpp | 66 + .../boost/boost/asio/detail/posix_thread.hpp | 111 + .../boost/boost/asio/detail/posix_tss_ptr.hpp | 81 + .../boost/boost/asio/detail/push_options.hpp | 228 + .../detail/reactive_descriptor_service.hpp | 572 +++ .../asio/detail/reactive_null_buffers_op.hpp | 133 + .../asio/detail/reactive_socket_accept_op.hpp | 325 ++ .../detail/reactive_socket_connect_op.hpp | 164 + .../asio/detail/reactive_socket_recv_op.hpp | 199 + .../detail/reactive_socket_recvfrom_op.hpp | 205 + .../detail/reactive_socket_recvmsg_op.hpp | 186 + .../asio/detail/reactive_socket_send_op.hpp | 202 + .../asio/detail/reactive_socket_sendto_op.hpp | 196 + .../asio/detail/reactive_socket_service.hpp | 635 +++ .../detail/reactive_socket_service_base.hpp | 757 +++ .../boost/asio/detail/reactive_wait_op.hpp | 133 + extern/boost/boost/asio/detail/reactor.hpp | 56 + extern/boost/boost/asio/detail/reactor_op.hpp | 73 + .../boost/asio/detail/reactor_op_queue.hpp | 214 + .../boost/asio/detail/recycling_allocator.hpp | 116 + extern/boost/boost/asio/detail/regex_fwd.hpp | 35 + .../boost/asio/detail/resolve_endpoint_op.hpp | 142 + extern/boost/boost/asio/detail/resolve_op.hpp | 47 + .../boost/asio/detail/resolve_query_op.hpp | 152 + .../boost/asio/detail/resolver_service.hpp | 149 + .../asio/detail/resolver_service_base.hpp | 160 + extern/boost/boost/asio/detail/scheduler.hpp | 243 + .../boost/asio/detail/scheduler_operation.hpp | 80 + .../boost/asio/detail/scheduler_task.hpp | 51 + .../asio/detail/scheduler_thread_info.hpp | 42 + .../boost/boost/asio/detail/scoped_lock.hpp | 103 + extern/boost/boost/asio/detail/scoped_ptr.hpp | 89 + .../boost/asio/detail/select_interrupter.hpp | 48 + .../boost/asio/detail/select_reactor.hpp | 293 ++ .../boost/asio/detail/service_registry.hpp | 165 + .../boost/asio/detail/signal_blocker.hpp | 46 + .../boost/asio/detail/signal_handler.hpp | 92 + .../boost/boost/asio/detail/signal_init.hpp | 49 + extern/boost/boost/asio/detail/signal_op.hpp | 55 + .../boost/asio/detail/signal_set_service.hpp | 294 ++ .../boost/boost/asio/detail/socket_holder.hpp | 100 + extern/boost/boost/asio/detail/socket_ops.hpp | 377 ++ .../boost/boost/asio/detail/socket_option.hpp | 318 ++ .../asio/detail/socket_select_interrupter.hpp | 93 + .../boost/boost/asio/detail/socket_types.hpp | 429 ++ .../boost/asio/detail/source_location.hpp | 47 + .../boost/boost/asio/detail/static_mutex.hpp | 52 + extern/boost/boost/asio/detail/std_event.hpp | 185 + .../boost/asio/detail/std_fenced_block.hpp | 59 + extern/boost/boost/asio/detail/std_global.hpp | 67 + extern/boost/boost/asio/detail/std_mutex.hpp | 70 + .../boost/asio/detail/std_static_mutex.hpp | 78 + extern/boost/boost/asio/detail/std_thread.hpp | 68 + .../asio/detail/strand_executor_service.hpp | 175 + .../boost/asio/detail/strand_service.hpp | 146 + .../boost/boost/asio/detail/string_view.hpp | 49 + extern/boost/boost/asio/detail/thread.hpp | 60 + .../boost/asio/detail/thread_context.hpp | 53 + .../boost/boost/asio/detail/thread_group.hpp | 101 + .../boost/asio/detail/thread_info_base.hpp | 262 ++ .../boost/boost/asio/detail/throw_error.hpp | 64 + .../boost/asio/detail/throw_exception.hpp | 57 + .../boost/asio/detail/timed_cancel_op.hpp | 363 ++ .../boost/boost/asio/detail/timer_queue.hpp | 391 ++ .../boost/asio/detail/timer_queue_base.hpp | 70 + .../boost/asio/detail/timer_queue_ptime.hpp | 105 + .../boost/asio/detail/timer_queue_set.hpp | 68 + .../boost/asio/detail/timer_scheduler.hpp | 37 + .../boost/asio/detail/timer_scheduler_fwd.hpp | 44 + extern/boost/boost/asio/detail/tss_ptr.hpp | 71 + .../boost/boost/asio/detail/type_traits.hpp | 180 + extern/boost/boost/asio/detail/utility.hpp | 85 + .../boost/boost/asio/detail/wait_handler.hpp | 92 + extern/boost/boost/asio/detail/wait_op.hpp | 51 + extern/boost/boost/asio/detail/win_event.hpp | 166 + .../boost/asio/detail/win_fd_set_adapter.hpp | 151 + extern/boost/boost/asio/detail/win_global.hpp | 73 + .../asio/detail/win_iocp_file_service.hpp | 289 ++ .../asio/detail/win_iocp_handle_read_op.hpp | 121 + .../asio/detail/win_iocp_handle_service.hpp | 433 ++ .../asio/detail/win_iocp_handle_write_op.hpp | 116 + .../boost/asio/detail/win_iocp_io_context.hpp | 349 ++ .../asio/detail/win_iocp_null_buffers_op.hpp | 131 + .../boost/asio/detail/win_iocp_operation.hpp | 98 + .../asio/detail/win_iocp_overlapped_op.hpp | 102 + .../asio/detail/win_iocp_overlapped_ptr.hpp | 173 + .../detail/win_iocp_serial_port_service.hpp | 235 + .../asio/detail/win_iocp_socket_accept_op.hpp | 341 ++ .../detail/win_iocp_socket_connect_op.hpp | 140 + .../asio/detail/win_iocp_socket_recv_op.hpp | 128 + .../detail/win_iocp_socket_recvfrom_op.hpp | 137 + .../detail/win_iocp_socket_recvmsg_op.hpp | 129 + .../asio/detail/win_iocp_socket_send_op.hpp | 122 + .../asio/detail/win_iocp_socket_service.hpp | 682 +++ .../detail/win_iocp_socket_service_base.hpp | 831 ++++ .../asio/detail/win_iocp_thread_info.hpp | 36 + .../boost/asio/detail/win_iocp_wait_op.hpp | 132 + extern/boost/boost/asio/detail/win_mutex.hpp | 80 + .../asio/detail/win_object_handle_service.hpp | 196 + .../boost/asio/detail/win_static_mutex.hpp | 76 + extern/boost/boost/asio/detail/win_thread.hpp | 149 + .../boost/boost/asio/detail/win_tss_ptr.hpp | 81 + .../boost/boost/asio/detail/winapp_thread.hpp | 126 + .../boost/boost/asio/detail/wince_thread.hpp | 126 + .../boost/asio/detail/winrt_async_manager.hpp | 307 ++ .../boost/asio/detail/winrt_async_op.hpp | 67 + .../boost/asio/detail/winrt_resolve_op.hpp | 127 + .../asio/detail/winrt_resolver_service.hpp | 214 + .../asio/detail/winrt_timer_scheduler.hpp | 149 + .../boost/boost/asio/detail/winrt_utils.hpp | 108 + .../boost/boost/asio/detail/winsock_init.hpp | 130 + .../boost/asio/detail/work_dispatcher.hpp | 145 + .../boost/asio/detail/wrapped_handler.hpp | 197 + extern/boost/boost/asio/dispatch.hpp | 199 + extern/boost/boost/asio/error.hpp | 390 ++ extern/boost/boost/asio/execution.hpp | 33 + .../boost/boost/asio/execution/allocator.hpp | 280 ++ .../boost/asio/execution/any_executor.hpp | 1935 ++++++++ .../boost/asio/execution/bad_executor.hpp | 48 + .../boost/boost/asio/execution/blocking.hpp | 1362 ++++++ .../asio/execution/blocking_adaptation.hpp | 1082 +++++ extern/boost/boost/asio/execution/context.hpp | 193 + .../boost/boost/asio/execution/context_as.hpp | 192 + .../boost/boost/asio/execution/executor.hpp | 118 + .../asio/execution/impl/bad_executor.ipp | 42 + .../asio/execution/invocable_archetype.hpp | 45 + extern/boost/boost/asio/execution/mapping.hpp | 1004 ++++ .../boost/boost/asio/execution/occupancy.hpp | 186 + .../boost/asio/execution/outstanding_work.hpp | 755 +++ .../boost/asio/execution/prefer_only.hpp | 330 ++ .../boost/asio/execution/relationship.hpp | 753 +++ extern/boost/boost/asio/execution_context.hpp | 390 ++ extern/boost/boost/asio/executor.hpp | 365 ++ .../boost/boost/asio/executor_work_guard.hpp | 364 ++ extern/boost/boost/asio/file_base.hpp | 168 + .../boost/asio/generic/basic_endpoint.hpp | 191 + .../boost/asio/generic/datagram_protocol.hpp | 125 + .../boost/asio/generic/detail/endpoint.hpp | 135 + .../asio/generic/detail/impl/endpoint.ipp | 112 + .../boost/boost/asio/generic/raw_protocol.hpp | 123 + .../asio/generic/seq_packet_protocol.hpp | 124 + .../boost/asio/generic/stream_protocol.hpp | 129 + .../boost/asio/handler_continuation_hook.hpp | 56 + .../boost/asio/high_resolution_timer.hpp | 41 + extern/boost/boost/asio/immediate.hpp | 144 + .../asio/impl/any_completion_executor.ipp | 128 + .../boost/boost/asio/impl/any_io_executor.ipp | 136 + extern/boost/boost/asio/impl/append.hpp | 171 + extern/boost/boost/asio/impl/as_tuple.hpp | 278 ++ extern/boost/boost/asio/impl/awaitable.hpp | 1198 +++++ .../boost/asio/impl/buffered_read_stream.hpp | 406 ++ .../boost/asio/impl/buffered_write_stream.hpp | 386 ++ extern/boost/boost/asio/impl/cancel_after.hpp | 270 ++ extern/boost/boost/asio/impl/cancel_at.hpp | 270 ++ .../boost/asio/impl/cancellation_signal.ipp | 98 + extern/boost/boost/asio/impl/co_spawn.hpp | 459 ++ extern/boost/boost/asio/impl/connect.hpp | 705 +++ extern/boost/boost/asio/impl/connect_pipe.hpp | 75 + extern/boost/boost/asio/impl/connect_pipe.ipp | 151 + extern/boost/boost/asio/impl/consign.hpp | 146 + extern/boost/boost/asio/impl/deferred.hpp | 149 + extern/boost/boost/asio/impl/detached.hpp | 79 + extern/boost/boost/asio/impl/error.ipp | 130 + .../boost/asio/impl/execution_context.hpp | 79 + .../boost/asio/impl/execution_context.ipp | 84 + extern/boost/boost/asio/impl/executor.hpp | 319 ++ extern/boost/boost/asio/impl/executor.ipp | 45 + extern/boost/boost/asio/impl/io_context.hpp | 435 ++ extern/boost/boost/asio/impl/io_context.ipp | 178 + .../boost/asio/impl/multiple_exceptions.ipp | 47 + extern/boost/boost/asio/impl/prepend.hpp | 172 + extern/boost/boost/asio/impl/read.hpp | 904 ++++ extern/boost/boost/asio/impl/read_at.hpp | 564 +++ extern/boost/boost/asio/impl/read_until.hpp | 2670 +++++++++++ .../boost/boost/asio/impl/redirect_error.hpp | 289 ++ .../boost/asio/impl/serial_port_base.hpp | 61 + .../boost/asio/impl/serial_port_base.ipp | 556 +++ .../boost/boost/asio/impl/system_context.hpp | 36 + .../boost/boost/asio/impl/system_context.ipp | 94 + .../boost/boost/asio/impl/system_executor.hpp | 181 + extern/boost/boost/asio/impl/thread_pool.hpp | 279 ++ extern/boost/boost/asio/impl/thread_pool.ipp | 144 + .../boost/boost/asio/impl/use_awaitable.hpp | 303 ++ extern/boost/boost/asio/impl/use_future.hpp | 709 +++ extern/boost/boost/asio/impl/write.hpp | 782 ++++ extern/boost/boost/asio/impl/write_at.hpp | 482 ++ extern/boost/boost/asio/io_context.hpp | 1507 ++++++ extern/boost/boost/asio/io_context_strand.hpp | 398 ++ extern/boost/boost/asio/io_service.hpp | 35 + extern/boost/boost/asio/io_service_strand.hpp | 20 + extern/boost/boost/asio/ip/address.hpp | 283 ++ extern/boost/boost/asio/ip/address_v4.hpp | 423 ++ .../boost/asio/ip/address_v4_iterator.hpp | 158 + .../boost/boost/asio/ip/address_v4_range.hpp | 130 + extern/boost/boost/asio/ip/address_v6.hpp | 409 ++ .../boost/asio/ip/address_v6_iterator.hpp | 180 + .../boost/boost/asio/ip/address_v6_range.hpp | 126 + .../boost/boost/asio/ip/bad_address_cast.hpp | 65 + extern/boost/boost/asio/ip/basic_endpoint.hpp | 284 ++ extern/boost/boost/asio/ip/basic_resolver.hpp | 1114 +++++ .../boost/asio/ip/basic_resolver_entry.hpp | 115 + .../boost/asio/ip/basic_resolver_iterator.hpp | 190 + .../boost/asio/ip/basic_resolver_query.hpp | 262 ++ .../boost/asio/ip/basic_resolver_results.hpp | 309 ++ .../boost/boost/asio/ip/detail/endpoint.hpp | 143 + .../boost/asio/ip/detail/impl/endpoint.ipp | 197 + .../boost/asio/ip/detail/socket_option.hpp | 568 +++ extern/boost/boost/asio/ip/host_name.hpp | 44 + extern/boost/boost/asio/ip/icmp.hpp | 117 + extern/boost/boost/asio/ip/impl/address.hpp | 69 + extern/boost/boost/asio/ip/impl/address.ipp | 237 + .../boost/boost/asio/ip/impl/address_v4.hpp | 69 + .../boost/boost/asio/ip/impl/address_v4.ipp | 208 + .../boost/boost/asio/ip/impl/address_v6.hpp | 69 + .../boost/boost/asio/ip/impl/address_v6.ipp | 344 ++ .../boost/asio/ip/impl/basic_endpoint.hpp | 45 + extern/boost/boost/asio/ip/impl/host_name.ipp | 56 + .../boost/boost/asio/ip/impl/network_v4.hpp | 56 + .../boost/boost/asio/ip/impl/network_v4.ipp | 220 + .../boost/boost/asio/ip/impl/network_v6.hpp | 55 + .../boost/boost/asio/ip/impl/network_v6.ipp | 189 + extern/boost/boost/asio/ip/multicast.hpp | 193 + extern/boost/boost/asio/ip/network_v4.hpp | 259 ++ extern/boost/boost/asio/ip/network_v6.hpp | 233 + extern/boost/boost/asio/ip/resolver_base.hpp | 131 + .../boost/asio/ip/resolver_query_base.hpp | 45 + extern/boost/boost/asio/ip/tcp.hpp | 157 + extern/boost/boost/asio/ip/udp.hpp | 113 + extern/boost/boost/asio/ip/unicast.hpp | 72 + extern/boost/boost/asio/ip/v6_only.hpp | 71 + .../boost/asio/is_applicable_property.hpp | 63 + .../boost/asio/is_contiguous_iterator.hpp | 47 + extern/boost/boost/asio/is_executor.hpp | 48 + extern/boost/boost/asio/is_read_buffered.hpp | 61 + extern/boost/boost/asio/is_write_buffered.hpp | 61 + .../boost/boost/asio/local/basic_endpoint.hpp | 245 + .../boost/boost/asio/local/connect_pair.hpp | 103 + .../boost/asio/local/datagram_protocol.hpp | 82 + .../boost/asio/local/detail/endpoint.hpp | 141 + .../boost/asio/local/detail/impl/endpoint.ipp | 133 + .../boost/asio/local/seq_packet_protocol.hpp | 86 + .../boost/asio/local/stream_protocol.hpp | 92 + .../boost/boost/asio/multiple_exceptions.hpp | 54 + extern/boost/boost/asio/packaged_task.hpp | 68 + extern/boost/boost/asio/placeholders.hpp | 83 + .../boost/asio/posix/basic_descriptor.hpp | 775 ++++ .../asio/posix/basic_stream_descriptor.hpp | 561 +++ extern/boost/boost/asio/posix/descriptor.hpp | 39 + .../boost/asio/posix/descriptor_base.hpp | 92 + .../boost/asio/posix/stream_descriptor.hpp | 39 + extern/boost/boost/asio/post.hpp | 215 + extern/boost/boost/asio/prefer.hpp | 581 +++ extern/boost/boost/asio/prepend.hpp | 68 + extern/boost/boost/asio/query.hpp | 315 ++ .../boost/boost/asio/random_access_file.hpp | 37 + extern/boost/boost/asio/read.hpp | 1549 +++++++ extern/boost/boost/asio/read_at.hpp | 830 ++++ extern/boost/boost/asio/read_until.hpp | 3204 +++++++++++++ extern/boost/boost/asio/readable_pipe.hpp | 37 + .../boost/boost/asio/recycling_allocator.hpp | 140 + extern/boost/boost/asio/redirect_error.hpp | 106 + extern/boost/boost/asio/registered_buffer.hpp | 346 ++ extern/boost/boost/asio/require.hpp | 437 ++ extern/boost/boost/asio/require_concept.hpp | 347 ++ extern/boost/boost/asio/serial_port.hpp | 38 + extern/boost/boost/asio/serial_port_base.hpp | 169 + extern/boost/boost/asio/signal_set.hpp | 30 + extern/boost/boost/asio/signal_set_base.hpp | 173 + extern/boost/boost/asio/socket_base.hpp | 561 +++ .../boost/boost/asio/static_thread_pool.hpp | 33 + extern/boost/boost/asio/steady_timer.hpp | 39 + extern/boost/boost/asio/strand.hpp | 559 +++ extern/boost/boost/asio/stream_file.hpp | 37 + extern/boost/boost/asio/streambuf.hpp | 35 + extern/boost/boost/asio/system_context.hpp | 92 + extern/boost/boost/asio/system_executor.hpp | 673 +++ extern/boost/boost/asio/system_timer.hpp | 39 + extern/boost/boost/asio/this_coro.hpp | 269 ++ extern/boost/boost/asio/thread_pool.hpp | 965 ++++ extern/boost/boost/asio/time_traits.hpp | 88 + .../boost/asio/traits/equality_comparable.hpp | 102 + .../boost/asio/traits/execute_member.hpp | 106 + .../boost/boost/asio/traits/prefer_free.hpp | 106 + .../boost/boost/asio/traits/prefer_member.hpp | 106 + extern/boost/boost/asio/traits/query_free.hpp | 106 + .../boost/boost/asio/traits/query_member.hpp | 106 + .../traits/query_static_constexpr_member.hpp | 103 + .../asio/traits/require_concept_free.hpp | 106 + .../asio/traits/require_concept_member.hpp | 106 + .../boost/boost/asio/traits/require_free.hpp | 106 + .../boost/asio/traits/require_member.hpp | 106 + .../boost/boost/asio/traits/static_query.hpp | 104 + .../boost/asio/traits/static_require.hpp | 117 + .../asio/traits/static_require_concept.hpp | 118 + extern/boost/boost/asio/use_awaitable.hpp | 163 + extern/boost/boost/asio/use_future.hpp | 161 + extern/boost/boost/asio/uses_executor.hpp | 69 + extern/boost/boost/asio/version.hpp | 23 + extern/boost/boost/asio/wait_traits.hpp | 58 + .../asio/windows/basic_object_handle.hpp | 487 ++ .../asio/windows/basic_overlapped_handle.hpp | 457 ++ .../windows/basic_random_access_handle.hpp | 569 +++ .../asio/windows/basic_stream_handle.hpp | 553 +++ .../boost/asio/windows/object_handle.hpp | 40 + .../boost/asio/windows/overlapped_handle.hpp | 41 + .../boost/asio/windows/overlapped_ptr.hpp | 147 + .../asio/windows/random_access_handle.hpp | 39 + .../boost/asio/windows/stream_handle.hpp | 39 + extern/boost/boost/asio/writable_pipe.hpp | 37 + extern/boost/boost/asio/write.hpp | 1528 +++++++ extern/boost/boost/asio/write_at.hpp | 843 ++++ extern/boost/boost/assert/source_location.hpp | 46 +- extern/boost/boost/atomic/atomic.hpp | 18 +- extern/boost/boost/atomic/atomic_ref.hpp | 9 +- .../boost/atomic/detail/atomic_ref_impl.hpp | 8 +- .../boost/atomic/detail/bitwise_cast.hpp | 10 +- .../atomic/detail/caps_arch_gcc_aarch32.hpp | 9 +- .../atomic/detail/caps_arch_gcc_aarch64.hpp | 9 +- .../boost/atomic/detail/caps_arch_gcc_arm.hpp | 9 +- extern/boost/boost/atomic/detail/config.hpp | 53 - .../atomic/detail/core_arch_ops_gcc_x86.hpp | 147 +- .../atomic/detail/core_arch_ops_msvc_x86.hpp | 37 +- .../detail/core_operations_emulated.hpp | 25 +- .../atomic/detail/extra_fp_ops_emulated.hpp | 15 +- .../atomic/detail/extra_ops_emulated.hpp | 53 +- .../boost/boost/atomic/detail/float_sizes.hpp | 157 +- .../boost/atomic/detail/fp_ops_emulated.hpp | 5 +- extern/boost/boost/atomic/detail/futex.hpp | 53 +- extern/boost/boost/atomic/detail/pause.hpp | 7 + .../has_unique_object_representations.hpp | 2 +- .../atomic/detail/type_traits/remove_cv.hpp | 42 + .../boost/atomic/detail/wait_on_address.hpp | 3 +- .../boost/atomic/detail/wait_ops_emulated.hpp | 7 +- extern/boost/boost/atomic/ipc_atomic.hpp | 5 +- extern/boost/boost/atomic/ipc_atomic_ref.hpp | 9 +- extern/boost/boost/bind.hpp | 60 + extern/boost/boost/bind/bind.hpp | 2050 ++------- extern/boost/boost/bind/bind_mf2_cc.hpp | 228 - extern/boost/boost/bind/bind_mf_cc.hpp | 441 -- extern/boost/boost/bind/bind_template.hpp | 345 -- .../boost/boost/bind/{ => detail}/bind_cc.hpp | 40 +- .../boost/boost/bind/detail/bind_mf2_cc.hpp | 210 + extern/boost/boost/bind/detail/bind_mf_cc.hpp | 405 ++ .../boost/bind/detail/integer_sequence.hpp | 111 + .../boost/boost/bind/detail/result_traits.hpp | 1 + .../boost/bind/detail/tuple_for_each.hpp | 64 + extern/boost/boost/bind/mem_fn.hpp | 440 +- extern/boost/boost/bind/mem_fn_cc.hpp | 103 - extern/boost/boost/bind/mem_fn_template.hpp | 1047 ----- extern/boost/boost/bind/mem_fn_vw.hpp | 130 - extern/boost/boost/bind/placeholders.hpp | 19 +- extern/boost/boost/bind/std_placeholders.hpp | 6 - extern/boost/boost/bind/storage.hpp | 475 -- extern/boost/boost/blank.hpp | 106 + extern/boost/boost/blank_fwd.hpp | 22 + extern/boost/boost/chrono/config.hpp | 2 + .../chrono/detail/inlined/mac/chrono.hpp | 8 +- .../chrono/detail/is_evenly_divisible_by.hpp | 8 +- .../boost/chrono/detail/requires_cxx11.hpp | 23 + .../boost/chrono/detail/scan_keyword.hpp | 6 +- extern/boost/boost/chrono/duration.hpp | 16 +- extern/boost/boost/chrono/io/duration_get.hpp | 2 +- extern/boost/boost/chrono/io/duration_io.hpp | 6 +- extern/boost/boost/chrono/io/duration_put.hpp | 10 +- .../boost/boost/chrono/io/duration_units.hpp | 5 +- .../boost/boost/chrono/io/time_point_io.hpp | 4 +- .../chrono/io/utility/ios_base_state_ptr.hpp | 14 +- extern/boost/boost/chrono/io_v1/chrono_io.hpp | 6 +- extern/boost/boost/chrono/system_clocks.hpp | 1 + extern/boost/boost/chrono/time_point.hpp | 2 +- .../chrono/typeof/boost/chrono/chrono.hpp | 32 + extern/boost/boost/config/assert_cxx03.hpp | 2 +- extern/boost/boost/config/assert_cxx11.hpp | 5 +- extern/boost/boost/config/assert_cxx14.hpp | 2 +- extern/boost/boost/config/assert_cxx17.hpp | 8 +- extern/boost/boost/config/assert_cxx20.hpp | 2 +- extern/boost/boost/config/assert_cxx23.hpp | 41 + .../boost/boost/config/compiler/borland.hpp | 4 + extern/boost/boost/config/compiler/clang.hpp | 21 +- .../boost/config/compiler/clang_version.hpp | 20 +- .../boost/boost/config/compiler/codegear.hpp | 5 + .../boost/config/compiler/common_edg.hpp | 5 +- extern/boost/boost/config/compiler/cray.hpp | 1 + .../boost/config/compiler/digitalmars.hpp | 4 + extern/boost/boost/config/compiler/gcc.hpp | 16 +- .../boost/boost/config/compiler/gcc_xml.hpp | 6 +- extern/boost/boost/config/compiler/hp_acc.hpp | 5 + extern/boost/boost/config/compiler/intel.hpp | 1 + .../boost/config/compiler/metrowerks.hpp | 4 + extern/boost/boost/config/compiler/mpw.hpp | 4 + extern/boost/boost/config/compiler/nvcc.hpp | 3 + .../boost/boost/config/compiler/pathscale.hpp | 4 + .../boost/boost/config/compiler/sunpro_cc.hpp | 10 + extern/boost/boost/config/compiler/vacpp.hpp | 4 + .../boost/boost/config/compiler/visualc.hpp | 24 +- extern/boost/boost/config/compiler/xlcpp.hpp | 12 + .../boost/boost/config/compiler/xlcpp_zos.hpp | 2 + .../boost/config/detail/cxx_composite.hpp | 18 +- extern/boost/boost/config/detail/suffix.hpp | 105 +- .../boost/boost/config/header_deprecated.hpp | 2 +- .../boost/boost/config/stdlib/dinkumware.hpp | 32 + extern/boost/boost/config/stdlib/libcpp.hpp | 9 + .../boost/boost/config/stdlib/libstdcpp3.hpp | 45 +- .../boost/container/allocator_traits.hpp | 217 +- .../boost/boost/container/container_fwd.hpp | 20 +- .../container/detail/advanced_insert_int.hpp | 317 +- .../boost/container/detail/alloc_helpers.hpp | 12 +- .../container/detail/allocation_type.hpp | 14 +- .../detail/allocator_version_traits.hpp | 162 + .../container/detail/compare_functors.hpp | 134 + .../boost/container/detail/config_begin.hpp | 11 + .../boost/container/detail/config_end.hpp | 3 + .../container/detail/construct_in_place.hpp | 36 +- .../detail/container_or_allocator_rebind.hpp | 53 + .../container/detail/container_rebind.hpp | 163 + .../boost/container/detail/copy_move_algo.hpp | 914 +++- .../boost/container/detail/destroyers.hpp | 126 +- .../detail/dispatch_uses_allocator.hpp | 80 +- .../boost/container/detail/flat_tree.hpp | 1743 +++++++ .../boost/container/detail/is_container.hpp | 72 + .../detail/is_contiguous_container.hpp | 82 + .../boost/boost/container/detail/is_pair.hpp | 8 +- .../boost/container/detail/is_sorted.hpp | 57 + .../boost/boost/container/detail/iterator.hpp | 2 + .../boost/container/detail/iterators.hpp | 343 +- .../detail/minimal_char_traits_header.hpp | 32 + extern/boost/boost/container/detail/mpl.hpp | 8 +- .../detail/multiallocation_chain.hpp | 393 ++ .../boost/container/detail/next_capacity.hpp | 14 +- .../container/detail/node_alloc_holder.hpp | 619 +++ extern/boost/boost/container/detail/pair.hpp | 75 +- .../detail/pair_key_mapped_of_value.hpp | 55 + .../boost/container/detail/placement_new.hpp | 8 +- extern/boost/boost/container/detail/tree.hpp | 1471 ++++++ .../boost/container/detail/type_traits.hpp | 1 + .../boost/container/detail/value_init.hpp | 6 +- .../boost/container/detail/version_type.hpp | 8 +- .../boost/container/detail/workaround.hpp | 95 +- extern/boost/boost/container/flat_map.hpp | 3150 +++++++++++++ extern/boost/boost/container/map.hpp | 2330 ++++++++++ .../boost/boost/container/new_allocator.hpp | 33 +- extern/boost/boost/container/node_handle.hpp | 456 ++ extern/boost/boost/container/options.hpp | 165 +- .../boost/container/scoped_allocator.hpp | 164 +- extern/boost/boost/container/string.hpp | 3593 +++++++++++++++ .../boost/boost/container/throw_exception.hpp | 11 +- .../boost/boost/container/uses_allocator.hpp | 6 +- extern/boost/boost/container/vector.hpp | 1095 ++--- .../container_hash/detail/float_functions.hpp | 336 -- .../container_hash/detail/hash_float.hpp | 271 -- .../container_hash/detail/hash_integral.hpp | 146 + .../boost/container_hash/detail/hash_mix.hpp | 113 + .../container_hash/detail/hash_range.hpp | 408 ++ .../container_hash/detail/hash_tuple_like.hpp | 62 + .../boost/container_hash/detail/limits.hpp | 62 - .../boost/container_hash/detail/mulx.hpp | 79 + .../boost/boost/container_hash/extensions.hpp | 361 -- extern/boost/boost/container_hash/hash.hpp | 1077 ++--- .../boost/boost/container_hash/hash_fwd.hpp | 49 +- .../container_hash/is_contiguous_range.hpp | 98 + .../container_hash/is_described_class.hpp | 37 + .../boost/boost/container_hash/is_range.hpp | 41 + .../boost/container_hash/is_tuple_like.hpp | 36 + .../container_hash/is_unordered_range.hpp | 38 + extern/boost/boost/core/alloc_construct.hpp | 88 +- extern/boost/boost/core/allocator_access.hpp | 202 +- extern/boost/boost/core/allocator_traits.hpp | 112 + extern/boost/boost/core/bit.hpp | 954 ++++ extern/boost/boost/core/checked_delete.hpp | 32 +- .../boost/boost/core/{ => detail}/is_same.hpp | 21 +- .../boost/core/detail/lwt_unattended.hpp | 66 + .../boost/core/detail/sp_thread_pause.hpp | 71 + .../detail/sp_thread_sleep.hpp | 60 +- .../detail/sp_thread_yield.hpp | 44 +- .../detail/sp_win32_sleep.hpp | 23 +- extern/boost/boost/core/empty_value.hpp | 203 + extern/boost/boost/core/invoke_swap.hpp | 93 + extern/boost/boost/core/lightweight_test.hpp | 589 +++ .../boost/core/lightweight_test_trait.hpp | 91 + extern/boost/boost/core/noinit_adaptor.hpp | 2 + extern/boost/boost/core/noncopyable.hpp | 2 +- extern/boost/boost/core/pointer_traits.hpp | 10 +- extern/boost/boost/core/quick_exit.hpp | 59 + extern/boost/boost/core/ref.hpp | 43 +- extern/boost/boost/core/serialization.hpp | 131 + extern/boost/boost/core/snprintf.hpp | 173 + extern/boost/boost/core/swap.hpp | 70 - extern/boost/boost/core/type_name.hpp | 1186 +++++ extern/boost/boost/core/yield_primitives.hpp | 12 + extern/boost/boost/cstdfloat.hpp | 58 + extern/boost/boost/date_time.hpp | 17 + extern/boost/boost/date_time/date.hpp | 2 +- extern/boost/boost/date_time/date_facet.hpp | 766 ++++ .../boost/date_time/date_format_simple.hpp | 159 + .../boost/boost/date_time/date_formatting.hpp | 137 + .../date_time/date_formatting_limited.hpp | 121 + .../date_time/date_formatting_locales.hpp | 234 + .../date_time/date_generator_formatter.hpp | 265 ++ .../boost/date_time/date_generator_parser.hpp | 330 ++ .../boost/boost/date_time/date_names_put.hpp | 321 ++ extern/boost/boost/date_time/date_parsing.hpp | 342 ++ .../date_time/dst_transition_generators.hpp | 75 + extern/boost/boost/date_time/find_match.hpp | 42 + .../boost/date_time/format_date_parser.hpp | 724 +++ .../boost/date_time/gregorian/formatters.hpp | 162 + .../gregorian/formatters_limited.hpp | 81 + .../boost/date_time/gregorian/greg_date.hpp | 25 +- .../boost/date_time/gregorian/greg_facet.hpp | 374 ++ .../boost/date_time/gregorian/gregorian.hpp | 38 + .../date_time/gregorian/gregorian_io.hpp | 784 ++++ .../boost/date_time/gregorian/parsers.hpp | 110 + .../boost/date_time/gregorian_calendar.ipp | 4 +- extern/boost/boost/date_time/iso_format.hpp | 303 ++ .../boost/date_time/local_time/conversion.hpp | 34 + .../date_time/local_time/custom_time_zone.hpp | 168 + .../local_time/date_duration_operators.hpp | 115 + .../local_time/dst_transition_day_rules.hpp | 77 + .../date_time/local_time/local_date_time.hpp | 529 +++ .../boost/date_time/local_time/local_time.hpp | 24 + .../date_time/local_time/local_time_io.hpp | 187 + .../date_time/local_time/local_time_types.hpp | 52 + .../date_time/local_time/posix_time_zone.hpp | 475 ++ .../date_time/local_time/tz_database.hpp | 32 + .../boost/date_time/parse_format_base.hpp | 29 + .../boost/date_time/period_formatter.hpp | 200 + .../boost/boost/date_time/period_parser.hpp | 197 + .../boost/date_time/posix_time/conversion.hpp | 2 +- .../boost/date_time/posix_time/posix_time.hpp | 39 + .../date_time/posix_time/posix_time_io.hpp | 236 + .../posix_time/posix_time_legacy_io.hpp | 153 + .../date_time/posix_time/time_formatters.hpp | 289 ++ .../posix_time/time_formatters_limited.hpp | 212 + .../date_time/posix_time/time_parsers.hpp | 52 + .../date_time/special_values_formatter.hpp | 97 + .../boost/date_time/special_values_parser.hpp | 163 + .../boost/boost/date_time/string_convert.hpp | 32 + .../boost/date_time/string_parse_tree.hpp | 281 ++ .../boost/date_time/strings_from_facet.hpp | 127 + extern/boost/boost/date_time/time_facet.hpp | 1370 ++++++ .../date_time/time_formatting_streams.hpp | 122 + extern/boost/boost/date_time/time_parsing.hpp | 339 ++ .../boost/boost/date_time/time_zone_base.hpp | 100 + .../boost/boost/date_time/time_zone_names.hpp | 98 + extern/boost/boost/date_time/tz_db_base.hpp | 397 ++ extern/boost/boost/describe/bases.hpp | 50 + extern/boost/boost/describe/detail/config.hpp | 40 + .../boost/boost/describe/detail/cx_streq.hpp | 30 + extern/boost/boost/describe/detail/void_t.hpp | 32 + extern/boost/boost/describe/members.hpp | 161 + extern/boost/boost/describe/modifiers.hpp | 33 + extern/boost/boost/detail/atomic_count.hpp | 21 + .../boost/boost/detail/basic_pointerbuf.hpp | 9 +- extern/boost/boost/detail/container_fwd.hpp | 157 - extern/boost/boost/detail/lcast_precision.hpp | 103 +- .../boost/boost/detail/lightweight_main.hpp | 36 + .../lightweight_test.hpp} | 8 +- .../boost/detail/no_exceptions_support.hpp | 21 + .../boost/boost/detail/templated_streams.hpp | 74 + extern/boost/boost/exception/all.hpp | 27 + .../exception/current_exception_cast.hpp | 2 +- .../detail/clone_current_exception.hpp | 2 +- .../exception/detail/error_info_impl.hpp | 2 +- .../boost/exception/detail/exception_ptr.hpp | 32 +- .../exception/detail/is_output_streamable.hpp | 2 +- .../exception/detail/object_hex_dump.hpp | 2 +- .../boost/exception/detail/requires_cxx11.hpp | 24 + .../boost/exception/detail/type_info.hpp | 2 +- .../exception/diagnostic_information.hpp | 8 +- .../boost/exception/errinfo_api_function.hpp | 22 + .../boost/boost/exception/errinfo_at_line.hpp | 18 + .../boost/boost/exception/errinfo_errno.hpp | 51 + .../boost/exception/errinfo_file_handle.hpp | 20 + .../boost/exception/errinfo_file_name.hpp | 26 + .../exception/errinfo_file_open_mode.hpp | 26 + .../exception/errinfo_nested_exception.hpp | 18 + .../exception/errinfo_type_info_name.hpp | 23 + extern/boost/boost/exception/error_info.hpp | 9 + extern/boost/boost/exception/exception.hpp | 2 +- .../boost/boost/exception/get_error_info.hpp | 2 +- extern/boost/boost/exception/info.hpp | 2 +- extern/boost/boost/exception/info_tuple.hpp | 106 + extern/boost/boost/exception/to_string.hpp | 4 +- .../boost/boost/exception/to_string_stub.hpp | 2 +- extern/boost/boost/function.hpp | 66 +- .../function/detail/function_iterate.hpp | 16 - .../function/detail/gen_maybe_include.pl | 39 - .../boost/function/detail/maybe_include.hpp | 369 -- .../boost/boost/function/detail/prologue.hpp | 26 - extern/boost/boost/function/function0.hpp | 4 +- extern/boost/boost/function/function1.hpp | 4 +- extern/boost/boost/function/function10.hpp | 12 - extern/boost/boost/function/function2.hpp | 4 +- extern/boost/boost/function/function3.hpp | 12 - extern/boost/boost/function/function4.hpp | 12 - extern/boost/boost/function/function5.hpp | 12 - extern/boost/boost/function/function6.hpp | 12 - extern/boost/boost/function/function7.hpp | 12 - extern/boost/boost/function/function8.hpp | 12 - extern/boost/boost/function/function9.hpp | 12 - extern/boost/boost/function/function_base.hpp | 285 +- extern/boost/boost/function/function_fwd.hpp | 77 +- .../boost/function/function_template.hpp | 864 ++-- extern/boost/boost/functional.hpp | 7 - extern/boost/boost/functional/hash_fwd.hpp | 6 + .../boost/boost/integer/common_factor_ct.hpp | 102 + extern/boost/boost/integer/static_log2.hpp | 126 - .../boost/interprocess/creation_tags.hpp | 85 + .../boost/interprocess/detail/atomic.hpp | 674 +++ .../interprocess/detail/char_wchar_holder.hpp | 127 + .../interprocess/detail/config_begin.hpp | 50 + .../boost/interprocess/detail/config_end.hpp | 16 + .../detail/config_external_begin.hpp | 23 + .../detail/config_external_end.hpp | 12 + .../detail/intermodule_singleton_common.hpp | 505 ++ .../boost/interprocess/detail/min_max.hpp | 44 + .../boost/boost/interprocess/detail/mpl.hpp | 122 + .../interprocess/detail/os_file_functions.hpp | 856 ++++ .../detail/os_thread_functions.hpp | 669 +++ .../detail/shared_dir_helpers.hpp | 258 ++ .../boost/interprocess/detail/simple_swap.hpp | 29 + .../boost/interprocess/detail/std_fwd.hpp | 57 + .../boost/interprocess/detail/timed_utils.hpp | 276 ++ .../boost/interprocess/detail/type_traits.hpp | 162 + .../boost/interprocess/detail/utilities.hpp | 213 + .../boost/interprocess/detail/win32_api.hpp | 1891 ++++++++ .../detail/windows_intermodule_singleton.hpp | 315 ++ .../boost/interprocess/detail/workaround.hpp | 265 ++ extern/boost/boost/interprocess/errors.hpp | 246 + .../boost/boost/interprocess/exceptions.hpp | 111 + .../boost/interprocess/interprocess_fwd.hpp | 516 +++ .../boost/interprocess/mapped_region.hpp | 922 ++++ .../boost/boost/interprocess/permissions.hpp | 136 + .../interprocess/shared_memory_object.hpp | 514 +++ .../interprocess/streams/bufferstream.hpp | 491 ++ .../sync/detail/common_algorithms.hpp | 98 + .../boost/interprocess/sync/lock_options.hpp | 55 + .../boost/interprocess/sync/scoped_lock.hpp | 410 ++ .../boost/interprocess/sync/spin/mutex.hpp | 117 + .../boost/interprocess/sync/spin/wait.hpp | 185 + .../interprocess/sync/windows/sync_utils.hpp | 278 ++ .../sync/windows/winapi_mutex_wrapper.hpp | 135 + .../sync/windows/winapi_semaphore_wrapper.hpp | 169 + .../sync/windows/winapi_wrapper_common.hpp | 88 + .../boost/boost/interprocess/timed_utils.hpp | 189 + extern/boost/boost/intrusive/avl_set_hook.hpp | 293 ++ extern/boost/boost/intrusive/avltree.hpp | 587 +++ .../boost/intrusive/avltree_algorithms.hpp | 727 +++ extern/boost/boost/intrusive/bs_set_hook.hpp | 288 ++ extern/boost/boost/intrusive/bstree.hpp | 2237 +++++++++ .../boost/intrusive/bstree_algorithms.hpp | 2103 +++++++++ .../intrusive/circular_slist_algorithms.hpp | 475 ++ .../boost/intrusive/detail/algo_type.hpp | 53 + .../boost/intrusive/detail/algorithm.hpp | 16 +- .../intrusive/detail/array_initializer.hpp | 97 + .../boost/boost/intrusive/detail/assert.hpp | 45 + .../boost/intrusive/detail/avltree_node.hpp | 193 + .../detail/bstree_algorithms_base.hpp | 182 + .../detail/common_slist_algorithms.hpp | 267 ++ .../detail/default_header_holder.hpp | 70 + .../intrusive/detail/ebo_functor_holder.hpp | 292 ++ .../intrusive/detail/empty_node_checker.hpp | 44 + .../boost/intrusive/detail/equal_to_value.hpp | 50 + .../intrusive/detail/exception_disposer.hpp | 59 + .../intrusive/detail/function_detector.hpp | 92 + .../boost/intrusive/detail/generic_hook.hpp | 222 + .../intrusive/detail/get_value_traits.hpp | 222 + .../boost/intrusive/detail/hash_combine.hpp | 54 + .../boost/boost/intrusive/detail/hash_mix.hpp | 130 + .../boost/intrusive/detail/hook_traits.hpp | 191 + .../boost/intrusive/detail/iiterator.hpp | 122 + .../detail/is_stateful_value_traits.hpp | 81 + .../boost/boost/intrusive/detail/iterator.hpp | 36 +- .../intrusive/detail/key_nodeptr_comp.hpp | 125 + extern/boost/boost/intrusive/detail/math.hpp | 242 + .../detail/minimal_less_equal_header.hpp | 30 + extern/boost/boost/intrusive/detail/mpl.hpp | 6 + .../intrusive/detail/node_cloner_disposer.hpp | 105 + .../boost/intrusive/detail/node_holder.hpp | 35 + .../intrusive/detail/parent_from_member.hpp | 110 + .../boost/intrusive/detail/rbtree_node.hpp | 205 + .../intrusive/detail/simple_disposers.hpp | 52 + .../boost/intrusive/detail/size_holder.hpp | 91 + .../boost/intrusive/detail/slist_iterator.hpp | 144 + .../boost/intrusive/detail/slist_node.hpp | 64 + .../boost/intrusive/detail/tree_iterator.hpp | 184 + .../boost/intrusive/detail/tree_node.hpp | 80 + .../intrusive/detail/tree_value_compare.hpp | 186 + extern/boost/boost/intrusive/detail/twin.hpp | 49 + .../boost/boost/intrusive/detail/uncast.hpp | 55 + .../boost/intrusive/detail/value_functors.hpp | 10 + .../boost/intrusive/detail/workaround.hpp | 59 +- .../boost/boost/intrusive/intrusive_fwd.hpp | 768 ++++ .../intrusive/linear_slist_algorithms.hpp | 422 ++ extern/boost/boost/intrusive/link_mode.hpp | 63 + extern/boost/boost/intrusive/options.hpp | 278 ++ extern/boost/boost/intrusive/pack_options.hpp | 8 +- .../boost/intrusive/parent_from_member.hpp | 49 + .../boost/intrusive/pointer_plus_bits.hpp | 112 + extern/boost/boost/intrusive/rbtree.hpp | 590 +++ .../boost/intrusive/rbtree_algorithms.hpp | 622 +++ extern/boost/boost/intrusive/set_hook.hpp | 296 ++ extern/boost/boost/intrusive/sgtree.hpp | 1072 +++++ .../boost/intrusive/sgtree_algorithms.hpp | 420 ++ extern/boost/boost/intrusive/slist.hpp | 2246 +++++++++ extern/boost/boost/intrusive/slist_hook.hpp | 298 ++ extern/boost/boost/intrusive/splaytree.hpp | 665 +++ .../boost/intrusive/splaytree_algorithms.hpp | 756 +++ extern/boost/boost/io/ios_state.hpp | 4 +- .../detail/facade_iterator_category.hpp | 21 +- extern/boost/boost/iterator/is_iterator.hpp | 148 + .../boost/iterator/iterator_concepts.hpp | 4 +- .../boost/boost/iterator/iterator_facade.hpp | 185 +- .../boost/boost/iterator/minimum_category.hpp | 95 + extern/boost/boost/lexical_cast.hpp | 21 +- .../boost/lexical_cast/bad_lexical_cast.hpp | 20 +- .../boost/lexical_cast/detail/buffer_view.hpp | 59 + .../lexical_cast/detail/converter_lexical.hpp | 252 +- .../detail/converter_lexical_streams.hpp | 1198 +++-- .../lexical_cast/detail/converter_numeric.hpp | 177 +- .../boost/lexical_cast/detail/inf_nan.hpp | 57 +- .../lexical_cast/detail/is_character.hpp | 47 +- .../detail/lcast_basic_unlockedbuf.hpp | 73 + .../detail/lcast_char_constants.hpp | 2 +- .../detail/lcast_unsigned_converters.hpp | 39 +- .../boost/lexical_cast/detail/widest_char.hpp | 16 +- .../lexical_cast/try_lexical_convert.hpp | 181 +- extern/boost/boost/limits.hpp | 24 +- extern/boost/boost/math/ccmath/abs.hpp | 89 + .../boost/boost/math/ccmath/detail/config.hpp | 52 + extern/boost/boost/math/ccmath/isinf.hpp | 49 + extern/boost/boost/math/ccmath/isnan.hpp | 42 + extern/boost/boost/math/ccmath/ldexp.hpp | 81 + .../math/constants/calculate_constants.hpp | 1 - .../boost/boost/math/constants/constants.hpp | 26 +- .../boost/math/cstdfloat/cstdfloat_cmath.hpp | 1002 ++++ .../math/cstdfloat/cstdfloat_complex.hpp | 38 + .../math/cstdfloat/cstdfloat_complex_std.hpp | 813 ++++ .../math/cstdfloat/cstdfloat_iostream.hpp | 822 ++++ .../boost/math/cstdfloat/cstdfloat_limits.hpp | 87 + .../boost/math/cstdfloat/cstdfloat_types.hpp | 441 ++ .../boost/math/policies/error_handling.hpp | 148 +- extern/boost/boost/math/policies/policy.hpp | 94 +- .../boost/math/special_functions/acosh.hpp | 4 +- .../boost/math/special_functions/asinh.hpp | 4 +- .../boost/math/special_functions/atanh.hpp | 32 +- .../math/special_functions/bernoulli.hpp | 26 +- .../boost/math/special_functions/cos_pi.hpp | 2 +- .../detail/bernoulli_details.hpp | 134 +- .../math/special_functions/detail/erf_inv.hpp | 142 +- .../special_functions/detail/fp_traits.hpp | 12 +- .../special_functions/detail/gamma_inva.hpp | 40 +- .../detail/igamma_inverse.hpp | 59 +- .../special_functions/detail/lgamma_small.hpp | 2 +- .../special_functions/detail/polygamma.hpp | 46 +- .../detail/unchecked_bernoulli.hpp | 1098 +++-- .../detail/unchecked_factorial.hpp | 662 ++- .../boost/math/special_functions/digamma.hpp | 104 +- .../boost/math/special_functions/erf.hpp | 169 +- .../boost/math/special_functions/expm1.hpp | 32 +- .../math/special_functions/factorials.hpp | 10 +- .../math/special_functions/fpclassify.hpp | 8 +- .../boost/math/special_functions/gamma.hpp | 248 +- .../boost/math/special_functions/hypot.hpp | 8 +- .../boost/math/special_functions/lanczos.hpp | 145 +- .../boost/math/special_functions/log1p.hpp | 118 +- .../boost/math/special_functions/math_fwd.hpp | 764 ++-- .../boost/math/special_functions/next.hpp | 77 +- .../boost/math/special_functions/pow.hpp | 16 +- .../boost/math/special_functions/powm1.hpp | 21 +- .../boost/math/special_functions/sin_pi.hpp | 4 +- .../boost/math/special_functions/sqrt1pm1.hpp | 2 +- .../boost/math/special_functions/trigamma.hpp | 10 +- .../boost/math/special_functions/trunc.hpp | 146 +- .../boost/math/special_functions/zeta.hpp | 128 +- extern/boost/boost/math/tools/atomic.hpp | 4 +- .../boost/boost/math/tools/big_constant.hpp | 6 +- extern/boost/boost/math/tools/config.hpp | 258 +- .../boost/math/tools/convert_from_string.hpp | 39 +- .../math/tools/detail/rational_horner1_10.hpp | 18 +- .../math/tools/detail/rational_horner1_11.hpp | 20 +- .../math/tools/detail/rational_horner1_12.hpp | 22 +- .../math/tools/detail/rational_horner1_13.hpp | 24 +- .../math/tools/detail/rational_horner1_14.hpp | 26 +- .../math/tools/detail/rational_horner1_15.hpp | 28 +- .../math/tools/detail/rational_horner1_16.hpp | 30 +- .../math/tools/detail/rational_horner1_17.hpp | 32 +- .../math/tools/detail/rational_horner1_18.hpp | 34 +- .../math/tools/detail/rational_horner1_19.hpp | 36 +- .../math/tools/detail/rational_horner1_2.hpp | 2 +- .../math/tools/detail/rational_horner1_20.hpp | 38 +- .../math/tools/detail/rational_horner1_3.hpp | 4 +- .../math/tools/detail/rational_horner1_4.hpp | 6 +- .../math/tools/detail/rational_horner1_5.hpp | 8 +- .../math/tools/detail/rational_horner1_6.hpp | 10 +- .../math/tools/detail/rational_horner1_7.hpp | 12 +- .../math/tools/detail/rational_horner1_8.hpp | 14 +- .../math/tools/detail/rational_horner1_9.hpp | 16 +- .../math/tools/detail/rational_horner2_10.hpp | 12 +- .../math/tools/detail/rational_horner2_11.hpp | 14 +- .../math/tools/detail/rational_horner2_12.hpp | 16 +- .../math/tools/detail/rational_horner2_13.hpp | 18 +- .../math/tools/detail/rational_horner2_14.hpp | 20 +- .../math/tools/detail/rational_horner2_15.hpp | 22 +- .../math/tools/detail/rational_horner2_16.hpp | 24 +- .../math/tools/detail/rational_horner2_17.hpp | 26 +- .../math/tools/detail/rational_horner2_18.hpp | 28 +- .../math/tools/detail/rational_horner2_19.hpp | 30 +- .../math/tools/detail/rational_horner2_20.hpp | 32 +- .../math/tools/detail/rational_horner2_5.hpp | 2 +- .../math/tools/detail/rational_horner2_6.hpp | 4 +- .../math/tools/detail/rational_horner2_7.hpp | 6 +- .../math/tools/detail/rational_horner2_8.hpp | 8 +- .../math/tools/detail/rational_horner2_9.hpp | 10 +- .../math/tools/detail/rational_horner3_10.hpp | 12 +- .../math/tools/detail/rational_horner3_11.hpp | 14 +- .../math/tools/detail/rational_horner3_12.hpp | 16 +- .../math/tools/detail/rational_horner3_13.hpp | 18 +- .../math/tools/detail/rational_horner3_14.hpp | 20 +- .../math/tools/detail/rational_horner3_15.hpp | 22 +- .../math/tools/detail/rational_horner3_16.hpp | 24 +- .../math/tools/detail/rational_horner3_17.hpp | 26 +- .../math/tools/detail/rational_horner3_18.hpp | 28 +- .../math/tools/detail/rational_horner3_19.hpp | 30 +- .../math/tools/detail/rational_horner3_20.hpp | 32 +- .../math/tools/detail/rational_horner3_5.hpp | 2 +- .../math/tools/detail/rational_horner3_6.hpp | 4 +- .../math/tools/detail/rational_horner3_7.hpp | 6 +- .../math/tools/detail/rational_horner3_8.hpp | 8 +- .../math/tools/detail/rational_horner3_9.hpp | 10 +- .../math/tools/is_constant_evaluated.hpp | 51 + extern/boost/boost/math/tools/mp.hpp | 24 +- extern/boost/boost/math/tools/nothrow.hpp | 27 + extern/boost/boost/math/tools/precision.hpp | 12 +- extern/boost/boost/math/tools/promotion.hpp | 151 +- extern/boost/boost/math/tools/rational.hpp | 24 +- extern/boost/boost/math/tools/roots.hpp | 108 +- extern/boost/boost/math/tools/series.hpp | 2 +- .../boost/math/tools/throw_exception.hpp | 23 +- .../boost/boost/math/tools/toms748_solve.hpp | 16 +- extern/boost/boost/math/tools/traits.hpp | 12 + extern/boost/boost/move/adl_move_swap.hpp | 10 +- .../boost/boost/move/algo/adaptive_merge.hpp | 8 +- .../boost/boost/move/algo/adaptive_sort.hpp | 655 +++ .../move/algo/detail/adaptive_sort_merge.hpp | 103 +- .../boost/boost/move/algo/detail/basic_op.hpp | 21 +- .../boost/move/algo/detail/heap_sort.hpp | 5 +- extern/boost/boost/move/algo/detail/merge.hpp | 116 +- .../boost/boost/move/algo/detail/pdqsort.hpp | 345 ++ .../boost/boost/move/algo/detail/search.hpp | 79 + extern/boost/boost/move/algo/move.hpp | 9 +- extern/boost/boost/move/algo/predicate.hpp | 22 +- extern/boost/boost/move/core.hpp | 6 +- extern/boost/boost/move/default_delete.hpp | 11 +- .../boost/boost/move/detail/config_begin.hpp | 1 - .../move/detail/iterator_to_raw_pointer.hpp | 6 +- extern/boost/boost/move/detail/launder.hpp | 53 + extern/boost/boost/move/detail/meta_utils.hpp | 10 +- .../boost/boost/move/detail/move_helpers.hpp | 48 +- .../boost/move/detail/reverse_iterator.hpp | 56 +- .../boost/move/detail/to_raw_pointer.hpp | 2 +- .../boost/boost/move/detail/type_traits.hpp | 117 +- extern/boost/boost/move/detail/workaround.hpp | 87 +- extern/boost/boost/move/iterator.hpp | 44 +- extern/boost/boost/move/make_unique.hpp | 248 - extern/boost/boost/move/unique_ptr.hpp | 131 +- extern/boost/boost/move/utility.hpp | 4 +- extern/boost/boost/move/utility_core.hpp | 14 +- extern/boost/boost/mp11.hpp | 22 + extern/boost/boost/mp11/algorithm.hpp | 1386 ++++++ extern/boost/boost/mp11/bind.hpp | 120 + extern/boost/boost/mp11/detail/config.hpp | 149 + extern/boost/boost/mp11/detail/mp_append.hpp | 321 ++ extern/boost/boost/mp11/detail/mp_copy_if.hpp | 48 + extern/boost/boost/mp11/detail/mp_count.hpp | 147 + extern/boost/boost/mp11/detail/mp_defer.hpp | 119 + extern/boost/boost/mp11/detail/mp_fold.hpp | 166 + extern/boost/boost/mp11/detail/mp_front.hpp | 50 + extern/boost/boost/mp11/detail/mp_is_list.hpp | 39 + .../boost/mp11/detail/mp_is_value_list.hpp | 41 + extern/boost/boost/mp11/detail/mp_list.hpp | 24 + extern/boost/boost/mp11/detail/mp_list_v.hpp | 27 + .../boost/boost/mp11/detail/mp_map_find.hpp | 87 + .../boost/mp11/detail/mp_min_element.hpp | 51 + extern/boost/boost/mp11/detail/mp_plus.hpp | 84 + .../boost/boost/mp11/detail/mp_remove_if.hpp | 48 + extern/boost/boost/mp11/detail/mp_rename.hpp | 54 + extern/boost/boost/mp11/detail/mp_value.hpp | 25 + extern/boost/boost/mp11/detail/mp_void.hpp | 32 + .../boost/boost/mp11/detail/mp_with_index.hpp | 385 ++ extern/boost/boost/mp11/function.hpp | 222 + extern/boost/boost/mp11/integer_sequence.hpp | 121 + extern/boost/boost/mp11/integral.hpp | 51 + extern/boost/boost/mp11/list.hpp | 481 ++ extern/boost/boost/mp11/map.hpp | 119 + extern/boost/boost/mp11/set.hpp | 188 + extern/boost/boost/mp11/tuple.hpp | 183 + extern/boost/boost/mp11/utility.hpp | 169 + extern/boost/boost/mp11/version.hpp | 16 + extern/boost/boost/mpl/and.hpp | 2 +- extern/boost/boost/mpl/assert.hpp | 12 +- .../boost/mpl/aux_/config/dependent_nttp.hpp | 35 - extern/boost/boost/mpl/aux_/empty_impl.hpp | 43 + extern/boost/boost/mpl/aux_/find_if_pred.hpp | 31 + extern/boost/boost/mpl/aux_/front_impl.hpp | 41 + extern/boost/boost/mpl/aux_/insert_impl.hpp | 68 + .../boost/mpl/aux_/insert_range_impl.hpp | 80 + .../boost/boost/mpl/aux_/integral_wrapper.hpp | 3 +- extern/boost/boost/mpl/aux_/iter_apply.hpp | 47 + .../boost/mpl/aux_/iter_fold_if_impl.hpp | 210 + .../boost/boost/mpl/aux_/iter_push_front.hpp | 36 + .../aux_/preprocessed/gcc/template_arity.hpp | 2 +- extern/boost/boost/mpl/aux_/size_impl.hpp | 52 + .../boost/boost/mpl/aux_/template_arity.hpp | 2 +- extern/boost/boost/mpl/aux_/yes_no.hpp | 3 +- extern/boost/boost/mpl/empty.hpp | 39 + extern/boost/boost/mpl/find_if.hpp | 50 + extern/boost/boost/mpl/front.hpp | 39 + extern/boost/boost/mpl/insert.hpp | 41 + extern/boost/boost/mpl/insert_fwd.hpp | 24 + extern/boost/boost/mpl/insert_range.hpp | 41 + extern/boost/boost/mpl/insert_range_fwd.hpp | 24 + extern/boost/boost/mpl/iter_fold_if.hpp | 117 + extern/boost/boost/mpl/max_element.hpp | 72 + extern/boost/boost/mpl/or.hpp | 2 +- extern/boost/boost/mpl/same_as.hpp | 55 + extern/boost/boost/mpl/size.hpp | 42 + extern/boost/boost/mpl/size_t.hpp | 25 + extern/boost/boost/mpl/size_t_fwd.hpp | 28 + extern/boost/boost/mpl/sizeof.hpp | 36 + .../boost/multiprecision/cpp_dec_float.hpp | 239 +- .../multiprecision/cpp_int/cpp_int_config.hpp | 161 + .../boost/multiprecision/detail/assert.hpp | 6 +- .../detail/check_cpp11_config.hpp | 64 + .../multiprecision/detail/default_ops.hpp | 129 +- .../boost/multiprecision/detail/digits.hpp | 4 +- .../detail/float128_functions.hpp | 26 +- .../detail/functions/constants.hpp | 2 +- .../multiprecision/detail/functions/pow.hpp | 2 +- .../multiprecision/detail/functions/trig.hpp | 4 +- .../multiprecision/detail/functions/trunc.hpp | 22 +- .../detail/generic_interconvert.hpp | 9 +- .../boost/multiprecision/detail/hash.hpp | 6 +- .../boost/multiprecision/detail/min_max.hpp | 24 +- .../boost/multiprecision/detail/no_et_ops.hpp | 10 +- .../detail/no_exceptions_support.hpp | 2 +- .../multiprecision/detail/number_base.hpp | 167 +- .../multiprecision/detail/number_compare.hpp | 6 +- .../boost/multiprecision/detail/precision.hpp | 6 +- .../detail/standalone_config.hpp | 51 +- .../multiprecision/detail/ublas_interop.hpp | 4 +- extern/boost/boost/multiprecision/fwd.hpp | 268 ++ extern/boost/boost/multiprecision/number.hpp | 66 +- .../traits/explicit_conversion.hpp | 8 +- .../multiprecision/traits/is_backend.hpp | 4 +- .../traits/is_restricted_conversion.hpp | 28 +- .../traits/std_integer_traits.hpp | 36 +- .../traits/transcendental_reduction_type.hpp | 6 +- extern/boost/boost/next_prior.hpp | 47 +- extern/boost/boost/none_t.hpp | 8 + .../conversion/detail/int_float_mixture.hpp | 10 +- .../conversion/detail/sign_mixture.hpp | 10 +- .../conversion/detail/udt_builtin_mixture.hpp | 10 +- .../detail/old_optional_implementation.hpp | 9 +- .../boost/optional/detail/optional_config.hpp | 6 +- .../boost/optional/detail/optional_hash.hpp | 49 + .../detail/optional_reference_spec.hpp | 4 +- .../boost/optional/detail/optional_relops.hpp | 2 +- .../boost/optional/detail/optional_swap.hpp | 12 +- .../optional_trivially_copyable_base.hpp | 6 +- extern/boost/boost/optional/optional.hpp | 9 +- extern/boost/boost/predef/detail/test_def.h | 71 + extern/boost/boost/predef/library/std.h | 1 + extern/boost/boost/predef/library/std/msvc.h | 53 + extern/boost/boost/predef/make.h | 4 + extern/boost/boost/predef/os/vms.h | 2 +- extern/boost/boost/predef/version.h | 2 +- .../boost/preprocessor/variadic/has_opt.hpp | 10 +- extern/boost/boost/progress.hpp | 157 + extern/boost/boost/ratio/config.hpp | 86 +- extern/boost/boost/ratio/detail/gcd_lcm.hpp | 53 + .../ratio/detail/is_evenly_divisible_by.hpp | 32 + extern/boost/boost/ratio/detail/is_ratio.hpp | 28 + extern/boost/boost/ratio/detail/mpl/abs.hpp | 89 - extern/boost/boost/ratio/detail/mpl/gcd.hpp | 124 - extern/boost/boost/ratio/detail/mpl/lcm.hpp | 126 - extern/boost/boost/ratio/detail/mpl/sign.hpp | 89 - .../boost/ratio/detail/overflow_helpers.hpp | 367 -- extern/boost/boost/ratio/detail/ratio_io.hpp | 1342 ------ .../boost/boost/ratio/mpl/rational_c_tag.hpp | 25 - extern/boost/boost/ratio/ratio.hpp | 254 +- extern/boost/boost/ratio/ratio_fwd.hpp | 84 +- extern/boost/boost/ratio/ratio_io.hpp | 533 --- extern/boost/boost/shared_array.hpp | 19 + extern/boost/boost/smart_ptr.hpp | 26 + .../boost/smart_ptr/allocate_shared_array.hpp | 1 + .../boost/smart_ptr/detail/atomic_count.hpp | 103 + .../smart_ptr/detail/atomic_count_gcc.hpp | 79 + .../detail/atomic_count_gcc_atomic.hpp | 63 + .../smart_ptr/detail/atomic_count_gcc_x86.hpp | 88 + .../smart_ptr/detail/atomic_count_nt.hpp | 66 + .../smart_ptr/detail/atomic_count_pt.hpp | 104 + .../smart_ptr/detail/atomic_count_spin.hpp | 69 + .../detail/atomic_count_std_atomic.hpp | 67 + .../smart_ptr/detail/atomic_count_sync.hpp | 72 + .../smart_ptr/detail/atomic_count_win32.hpp | 70 + .../boost/smart_ptr/detail/requires_cxx11.hpp | 23 + .../boost/smart_ptr/detail/shared_count.hpp | 2 +- .../detail/sp_counted_base_cw_ppc.hpp | 6 +- .../detail/sp_counted_base_gcc_atomic.hpp | 2 +- .../smart_ptr/detail/sp_counted_impl.hpp | 2 +- .../detail/sp_has_gcc_intrinsics.hpp | 5 +- .../smart_ptr/detail/sp_thread_pause.hpp | 51 - .../smart_ptr/detail/spinlock_gcc_atomic.hpp | 13 +- .../boost/boost/smart_ptr/detail/yield_k.hpp | 10 +- .../smart_ptr/enable_shared_from_this.hpp | 1 + .../boost/boost/smart_ptr/intrusive_ptr.hpp | 13 +- extern/boost/boost/smart_ptr/make_shared.hpp | 1 + .../boost/smart_ptr/make_shared_array.hpp | 1 + .../boost/smart_ptr/make_shared_object.hpp | 1 + extern/boost/boost/smart_ptr/make_unique.hpp | 70 + extern/boost/boost/smart_ptr/scoped_array.hpp | 3 +- extern/boost/boost/smart_ptr/scoped_ptr.hpp | 3 +- extern/boost/boost/smart_ptr/shared_array.hpp | 295 ++ extern/boost/boost/smart_ptr/shared_ptr.hpp | 21 +- extern/boost/boost/smart_ptr/weak_ptr.hpp | 1 + extern/boost/boost/swap.hpp | 17 - extern/boost/boost/system.hpp | 14 + extern/boost/boost/system/detail/config.hpp | 16 +- .../boost/boost/system/detail/enable_if.hpp | 15 +- .../boost/system/detail/error_category.hpp | 79 +- .../system/detail/error_category_impl.hpp | 119 +- .../boost/boost/system/detail/error_code.hpp | 273 +- .../boost/system/detail/error_condition.hpp | 115 +- .../boost/system/detail/generic_category.hpp | 14 +- .../detail/generic_category_message.hpp | 22 +- .../boost/system/detail/interop_category.hpp | 14 +- extern/boost/boost/system/detail/is_same.hpp | 16 +- extern/boost/boost/system/detail/mutex.hpp | 128 + extern/boost/boost/system/detail/snprintf.hpp | 47 +- .../boost/system/detail/std_category.hpp | 107 +- .../boost/system/detail/std_category_impl.hpp | 97 + .../boost/system/detail/system_category.hpp | 14 +- .../system_category_condition_win32.hpp | 8 +- .../system/detail/system_category_impl.hpp | 6 +- .../system/detail/system_category_message.hpp | 4 +- .../detail/system_category_message_win32.hpp | 2 +- extern/boost/boost/system/errc.hpp | 6 +- extern/boost/boost/system/linux_error.hpp | 110 + extern/boost/boost/system/result.hpp | 1350 ++++++ extern/boost/boost/system/system_error.hpp | 2 +- extern/boost/boost/system/windows_error.hpp | 119 + .../boost/test/data/monomorphic/grid.hpp | 2 +- extern/boost/boost/test/detail/config.hpp | 16 +- extern/boost/boost/test/impl/debug.ipp | 3 + .../boost/test/impl/execution_monitor.ipp | 71 +- extern/boost/boost/test/impl/test_tools.ipp | 9 + extern/boost/boost/test/impl/test_tree.ipp | 2 +- extern/boost/boost/test/prg_exec_monitor.hpp | 1 + extern/boost/boost/test/test_exec_monitor.hpp | 1 + .../boost/test/tools/detail/print_helper.hpp | 2 +- extern/boost/boost/test/tools/old/impl.hpp | 5 +- extern/boost/boost/test/unit_test.hpp | 1 + .../utils/basic_cstring/basic_cstring.hpp | 28 +- .../boost/boost/test/utils/named_params.hpp | 4 +- .../boost/boost/test/utils/runtime/errors.hpp | 12 +- .../boost/test/utils/runtime/parameter.hpp | 2 +- extern/boost/boost/test/utils/setcolor.hpp | 15 +- extern/boost/boost/thread/caller_context.hpp | 59 + .../boost/boost/thread/completion_latch.hpp | 225 + .../concurrent_queues/deque_adaptor.hpp | 209 + .../thread/concurrent_queues/deque_base.hpp | 202 + .../thread/concurrent_queues/deque_views.hpp | 165 + .../detail/sync_queue_base.hpp | 211 + .../concurrent_queues/queue_adaptor.hpp | 209 + .../thread/concurrent_queues/queue_base.hpp | 202 + .../concurrent_queues/queue_op_status.hpp | 48 + .../thread/concurrent_queues/queue_views.hpp | 144 + .../concurrent_queues/sync_bounded_queue.hpp | 727 +++ .../thread/concurrent_queues/sync_deque.hpp | 325 ++ .../concurrent_queues/sync_priority_queue.hpp | 369 ++ .../thread/concurrent_queues/sync_queue.hpp | 325 ++ .../concurrent_queues/sync_timed_queue.hpp | 469 ++ extern/boost/boost/thread/condition.hpp | 21 + extern/boost/boost/thread/csbl/devector.hpp | 102 + extern/boost/boost/thread/csbl/functional.hpp | 15 +- extern/boost/boost/thread/csbl/list.hpp | 22 + .../thread/csbl/memory/allocator_arg.hpp | 14 +- .../thread/csbl/memory/allocator_traits.hpp | 11 - .../boost/boost/thread/csbl/memory/config.hpp | 2 - .../thread/csbl/memory/pointer_traits.hpp | 11 - .../thread/csbl/memory/scoped_allocator.hpp | 11 - .../boost/thread/csbl/memory/shared_ptr.hpp | 19 - .../boost/thread/csbl/memory/unique_ptr.hpp | 10 +- extern/boost/boost/thread/csbl/tuple.hpp | 19 +- extern/boost/boost/thread/csbl/vector.hpp | 15 +- extern/boost/boost/thread/detail/counter.hpp | 106 + extern/boost/boost/thread/detail/invoke.hpp | 15 +- extern/boost/boost/thread/detail/log.hpp | 98 + .../thread/detail/string_to_unsigned.hpp | 55 + .../boost/boost/thread/detail/string_trim.hpp | 29 + .../thread/executors/basic_thread_pool.hpp | 352 ++ .../detail/priority_executor_base.hpp | 83 + .../detail/scheduled_executor_base.hpp | 66 + .../thread/executors/inline_executor.hpp | 179 + .../boost/thread/executors/loop_executor.hpp | 213 + .../executors/scheduled_thread_pool.hpp | 53 + .../boost/thread/executors/scheduler.hpp | 283 ++ .../thread/executors/scheduling_adaptor.hpp | 65 + .../thread/executors/serial_executor.hpp | 229 + .../thread/executors/serial_executor_cont.hpp | 177 + .../thread/executors/thread_executor.hpp | 163 + .../experimental/config/inline_namespace.hpp | 23 + .../thread/experimental/exception_list.hpp | 16 + .../parallel/v1/exception_list.hpp | 70 + .../parallel/v1/inline_namespace.hpp | 28 + .../parallel/v2/inline_namespace.hpp | 29 + .../experimental/parallel/v2/task_region.hpp | 320 ++ .../boost/thread/experimental/task_region.hpp | 16 + .../boost/boost/thread/externally_locked.hpp | 352 ++ .../boost/thread/externally_locked_stream.hpp | 170 + extern/boost/boost/thread/future.hpp | 1 - .../boost/thread/futures/wait_for_any.hpp | 5 +- extern/boost/boost/thread/latch.hpp | 170 + extern/boost/boost/thread/lock_concepts.hpp | 197 + extern/boost/boost/thread/lock_factories.hpp | 78 + extern/boost/boost/thread/lock_traits.hpp | 45 + .../boost/boost/thread/lockable_adapter.hpp | 226 + .../boost/boost/thread/lockable_concepts.hpp | 157 + extern/boost/boost/thread/null_mutex.hpp | 243 + extern/boost/boost/thread/ostream_buffer.hpp | 45 + extern/boost/boost/thread/reverse_lock.hpp | 59 + extern/boost/boost/thread/scoped_thread.hpp | 303 ++ extern/boost/boost/thread/strict_lock.hpp | 235 + .../boost/boost/thread/sync_bounded_queue.hpp | 16 + extern/boost/boost/thread/sync_queue.hpp | 16 + .../boost/boost/thread/synchronized_value.hpp | 1068 +++++ extern/boost/boost/thread/thread_functors.hpp | 72 + extern/boost/boost/thread/thread_guard.hpp | 51 + extern/boost/boost/thread/thread_pool.hpp | 15 + .../boost/thread/win32/basic_timed_mutex.hpp | 14 +- extern/boost/boost/thread/with_lock_guard.hpp | 234 + extern/boost/boost/throw_exception.hpp | 8 +- extern/boost/boost/timer.hpp | 79 + extern/boost/boost/timer/config.hpp | 18 - extern/boost/boost/timer/progress_display.hpp | 94 + extern/boost/boost/token_functions.hpp | 653 +++ extern/boost/boost/token_iterator.hpp | 131 + extern/boost/boost/tokenizer.hpp | 98 + .../boost/boost/tuple/detail/tuple_basic.hpp | 6 +- extern/boost/boost/tuple/tuple.hpp | 2 +- extern/boost/boost/type_index.hpp | 8 +- .../boost/type_index/ctti_type_index.hpp | 67 +- .../detail/compile_time_type_info.hpp | 134 +- .../type_index/detail/ctti_register_class.hpp | 14 +- .../type_index/detail/stl_register_class.hpp | 12 +- .../boost/boost/type_index/stl_type_index.hpp | 96 +- .../boost/type_index/type_index_facade.hpp | 79 +- extern/boost/boost/type_traits.hpp | 164 + .../boost/type_traits/aligned_storage.hpp | 138 + .../boost/type_traits/composite_traits.hpp | 29 - .../boost/boost/type_traits/copy_cv_ref.hpp | 31 + .../boost/type_traits/copy_reference.hpp | 35 + .../detail/has_postfix_operator.hpp | 250 + .../detail/has_prefix_operator.hpp | 280 ++ .../detail/is_function_ptr_helper.hpp | 54 +- .../detail/is_mem_fun_pointer_impl.hpp | 54 +- .../detail/is_swappable_cxx_11.hpp | 70 + .../type_traits/floating_point_promotion.hpp | 28 + .../boost/boost/type_traits/has_bit_and.hpp | 49 + .../boost/type_traits/has_bit_and_assign.hpp | 55 + extern/boost/boost/type_traits/has_bit_or.hpp | 49 + .../boost/type_traits/has_bit_or_assign.hpp | 55 + .../boost/boost/type_traits/has_bit_xor.hpp | 49 + .../boost/type_traits/has_bit_xor_assign.hpp | 55 + .../boost/type_traits/has_complement.hpp | 32 + .../boost/type_traits/has_dereference.hpp | 375 ++ .../boost/boost/type_traits/has_divides.hpp | 40 + .../boost/type_traits/has_divides_assign.hpp | 47 + .../boost/boost/type_traits/has_equal_to.hpp | 52 + .../boost/boost/type_traits/has_greater.hpp | 52 + .../boost/type_traits/has_greater_equal.hpp | 52 + .../type_traits/has_left_shift_assign.hpp | 55 + extern/boost/boost/type_traits/has_less.hpp | 52 + .../boost/type_traits/has_less_equal.hpp | 52 + .../boost/type_traits/has_logical_and.hpp | 40 + .../boost/type_traits/has_logical_not.hpp | 32 + .../boost/type_traits/has_logical_or.hpp | 40 + .../boost/boost/type_traits/has_modulus.hpp | 49 + .../boost/type_traits/has_modulus_assign.hpp | 55 + .../boost/type_traits/has_multiplies.hpp | 40 + .../type_traits/has_multiplies_assign.hpp | 47 + extern/boost/boost/type_traits/has_negate.hpp | 25 + .../boost/type_traits/has_new_operator.hpp | 147 + .../boost/type_traits/has_not_equal_to.hpp | 52 + .../type_traits/has_nothrow_destructor.hpp | 56 + .../boost/type_traits/has_post_decrement.hpp | 65 + .../boost/type_traits/has_post_increment.hpp | 65 + .../boost/type_traits/has_pre_decrement.hpp | 65 + .../boost/type_traits/has_pre_increment.hpp | 66 + .../type_traits/has_right_shift_assign.hpp | 55 + .../boost/type_traits/has_unary_minus.hpp | 25 + .../boost/type_traits/has_unary_plus.hpp | 23 + .../type_traits/has_virtual_destructor.hpp | 26 + .../boost/type_traits/integral_promotion.hpp | 187 + extern/boost/boost/type_traits/intrinsics.hpp | 30 +- extern/boost/boost/type_traits/is_complex.hpp | 25 + .../boost/boost/type_traits/is_compound.hpp | 24 + .../boost/type_traits/is_copy_assignable.hpp | 140 + extern/boost/boost/type_traits/is_empty.hpp | 120 + extern/boost/boost/type_traits/is_final.hpp | 30 + .../boost/type_traits/is_floating_point.hpp | 22 + .../boost/boost/type_traits/is_integral.hpp | 3 + .../type_traits/is_list_constructible.hpp | 48 + .../type_traits/is_member_object_pointer.hpp | 24 + .../type_traits/is_nothrow_swappable.hpp | 47 + extern/boost/boost/type_traits/is_object.hpp | 28 + .../boost/type_traits/is_scoped_enum.hpp | 26 + .../boost/boost/type_traits/is_stateless.hpp | 33 + .../boost/boost/type_traits/is_swappable.hpp | 92 + .../type_traits/is_trivially_copyable.hpp | 31 + .../boost/type_traits/is_unscoped_enum.hpp | 25 + .../boost/type_traits/is_virtual_base_of.hpp | 146 + extern/boost/boost/type_traits/negation.hpp | 23 + extern/boost/boost/type_traits/promote.hpp | 26 + extern/boost/boost/type_traits/rank.hpp | 87 + .../boost/boost/type_traits/remove_cv_ref.hpp | 30 + .../boost/boost/type_traits/same_traits.hpp | 15 + extern/boost/boost/typeof/constant.hpp | 26 + extern/boost/boost/typeof/decltype.hpp | 33 + .../boost/boost/typeof/msvc/typeof_impl.hpp | 202 + extern/boost/boost/typeof/typeof.hpp | 34 + .../detail/allocator_constructed.hpp | 59 + .../unordered/detail/archive_constructed.hpp | 71 + .../detail/bad_archive_exception.hpp | 27 + extern/boost/boost/unordered/detail/fca.hpp | 900 ++++ .../boost/unordered/detail/implementation.hpp | 2912 ++++++++++++ extern/boost/boost/unordered/detail/map.hpp | 63 + .../boost/unordered/detail/narrow_cast.hpp | 44 + .../boost/unordered/detail/opt_storage.hpp | 30 + .../boost/unordered/detail/prime_fmod.hpp | 214 + .../detail/serialization_version.hpp | 74 + .../unordered/detail/serialize_container.hpp | 204 + .../detail/serialize_fca_container.hpp | 156 + .../detail/serialize_tracked_address.hpp | 104 + .../boost/unordered/detail/static_assert.hpp | 16 + .../unordered/detail/throw_exception.hpp | 30 + .../boost/unordered/detail/type_traits.hpp | 226 + .../boost/boost/unordered/unordered_map.hpp | 2355 ++++++++++ .../boost/unordered/unordered_map_fwd.hpp | 86 + .../boost/unordered/unordered_set_fwd.hpp | 82 + extern/boost/boost/unordered_map.hpp | 19 + extern/boost/boost/utility/swap.hpp | 17 - extern/boost/boost/utility/value_init.hpp | 16 +- extern/boost/boost/variant/apply_visitor.hpp | 20 + .../variant/detail/apply_visitor_binary.hpp | 291 ++ .../variant/detail/apply_visitor_delayed.hpp | 122 + .../variant/detail/apply_visitor_unary.hpp | 127 + .../boost/variant/detail/backup_holder.hpp | 95 + .../boost/variant/detail/cast_storage.hpp | 42 + extern/boost/boost/variant/detail/config.hpp | 19 + .../variant/detail/enable_recursive_fwd.hpp | 87 + .../boost/variant/detail/forced_return.hpp | 52 + .../boost/variant/detail/has_result_type.hpp | 37 + .../boost/variant/detail/hash_variant.hpp | 46 + .../boost/variant/detail/initializer.hpp | 162 + .../variant/detail/make_variant_list.hpp | 42 + extern/boost/boost/variant/detail/move.hpp | 50 + .../boost/variant/detail/over_sequence.hpp | 58 + .../boost/boost/variant/detail/std_hash.hpp | 46 + .../boost/variant/detail/substitute_fwd.hpp | 43 + .../boost/boost/variant/detail/variant_io.hpp | 83 + .../boost/variant/detail/visitation_impl.hpp | 265 ++ .../boost/variant/recursive_wrapper_fwd.hpp | 130 + extern/boost/boost/variant/static_visitor.hpp | 93 + extern/boost/boost/variant/variant.hpp | 2311 ++++++++++ extern/boost/boost/variant/variant_fwd.hpp | 170 + extern/boost/boost/variant2/variant.hpp | 2549 +++++++++++ extern/boost/boost/version.hpp | 4 +- extern/boost/boost/weak_ptr.hpp | 18 + extern/boost/boost/winapi/config.hpp | 10 +- .../boost/winapi/directory_management.hpp | 106 + extern/boost/boost/winapi/file_management.hpp | 597 +++ extern/boost/boost/winapi/file_mapping.hpp | 262 ++ .../boost/winapi/get_system_directory.hpp | 64 + extern/boost/boost/winapi/handles.hpp | 4 +- extern/boost/boost/winapi/limits.hpp | 52 + extern/boost/boost/winapi/mutex.hpp | 185 + extern/boost/boost/winapi/overlapped.hpp | 45 + extern/boost/boost/winapi/security.hpp | 89 + 1542 files changed, 278788 insertions(+), 19610 deletions(-) create mode 100644 extern/boost/boost/algorithm/string.hpp create mode 100644 extern/boost/boost/algorithm/string/case_conv.hpp create mode 100644 extern/boost/boost/algorithm/string/detail/case_conv.hpp create mode 100644 extern/boost/boost/algorithm/string/detail/find_format.hpp create mode 100644 extern/boost/boost/algorithm/string/detail/find_format_all.hpp create mode 100644 extern/boost/boost/algorithm/string/detail/find_format_store.hpp create mode 100644 extern/boost/boost/algorithm/string/detail/formatter.hpp create mode 100644 extern/boost/boost/algorithm/string/detail/predicate.hpp create mode 100644 extern/boost/boost/algorithm/string/detail/replace_storage.hpp create mode 100644 extern/boost/boost/algorithm/string/detail/sequence.hpp create mode 100644 extern/boost/boost/algorithm/string/erase.hpp create mode 100644 extern/boost/boost/algorithm/string/find.hpp create mode 100644 extern/boost/boost/algorithm/string/find_format.hpp create mode 100644 extern/boost/boost/algorithm/string/formatter.hpp create mode 100644 extern/boost/boost/algorithm/string/join.hpp create mode 100644 extern/boost/boost/algorithm/string/predicate.hpp create mode 100644 extern/boost/boost/algorithm/string/replace.hpp create mode 100644 extern/boost/boost/algorithm/string/sequence_traits.hpp create mode 100644 extern/boost/boost/algorithm/string/std/list_traits.hpp create mode 100644 extern/boost/boost/algorithm/string/std/slist_traits.hpp create mode 100644 extern/boost/boost/algorithm/string/std/string_traits.hpp create mode 100644 extern/boost/boost/algorithm/string/std_containers_traits.hpp create mode 100644 extern/boost/boost/algorithm/string/yes_no_type.hpp delete mode 100644 extern/boost/boost/array.hpp create mode 100644 extern/boost/boost/asio.hpp create mode 100644 extern/boost/boost/asio/any_completion_executor.hpp create mode 100644 extern/boost/boost/asio/any_completion_handler.hpp create mode 100644 extern/boost/boost/asio/any_io_executor.hpp create mode 100644 extern/boost/boost/asio/append.hpp create mode 100644 extern/boost/boost/asio/as_tuple.hpp create mode 100644 extern/boost/boost/asio/associated_allocator.hpp create mode 100644 extern/boost/boost/asio/associated_cancellation_slot.hpp create mode 100644 extern/boost/boost/asio/associated_executor.hpp create mode 100644 extern/boost/boost/asio/associated_immediate_executor.hpp create mode 100644 extern/boost/boost/asio/associator.hpp create mode 100644 extern/boost/boost/asio/async_result.hpp create mode 100644 extern/boost/boost/asio/awaitable.hpp create mode 100644 extern/boost/boost/asio/basic_datagram_socket.hpp create mode 100644 extern/boost/boost/asio/basic_deadline_timer.hpp create mode 100644 extern/boost/boost/asio/basic_file.hpp create mode 100644 extern/boost/boost/asio/basic_io_object.hpp create mode 100644 extern/boost/boost/asio/basic_random_access_file.hpp create mode 100644 extern/boost/boost/asio/basic_raw_socket.hpp create mode 100644 extern/boost/boost/asio/basic_readable_pipe.hpp create mode 100644 extern/boost/boost/asio/basic_seq_packet_socket.hpp create mode 100644 extern/boost/boost/asio/basic_serial_port.hpp create mode 100644 extern/boost/boost/asio/basic_signal_set.hpp create mode 100644 extern/boost/boost/asio/basic_socket.hpp create mode 100644 extern/boost/boost/asio/basic_socket_acceptor.hpp create mode 100644 extern/boost/boost/asio/basic_socket_iostream.hpp create mode 100644 extern/boost/boost/asio/basic_socket_streambuf.hpp create mode 100644 extern/boost/boost/asio/basic_stream_file.hpp create mode 100644 extern/boost/boost/asio/basic_stream_socket.hpp create mode 100644 extern/boost/boost/asio/basic_streambuf.hpp create mode 100644 extern/boost/boost/asio/basic_streambuf_fwd.hpp create mode 100644 extern/boost/boost/asio/basic_waitable_timer.hpp create mode 100644 extern/boost/boost/asio/basic_writable_pipe.hpp create mode 100644 extern/boost/boost/asio/bind_allocator.hpp create mode 100644 extern/boost/boost/asio/bind_cancellation_slot.hpp create mode 100644 extern/boost/boost/asio/bind_executor.hpp create mode 100644 extern/boost/boost/asio/bind_immediate_executor.hpp create mode 100644 extern/boost/boost/asio/buffer.hpp create mode 100644 extern/boost/boost/asio/buffer_registration.hpp create mode 100644 extern/boost/boost/asio/buffered_read_stream.hpp create mode 100644 extern/boost/boost/asio/buffered_read_stream_fwd.hpp create mode 100644 extern/boost/boost/asio/buffered_stream.hpp create mode 100644 extern/boost/boost/asio/buffered_stream_fwd.hpp create mode 100644 extern/boost/boost/asio/buffered_write_stream.hpp create mode 100644 extern/boost/boost/asio/buffered_write_stream_fwd.hpp create mode 100644 extern/boost/boost/asio/buffers_iterator.hpp create mode 100644 extern/boost/boost/asio/cancel_after.hpp create mode 100644 extern/boost/boost/asio/cancel_at.hpp create mode 100644 extern/boost/boost/asio/cancellation_signal.hpp create mode 100644 extern/boost/boost/asio/cancellation_state.hpp create mode 100644 extern/boost/boost/asio/cancellation_type.hpp create mode 100644 extern/boost/boost/asio/co_composed.hpp create mode 100644 extern/boost/boost/asio/co_spawn.hpp create mode 100644 extern/boost/boost/asio/completion_condition.hpp create mode 100644 extern/boost/boost/asio/compose.hpp create mode 100644 extern/boost/boost/asio/composed.hpp create mode 100644 extern/boost/boost/asio/connect.hpp create mode 100644 extern/boost/boost/asio/connect_pipe.hpp create mode 100644 extern/boost/boost/asio/consign.hpp create mode 100644 extern/boost/boost/asio/coroutine.hpp create mode 100644 extern/boost/boost/asio/deadline_timer.hpp create mode 100644 extern/boost/boost/asio/default_completion_token.hpp create mode 100644 extern/boost/boost/asio/defer.hpp create mode 100644 extern/boost/boost/asio/deferred.hpp create mode 100644 extern/boost/boost/asio/detached.hpp create mode 100644 extern/boost/boost/asio/detail/array.hpp create mode 100644 extern/boost/boost/asio/detail/array_fwd.hpp create mode 100644 extern/boost/boost/asio/detail/assert.hpp create mode 100644 extern/boost/boost/asio/detail/atomic_count.hpp create mode 100644 extern/boost/boost/asio/detail/base_from_cancellation_state.hpp create mode 100644 extern/boost/boost/asio/detail/base_from_completion_cond.hpp create mode 100644 extern/boost/boost/asio/detail/bind_handler.hpp create mode 100644 extern/boost/boost/asio/detail/blocking_executor_op.hpp create mode 100644 extern/boost/boost/asio/detail/buffer_resize_guard.hpp create mode 100644 extern/boost/boost/asio/detail/buffer_sequence_adapter.hpp create mode 100644 extern/boost/boost/asio/detail/buffered_stream_storage.hpp create mode 100644 extern/boost/boost/asio/detail/call_stack.hpp create mode 100644 extern/boost/boost/asio/detail/chrono.hpp create mode 100644 extern/boost/boost/asio/detail/chrono_time_traits.hpp create mode 100644 extern/boost/boost/asio/detail/completion_handler.hpp create mode 100644 extern/boost/boost/asio/detail/completion_message.hpp create mode 100644 extern/boost/boost/asio/detail/completion_payload.hpp create mode 100644 extern/boost/boost/asio/detail/completion_payload_handler.hpp create mode 100644 extern/boost/boost/asio/detail/composed_work.hpp create mode 100644 extern/boost/boost/asio/detail/concurrency_hint.hpp create mode 100644 extern/boost/boost/asio/detail/conditionally_enabled_event.hpp create mode 100644 extern/boost/boost/asio/detail/conditionally_enabled_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/config.hpp create mode 100644 extern/boost/boost/asio/detail/consuming_buffers.hpp create mode 100644 extern/boost/boost/asio/detail/cstddef.hpp create mode 100644 extern/boost/boost/asio/detail/cstdint.hpp create mode 100644 extern/boost/boost/asio/detail/date_time_fwd.hpp create mode 100644 extern/boost/boost/asio/detail/deadline_timer_service.hpp create mode 100644 extern/boost/boost/asio/detail/dependent_type.hpp create mode 100644 extern/boost/boost/asio/detail/descriptor_ops.hpp create mode 100644 extern/boost/boost/asio/detail/descriptor_read_op.hpp create mode 100644 extern/boost/boost/asio/detail/descriptor_write_op.hpp create mode 100644 extern/boost/boost/asio/detail/dev_poll_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/epoll_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/event.hpp create mode 100644 extern/boost/boost/asio/detail/eventfd_select_interrupter.hpp create mode 100644 extern/boost/boost/asio/detail/executor_function.hpp create mode 100644 extern/boost/boost/asio/detail/executor_op.hpp create mode 100644 extern/boost/boost/asio/detail/fd_set_adapter.hpp create mode 100644 extern/boost/boost/asio/detail/fenced_block.hpp create mode 100644 extern/boost/boost/asio/detail/functional.hpp create mode 100644 extern/boost/boost/asio/detail/future.hpp create mode 100644 extern/boost/boost/asio/detail/global.hpp create mode 100644 extern/boost/boost/asio/detail/handler_alloc_helpers.hpp create mode 100644 extern/boost/boost/asio/detail/handler_cont_helpers.hpp create mode 100644 extern/boost/boost/asio/detail/handler_tracking.hpp create mode 100644 extern/boost/boost/asio/detail/handler_type_requirements.hpp create mode 100644 extern/boost/boost/asio/detail/handler_work.hpp create mode 100644 extern/boost/boost/asio/detail/hash_map.hpp create mode 100644 extern/boost/boost/asio/detail/impl/buffer_sequence_adapter.ipp create mode 100644 extern/boost/boost/asio/detail/impl/descriptor_ops.ipp create mode 100644 extern/boost/boost/asio/detail/impl/dev_poll_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/impl/dev_poll_reactor.ipp create mode 100644 extern/boost/boost/asio/detail/impl/epoll_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/impl/epoll_reactor.ipp create mode 100644 extern/boost/boost/asio/detail/impl/eventfd_select_interrupter.ipp create mode 100644 extern/boost/boost/asio/detail/impl/handler_tracking.ipp create mode 100644 extern/boost/boost/asio/detail/impl/io_uring_descriptor_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/io_uring_file_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/io_uring_service.hpp create mode 100644 extern/boost/boost/asio/detail/impl/io_uring_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/io_uring_socket_service_base.ipp create mode 100644 extern/boost/boost/asio/detail/impl/kqueue_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/impl/kqueue_reactor.ipp create mode 100644 extern/boost/boost/asio/detail/impl/null_event.ipp create mode 100644 extern/boost/boost/asio/detail/impl/pipe_select_interrupter.ipp create mode 100644 extern/boost/boost/asio/detail/impl/posix_event.ipp create mode 100644 extern/boost/boost/asio/detail/impl/posix_mutex.ipp create mode 100644 extern/boost/boost/asio/detail/impl/posix_serial_port_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/posix_thread.ipp create mode 100644 extern/boost/boost/asio/detail/impl/posix_tss_ptr.ipp create mode 100644 extern/boost/boost/asio/detail/impl/reactive_descriptor_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/reactive_socket_service_base.ipp create mode 100644 extern/boost/boost/asio/detail/impl/resolver_service_base.ipp create mode 100644 extern/boost/boost/asio/detail/impl/scheduler.ipp create mode 100644 extern/boost/boost/asio/detail/impl/select_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/impl/select_reactor.ipp create mode 100644 extern/boost/boost/asio/detail/impl/service_registry.hpp create mode 100644 extern/boost/boost/asio/detail/impl/service_registry.ipp create mode 100644 extern/boost/boost/asio/detail/impl/signal_set_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/socket_ops.ipp create mode 100644 extern/boost/boost/asio/detail/impl/socket_select_interrupter.ipp create mode 100644 extern/boost/boost/asio/detail/impl/strand_executor_service.hpp create mode 100644 extern/boost/boost/asio/detail/impl/strand_executor_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/strand_service.hpp create mode 100644 extern/boost/boost/asio/detail/impl/strand_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/thread_context.ipp create mode 100644 extern/boost/boost/asio/detail/impl/throw_error.ipp create mode 100644 extern/boost/boost/asio/detail/impl/timer_queue_ptime.ipp create mode 100644 extern/boost/boost/asio/detail/impl/timer_queue_set.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_event.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_iocp_file_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_iocp_handle_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_iocp_io_context.hpp create mode 100644 extern/boost/boost/asio/detail/impl/win_iocp_io_context.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_iocp_serial_port_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_iocp_socket_service_base.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_mutex.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_object_handle_service.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_static_mutex.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_thread.ipp create mode 100644 extern/boost/boost/asio/detail/impl/win_tss_ptr.ipp create mode 100644 extern/boost/boost/asio/detail/impl/winrt_timer_scheduler.hpp create mode 100644 extern/boost/boost/asio/detail/impl/winrt_timer_scheduler.ipp create mode 100644 extern/boost/boost/asio/detail/impl/winsock_init.ipp create mode 100644 extern/boost/boost/asio/detail/initiate_defer.hpp create mode 100644 extern/boost/boost/asio/detail/initiate_dispatch.hpp create mode 100644 extern/boost/boost/asio/detail/initiate_post.hpp create mode 100644 extern/boost/boost/asio/detail/initiation_base.hpp create mode 100644 extern/boost/boost/asio/detail/io_control.hpp create mode 100644 extern/boost/boost/asio/detail/io_object_impl.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_descriptor_read_at_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_descriptor_read_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_descriptor_service.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_descriptor_write_at_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_descriptor_write_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_file_service.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_null_buffers_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_operation.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_service.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_accept_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_connect_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_recv_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_recvfrom_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_recvmsg_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_send_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_sendto_op.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_service.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_socket_service_base.hpp create mode 100644 extern/boost/boost/asio/detail/io_uring_wait_op.hpp create mode 100644 extern/boost/boost/asio/detail/is_buffer_sequence.hpp create mode 100644 extern/boost/boost/asio/detail/is_executor.hpp create mode 100644 extern/boost/boost/asio/detail/keyword_tss_ptr.hpp create mode 100644 extern/boost/boost/asio/detail/kqueue_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/limits.hpp create mode 100644 extern/boost/boost/asio/detail/memory.hpp create mode 100644 extern/boost/boost/asio/detail/mutex.hpp create mode 100644 extern/boost/boost/asio/detail/non_const_lvalue.hpp create mode 100644 extern/boost/boost/asio/detail/noncopyable.hpp create mode 100644 extern/boost/boost/asio/detail/null_event.hpp create mode 100644 extern/boost/boost/asio/detail/null_fenced_block.hpp create mode 100644 extern/boost/boost/asio/detail/null_global.hpp create mode 100644 extern/boost/boost/asio/detail/null_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/null_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/null_signal_blocker.hpp create mode 100644 extern/boost/boost/asio/detail/null_socket_service.hpp create mode 100644 extern/boost/boost/asio/detail/null_static_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/null_thread.hpp create mode 100644 extern/boost/boost/asio/detail/null_tss_ptr.hpp create mode 100644 extern/boost/boost/asio/detail/object_pool.hpp create mode 100644 extern/boost/boost/asio/detail/old_win_sdk_compat.hpp create mode 100644 extern/boost/boost/asio/detail/op_queue.hpp create mode 100644 extern/boost/boost/asio/detail/operation.hpp create mode 100644 extern/boost/boost/asio/detail/pipe_select_interrupter.hpp create mode 100644 extern/boost/boost/asio/detail/pop_options.hpp create mode 100644 extern/boost/boost/asio/detail/posix_event.hpp create mode 100644 extern/boost/boost/asio/detail/posix_fd_set_adapter.hpp create mode 100644 extern/boost/boost/asio/detail/posix_global.hpp create mode 100644 extern/boost/boost/asio/detail/posix_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/posix_serial_port_service.hpp create mode 100644 extern/boost/boost/asio/detail/posix_signal_blocker.hpp create mode 100644 extern/boost/boost/asio/detail/posix_static_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/posix_thread.hpp create mode 100644 extern/boost/boost/asio/detail/posix_tss_ptr.hpp create mode 100644 extern/boost/boost/asio/detail/push_options.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_descriptor_service.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_null_buffers_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_accept_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_connect_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_recv_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_recvfrom_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_recvmsg_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_send_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_sendto_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_service.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_socket_service_base.hpp create mode 100644 extern/boost/boost/asio/detail/reactive_wait_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactor.hpp create mode 100644 extern/boost/boost/asio/detail/reactor_op.hpp create mode 100644 extern/boost/boost/asio/detail/reactor_op_queue.hpp create mode 100644 extern/boost/boost/asio/detail/recycling_allocator.hpp create mode 100644 extern/boost/boost/asio/detail/regex_fwd.hpp create mode 100644 extern/boost/boost/asio/detail/resolve_endpoint_op.hpp create mode 100644 extern/boost/boost/asio/detail/resolve_op.hpp create mode 100644 extern/boost/boost/asio/detail/resolve_query_op.hpp create mode 100644 extern/boost/boost/asio/detail/resolver_service.hpp create mode 100644 extern/boost/boost/asio/detail/resolver_service_base.hpp create mode 100644 extern/boost/boost/asio/detail/scheduler.hpp create mode 100644 extern/boost/boost/asio/detail/scheduler_operation.hpp create mode 100644 extern/boost/boost/asio/detail/scheduler_task.hpp create mode 100644 extern/boost/boost/asio/detail/scheduler_thread_info.hpp create mode 100644 extern/boost/boost/asio/detail/scoped_lock.hpp create mode 100644 extern/boost/boost/asio/detail/scoped_ptr.hpp create mode 100644 extern/boost/boost/asio/detail/select_interrupter.hpp create mode 100644 extern/boost/boost/asio/detail/select_reactor.hpp create mode 100644 extern/boost/boost/asio/detail/service_registry.hpp create mode 100644 extern/boost/boost/asio/detail/signal_blocker.hpp create mode 100644 extern/boost/boost/asio/detail/signal_handler.hpp create mode 100644 extern/boost/boost/asio/detail/signal_init.hpp create mode 100644 extern/boost/boost/asio/detail/signal_op.hpp create mode 100644 extern/boost/boost/asio/detail/signal_set_service.hpp create mode 100644 extern/boost/boost/asio/detail/socket_holder.hpp create mode 100644 extern/boost/boost/asio/detail/socket_ops.hpp create mode 100644 extern/boost/boost/asio/detail/socket_option.hpp create mode 100644 extern/boost/boost/asio/detail/socket_select_interrupter.hpp create mode 100644 extern/boost/boost/asio/detail/socket_types.hpp create mode 100644 extern/boost/boost/asio/detail/source_location.hpp create mode 100644 extern/boost/boost/asio/detail/static_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/std_event.hpp create mode 100644 extern/boost/boost/asio/detail/std_fenced_block.hpp create mode 100644 extern/boost/boost/asio/detail/std_global.hpp create mode 100644 extern/boost/boost/asio/detail/std_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/std_static_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/std_thread.hpp create mode 100644 extern/boost/boost/asio/detail/strand_executor_service.hpp create mode 100644 extern/boost/boost/asio/detail/strand_service.hpp create mode 100644 extern/boost/boost/asio/detail/string_view.hpp create mode 100644 extern/boost/boost/asio/detail/thread.hpp create mode 100644 extern/boost/boost/asio/detail/thread_context.hpp create mode 100644 extern/boost/boost/asio/detail/thread_group.hpp create mode 100644 extern/boost/boost/asio/detail/thread_info_base.hpp create mode 100644 extern/boost/boost/asio/detail/throw_error.hpp create mode 100644 extern/boost/boost/asio/detail/throw_exception.hpp create mode 100644 extern/boost/boost/asio/detail/timed_cancel_op.hpp create mode 100644 extern/boost/boost/asio/detail/timer_queue.hpp create mode 100644 extern/boost/boost/asio/detail/timer_queue_base.hpp create mode 100644 extern/boost/boost/asio/detail/timer_queue_ptime.hpp create mode 100644 extern/boost/boost/asio/detail/timer_queue_set.hpp create mode 100644 extern/boost/boost/asio/detail/timer_scheduler.hpp create mode 100644 extern/boost/boost/asio/detail/timer_scheduler_fwd.hpp create mode 100644 extern/boost/boost/asio/detail/tss_ptr.hpp create mode 100644 extern/boost/boost/asio/detail/type_traits.hpp create mode 100644 extern/boost/boost/asio/detail/utility.hpp create mode 100644 extern/boost/boost/asio/detail/wait_handler.hpp create mode 100644 extern/boost/boost/asio/detail/wait_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_event.hpp create mode 100644 extern/boost/boost/asio/detail/win_fd_set_adapter.hpp create mode 100644 extern/boost/boost/asio/detail/win_global.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_file_service.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_handle_read_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_handle_service.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_handle_write_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_io_context.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_null_buffers_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_operation.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_overlapped_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_overlapped_ptr.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_serial_port_service.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_socket_accept_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_socket_connect_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_socket_recv_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_socket_recvfrom_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_socket_recvmsg_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_socket_send_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_socket_service.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_socket_service_base.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_thread_info.hpp create mode 100644 extern/boost/boost/asio/detail/win_iocp_wait_op.hpp create mode 100644 extern/boost/boost/asio/detail/win_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/win_object_handle_service.hpp create mode 100644 extern/boost/boost/asio/detail/win_static_mutex.hpp create mode 100644 extern/boost/boost/asio/detail/win_thread.hpp create mode 100644 extern/boost/boost/asio/detail/win_tss_ptr.hpp create mode 100644 extern/boost/boost/asio/detail/winapp_thread.hpp create mode 100644 extern/boost/boost/asio/detail/wince_thread.hpp create mode 100644 extern/boost/boost/asio/detail/winrt_async_manager.hpp create mode 100644 extern/boost/boost/asio/detail/winrt_async_op.hpp create mode 100644 extern/boost/boost/asio/detail/winrt_resolve_op.hpp create mode 100644 extern/boost/boost/asio/detail/winrt_resolver_service.hpp create mode 100644 extern/boost/boost/asio/detail/winrt_timer_scheduler.hpp create mode 100644 extern/boost/boost/asio/detail/winrt_utils.hpp create mode 100644 extern/boost/boost/asio/detail/winsock_init.hpp create mode 100644 extern/boost/boost/asio/detail/work_dispatcher.hpp create mode 100644 extern/boost/boost/asio/detail/wrapped_handler.hpp create mode 100644 extern/boost/boost/asio/dispatch.hpp create mode 100644 extern/boost/boost/asio/error.hpp create mode 100644 extern/boost/boost/asio/execution.hpp create mode 100644 extern/boost/boost/asio/execution/allocator.hpp create mode 100644 extern/boost/boost/asio/execution/any_executor.hpp create mode 100644 extern/boost/boost/asio/execution/bad_executor.hpp create mode 100644 extern/boost/boost/asio/execution/blocking.hpp create mode 100644 extern/boost/boost/asio/execution/blocking_adaptation.hpp create mode 100644 extern/boost/boost/asio/execution/context.hpp create mode 100644 extern/boost/boost/asio/execution/context_as.hpp create mode 100644 extern/boost/boost/asio/execution/executor.hpp create mode 100644 extern/boost/boost/asio/execution/impl/bad_executor.ipp create mode 100644 extern/boost/boost/asio/execution/invocable_archetype.hpp create mode 100644 extern/boost/boost/asio/execution/mapping.hpp create mode 100644 extern/boost/boost/asio/execution/occupancy.hpp create mode 100644 extern/boost/boost/asio/execution/outstanding_work.hpp create mode 100644 extern/boost/boost/asio/execution/prefer_only.hpp create mode 100644 extern/boost/boost/asio/execution/relationship.hpp create mode 100644 extern/boost/boost/asio/execution_context.hpp create mode 100644 extern/boost/boost/asio/executor.hpp create mode 100644 extern/boost/boost/asio/executor_work_guard.hpp create mode 100644 extern/boost/boost/asio/file_base.hpp create mode 100644 extern/boost/boost/asio/generic/basic_endpoint.hpp create mode 100644 extern/boost/boost/asio/generic/datagram_protocol.hpp create mode 100644 extern/boost/boost/asio/generic/detail/endpoint.hpp create mode 100644 extern/boost/boost/asio/generic/detail/impl/endpoint.ipp create mode 100644 extern/boost/boost/asio/generic/raw_protocol.hpp create mode 100644 extern/boost/boost/asio/generic/seq_packet_protocol.hpp create mode 100644 extern/boost/boost/asio/generic/stream_protocol.hpp create mode 100644 extern/boost/boost/asio/handler_continuation_hook.hpp create mode 100644 extern/boost/boost/asio/high_resolution_timer.hpp create mode 100644 extern/boost/boost/asio/immediate.hpp create mode 100644 extern/boost/boost/asio/impl/any_completion_executor.ipp create mode 100644 extern/boost/boost/asio/impl/any_io_executor.ipp create mode 100644 extern/boost/boost/asio/impl/append.hpp create mode 100644 extern/boost/boost/asio/impl/as_tuple.hpp create mode 100644 extern/boost/boost/asio/impl/awaitable.hpp create mode 100644 extern/boost/boost/asio/impl/buffered_read_stream.hpp create mode 100644 extern/boost/boost/asio/impl/buffered_write_stream.hpp create mode 100644 extern/boost/boost/asio/impl/cancel_after.hpp create mode 100644 extern/boost/boost/asio/impl/cancel_at.hpp create mode 100644 extern/boost/boost/asio/impl/cancellation_signal.ipp create mode 100644 extern/boost/boost/asio/impl/co_spawn.hpp create mode 100644 extern/boost/boost/asio/impl/connect.hpp create mode 100644 extern/boost/boost/asio/impl/connect_pipe.hpp create mode 100644 extern/boost/boost/asio/impl/connect_pipe.ipp create mode 100644 extern/boost/boost/asio/impl/consign.hpp create mode 100644 extern/boost/boost/asio/impl/deferred.hpp create mode 100644 extern/boost/boost/asio/impl/detached.hpp create mode 100644 extern/boost/boost/asio/impl/error.ipp create mode 100644 extern/boost/boost/asio/impl/execution_context.hpp create mode 100644 extern/boost/boost/asio/impl/execution_context.ipp create mode 100644 extern/boost/boost/asio/impl/executor.hpp create mode 100644 extern/boost/boost/asio/impl/executor.ipp create mode 100644 extern/boost/boost/asio/impl/io_context.hpp create mode 100644 extern/boost/boost/asio/impl/io_context.ipp create mode 100644 extern/boost/boost/asio/impl/multiple_exceptions.ipp create mode 100644 extern/boost/boost/asio/impl/prepend.hpp create mode 100644 extern/boost/boost/asio/impl/read.hpp create mode 100644 extern/boost/boost/asio/impl/read_at.hpp create mode 100644 extern/boost/boost/asio/impl/read_until.hpp create mode 100644 extern/boost/boost/asio/impl/redirect_error.hpp create mode 100644 extern/boost/boost/asio/impl/serial_port_base.hpp create mode 100644 extern/boost/boost/asio/impl/serial_port_base.ipp create mode 100644 extern/boost/boost/asio/impl/system_context.hpp create mode 100644 extern/boost/boost/asio/impl/system_context.ipp create mode 100644 extern/boost/boost/asio/impl/system_executor.hpp create mode 100644 extern/boost/boost/asio/impl/thread_pool.hpp create mode 100644 extern/boost/boost/asio/impl/thread_pool.ipp create mode 100644 extern/boost/boost/asio/impl/use_awaitable.hpp create mode 100644 extern/boost/boost/asio/impl/use_future.hpp create mode 100644 extern/boost/boost/asio/impl/write.hpp create mode 100644 extern/boost/boost/asio/impl/write_at.hpp create mode 100644 extern/boost/boost/asio/io_context.hpp create mode 100644 extern/boost/boost/asio/io_context_strand.hpp create mode 100644 extern/boost/boost/asio/io_service.hpp create mode 100644 extern/boost/boost/asio/io_service_strand.hpp create mode 100644 extern/boost/boost/asio/ip/address.hpp create mode 100644 extern/boost/boost/asio/ip/address_v4.hpp create mode 100644 extern/boost/boost/asio/ip/address_v4_iterator.hpp create mode 100644 extern/boost/boost/asio/ip/address_v4_range.hpp create mode 100644 extern/boost/boost/asio/ip/address_v6.hpp create mode 100644 extern/boost/boost/asio/ip/address_v6_iterator.hpp create mode 100644 extern/boost/boost/asio/ip/address_v6_range.hpp create mode 100644 extern/boost/boost/asio/ip/bad_address_cast.hpp create mode 100644 extern/boost/boost/asio/ip/basic_endpoint.hpp create mode 100644 extern/boost/boost/asio/ip/basic_resolver.hpp create mode 100644 extern/boost/boost/asio/ip/basic_resolver_entry.hpp create mode 100644 extern/boost/boost/asio/ip/basic_resolver_iterator.hpp create mode 100644 extern/boost/boost/asio/ip/basic_resolver_query.hpp create mode 100644 extern/boost/boost/asio/ip/basic_resolver_results.hpp create mode 100644 extern/boost/boost/asio/ip/detail/endpoint.hpp create mode 100644 extern/boost/boost/asio/ip/detail/impl/endpoint.ipp create mode 100644 extern/boost/boost/asio/ip/detail/socket_option.hpp create mode 100644 extern/boost/boost/asio/ip/host_name.hpp create mode 100644 extern/boost/boost/asio/ip/icmp.hpp create mode 100644 extern/boost/boost/asio/ip/impl/address.hpp create mode 100644 extern/boost/boost/asio/ip/impl/address.ipp create mode 100644 extern/boost/boost/asio/ip/impl/address_v4.hpp create mode 100644 extern/boost/boost/asio/ip/impl/address_v4.ipp create mode 100644 extern/boost/boost/asio/ip/impl/address_v6.hpp create mode 100644 extern/boost/boost/asio/ip/impl/address_v6.ipp create mode 100644 extern/boost/boost/asio/ip/impl/basic_endpoint.hpp create mode 100644 extern/boost/boost/asio/ip/impl/host_name.ipp create mode 100644 extern/boost/boost/asio/ip/impl/network_v4.hpp create mode 100644 extern/boost/boost/asio/ip/impl/network_v4.ipp create mode 100644 extern/boost/boost/asio/ip/impl/network_v6.hpp create mode 100644 extern/boost/boost/asio/ip/impl/network_v6.ipp create mode 100644 extern/boost/boost/asio/ip/multicast.hpp create mode 100644 extern/boost/boost/asio/ip/network_v4.hpp create mode 100644 extern/boost/boost/asio/ip/network_v6.hpp create mode 100644 extern/boost/boost/asio/ip/resolver_base.hpp create mode 100644 extern/boost/boost/asio/ip/resolver_query_base.hpp create mode 100644 extern/boost/boost/asio/ip/tcp.hpp create mode 100644 extern/boost/boost/asio/ip/udp.hpp create mode 100644 extern/boost/boost/asio/ip/unicast.hpp create mode 100644 extern/boost/boost/asio/ip/v6_only.hpp create mode 100644 extern/boost/boost/asio/is_applicable_property.hpp create mode 100644 extern/boost/boost/asio/is_contiguous_iterator.hpp create mode 100644 extern/boost/boost/asio/is_executor.hpp create mode 100644 extern/boost/boost/asio/is_read_buffered.hpp create mode 100644 extern/boost/boost/asio/is_write_buffered.hpp create mode 100644 extern/boost/boost/asio/local/basic_endpoint.hpp create mode 100644 extern/boost/boost/asio/local/connect_pair.hpp create mode 100644 extern/boost/boost/asio/local/datagram_protocol.hpp create mode 100644 extern/boost/boost/asio/local/detail/endpoint.hpp create mode 100644 extern/boost/boost/asio/local/detail/impl/endpoint.ipp create mode 100644 extern/boost/boost/asio/local/seq_packet_protocol.hpp create mode 100644 extern/boost/boost/asio/local/stream_protocol.hpp create mode 100644 extern/boost/boost/asio/multiple_exceptions.hpp create mode 100644 extern/boost/boost/asio/packaged_task.hpp create mode 100644 extern/boost/boost/asio/placeholders.hpp create mode 100644 extern/boost/boost/asio/posix/basic_descriptor.hpp create mode 100644 extern/boost/boost/asio/posix/basic_stream_descriptor.hpp create mode 100644 extern/boost/boost/asio/posix/descriptor.hpp create mode 100644 extern/boost/boost/asio/posix/descriptor_base.hpp create mode 100644 extern/boost/boost/asio/posix/stream_descriptor.hpp create mode 100644 extern/boost/boost/asio/post.hpp create mode 100644 extern/boost/boost/asio/prefer.hpp create mode 100644 extern/boost/boost/asio/prepend.hpp create mode 100644 extern/boost/boost/asio/query.hpp create mode 100644 extern/boost/boost/asio/random_access_file.hpp create mode 100644 extern/boost/boost/asio/read.hpp create mode 100644 extern/boost/boost/asio/read_at.hpp create mode 100644 extern/boost/boost/asio/read_until.hpp create mode 100644 extern/boost/boost/asio/readable_pipe.hpp create mode 100644 extern/boost/boost/asio/recycling_allocator.hpp create mode 100644 extern/boost/boost/asio/redirect_error.hpp create mode 100644 extern/boost/boost/asio/registered_buffer.hpp create mode 100644 extern/boost/boost/asio/require.hpp create mode 100644 extern/boost/boost/asio/require_concept.hpp create mode 100644 extern/boost/boost/asio/serial_port.hpp create mode 100644 extern/boost/boost/asio/serial_port_base.hpp create mode 100644 extern/boost/boost/asio/signal_set.hpp create mode 100644 extern/boost/boost/asio/signal_set_base.hpp create mode 100644 extern/boost/boost/asio/socket_base.hpp create mode 100644 extern/boost/boost/asio/static_thread_pool.hpp create mode 100644 extern/boost/boost/asio/steady_timer.hpp create mode 100644 extern/boost/boost/asio/strand.hpp create mode 100644 extern/boost/boost/asio/stream_file.hpp create mode 100644 extern/boost/boost/asio/streambuf.hpp create mode 100644 extern/boost/boost/asio/system_context.hpp create mode 100644 extern/boost/boost/asio/system_executor.hpp create mode 100644 extern/boost/boost/asio/system_timer.hpp create mode 100644 extern/boost/boost/asio/this_coro.hpp create mode 100644 extern/boost/boost/asio/thread_pool.hpp create mode 100644 extern/boost/boost/asio/time_traits.hpp create mode 100644 extern/boost/boost/asio/traits/equality_comparable.hpp create mode 100644 extern/boost/boost/asio/traits/execute_member.hpp create mode 100644 extern/boost/boost/asio/traits/prefer_free.hpp create mode 100644 extern/boost/boost/asio/traits/prefer_member.hpp create mode 100644 extern/boost/boost/asio/traits/query_free.hpp create mode 100644 extern/boost/boost/asio/traits/query_member.hpp create mode 100644 extern/boost/boost/asio/traits/query_static_constexpr_member.hpp create mode 100644 extern/boost/boost/asio/traits/require_concept_free.hpp create mode 100644 extern/boost/boost/asio/traits/require_concept_member.hpp create mode 100644 extern/boost/boost/asio/traits/require_free.hpp create mode 100644 extern/boost/boost/asio/traits/require_member.hpp create mode 100644 extern/boost/boost/asio/traits/static_query.hpp create mode 100644 extern/boost/boost/asio/traits/static_require.hpp create mode 100644 extern/boost/boost/asio/traits/static_require_concept.hpp create mode 100644 extern/boost/boost/asio/use_awaitable.hpp create mode 100644 extern/boost/boost/asio/use_future.hpp create mode 100644 extern/boost/boost/asio/uses_executor.hpp create mode 100644 extern/boost/boost/asio/version.hpp create mode 100644 extern/boost/boost/asio/wait_traits.hpp create mode 100644 extern/boost/boost/asio/windows/basic_object_handle.hpp create mode 100644 extern/boost/boost/asio/windows/basic_overlapped_handle.hpp create mode 100644 extern/boost/boost/asio/windows/basic_random_access_handle.hpp create mode 100644 extern/boost/boost/asio/windows/basic_stream_handle.hpp create mode 100644 extern/boost/boost/asio/windows/object_handle.hpp create mode 100644 extern/boost/boost/asio/windows/overlapped_handle.hpp create mode 100644 extern/boost/boost/asio/windows/overlapped_ptr.hpp create mode 100644 extern/boost/boost/asio/windows/random_access_handle.hpp create mode 100644 extern/boost/boost/asio/windows/stream_handle.hpp create mode 100644 extern/boost/boost/asio/writable_pipe.hpp create mode 100644 extern/boost/boost/asio/write.hpp create mode 100644 extern/boost/boost/asio/write_at.hpp create mode 100644 extern/boost/boost/atomic/detail/type_traits/remove_cv.hpp create mode 100644 extern/boost/boost/bind.hpp delete mode 100644 extern/boost/boost/bind/bind_mf2_cc.hpp delete mode 100644 extern/boost/boost/bind/bind_mf_cc.hpp delete mode 100644 extern/boost/boost/bind/bind_template.hpp rename extern/boost/boost/bind/{ => detail}/bind_cc.hpp (78%) create mode 100644 extern/boost/boost/bind/detail/bind_mf2_cc.hpp create mode 100644 extern/boost/boost/bind/detail/bind_mf_cc.hpp create mode 100644 extern/boost/boost/bind/detail/integer_sequence.hpp create mode 100644 extern/boost/boost/bind/detail/tuple_for_each.hpp delete mode 100644 extern/boost/boost/bind/mem_fn_cc.hpp delete mode 100644 extern/boost/boost/bind/mem_fn_template.hpp delete mode 100644 extern/boost/boost/bind/mem_fn_vw.hpp delete mode 100644 extern/boost/boost/bind/storage.hpp create mode 100644 extern/boost/boost/blank.hpp create mode 100644 extern/boost/boost/blank_fwd.hpp create mode 100644 extern/boost/boost/chrono/detail/requires_cxx11.hpp create mode 100644 extern/boost/boost/chrono/typeof/boost/chrono/chrono.hpp create mode 100644 extern/boost/boost/config/assert_cxx23.hpp create mode 100644 extern/boost/boost/container/detail/allocator_version_traits.hpp create mode 100644 extern/boost/boost/container/detail/compare_functors.hpp create mode 100644 extern/boost/boost/container/detail/container_or_allocator_rebind.hpp create mode 100644 extern/boost/boost/container/detail/container_rebind.hpp create mode 100644 extern/boost/boost/container/detail/flat_tree.hpp create mode 100644 extern/boost/boost/container/detail/is_container.hpp create mode 100644 extern/boost/boost/container/detail/is_contiguous_container.hpp create mode 100644 extern/boost/boost/container/detail/is_sorted.hpp create mode 100644 extern/boost/boost/container/detail/minimal_char_traits_header.hpp create mode 100644 extern/boost/boost/container/detail/multiallocation_chain.hpp create mode 100644 extern/boost/boost/container/detail/node_alloc_holder.hpp create mode 100644 extern/boost/boost/container/detail/pair_key_mapped_of_value.hpp create mode 100644 extern/boost/boost/container/detail/tree.hpp create mode 100644 extern/boost/boost/container/flat_map.hpp create mode 100644 extern/boost/boost/container/map.hpp create mode 100644 extern/boost/boost/container/node_handle.hpp create mode 100644 extern/boost/boost/container/string.hpp delete mode 100644 extern/boost/boost/container_hash/detail/float_functions.hpp delete mode 100644 extern/boost/boost/container_hash/detail/hash_float.hpp create mode 100644 extern/boost/boost/container_hash/detail/hash_integral.hpp create mode 100644 extern/boost/boost/container_hash/detail/hash_mix.hpp create mode 100644 extern/boost/boost/container_hash/detail/hash_range.hpp create mode 100644 extern/boost/boost/container_hash/detail/hash_tuple_like.hpp delete mode 100644 extern/boost/boost/container_hash/detail/limits.hpp create mode 100644 extern/boost/boost/container_hash/detail/mulx.hpp delete mode 100644 extern/boost/boost/container_hash/extensions.hpp create mode 100644 extern/boost/boost/container_hash/is_contiguous_range.hpp create mode 100644 extern/boost/boost/container_hash/is_described_class.hpp create mode 100644 extern/boost/boost/container_hash/is_range.hpp create mode 100644 extern/boost/boost/container_hash/is_tuple_like.hpp create mode 100644 extern/boost/boost/container_hash/is_unordered_range.hpp create mode 100644 extern/boost/boost/core/allocator_traits.hpp create mode 100644 extern/boost/boost/core/bit.hpp rename extern/boost/boost/core/{ => detail}/is_same.hpp (71%) create mode 100644 extern/boost/boost/core/detail/lwt_unattended.hpp create mode 100644 extern/boost/boost/core/detail/sp_thread_pause.hpp rename extern/boost/boost/{smart_ptr => core}/detail/sp_thread_sleep.hpp (54%) rename extern/boost/boost/{smart_ptr => core}/detail/sp_thread_yield.hpp (58%) rename extern/boost/boost/{smart_ptr => core}/detail/sp_win32_sleep.hpp (53%) create mode 100644 extern/boost/boost/core/empty_value.hpp create mode 100644 extern/boost/boost/core/invoke_swap.hpp create mode 100644 extern/boost/boost/core/lightweight_test.hpp create mode 100644 extern/boost/boost/core/lightweight_test_trait.hpp create mode 100644 extern/boost/boost/core/quick_exit.hpp create mode 100644 extern/boost/boost/core/serialization.hpp create mode 100644 extern/boost/boost/core/snprintf.hpp delete mode 100644 extern/boost/boost/core/swap.hpp create mode 100644 extern/boost/boost/core/type_name.hpp create mode 100644 extern/boost/boost/core/yield_primitives.hpp create mode 100644 extern/boost/boost/cstdfloat.hpp create mode 100644 extern/boost/boost/date_time.hpp create mode 100644 extern/boost/boost/date_time/date_facet.hpp create mode 100644 extern/boost/boost/date_time/date_format_simple.hpp create mode 100644 extern/boost/boost/date_time/date_formatting.hpp create mode 100644 extern/boost/boost/date_time/date_formatting_limited.hpp create mode 100644 extern/boost/boost/date_time/date_formatting_locales.hpp create mode 100644 extern/boost/boost/date_time/date_generator_formatter.hpp create mode 100644 extern/boost/boost/date_time/date_generator_parser.hpp create mode 100644 extern/boost/boost/date_time/date_names_put.hpp create mode 100644 extern/boost/boost/date_time/date_parsing.hpp create mode 100644 extern/boost/boost/date_time/dst_transition_generators.hpp create mode 100644 extern/boost/boost/date_time/find_match.hpp create mode 100644 extern/boost/boost/date_time/format_date_parser.hpp create mode 100644 extern/boost/boost/date_time/gregorian/formatters.hpp create mode 100644 extern/boost/boost/date_time/gregorian/formatters_limited.hpp create mode 100644 extern/boost/boost/date_time/gregorian/greg_facet.hpp create mode 100644 extern/boost/boost/date_time/gregorian/gregorian.hpp create mode 100644 extern/boost/boost/date_time/gregorian/gregorian_io.hpp create mode 100644 extern/boost/boost/date_time/gregorian/parsers.hpp create mode 100644 extern/boost/boost/date_time/iso_format.hpp create mode 100644 extern/boost/boost/date_time/local_time/conversion.hpp create mode 100644 extern/boost/boost/date_time/local_time/custom_time_zone.hpp create mode 100644 extern/boost/boost/date_time/local_time/date_duration_operators.hpp create mode 100644 extern/boost/boost/date_time/local_time/dst_transition_day_rules.hpp create mode 100644 extern/boost/boost/date_time/local_time/local_date_time.hpp create mode 100644 extern/boost/boost/date_time/local_time/local_time.hpp create mode 100644 extern/boost/boost/date_time/local_time/local_time_io.hpp create mode 100644 extern/boost/boost/date_time/local_time/local_time_types.hpp create mode 100644 extern/boost/boost/date_time/local_time/posix_time_zone.hpp create mode 100644 extern/boost/boost/date_time/local_time/tz_database.hpp create mode 100644 extern/boost/boost/date_time/parse_format_base.hpp create mode 100644 extern/boost/boost/date_time/period_formatter.hpp create mode 100644 extern/boost/boost/date_time/period_parser.hpp create mode 100644 extern/boost/boost/date_time/posix_time/posix_time.hpp create mode 100644 extern/boost/boost/date_time/posix_time/posix_time_io.hpp create mode 100644 extern/boost/boost/date_time/posix_time/posix_time_legacy_io.hpp create mode 100644 extern/boost/boost/date_time/posix_time/time_formatters.hpp create mode 100644 extern/boost/boost/date_time/posix_time/time_formatters_limited.hpp create mode 100644 extern/boost/boost/date_time/posix_time/time_parsers.hpp create mode 100644 extern/boost/boost/date_time/special_values_formatter.hpp create mode 100644 extern/boost/boost/date_time/special_values_parser.hpp create mode 100644 extern/boost/boost/date_time/string_convert.hpp create mode 100644 extern/boost/boost/date_time/string_parse_tree.hpp create mode 100644 extern/boost/boost/date_time/strings_from_facet.hpp create mode 100644 extern/boost/boost/date_time/time_facet.hpp create mode 100644 extern/boost/boost/date_time/time_formatting_streams.hpp create mode 100644 extern/boost/boost/date_time/time_parsing.hpp create mode 100644 extern/boost/boost/date_time/time_zone_base.hpp create mode 100644 extern/boost/boost/date_time/time_zone_names.hpp create mode 100644 extern/boost/boost/date_time/tz_db_base.hpp create mode 100644 extern/boost/boost/describe/bases.hpp create mode 100644 extern/boost/boost/describe/detail/config.hpp create mode 100644 extern/boost/boost/describe/detail/cx_streq.hpp create mode 100644 extern/boost/boost/describe/detail/void_t.hpp create mode 100644 extern/boost/boost/describe/members.hpp create mode 100644 extern/boost/boost/describe/modifiers.hpp create mode 100644 extern/boost/boost/detail/atomic_count.hpp delete mode 100644 extern/boost/boost/detail/container_fwd.hpp create mode 100644 extern/boost/boost/detail/lightweight_main.hpp rename extern/boost/boost/{checked_delete.hpp => detail/lightweight_test.hpp} (59%) create mode 100644 extern/boost/boost/detail/no_exceptions_support.hpp create mode 100644 extern/boost/boost/detail/templated_streams.hpp create mode 100644 extern/boost/boost/exception/all.hpp create mode 100644 extern/boost/boost/exception/detail/requires_cxx11.hpp create mode 100644 extern/boost/boost/exception/errinfo_api_function.hpp create mode 100644 extern/boost/boost/exception/errinfo_at_line.hpp create mode 100644 extern/boost/boost/exception/errinfo_errno.hpp create mode 100644 extern/boost/boost/exception/errinfo_file_handle.hpp create mode 100644 extern/boost/boost/exception/errinfo_file_name.hpp create mode 100644 extern/boost/boost/exception/errinfo_file_open_mode.hpp create mode 100644 extern/boost/boost/exception/errinfo_nested_exception.hpp create mode 100644 extern/boost/boost/exception/errinfo_type_info_name.hpp create mode 100644 extern/boost/boost/exception/error_info.hpp create mode 100644 extern/boost/boost/exception/info_tuple.hpp delete mode 100644 extern/boost/boost/function/detail/function_iterate.hpp delete mode 100644 extern/boost/boost/function/detail/gen_maybe_include.pl delete mode 100644 extern/boost/boost/function/detail/maybe_include.hpp delete mode 100644 extern/boost/boost/function/detail/prologue.hpp delete mode 100644 extern/boost/boost/function/function10.hpp delete mode 100644 extern/boost/boost/function/function3.hpp delete mode 100644 extern/boost/boost/function/function4.hpp delete mode 100644 extern/boost/boost/function/function5.hpp delete mode 100644 extern/boost/boost/function/function6.hpp delete mode 100644 extern/boost/boost/function/function7.hpp delete mode 100644 extern/boost/boost/function/function8.hpp delete mode 100644 extern/boost/boost/function/function9.hpp create mode 100644 extern/boost/boost/functional/hash_fwd.hpp create mode 100644 extern/boost/boost/integer/common_factor_ct.hpp delete mode 100644 extern/boost/boost/integer/static_log2.hpp create mode 100644 extern/boost/boost/interprocess/creation_tags.hpp create mode 100644 extern/boost/boost/interprocess/detail/atomic.hpp create mode 100644 extern/boost/boost/interprocess/detail/char_wchar_holder.hpp create mode 100644 extern/boost/boost/interprocess/detail/config_begin.hpp create mode 100644 extern/boost/boost/interprocess/detail/config_end.hpp create mode 100644 extern/boost/boost/interprocess/detail/config_external_begin.hpp create mode 100644 extern/boost/boost/interprocess/detail/config_external_end.hpp create mode 100644 extern/boost/boost/interprocess/detail/intermodule_singleton_common.hpp create mode 100644 extern/boost/boost/interprocess/detail/min_max.hpp create mode 100644 extern/boost/boost/interprocess/detail/mpl.hpp create mode 100644 extern/boost/boost/interprocess/detail/os_file_functions.hpp create mode 100644 extern/boost/boost/interprocess/detail/os_thread_functions.hpp create mode 100644 extern/boost/boost/interprocess/detail/shared_dir_helpers.hpp create mode 100644 extern/boost/boost/interprocess/detail/simple_swap.hpp create mode 100644 extern/boost/boost/interprocess/detail/std_fwd.hpp create mode 100644 extern/boost/boost/interprocess/detail/timed_utils.hpp create mode 100644 extern/boost/boost/interprocess/detail/type_traits.hpp create mode 100644 extern/boost/boost/interprocess/detail/utilities.hpp create mode 100644 extern/boost/boost/interprocess/detail/win32_api.hpp create mode 100644 extern/boost/boost/interprocess/detail/windows_intermodule_singleton.hpp create mode 100644 extern/boost/boost/interprocess/detail/workaround.hpp create mode 100644 extern/boost/boost/interprocess/errors.hpp create mode 100644 extern/boost/boost/interprocess/exceptions.hpp create mode 100644 extern/boost/boost/interprocess/interprocess_fwd.hpp create mode 100644 extern/boost/boost/interprocess/mapped_region.hpp create mode 100644 extern/boost/boost/interprocess/permissions.hpp create mode 100644 extern/boost/boost/interprocess/shared_memory_object.hpp create mode 100644 extern/boost/boost/interprocess/streams/bufferstream.hpp create mode 100644 extern/boost/boost/interprocess/sync/detail/common_algorithms.hpp create mode 100644 extern/boost/boost/interprocess/sync/lock_options.hpp create mode 100644 extern/boost/boost/interprocess/sync/scoped_lock.hpp create mode 100644 extern/boost/boost/interprocess/sync/spin/mutex.hpp create mode 100644 extern/boost/boost/interprocess/sync/spin/wait.hpp create mode 100644 extern/boost/boost/interprocess/sync/windows/sync_utils.hpp create mode 100644 extern/boost/boost/interprocess/sync/windows/winapi_mutex_wrapper.hpp create mode 100644 extern/boost/boost/interprocess/sync/windows/winapi_semaphore_wrapper.hpp create mode 100644 extern/boost/boost/interprocess/sync/windows/winapi_wrapper_common.hpp create mode 100644 extern/boost/boost/interprocess/timed_utils.hpp create mode 100644 extern/boost/boost/intrusive/avl_set_hook.hpp create mode 100644 extern/boost/boost/intrusive/avltree.hpp create mode 100644 extern/boost/boost/intrusive/avltree_algorithms.hpp create mode 100644 extern/boost/boost/intrusive/bs_set_hook.hpp create mode 100644 extern/boost/boost/intrusive/bstree.hpp create mode 100644 extern/boost/boost/intrusive/bstree_algorithms.hpp create mode 100644 extern/boost/boost/intrusive/circular_slist_algorithms.hpp create mode 100644 extern/boost/boost/intrusive/detail/algo_type.hpp create mode 100644 extern/boost/boost/intrusive/detail/array_initializer.hpp create mode 100644 extern/boost/boost/intrusive/detail/assert.hpp create mode 100644 extern/boost/boost/intrusive/detail/avltree_node.hpp create mode 100644 extern/boost/boost/intrusive/detail/bstree_algorithms_base.hpp create mode 100644 extern/boost/boost/intrusive/detail/common_slist_algorithms.hpp create mode 100644 extern/boost/boost/intrusive/detail/default_header_holder.hpp create mode 100644 extern/boost/boost/intrusive/detail/ebo_functor_holder.hpp create mode 100644 extern/boost/boost/intrusive/detail/empty_node_checker.hpp create mode 100644 extern/boost/boost/intrusive/detail/equal_to_value.hpp create mode 100644 extern/boost/boost/intrusive/detail/exception_disposer.hpp create mode 100644 extern/boost/boost/intrusive/detail/function_detector.hpp create mode 100644 extern/boost/boost/intrusive/detail/generic_hook.hpp create mode 100644 extern/boost/boost/intrusive/detail/get_value_traits.hpp create mode 100644 extern/boost/boost/intrusive/detail/hash_combine.hpp create mode 100644 extern/boost/boost/intrusive/detail/hash_mix.hpp create mode 100644 extern/boost/boost/intrusive/detail/hook_traits.hpp create mode 100644 extern/boost/boost/intrusive/detail/iiterator.hpp create mode 100644 extern/boost/boost/intrusive/detail/is_stateful_value_traits.hpp create mode 100644 extern/boost/boost/intrusive/detail/key_nodeptr_comp.hpp create mode 100644 extern/boost/boost/intrusive/detail/math.hpp create mode 100644 extern/boost/boost/intrusive/detail/minimal_less_equal_header.hpp create mode 100644 extern/boost/boost/intrusive/detail/node_cloner_disposer.hpp create mode 100644 extern/boost/boost/intrusive/detail/node_holder.hpp create mode 100644 extern/boost/boost/intrusive/detail/parent_from_member.hpp create mode 100644 extern/boost/boost/intrusive/detail/rbtree_node.hpp create mode 100644 extern/boost/boost/intrusive/detail/simple_disposers.hpp create mode 100644 extern/boost/boost/intrusive/detail/size_holder.hpp create mode 100644 extern/boost/boost/intrusive/detail/slist_iterator.hpp create mode 100644 extern/boost/boost/intrusive/detail/slist_node.hpp create mode 100644 extern/boost/boost/intrusive/detail/tree_iterator.hpp create mode 100644 extern/boost/boost/intrusive/detail/tree_node.hpp create mode 100644 extern/boost/boost/intrusive/detail/tree_value_compare.hpp create mode 100644 extern/boost/boost/intrusive/detail/twin.hpp create mode 100644 extern/boost/boost/intrusive/detail/uncast.hpp create mode 100644 extern/boost/boost/intrusive/intrusive_fwd.hpp create mode 100644 extern/boost/boost/intrusive/linear_slist_algorithms.hpp create mode 100644 extern/boost/boost/intrusive/link_mode.hpp create mode 100644 extern/boost/boost/intrusive/options.hpp create mode 100644 extern/boost/boost/intrusive/parent_from_member.hpp create mode 100644 extern/boost/boost/intrusive/pointer_plus_bits.hpp create mode 100644 extern/boost/boost/intrusive/rbtree.hpp create mode 100644 extern/boost/boost/intrusive/rbtree_algorithms.hpp create mode 100644 extern/boost/boost/intrusive/set_hook.hpp create mode 100644 extern/boost/boost/intrusive/sgtree.hpp create mode 100644 extern/boost/boost/intrusive/sgtree_algorithms.hpp create mode 100644 extern/boost/boost/intrusive/slist.hpp create mode 100644 extern/boost/boost/intrusive/slist_hook.hpp create mode 100644 extern/boost/boost/intrusive/splaytree.hpp create mode 100644 extern/boost/boost/intrusive/splaytree_algorithms.hpp create mode 100644 extern/boost/boost/iterator/is_iterator.hpp create mode 100644 extern/boost/boost/iterator/minimum_category.hpp create mode 100644 extern/boost/boost/lexical_cast/detail/buffer_view.hpp create mode 100644 extern/boost/boost/lexical_cast/detail/lcast_basic_unlockedbuf.hpp create mode 100644 extern/boost/boost/math/ccmath/abs.hpp create mode 100644 extern/boost/boost/math/ccmath/detail/config.hpp create mode 100644 extern/boost/boost/math/ccmath/isinf.hpp create mode 100644 extern/boost/boost/math/ccmath/isnan.hpp create mode 100644 extern/boost/boost/math/ccmath/ldexp.hpp create mode 100644 extern/boost/boost/math/cstdfloat/cstdfloat_cmath.hpp create mode 100644 extern/boost/boost/math/cstdfloat/cstdfloat_complex.hpp create mode 100644 extern/boost/boost/math/cstdfloat/cstdfloat_complex_std.hpp create mode 100644 extern/boost/boost/math/cstdfloat/cstdfloat_iostream.hpp create mode 100644 extern/boost/boost/math/cstdfloat/cstdfloat_limits.hpp create mode 100644 extern/boost/boost/math/cstdfloat/cstdfloat_types.hpp create mode 100644 extern/boost/boost/math/tools/is_constant_evaluated.hpp create mode 100644 extern/boost/boost/math/tools/nothrow.hpp create mode 100644 extern/boost/boost/move/algo/adaptive_sort.hpp create mode 100644 extern/boost/boost/move/algo/detail/pdqsort.hpp create mode 100644 extern/boost/boost/move/algo/detail/search.hpp create mode 100644 extern/boost/boost/move/detail/launder.hpp delete mode 100644 extern/boost/boost/move/make_unique.hpp create mode 100644 extern/boost/boost/mp11.hpp create mode 100644 extern/boost/boost/mp11/algorithm.hpp create mode 100644 extern/boost/boost/mp11/bind.hpp create mode 100644 extern/boost/boost/mp11/detail/config.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_append.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_copy_if.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_count.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_defer.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_fold.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_front.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_is_list.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_is_value_list.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_list.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_list_v.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_map_find.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_min_element.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_plus.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_remove_if.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_rename.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_value.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_void.hpp create mode 100644 extern/boost/boost/mp11/detail/mp_with_index.hpp create mode 100644 extern/boost/boost/mp11/function.hpp create mode 100644 extern/boost/boost/mp11/integer_sequence.hpp create mode 100644 extern/boost/boost/mp11/integral.hpp create mode 100644 extern/boost/boost/mp11/list.hpp create mode 100644 extern/boost/boost/mp11/map.hpp create mode 100644 extern/boost/boost/mp11/set.hpp create mode 100644 extern/boost/boost/mp11/tuple.hpp create mode 100644 extern/boost/boost/mp11/utility.hpp create mode 100644 extern/boost/boost/mp11/version.hpp delete mode 100644 extern/boost/boost/mpl/aux_/config/dependent_nttp.hpp create mode 100644 extern/boost/boost/mpl/aux_/empty_impl.hpp create mode 100644 extern/boost/boost/mpl/aux_/find_if_pred.hpp create mode 100644 extern/boost/boost/mpl/aux_/front_impl.hpp create mode 100644 extern/boost/boost/mpl/aux_/insert_impl.hpp create mode 100644 extern/boost/boost/mpl/aux_/insert_range_impl.hpp create mode 100644 extern/boost/boost/mpl/aux_/iter_apply.hpp create mode 100644 extern/boost/boost/mpl/aux_/iter_fold_if_impl.hpp create mode 100644 extern/boost/boost/mpl/aux_/iter_push_front.hpp create mode 100644 extern/boost/boost/mpl/aux_/size_impl.hpp create mode 100644 extern/boost/boost/mpl/empty.hpp create mode 100644 extern/boost/boost/mpl/find_if.hpp create mode 100644 extern/boost/boost/mpl/front.hpp create mode 100644 extern/boost/boost/mpl/insert.hpp create mode 100644 extern/boost/boost/mpl/insert_fwd.hpp create mode 100644 extern/boost/boost/mpl/insert_range.hpp create mode 100644 extern/boost/boost/mpl/insert_range_fwd.hpp create mode 100644 extern/boost/boost/mpl/iter_fold_if.hpp create mode 100644 extern/boost/boost/mpl/max_element.hpp create mode 100644 extern/boost/boost/mpl/same_as.hpp create mode 100644 extern/boost/boost/mpl/size.hpp create mode 100644 extern/boost/boost/mpl/size_t.hpp create mode 100644 extern/boost/boost/mpl/size_t_fwd.hpp create mode 100644 extern/boost/boost/mpl/sizeof.hpp create mode 100644 extern/boost/boost/multiprecision/cpp_int/cpp_int_config.hpp create mode 100644 extern/boost/boost/multiprecision/detail/check_cpp11_config.hpp create mode 100644 extern/boost/boost/multiprecision/fwd.hpp create mode 100644 extern/boost/boost/optional/detail/optional_hash.hpp create mode 100644 extern/boost/boost/predef/detail/test_def.h create mode 100644 extern/boost/boost/predef/library/std/msvc.h create mode 100644 extern/boost/boost/progress.hpp create mode 100644 extern/boost/boost/ratio/detail/gcd_lcm.hpp create mode 100644 extern/boost/boost/ratio/detail/is_evenly_divisible_by.hpp create mode 100644 extern/boost/boost/ratio/detail/is_ratio.hpp delete mode 100644 extern/boost/boost/ratio/detail/mpl/abs.hpp delete mode 100644 extern/boost/boost/ratio/detail/mpl/gcd.hpp delete mode 100644 extern/boost/boost/ratio/detail/mpl/lcm.hpp delete mode 100644 extern/boost/boost/ratio/detail/mpl/sign.hpp delete mode 100644 extern/boost/boost/ratio/detail/overflow_helpers.hpp delete mode 100644 extern/boost/boost/ratio/detail/ratio_io.hpp delete mode 100644 extern/boost/boost/ratio/mpl/rational_c_tag.hpp create mode 100644 extern/boost/boost/shared_array.hpp create mode 100644 extern/boost/boost/smart_ptr.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_gcc.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_gcc_atomic.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_gcc_x86.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_nt.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_pt.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_spin.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_std_atomic.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_sync.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/atomic_count_win32.hpp create mode 100644 extern/boost/boost/smart_ptr/detail/requires_cxx11.hpp delete mode 100644 extern/boost/boost/smart_ptr/detail/sp_thread_pause.hpp create mode 100644 extern/boost/boost/smart_ptr/make_unique.hpp create mode 100644 extern/boost/boost/smart_ptr/shared_array.hpp delete mode 100644 extern/boost/boost/swap.hpp create mode 100644 extern/boost/boost/system.hpp create mode 100644 extern/boost/boost/system/detail/mutex.hpp create mode 100644 extern/boost/boost/system/detail/std_category_impl.hpp create mode 100644 extern/boost/boost/system/linux_error.hpp create mode 100644 extern/boost/boost/system/result.hpp create mode 100644 extern/boost/boost/system/windows_error.hpp create mode 100644 extern/boost/boost/thread/caller_context.hpp create mode 100644 extern/boost/boost/thread/completion_latch.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/deque_adaptor.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/deque_base.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/deque_views.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/detail/sync_queue_base.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/queue_adaptor.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/queue_base.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/queue_op_status.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/queue_views.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/sync_bounded_queue.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/sync_deque.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/sync_priority_queue.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/sync_queue.hpp create mode 100644 extern/boost/boost/thread/concurrent_queues/sync_timed_queue.hpp create mode 100644 extern/boost/boost/thread/condition.hpp create mode 100644 extern/boost/boost/thread/csbl/devector.hpp create mode 100644 extern/boost/boost/thread/csbl/list.hpp create mode 100644 extern/boost/boost/thread/detail/counter.hpp create mode 100644 extern/boost/boost/thread/detail/log.hpp create mode 100644 extern/boost/boost/thread/detail/string_to_unsigned.hpp create mode 100644 extern/boost/boost/thread/detail/string_trim.hpp create mode 100644 extern/boost/boost/thread/executors/basic_thread_pool.hpp create mode 100644 extern/boost/boost/thread/executors/detail/priority_executor_base.hpp create mode 100644 extern/boost/boost/thread/executors/detail/scheduled_executor_base.hpp create mode 100644 extern/boost/boost/thread/executors/inline_executor.hpp create mode 100644 extern/boost/boost/thread/executors/loop_executor.hpp create mode 100644 extern/boost/boost/thread/executors/scheduled_thread_pool.hpp create mode 100644 extern/boost/boost/thread/executors/scheduler.hpp create mode 100644 extern/boost/boost/thread/executors/scheduling_adaptor.hpp create mode 100644 extern/boost/boost/thread/executors/serial_executor.hpp create mode 100644 extern/boost/boost/thread/executors/serial_executor_cont.hpp create mode 100644 extern/boost/boost/thread/executors/thread_executor.hpp create mode 100644 extern/boost/boost/thread/experimental/config/inline_namespace.hpp create mode 100644 extern/boost/boost/thread/experimental/exception_list.hpp create mode 100644 extern/boost/boost/thread/experimental/parallel/v1/exception_list.hpp create mode 100644 extern/boost/boost/thread/experimental/parallel/v1/inline_namespace.hpp create mode 100644 extern/boost/boost/thread/experimental/parallel/v2/inline_namespace.hpp create mode 100644 extern/boost/boost/thread/experimental/parallel/v2/task_region.hpp create mode 100644 extern/boost/boost/thread/experimental/task_region.hpp create mode 100644 extern/boost/boost/thread/externally_locked.hpp create mode 100644 extern/boost/boost/thread/externally_locked_stream.hpp create mode 100644 extern/boost/boost/thread/latch.hpp create mode 100644 extern/boost/boost/thread/lock_concepts.hpp create mode 100644 extern/boost/boost/thread/lock_factories.hpp create mode 100644 extern/boost/boost/thread/lock_traits.hpp create mode 100644 extern/boost/boost/thread/lockable_adapter.hpp create mode 100644 extern/boost/boost/thread/lockable_concepts.hpp create mode 100644 extern/boost/boost/thread/null_mutex.hpp create mode 100644 extern/boost/boost/thread/ostream_buffer.hpp create mode 100644 extern/boost/boost/thread/reverse_lock.hpp create mode 100644 extern/boost/boost/thread/scoped_thread.hpp create mode 100644 extern/boost/boost/thread/strict_lock.hpp create mode 100644 extern/boost/boost/thread/sync_bounded_queue.hpp create mode 100644 extern/boost/boost/thread/sync_queue.hpp create mode 100644 extern/boost/boost/thread/synchronized_value.hpp create mode 100644 extern/boost/boost/thread/thread_functors.hpp create mode 100644 extern/boost/boost/thread/thread_guard.hpp create mode 100644 extern/boost/boost/thread/thread_pool.hpp create mode 100644 extern/boost/boost/thread/with_lock_guard.hpp create mode 100644 extern/boost/boost/timer.hpp create mode 100644 extern/boost/boost/timer/progress_display.hpp create mode 100644 extern/boost/boost/token_functions.hpp create mode 100644 extern/boost/boost/token_iterator.hpp create mode 100644 extern/boost/boost/tokenizer.hpp create mode 100644 extern/boost/boost/type_traits.hpp create mode 100644 extern/boost/boost/type_traits/aligned_storage.hpp delete mode 100644 extern/boost/boost/type_traits/composite_traits.hpp create mode 100644 extern/boost/boost/type_traits/copy_cv_ref.hpp create mode 100644 extern/boost/boost/type_traits/copy_reference.hpp create mode 100644 extern/boost/boost/type_traits/detail/has_postfix_operator.hpp create mode 100644 extern/boost/boost/type_traits/detail/has_prefix_operator.hpp create mode 100644 extern/boost/boost/type_traits/detail/is_swappable_cxx_11.hpp create mode 100644 extern/boost/boost/type_traits/floating_point_promotion.hpp create mode 100644 extern/boost/boost/type_traits/has_bit_and.hpp create mode 100644 extern/boost/boost/type_traits/has_bit_and_assign.hpp create mode 100644 extern/boost/boost/type_traits/has_bit_or.hpp create mode 100644 extern/boost/boost/type_traits/has_bit_or_assign.hpp create mode 100644 extern/boost/boost/type_traits/has_bit_xor.hpp create mode 100644 extern/boost/boost/type_traits/has_bit_xor_assign.hpp create mode 100644 extern/boost/boost/type_traits/has_complement.hpp create mode 100644 extern/boost/boost/type_traits/has_dereference.hpp create mode 100644 extern/boost/boost/type_traits/has_divides.hpp create mode 100644 extern/boost/boost/type_traits/has_divides_assign.hpp create mode 100644 extern/boost/boost/type_traits/has_equal_to.hpp create mode 100644 extern/boost/boost/type_traits/has_greater.hpp create mode 100644 extern/boost/boost/type_traits/has_greater_equal.hpp create mode 100644 extern/boost/boost/type_traits/has_left_shift_assign.hpp create mode 100644 extern/boost/boost/type_traits/has_less.hpp create mode 100644 extern/boost/boost/type_traits/has_less_equal.hpp create mode 100644 extern/boost/boost/type_traits/has_logical_and.hpp create mode 100644 extern/boost/boost/type_traits/has_logical_not.hpp create mode 100644 extern/boost/boost/type_traits/has_logical_or.hpp create mode 100644 extern/boost/boost/type_traits/has_modulus.hpp create mode 100644 extern/boost/boost/type_traits/has_modulus_assign.hpp create mode 100644 extern/boost/boost/type_traits/has_multiplies.hpp create mode 100644 extern/boost/boost/type_traits/has_multiplies_assign.hpp create mode 100644 extern/boost/boost/type_traits/has_negate.hpp create mode 100644 extern/boost/boost/type_traits/has_new_operator.hpp create mode 100644 extern/boost/boost/type_traits/has_not_equal_to.hpp create mode 100644 extern/boost/boost/type_traits/has_nothrow_destructor.hpp create mode 100644 extern/boost/boost/type_traits/has_post_decrement.hpp create mode 100644 extern/boost/boost/type_traits/has_post_increment.hpp create mode 100644 extern/boost/boost/type_traits/has_pre_decrement.hpp create mode 100644 extern/boost/boost/type_traits/has_pre_increment.hpp create mode 100644 extern/boost/boost/type_traits/has_right_shift_assign.hpp create mode 100644 extern/boost/boost/type_traits/has_unary_minus.hpp create mode 100644 extern/boost/boost/type_traits/has_unary_plus.hpp create mode 100644 extern/boost/boost/type_traits/has_virtual_destructor.hpp create mode 100644 extern/boost/boost/type_traits/integral_promotion.hpp create mode 100644 extern/boost/boost/type_traits/is_complex.hpp create mode 100644 extern/boost/boost/type_traits/is_compound.hpp create mode 100644 extern/boost/boost/type_traits/is_copy_assignable.hpp create mode 100644 extern/boost/boost/type_traits/is_empty.hpp create mode 100644 extern/boost/boost/type_traits/is_final.hpp create mode 100644 extern/boost/boost/type_traits/is_list_constructible.hpp create mode 100644 extern/boost/boost/type_traits/is_member_object_pointer.hpp create mode 100644 extern/boost/boost/type_traits/is_nothrow_swappable.hpp create mode 100644 extern/boost/boost/type_traits/is_object.hpp create mode 100644 extern/boost/boost/type_traits/is_scoped_enum.hpp create mode 100644 extern/boost/boost/type_traits/is_stateless.hpp create mode 100644 extern/boost/boost/type_traits/is_swappable.hpp create mode 100644 extern/boost/boost/type_traits/is_trivially_copyable.hpp create mode 100644 extern/boost/boost/type_traits/is_unscoped_enum.hpp create mode 100644 extern/boost/boost/type_traits/is_virtual_base_of.hpp create mode 100644 extern/boost/boost/type_traits/negation.hpp create mode 100644 extern/boost/boost/type_traits/promote.hpp create mode 100644 extern/boost/boost/type_traits/rank.hpp create mode 100644 extern/boost/boost/type_traits/remove_cv_ref.hpp create mode 100644 extern/boost/boost/type_traits/same_traits.hpp create mode 100644 extern/boost/boost/typeof/constant.hpp create mode 100644 extern/boost/boost/typeof/decltype.hpp create mode 100644 extern/boost/boost/typeof/msvc/typeof_impl.hpp create mode 100644 extern/boost/boost/typeof/typeof.hpp create mode 100644 extern/boost/boost/unordered/detail/allocator_constructed.hpp create mode 100644 extern/boost/boost/unordered/detail/archive_constructed.hpp create mode 100644 extern/boost/boost/unordered/detail/bad_archive_exception.hpp create mode 100644 extern/boost/boost/unordered/detail/fca.hpp create mode 100644 extern/boost/boost/unordered/detail/implementation.hpp create mode 100644 extern/boost/boost/unordered/detail/map.hpp create mode 100644 extern/boost/boost/unordered/detail/narrow_cast.hpp create mode 100644 extern/boost/boost/unordered/detail/opt_storage.hpp create mode 100644 extern/boost/boost/unordered/detail/prime_fmod.hpp create mode 100644 extern/boost/boost/unordered/detail/serialization_version.hpp create mode 100644 extern/boost/boost/unordered/detail/serialize_container.hpp create mode 100644 extern/boost/boost/unordered/detail/serialize_fca_container.hpp create mode 100644 extern/boost/boost/unordered/detail/serialize_tracked_address.hpp create mode 100644 extern/boost/boost/unordered/detail/static_assert.hpp create mode 100644 extern/boost/boost/unordered/detail/throw_exception.hpp create mode 100644 extern/boost/boost/unordered/detail/type_traits.hpp create mode 100644 extern/boost/boost/unordered/unordered_map.hpp create mode 100644 extern/boost/boost/unordered/unordered_map_fwd.hpp create mode 100644 extern/boost/boost/unordered/unordered_set_fwd.hpp create mode 100644 extern/boost/boost/unordered_map.hpp delete mode 100644 extern/boost/boost/utility/swap.hpp create mode 100644 extern/boost/boost/variant/apply_visitor.hpp create mode 100644 extern/boost/boost/variant/detail/apply_visitor_binary.hpp create mode 100644 extern/boost/boost/variant/detail/apply_visitor_delayed.hpp create mode 100644 extern/boost/boost/variant/detail/apply_visitor_unary.hpp create mode 100644 extern/boost/boost/variant/detail/backup_holder.hpp create mode 100644 extern/boost/boost/variant/detail/cast_storage.hpp create mode 100644 extern/boost/boost/variant/detail/config.hpp create mode 100644 extern/boost/boost/variant/detail/enable_recursive_fwd.hpp create mode 100644 extern/boost/boost/variant/detail/forced_return.hpp create mode 100644 extern/boost/boost/variant/detail/has_result_type.hpp create mode 100644 extern/boost/boost/variant/detail/hash_variant.hpp create mode 100644 extern/boost/boost/variant/detail/initializer.hpp create mode 100644 extern/boost/boost/variant/detail/make_variant_list.hpp create mode 100644 extern/boost/boost/variant/detail/move.hpp create mode 100644 extern/boost/boost/variant/detail/over_sequence.hpp create mode 100644 extern/boost/boost/variant/detail/std_hash.hpp create mode 100644 extern/boost/boost/variant/detail/substitute_fwd.hpp create mode 100644 extern/boost/boost/variant/detail/variant_io.hpp create mode 100644 extern/boost/boost/variant/detail/visitation_impl.hpp create mode 100644 extern/boost/boost/variant/recursive_wrapper_fwd.hpp create mode 100644 extern/boost/boost/variant/static_visitor.hpp create mode 100644 extern/boost/boost/variant/variant.hpp create mode 100644 extern/boost/boost/variant/variant_fwd.hpp create mode 100644 extern/boost/boost/variant2/variant.hpp create mode 100644 extern/boost/boost/weak_ptr.hpp create mode 100644 extern/boost/boost/winapi/directory_management.hpp create mode 100644 extern/boost/boost/winapi/file_management.hpp create mode 100644 extern/boost/boost/winapi/file_mapping.hpp create mode 100644 extern/boost/boost/winapi/get_system_directory.hpp create mode 100644 extern/boost/boost/winapi/limits.hpp create mode 100644 extern/boost/boost/winapi/mutex.hpp create mode 100644 extern/boost/boost/winapi/overlapped.hpp create mode 100644 extern/boost/boost/winapi/security.hpp diff --git a/extern/boost/boost/algorithm/string.hpp b/extern/boost/boost/algorithm/string.hpp new file mode 100644 index 0000000000..0771517396 --- /dev/null +++ b/extern/boost/boost/algorithm/string.hpp @@ -0,0 +1,31 @@ +// Boost string_algo library string_algo.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2004. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_ALGO_HPP +#define BOOST_STRING_ALGO_HPP + +/*! \file + Cumulative include for string_algo library +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#endif // BOOST_STRING_ALGO_HPP diff --git a/extern/boost/boost/algorithm/string/case_conv.hpp b/extern/boost/boost/algorithm/string/case_conv.hpp new file mode 100644 index 0000000000..683340b8ec --- /dev/null +++ b/extern/boost/boost/algorithm/string/case_conv.hpp @@ -0,0 +1,176 @@ +// Boost string_algo library case_conv.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_CASE_CONV_HPP +#define BOOST_STRING_CASE_CONV_HPP + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include + +/*! \file + Defines sequence case-conversion algorithms. + Algorithms convert each element in the input sequence to the + desired case using provided locales. +*/ + +namespace boost { + namespace algorithm { + +// to_lower -----------------------------------------------// + + //! Convert to lower case + /*! + Each element of the input sequence is converted to lower + case. The result is a copy of the input converted to lower case. + It is returned as a sequence or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input range + \param Loc A locale used for conversion + \return + An output iterator pointing just after the last inserted character or + a copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + + */ + template + inline OutputIteratorT + to_lower_copy( + OutputIteratorT Output, + const RangeT& Input, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::detail::transform_range_copy( + Output, + ::boost::as_literal(Input), + ::boost::algorithm::detail::to_lowerF< + typename range_value::type >(Loc)); + } + + //! Convert to lower case + /*! + \overload + */ + template + inline SequenceT to_lower_copy( + const SequenceT& Input, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::detail::transform_range_copy( + Input, + ::boost::algorithm::detail::to_lowerF< + typename range_value::type >(Loc)); + } + + //! Convert to lower case + /*! + Each element of the input sequence is converted to lower + case. The input sequence is modified in-place. + + \param Input A range + \param Loc a locale used for conversion + */ + template + inline void to_lower( + WritableRangeT& Input, + const std::locale& Loc=std::locale()) + { + ::boost::algorithm::detail::transform_range( + ::boost::as_literal(Input), + ::boost::algorithm::detail::to_lowerF< + typename range_value::type >(Loc)); + } + +// to_upper -----------------------------------------------// + + //! Convert to upper case + /*! + Each element of the input sequence is converted to upper + case. The result is a copy of the input converted to upper case. + It is returned as a sequence or copied to the output iterator + + \param Output An output iterator to which the result will be copied + \param Input An input range + \param Loc A locale used for conversion + \return + An output iterator pointing just after the last inserted character or + a copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template + inline OutputIteratorT + to_upper_copy( + OutputIteratorT Output, + const RangeT& Input, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::detail::transform_range_copy( + Output, + ::boost::as_literal(Input), + ::boost::algorithm::detail::to_upperF< + typename range_value::type >(Loc)); + } + + //! Convert to upper case + /*! + \overload + */ + template + inline SequenceT to_upper_copy( + const SequenceT& Input, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::detail::transform_range_copy( + Input, + ::boost::algorithm::detail::to_upperF< + typename range_value::type >(Loc)); + } + + //! Convert to upper case + /*! + Each element of the input sequence is converted to upper + case. The input sequence is modified in-place. + + \param Input An input range + \param Loc a locale used for conversion + */ + template + inline void to_upper( + WritableRangeT& Input, + const std::locale& Loc=std::locale()) + { + ::boost::algorithm::detail::transform_range( + ::boost::as_literal(Input), + ::boost::algorithm::detail::to_upperF< + typename range_value::type >(Loc)); + } + + } // namespace algorithm + + // pull names to the boost namespace + using algorithm::to_lower; + using algorithm::to_lower_copy; + using algorithm::to_upper; + using algorithm::to_upper_copy; + +} // namespace boost + +#endif // BOOST_STRING_CASE_CONV_HPP diff --git a/extern/boost/boost/algorithm/string/detail/case_conv.hpp b/extern/boost/boost/algorithm/string/detail/case_conv.hpp new file mode 100644 index 0000000000..188602a1d0 --- /dev/null +++ b/extern/boost/boost/algorithm/string/detail/case_conv.hpp @@ -0,0 +1,130 @@ +// Boost string_algo library string_funct.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_CASE_CONV_DETAIL_HPP +#define BOOST_STRING_CASE_CONV_DETAIL_HPP + +#include +#include +#include + +#include +#include +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// case conversion functors -----------------------------------------------// + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(push) +#pragma warning(disable:4512) //assignment operator could not be generated +#endif + + // a tolower functor + template + struct to_lowerF + { + typedef CharT argument_type; + typedef CharT result_type; + // Constructor + to_lowerF( const std::locale& Loc ) : m_Loc( &Loc ) {} + + // Operation + CharT operator ()( CharT Ch ) const + { + #if defined(BOOST_BORLANDC) && (BOOST_BORLANDC >= 0x560) && (BOOST_BORLANDC <= 0x564) && !defined(_USE_OLD_RW_STL) + return std::tolower( static_cast::type> ( Ch )); + #else + return std::tolower( Ch, *m_Loc ); + #endif + } + private: + const std::locale* m_Loc; + }; + + // a toupper functor + template + struct to_upperF + { + typedef CharT argument_type; + typedef CharT result_type; + // Constructor + to_upperF( const std::locale& Loc ) : m_Loc( &Loc ) {} + + // Operation + CharT operator ()( CharT Ch ) const + { + #if defined(BOOST_BORLANDC) && (BOOST_BORLANDC >= 0x560) && (BOOST_BORLANDC <= 0x564) && !defined(_USE_OLD_RW_STL) + return std::toupper( static_cast::type> ( Ch )); + #else + return std::toupper( Ch, *m_Loc ); + #endif + } + private: + const std::locale* m_Loc; + }; + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(pop) +#endif + +// algorithm implementation ------------------------------------------------------------------------- + + // Transform a range + template + OutputIteratorT transform_range_copy( + OutputIteratorT Output, + const RangeT& Input, + FunctorT Functor) + { + return std::transform( + ::boost::begin(Input), + ::boost::end(Input), + Output, + Functor); + } + + // Transform a range (in-place) + template + void transform_range( + const RangeT& Input, + FunctorT Functor) + { + std::transform( + ::boost::begin(Input), + ::boost::end(Input), + ::boost::begin(Input), + Functor); + } + + template + inline SequenceT transform_range_copy( + const RangeT& Input, + FunctorT Functor) + { + return SequenceT( + ::boost::make_transform_iterator( + ::boost::begin(Input), + Functor), + ::boost::make_transform_iterator( + ::boost::end(Input), + Functor)); + } + + } // namespace detail + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_CASE_CONV_DETAIL_HPP diff --git a/extern/boost/boost/algorithm/string/detail/find_format.hpp b/extern/boost/boost/algorithm/string/detail/find_format.hpp new file mode 100644 index 0000000000..b39875024c --- /dev/null +++ b/extern/boost/boost/algorithm/string/detail/find_format.hpp @@ -0,0 +1,204 @@ +// Boost string_algo library find_format.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_FORMAT_DETAIL_HPP +#define BOOST_STRING_FIND_FORMAT_DETAIL_HPP + +#include +#include +#include +#include +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// find_format_copy (iterator variant) implementation -------------------------------// + + template< + typename OutputIteratorT, + typename InputT, + typename FormatterT, + typename FindResultT, + typename FormatResultT > + inline OutputIteratorT find_format_copy_impl2( + OutputIteratorT Output, + const InputT& Input, + FormatterT Formatter, + const FindResultT& FindResult, + const FormatResultT& FormatResult ) + { + typedef find_format_store< + BOOST_STRING_TYPENAME + range_const_iterator::type, + FormatterT, + FormatResultT > store_type; + + // Create store for the find result + store_type M( FindResult, FormatResult, Formatter ); + + if ( !M ) + { + // Match not found - return original sequence + Output = std::copy( ::boost::begin(Input), ::boost::end(Input), Output ); + return Output; + } + + // Copy the beginning of the sequence + Output = std::copy( ::boost::begin(Input), ::boost::begin(M), Output ); + // Format find result + // Copy formatted result + Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output ); + // Copy the rest of the sequence + Output = std::copy( M.end(), ::boost::end(Input), Output ); + + return Output; + } + + template< + typename OutputIteratorT, + typename InputT, + typename FormatterT, + typename FindResultT > + inline OutputIteratorT find_format_copy_impl( + OutputIteratorT Output, + const InputT& Input, + FormatterT Formatter, + const FindResultT& FindResult ) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + return ::boost::algorithm::detail::find_format_copy_impl2( + Output, + Input, + Formatter, + FindResult, + Formatter(FindResult) ); + } else { + return std::copy( ::boost::begin(Input), ::boost::end(Input), Output ); + } + } + + +// find_format_copy implementation --------------------------------------------------// + + template< + typename InputT, + typename FormatterT, + typename FindResultT, + typename FormatResultT > + inline InputT find_format_copy_impl2( + const InputT& Input, + FormatterT Formatter, + const FindResultT& FindResult, + const FormatResultT& FormatResult) + { + typedef find_format_store< + BOOST_STRING_TYPENAME + range_const_iterator::type, + FormatterT, + FormatResultT > store_type; + + // Create store for the find result + store_type M( FindResult, FormatResult, Formatter ); + + if ( !M ) + { + // Match not found - return original sequence + return InputT( Input ); + } + + InputT Output; + // Copy the beginning of the sequence + boost::algorithm::detail::insert( Output, ::boost::end(Output), ::boost::begin(Input), M.begin() ); + // Copy formatted result + boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() ); + // Copy the rest of the sequence + boost::algorithm::detail::insert( Output, ::boost::end(Output), M.end(), ::boost::end(Input) ); + + return Output; + } + + template< + typename InputT, + typename FormatterT, + typename FindResultT > + inline InputT find_format_copy_impl( + const InputT& Input, + FormatterT Formatter, + const FindResultT& FindResult) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + return ::boost::algorithm::detail::find_format_copy_impl2( + Input, + Formatter, + FindResult, + Formatter(FindResult) ); + } else { + return Input; + } + } + + // replace implementation ----------------------------------------------------// + + template< + typename InputT, + typename FormatterT, + typename FindResultT, + typename FormatResultT > + inline void find_format_impl2( + InputT& Input, + FormatterT Formatter, + const FindResultT& FindResult, + const FormatResultT& FormatResult) + { + typedef find_format_store< + BOOST_STRING_TYPENAME + range_iterator::type, + FormatterT, + FormatResultT > store_type; + + // Create store for the find result + store_type M( FindResult, FormatResult, Formatter ); + + if ( !M ) + { + // Search not found - return original sequence + return; + } + + // Replace match + ::boost::algorithm::detail::replace( Input, M.begin(), M.end(), M.format_result() ); + } + + template< + typename InputT, + typename FormatterT, + typename FindResultT > + inline void find_format_impl( + InputT& Input, + FormatterT Formatter, + const FindResultT& FindResult) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + ::boost::algorithm::detail::find_format_impl2( + Input, + Formatter, + FindResult, + Formatter(FindResult) ); + } + } + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FIND_FORMAT_DETAIL_HPP diff --git a/extern/boost/boost/algorithm/string/detail/find_format_all.hpp b/extern/boost/boost/algorithm/string/detail/find_format_all.hpp new file mode 100644 index 0000000000..311fa26fff --- /dev/null +++ b/extern/boost/boost/algorithm/string/detail/find_format_all.hpp @@ -0,0 +1,275 @@ +// Boost string_algo library find_format_all.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP +#define BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP + +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// find_format_all_copy (iterator variant) implementation ---------------------------// + + template< + typename OutputIteratorT, + typename InputT, + typename FinderT, + typename FormatterT, + typename FindResultT, + typename FormatResultT > + inline OutputIteratorT find_format_all_copy_impl2( + OutputIteratorT Output, + const InputT& Input, + FinderT Finder, + FormatterT Formatter, + const FindResultT& FindResult, + const FormatResultT& FormatResult ) + { + typedef BOOST_STRING_TYPENAME + range_const_iterator::type input_iterator_type; + + typedef find_format_store< + input_iterator_type, + FormatterT, + FormatResultT > store_type; + + // Create store for the find result + store_type M( FindResult, FormatResult, Formatter ); + + // Initialize last match + input_iterator_type LastMatch=::boost::begin(Input); + + // Iterate through all matches + while( M ) + { + // Copy the beginning of the sequence + Output = std::copy( LastMatch, M.begin(), Output ); + // Copy formatted result + Output = std::copy( ::boost::begin(M.format_result()), ::boost::end(M.format_result()), Output ); + + // Proceed to the next match + LastMatch=M.end(); + M=Finder( LastMatch, ::boost::end(Input) ); + } + + // Copy the rest of the sequence + Output = std::copy( LastMatch, ::boost::end(Input), Output ); + + return Output; + } + + template< + typename OutputIteratorT, + typename InputT, + typename FinderT, + typename FormatterT, + typename FindResultT > + inline OutputIteratorT find_format_all_copy_impl( + OutputIteratorT Output, + const InputT& Input, + FinderT Finder, + FormatterT Formatter, + const FindResultT& FindResult ) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + return ::boost::algorithm::detail::find_format_all_copy_impl2( + Output, + Input, + Finder, + Formatter, + FindResult, + Formatter(FindResult) ); + } else { + return std::copy( ::boost::begin(Input), ::boost::end(Input), Output ); + } + } + + // find_format_all_copy implementation ----------------------------------------------// + + template< + typename InputT, + typename FinderT, + typename FormatterT, + typename FindResultT, + typename FormatResultT > + inline InputT find_format_all_copy_impl2( + const InputT& Input, + FinderT Finder, + FormatterT Formatter, + const FindResultT& FindResult, + const FormatResultT& FormatResult) + { + typedef BOOST_STRING_TYPENAME + range_const_iterator::type input_iterator_type; + + typedef find_format_store< + input_iterator_type, + FormatterT, + FormatResultT > store_type; + + // Create store for the find result + store_type M( FindResult, FormatResult, Formatter ); + + // Initialize last match + input_iterator_type LastMatch=::boost::begin(Input); + + // Output temporary + InputT Output; + + // Iterate through all matches + while( M ) + { + // Copy the beginning of the sequence + boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, M.begin() ); + // Copy formatted result + boost::algorithm::detail::insert( Output, ::boost::end(Output), M.format_result() ); + + // Proceed to the next match + LastMatch=M.end(); + M=Finder( LastMatch, ::boost::end(Input) ); + } + + // Copy the rest of the sequence + ::boost::algorithm::detail::insert( Output, ::boost::end(Output), LastMatch, ::boost::end(Input) ); + + return Output; + } + + template< + typename InputT, + typename FinderT, + typename FormatterT, + typename FindResultT > + inline InputT find_format_all_copy_impl( + const InputT& Input, + FinderT Finder, + FormatterT Formatter, + const FindResultT& FindResult) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + return ::boost::algorithm::detail::find_format_all_copy_impl2( + Input, + Finder, + Formatter, + FindResult, + Formatter(FindResult) ); + } else { + return Input; + } + } + + // find_format_all implementation ------------------------------------------------// + + template< + typename InputT, + typename FinderT, + typename FormatterT, + typename FindResultT, + typename FormatResultT > + inline void find_format_all_impl2( + InputT& Input, + FinderT Finder, + FormatterT Formatter, + FindResultT FindResult, + FormatResultT FormatResult) + { + typedef BOOST_STRING_TYPENAME + range_iterator::type input_iterator_type; + typedef find_format_store< + input_iterator_type, + FormatterT, + FormatResultT > store_type; + + // Create store for the find result + store_type M( FindResult, FormatResult, Formatter ); + + // Instantiate replacement storage + std::deque< + BOOST_STRING_TYPENAME range_value::type> Storage; + + // Initialize replacement iterators + input_iterator_type InsertIt=::boost::begin(Input); + input_iterator_type SearchIt=::boost::begin(Input); + + while( M ) + { + // process the segment + InsertIt=process_segment( + Storage, + Input, + InsertIt, + SearchIt, + M.begin() ); + + // Adjust search iterator + SearchIt=M.end(); + + // Copy formatted replace to the storage + ::boost::algorithm::detail::copy_to_storage( Storage, M.format_result() ); + + // Find range for a next match + M=Finder( SearchIt, ::boost::end(Input) ); + } + + // process the last segment + InsertIt=::boost::algorithm::detail::process_segment( + Storage, + Input, + InsertIt, + SearchIt, + ::boost::end(Input) ); + + if ( Storage.empty() ) + { + // Truncate input + ::boost::algorithm::detail::erase( Input, InsertIt, ::boost::end(Input) ); + } + else + { + // Copy remaining data to the end of input + ::boost::algorithm::detail::insert( Input, ::boost::end(Input), Storage.begin(), Storage.end() ); + } + } + + template< + typename InputT, + typename FinderT, + typename FormatterT, + typename FindResultT > + inline void find_format_all_impl( + InputT& Input, + FinderT Finder, + FormatterT Formatter, + FindResultT FindResult) + { + if( ::boost::algorithm::detail::check_find_result(Input, FindResult) ) { + ::boost::algorithm::detail::find_format_all_impl2( + Input, + Finder, + Formatter, + FindResult, + Formatter(FindResult) ); + } + } + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FIND_FORMAT_ALL_DETAIL_HPP diff --git a/extern/boost/boost/algorithm/string/detail/find_format_store.hpp b/extern/boost/boost/algorithm/string/detail/find_format_store.hpp new file mode 100644 index 0000000000..b9f4a88d91 --- /dev/null +++ b/extern/boost/boost/algorithm/string/detail/find_format_store.hpp @@ -0,0 +1,89 @@ +// Boost string_algo library find_format_store.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP +#define BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP + +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// temporary format and find result storage --------------------------------// + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(push) +#pragma warning(disable:4512) //assignment operator could not be generated +#endif + template< + typename ForwardIteratorT, + typename FormatterT, + typename FormatResultT > + class find_format_store : + public iterator_range + { + public: + // typedefs + typedef iterator_range base_type; + typedef FormatterT formatter_type; + typedef FormatResultT format_result_type; + + public: + // Construction + find_format_store( + const base_type& FindResult, + const format_result_type& FormatResult, + const formatter_type& Formatter ) : + base_type(FindResult), + m_FormatResult(FormatResult), + m_Formatter(Formatter) {} + + // Assignment + template< typename FindResultT > + find_format_store& operator=( FindResultT FindResult ) + { + iterator_range::operator=(FindResult); + if( !this->empty() ) { + m_FormatResult=m_Formatter(FindResult); + } + + return *this; + } + + // Retrieve format result + const format_result_type& format_result() + { + return m_FormatResult; + } + + private: + format_result_type m_FormatResult; + const formatter_type& m_Formatter; + }; + + template + bool check_find_result(InputT&, FindResultT& FindResult) + { + typedef BOOST_STRING_TYPENAME + range_const_iterator::type input_iterator_type; + iterator_range ResultRange(FindResult); + return !ResultRange.empty(); + } + +#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) +#pragma warning(pop) +#endif + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FIND_FORMAT_STORE_DETAIL_HPP diff --git a/extern/boost/boost/algorithm/string/detail/find_iterator.hpp b/extern/boost/boost/algorithm/string/detail/find_iterator.hpp index 4f90a98fc0..c990785256 100644 --- a/extern/boost/boost/algorithm/string/detail/find_iterator.hpp +++ b/extern/boost/boost/algorithm/string/detail/find_iterator.hpp @@ -40,10 +40,18 @@ namespace boost { // Protected construction/destruction // Default constructor - find_iterator_base() {} + BOOST_DEFAULTED_FUNCTION(find_iterator_base(), {}) + // Copy construction - find_iterator_base( const find_iterator_base& Other ) : + BOOST_DEFAULTED_FUNCTION(find_iterator_base( const find_iterator_base& Other ), : m_Finder(Other.m_Finder) {} + ) + + // Assignment + BOOST_DEFAULTED_FUNCTION(find_iterator_base& operator=( const find_iterator_base& Other ), { + m_Finder = Other.m_Finder; + return *this; + }) // Constructor template @@ -51,7 +59,7 @@ namespace boost { m_Finder(Finder) {} // Destructor - ~find_iterator_base() {} + BOOST_DEFAULTED_FUNCTION(~find_iterator_base(), {}) // Find operation match_type do_find( diff --git a/extern/boost/boost/algorithm/string/detail/formatter.hpp b/extern/boost/boost/algorithm/string/detail/formatter.hpp new file mode 100644 index 0000000000..f4c6728b34 --- /dev/null +++ b/extern/boost/boost/algorithm/string/detail/formatter.hpp @@ -0,0 +1,119 @@ +// Boost string_algo library formatter.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FORMATTER_DETAIL_HPP +#define BOOST_STRING_FORMATTER_DETAIL_HPP + + +#include +#include +#include +#include + +#include + +// generic replace functors -----------------------------------------------// + +namespace boost { + namespace algorithm { + namespace detail { + +// const format functor ----------------------------------------------------// + + // constant format functor + template + struct const_formatF + { + private: + typedef BOOST_STRING_TYPENAME + range_const_iterator::type format_iterator; + typedef iterator_range result_type; + + public: + // Construction + const_formatF(const RangeT& Format) : + m_Format(::boost::begin(Format), ::boost::end(Format)) {} + + // Operation +#if BOOST_WORKAROUND(BOOST_BORLANDC, BOOST_TESTED_AT(0x564)) + template + result_type& operator()(const Range2T&) + { + return m_Format; + } +#endif + + template + const result_type& operator()(const Range2T&) const + { + return m_Format; + } + + private: + result_type m_Format; + }; + +// identity format functor ----------------------------------------------------// + + // identity format functor + template + struct identity_formatF + { + // Operation + template< typename Range2T > + const RangeT& operator()(const Range2T& Replace) const + { + return RangeT(::boost::begin(Replace), ::boost::end(Replace)); + } + }; + +// empty format functor ( used by erase ) ------------------------------------// + + // empty format functor + template< typename CharT > + struct empty_formatF + { + template< typename ReplaceT > + empty_container operator()(const ReplaceT&) const + { + return empty_container(); + } + }; + +// dissect format functor ----------------------------------------------------// + + // dissect format functor + template + struct dissect_formatF + { + public: + // Construction + dissect_formatF(FinderT Finder) : + m_Finder(Finder) {} + + // Operation + template + inline iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> + operator()(const RangeT& Replace) const + { + return m_Finder(::boost::begin(Replace), ::boost::end(Replace)); + } + + private: + FinderT m_Finder; + }; + + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_FORMATTER_DETAIL_HPP diff --git a/extern/boost/boost/algorithm/string/detail/predicate.hpp b/extern/boost/boost/algorithm/string/detail/predicate.hpp new file mode 100644 index 0000000000..5acf3cc663 --- /dev/null +++ b/extern/boost/boost/algorithm/string/detail/predicate.hpp @@ -0,0 +1,77 @@ +// Boost string_algo library predicate.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_PREDICATE_DETAIL_HPP +#define BOOST_STRING_PREDICATE_DETAIL_HPP + +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// ends_with predicate implementation ----------------------------------// + + template< + typename ForwardIterator1T, + typename ForwardIterator2T, + typename PredicateT> + inline bool ends_with_iter_select( + ForwardIterator1T Begin, + ForwardIterator1T End, + ForwardIterator2T SubBegin, + ForwardIterator2T SubEnd, + PredicateT Comp, + std::bidirectional_iterator_tag) + { + ForwardIterator1T it=End; + ForwardIterator2T pit=SubEnd; + for(;it!=Begin && pit!=SubBegin;) + { + if( !(Comp(*(--it),*(--pit))) ) + return false; + } + + return pit==SubBegin; + } + + template< + typename ForwardIterator1T, + typename ForwardIterator2T, + typename PredicateT> + inline bool ends_with_iter_select( + ForwardIterator1T Begin, + ForwardIterator1T End, + ForwardIterator2T SubBegin, + ForwardIterator2T SubEnd, + PredicateT Comp, + std::forward_iterator_tag) + { + if ( SubBegin==SubEnd ) + { + // empty subsequence check + return true; + } + + iterator_range Result + =last_finder( + ::boost::make_iterator_range(SubBegin, SubEnd), + Comp)(Begin, End); + + return !Result.empty() && Result.end()==End; + } + + } // namespace detail + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_PREDICATE_DETAIL_HPP diff --git a/extern/boost/boost/algorithm/string/detail/replace_storage.hpp b/extern/boost/boost/algorithm/string/detail/replace_storage.hpp new file mode 100644 index 0000000000..db35e4c53b --- /dev/null +++ b/extern/boost/boost/algorithm/string/detail/replace_storage.hpp @@ -0,0 +1,159 @@ +// Boost string_algo library replace_storage.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP +#define BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP + +#include +#include +#include +#include +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// storage handling routines -----------------------------------------------// + + template< typename StorageT, typename OutputIteratorT > + inline OutputIteratorT move_from_storage( + StorageT& Storage, + OutputIteratorT DestBegin, + OutputIteratorT DestEnd ) + { + OutputIteratorT OutputIt=DestBegin; + + while( !Storage.empty() && OutputIt!=DestEnd ) + { + *OutputIt=Storage.front(); + Storage.pop_front(); + ++OutputIt; + } + + return OutputIt; + } + + template< typename StorageT, typename WhatT > + inline void copy_to_storage( + StorageT& Storage, + const WhatT& What ) + { + Storage.insert( Storage.end(), ::boost::begin(What), ::boost::end(What) ); + } + + +// process segment routine -----------------------------------------------// + + template< bool HasStableIterators > + struct process_segment_helper + { + // Optimized version of process_segment for generic sequence + template< + typename StorageT, + typename InputT, + typename ForwardIteratorT > + ForwardIteratorT operator()( + StorageT& Storage, + InputT& /*Input*/, + ForwardIteratorT InsertIt, + ForwardIteratorT SegmentBegin, + ForwardIteratorT SegmentEnd ) + { + // Copy data from the storage until the beginning of the segment + ForwardIteratorT It=::boost::algorithm::detail::move_from_storage( Storage, InsertIt, SegmentBegin ); + + // 3 cases are possible : + // a) Storage is empty, It==SegmentBegin + // b) Storage is empty, It!=SegmentBegin + // c) Storage is not empty + + if( Storage.empty() ) + { + if( It==SegmentBegin ) + { + // Case a) everything is grand, just return end of segment + return SegmentEnd; + } + else + { + // Case b) move the segment backwards + return std::copy( SegmentBegin, SegmentEnd, It ); + } + } + else + { + // Case c) -> shift the segment to the left and keep the overlap in the storage + while( It!=SegmentEnd ) + { + // Store value into storage + Storage.push_back( *It ); + // Get the top from the storage and put it here + *It=Storage.front(); + Storage.pop_front(); + + // Advance + ++It; + } + + return It; + } + } + }; + + template<> + struct process_segment_helper< true > + { + // Optimized version of process_segment for list-like sequence + template< + typename StorageT, + typename InputT, + typename ForwardIteratorT > + ForwardIteratorT operator()( + StorageT& Storage, + InputT& Input, + ForwardIteratorT InsertIt, + ForwardIteratorT SegmentBegin, + ForwardIteratorT SegmentEnd ) + + { + // Call replace to do the job + ::boost::algorithm::detail::replace( Input, InsertIt, SegmentBegin, Storage ); + // Empty the storage + Storage.clear(); + // Iterators were not changed, simply return the end of segment + return SegmentEnd; + } + }; + + // Process one segment in the replace_all algorithm + template< + typename StorageT, + typename InputT, + typename ForwardIteratorT > + inline ForwardIteratorT process_segment( + StorageT& Storage, + InputT& Input, + ForwardIteratorT InsertIt, + ForwardIteratorT SegmentBegin, + ForwardIteratorT SegmentEnd ) + { + return + process_segment_helper< + has_stable_iterators::value>()( + Storage, Input, InsertIt, SegmentBegin, SegmentEnd ); + } + + + } // namespace detail + } // namespace algorithm +} // namespace boost + +#endif // BOOST_STRING_REPLACE_STORAGE_DETAIL_HPP diff --git a/extern/boost/boost/algorithm/string/detail/sequence.hpp b/extern/boost/boost/algorithm/string/detail/sequence.hpp new file mode 100644 index 0000000000..dc47409115 --- /dev/null +++ b/extern/boost/boost/algorithm/string/detail/sequence.hpp @@ -0,0 +1,200 @@ +// Boost string_algo library sequence.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_DETAIL_SEQUENCE_HPP +#define BOOST_STRING_DETAIL_SEQUENCE_HPP + +#include +#include +#include +#include +#include + +#include + +namespace boost { + namespace algorithm { + namespace detail { + +// insert helpers -------------------------------------------------// + + template< typename InputT, typename ForwardIteratorT > + inline void insert( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator At, + ForwardIteratorT Begin, + ForwardIteratorT End ) + { + Input.insert( At, Begin, End ); + } + + template< typename InputT, typename InsertT > + inline void insert( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator At, + const InsertT& Insert ) + { + ::boost::algorithm::detail::insert( Input, At, ::boost::begin(Insert), ::boost::end(Insert) ); + } + +// erase helper ---------------------------------------------------// + + // Erase a range in the sequence + /* + Returns the iterator pointing just after the erase subrange + */ + template< typename InputT > + inline typename InputT::iterator erase( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator From, + BOOST_STRING_TYPENAME InputT::iterator To ) + { + return Input.erase( From, To ); + } + +// replace helper implementation ----------------------------------// + + // Optimized version of replace for generic sequence containers + // Assumption: insert and erase are expensive + template< bool HasConstTimeOperations > + struct replace_const_time_helper + { + template< typename InputT, typename ForwardIteratorT > + void operator()( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator From, + BOOST_STRING_TYPENAME InputT::iterator To, + ForwardIteratorT Begin, + ForwardIteratorT End ) + { + // Copy data to the container ( as much as possible ) + ForwardIteratorT InsertIt=Begin; + BOOST_STRING_TYPENAME InputT::iterator InputIt=From; + for(; InsertIt!=End && InputIt!=To; InsertIt++, InputIt++ ) + { + *InputIt=*InsertIt; + } + + if ( InsertIt!=End ) + { + // Replace sequence is longer, insert it + Input.insert( InputIt, InsertIt, End ); + } + else + { + if ( InputIt!=To ) + { + // Replace sequence is shorter, erase the rest + Input.erase( InputIt, To ); + } + } + } + }; + + template<> + struct replace_const_time_helper< true > + { + // Const-time erase and insert methods -> use them + template< typename InputT, typename ForwardIteratorT > + void operator()( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator From, + BOOST_STRING_TYPENAME InputT::iterator To, + ForwardIteratorT Begin, + ForwardIteratorT End ) + { + BOOST_STRING_TYPENAME InputT::iterator At=Input.erase( From, To ); + if ( Begin!=End ) + { + if(!Input.empty()) + { + Input.insert( At, Begin, End ); + } + else + { + Input.insert( Input.begin(), Begin, End ); + } + } + } + }; + + // No native replace method + template< bool HasNative > + struct replace_native_helper + { + template< typename InputT, typename ForwardIteratorT > + void operator()( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator From, + BOOST_STRING_TYPENAME InputT::iterator To, + ForwardIteratorT Begin, + ForwardIteratorT End ) + { + replace_const_time_helper< + boost::mpl::and_< + has_const_time_insert, + has_const_time_erase >::value >()( + Input, From, To, Begin, End ); + } + }; + + // Container has native replace method + template<> + struct replace_native_helper< true > + { + template< typename InputT, typename ForwardIteratorT > + void operator()( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator From, + BOOST_STRING_TYPENAME InputT::iterator To, + ForwardIteratorT Begin, + ForwardIteratorT End ) + { + Input.replace( From, To, Begin, End ); + } + }; + +// replace helper -------------------------------------------------// + + template< typename InputT, typename ForwardIteratorT > + inline void replace( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator From, + BOOST_STRING_TYPENAME InputT::iterator To, + ForwardIteratorT Begin, + ForwardIteratorT End ) + { + replace_native_helper< has_native_replace::value >()( + Input, From, To, Begin, End ); + } + + template< typename InputT, typename InsertT > + inline void replace( + InputT& Input, + BOOST_STRING_TYPENAME InputT::iterator From, + BOOST_STRING_TYPENAME InputT::iterator To, + const InsertT& Insert ) + { + if(From!=To) + { + ::boost::algorithm::detail::replace( Input, From, To, ::boost::begin(Insert), ::boost::end(Insert) ); + } + else + { + ::boost::algorithm::detail::insert( Input, From, ::boost::begin(Insert), ::boost::end(Insert) ); + } + } + + } // namespace detail + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_DETAIL_SEQUENCE_HPP diff --git a/extern/boost/boost/algorithm/string/erase.hpp b/extern/boost/boost/algorithm/string/erase.hpp new file mode 100644 index 0000000000..6883790978 --- /dev/null +++ b/extern/boost/boost/algorithm/string/erase.hpp @@ -0,0 +1,844 @@ +// Boost string_algo library erase.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2006. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_ERASE_HPP +#define BOOST_STRING_ERASE_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +/*! \file + Defines various erase algorithms. Each algorithm removes + part(s) of the input according to a searching criteria. +*/ + +namespace boost { + namespace algorithm { + +// erase_range -------------------------------------------------------// + + //! Erase range algorithm + /*! + Remove the given range from the input. The result is a modified copy of + the input. It is returned as a sequence or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input sequence + \param SearchRange A range in the input to be removed + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template + inline OutputIteratorT erase_range_copy( + OutputIteratorT Output, + const RangeT& Input, + const iterator_range< + BOOST_STRING_TYPENAME + range_const_iterator::type>& SearchRange ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase range algorithm + /*! + \overload + */ + template + inline SequenceT erase_range_copy( + const SequenceT& Input, + const iterator_range< + BOOST_STRING_TYPENAME + range_const_iterator::type>& SearchRange ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase range algorithm + /*! + Remove the given range from the input. + The input sequence is modified in-place. + + \param Input An input sequence + \param SearchRange A range in the input to be removed + */ + template + inline void erase_range( + SequenceT& Input, + const iterator_range< + BOOST_STRING_TYPENAME + range_iterator::type>& SearchRange ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::empty_formatter(Input) ); + } + +// erase_first --------------------------------------------------------// + + //! Erase first algorithm + /*! + Remove the first occurrence of the substring from the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT erase_first_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase first algorithm + /*! + \overload + */ + template + inline SequenceT erase_first_copy( + const SequenceT& Input, + const RangeT& Search ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase first algorithm + /*! + Remove the first occurrence of the substring from the input. + The input sequence is modified in-place. + + \param Input An input string + \param Search A substring to be searched for. + */ + template + inline void erase_first( + SequenceT& Input, + const RangeT& Search ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + +// erase_first ( case insensitive ) ------------------------------------// + + //! Erase first algorithm ( case insensitive ) + /*! + Remove the first occurrence of the substring from the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + Searching is case insensitive. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Loc A locale used for case insensitive comparison + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT ierase_first_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase first algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ierase_first_copy( + const SequenceT& Input, + const RangeT& Search, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase first algorithm ( case insensitive ) + /*! + Remove the first occurrence of the substring from the input. + The input sequence is modified in-place. Searching is case insensitive. + + \param Input An input string + \param Search A substring to be searched for + \param Loc A locale used for case insensitive comparison + */ + template + inline void ierase_first( + SequenceT& Input, + const RangeT& Search, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + +// erase_last --------------------------------------------------------// + + //! Erase last algorithm + /*! + Remove the last occurrence of the substring from the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for. + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT erase_last_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase last algorithm + /*! + \overload + */ + template + inline SequenceT erase_last_copy( + const SequenceT& Input, + const RangeT& Search ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase last algorithm + /*! + Remove the last occurrence of the substring from the input. + The input sequence is modified in-place. + + \param Input An input string + \param Search A substring to be searched for + */ + template + inline void erase_last( + SequenceT& Input, + const RangeT& Search ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + +// erase_last ( case insensitive ) ------------------------------------// + + //! Erase last algorithm ( case insensitive ) + /*! + Remove the last occurrence of the substring from the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + Searching is case insensitive. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Loc A locale used for case insensitive comparison + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT ierase_last_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase last algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ierase_last_copy( + const SequenceT& Input, + const RangeT& Search, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase last algorithm ( case insensitive ) + /*! + Remove the last occurrence of the substring from the input. + The input sequence is modified in-place. Searching is case insensitive. + + \param Input An input string + \param Search A substring to be searched for + \param Loc A locale used for case insensitive comparison + */ + template + inline void ierase_last( + SequenceT& Input, + const RangeT& Search, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + +// erase_nth --------------------------------------------------------------------// + + //! Erase nth algorithm + /*! + Remove the Nth occurrence of the substring in the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Nth An index of the match to be replaced. The index is 0-based. + For negative N, matches are counted from the end of string. + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT erase_nth_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + int Nth ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase nth algorithm + /*! + \overload + */ + template + inline SequenceT erase_nth_copy( + const SequenceT& Input, + const RangeT& Search, + int Nth ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase nth algorithm + /*! + Remove the Nth occurrence of the substring in the input. + The input sequence is modified in-place. + + \param Input An input string + \param Search A substring to be searched for. + \param Nth An index of the match to be replaced. The index is 0-based. + For negative N, matches are counted from the end of string. + */ + template + inline void erase_nth( + SequenceT& Input, + const RangeT& Search, + int Nth ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::empty_formatter(Input) ); + } + +// erase_nth ( case insensitive ) ---------------------------------------------// + + //! Erase nth algorithm ( case insensitive ) + /*! + Remove the Nth occurrence of the substring in the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + Searching is case insensitive. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for. + \param Nth An index of the match to be replaced. The index is 0-based. + For negative N, matches are counted from the end of string. + \param Loc A locale used for case insensitive comparison + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT ierase_nth_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + int Nth, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase nth algorithm + /*! + \overload + */ + template + inline SequenceT ierase_nth_copy( + const SequenceT& Input, + const RangeT& Search, + int Nth, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), + empty_formatter(Input) ); + } + + //! Erase nth algorithm + /*! + Remove the Nth occurrence of the substring in the input. + The input sequence is modified in-place. Searching is case insensitive. + + \param Input An input string + \param Search A substring to be searched for. + \param Nth An index of the match to be replaced. The index is 0-based. + For negative N, matches are counted from the end of string. + \param Loc A locale used for case insensitive comparison + */ + template + inline void ierase_nth( + SequenceT& Input, + const RangeT& Search, + int Nth, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + + +// erase_all --------------------------------------------------------// + + //! Erase all algorithm + /*! + Remove all the occurrences of the string from the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + + \param Output An output iterator to which the result will be copied + \param Input An input sequence + \param Search A substring to be searched for. + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT erase_all_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search ) + { + return ::boost::algorithm::find_format_all_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase all algorithm + /*! + \overload + */ + template + inline SequenceT erase_all_copy( + const SequenceT& Input, + const RangeT& Search ) + { + return ::boost::algorithm::find_format_all_copy( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase all algorithm + /*! + Remove all the occurrences of the string from the input. + The input sequence is modified in-place. + + \param Input An input string + \param Search A substring to be searched for. + */ + template + inline void erase_all( + SequenceT& Input, + const RangeT& Search ) + { + ::boost::algorithm::find_format_all( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::empty_formatter(Input) ); + } + +// erase_all ( case insensitive ) ------------------------------------// + + //! Erase all algorithm ( case insensitive ) + /*! + Remove all the occurrences of the string from the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + Searching is case insensitive. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Loc A locale used for case insensitive comparison + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT ierase_all_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_all_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase all algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ierase_all_copy( + const SequenceT& Input, + const RangeT& Search, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_all_copy( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + + //! Erase all algorithm ( case insensitive ) + /*! + Remove all the occurrences of the string from the input. + The input sequence is modified in-place. Searching is case insensitive. + + \param Input An input string + \param Search A substring to be searched for. + \param Loc A locale used for case insensitive comparison + */ + template + inline void ierase_all( + SequenceT& Input, + const RangeT& Search, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format_all( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::empty_formatter(Input) ); + } + +// erase_head --------------------------------------------------------------------// + + //! Erase head algorithm + /*! + Remove the head from the input. The head is a prefix of a sequence of given size. + If the sequence is shorter then required, the whole string is + considered to be the head. The result is a modified copy of the input. + It is returned as a sequence or copied to the output iterator. + + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param N Length of the head. + For N>=0, at most N characters are extracted. + For N<0, size(Input)-|N| characters are extracted. + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename RangeT> + inline OutputIteratorT erase_head_copy( + OutputIteratorT Output, + const RangeT& Input, + int N ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::empty_formatter( Input ) ); + } + + //! Erase head algorithm + /*! + \overload + */ + template + inline SequenceT erase_head_copy( + const SequenceT& Input, + int N ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::empty_formatter( Input ) ); + } + + //! Erase head algorithm + /*! + Remove the head from the input. The head is a prefix of a sequence of given size. + If the sequence is shorter then required, the whole string is + considered to be the head. The input sequence is modified in-place. + + \param Input An input string + \param N Length of the head + For N>=0, at most N characters are extracted. + For N<0, size(Input)-|N| characters are extracted. + */ + template + inline void erase_head( + SequenceT& Input, + int N ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::empty_formatter( Input ) ); + } + +// erase_tail --------------------------------------------------------------------// + + //! Erase tail algorithm + /*! + Remove the tail from the input. The tail is a suffix of a sequence of given size. + If the sequence is shorter then required, the whole string is + considered to be the tail. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param N Length of the tail. + For N>=0, at most N characters are extracted. + For N<0, size(Input)-|N| characters are extracted. + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename RangeT> + inline OutputIteratorT erase_tail_copy( + OutputIteratorT Output, + const RangeT& Input, + int N ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::empty_formatter( Input ) ); + } + + //! Erase tail algorithm + /*! + \overload + */ + template + inline SequenceT erase_tail_copy( + const SequenceT& Input, + int N ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::empty_formatter( Input ) ); + } + + //! Erase tail algorithm + /*! + Remove the tail from the input. The tail is a suffix of a sequence of given size. + If the sequence is shorter then required, the whole string is + considered to be the tail. The input sequence is modified in-place. + + \param Input An input string + \param N Length of the tail + For N>=0, at most N characters are extracted. + For N<0, size(Input)-|N| characters are extracted. + */ + template + inline void erase_tail( + SequenceT& Input, + int N ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::empty_formatter( Input ) ); + } + + } // namespace algorithm + + // pull names into the boost namespace + using algorithm::erase_range_copy; + using algorithm::erase_range; + using algorithm::erase_first_copy; + using algorithm::erase_first; + using algorithm::ierase_first_copy; + using algorithm::ierase_first; + using algorithm::erase_last_copy; + using algorithm::erase_last; + using algorithm::ierase_last_copy; + using algorithm::ierase_last; + using algorithm::erase_nth_copy; + using algorithm::erase_nth; + using algorithm::ierase_nth_copy; + using algorithm::ierase_nth; + using algorithm::erase_all_copy; + using algorithm::erase_all; + using algorithm::ierase_all_copy; + using algorithm::ierase_all; + using algorithm::erase_head_copy; + using algorithm::erase_head; + using algorithm::erase_tail_copy; + using algorithm::erase_tail; + +} // namespace boost + + +#endif // BOOST_ERASE_HPP diff --git a/extern/boost/boost/algorithm/string/find.hpp b/extern/boost/boost/algorithm/string/find.hpp new file mode 100644 index 0000000000..f2c2926b50 --- /dev/null +++ b/extern/boost/boost/algorithm/string/find.hpp @@ -0,0 +1,334 @@ +// Boost string_algo library find.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_HPP +#define BOOST_STRING_FIND_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include + +/*! \file + Defines a set of find algorithms. The algorithms are searching + for a substring of the input. The result is given as an \c iterator_range + delimiting the substring. +*/ + +namespace boost { + namespace algorithm { + +// Generic find -----------------------------------------------// + + //! Generic find algorithm + /*! + Search the input using the given finder. + + \param Input A string which will be searched. + \param Finder Finder object used for searching. + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c RangeT::iterator or + \c RangeT::const_iterator, depending on the constness of + the input parameter. + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + find( + RangeT& Input, + const FinderT& Finder) + { + iterator_range::type> lit_input(::boost::as_literal(Input)); + + return Finder(::boost::begin(lit_input),::boost::end(lit_input)); + } + +// find_first -----------------------------------------------// + + //! Find first algorithm + /*! + Search for the first occurrence of the substring in the input. + + \param Input A string which will be searched. + \param Search A substring to be searched for. + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c RangeT::iterator or + \c RangeT::const_iterator, depending on the constness of + the input parameter. + + \note This function provides the strong exception-safety guarantee + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + find_first( + Range1T& Input, + const Range2T& Search) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search)); + } + + //! Find first algorithm ( case insensitive ) + /*! + Search for the first occurrence of the substring in the input. + Searching is case insensitive. + + \param Input A string which will be searched. + \param Search A substring to be searched for. + \param Loc A locale used for case insensitive comparison + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c Range1T::iterator or + \c Range1T::const_iterator, depending on the constness of + the input parameter. + + \note This function provides the strong exception-safety guarantee + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + ifind_first( + Range1T& Input, + const Range2T& Search, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::first_finder(Search,is_iequal(Loc))); + } + +// find_last -----------------------------------------------// + + //! Find last algorithm + /*! + Search for the last occurrence of the substring in the input. + + \param Input A string which will be searched. + \param Search A substring to be searched for. + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c Range1T::iterator or + \c Range1T::const_iterator, depending on the constness of + the input parameter. + + \note This function provides the strong exception-safety guarantee + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + find_last( + Range1T& Input, + const Range2T& Search) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search)); + } + + //! Find last algorithm ( case insensitive ) + /*! + Search for the last match a string in the input. + Searching is case insensitive. + + \param Input A string which will be searched. + \param Search A substring to be searched for. + \param Loc A locale used for case insensitive comparison + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c Range1T::iterator or + \c Range1T::const_iterator, depending on the constness of + the input parameter. + + \note This function provides the strong exception-safety guarantee + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + ifind_last( + Range1T& Input, + const Range2T& Search, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::last_finder(Search, is_iequal(Loc))); + } + +// find_nth ----------------------------------------------------------------------// + + //! Find n-th algorithm + /*! + Search for the n-th (zero-indexed) occurrence of the substring in the + input. + + \param Input A string which will be searched. + \param Search A substring to be searched for. + \param Nth An index (zero-indexed) of the match to be found. + For negative N, the matches are counted from the end of string. + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c Range1T::iterator or + \c Range1T::const_iterator, depending on the constness of + the input parameter. + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + find_nth( + Range1T& Input, + const Range2T& Search, + int Nth) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth)); + } + + //! Find n-th algorithm ( case insensitive ). + /*! + Search for the n-th (zero-indexed) occurrence of the substring in the + input. Searching is case insensitive. + + \param Input A string which will be searched. + \param Search A substring to be searched for. + \param Nth An index (zero-indexed) of the match to be found. + For negative N, the matches are counted from the end of string. + \param Loc A locale used for case insensitive comparison + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c Range1T::iterator or + \c Range1T::const_iterator, depending on the constness of + the input parameter. + + + \note This function provides the strong exception-safety guarantee + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + ifind_nth( + Range1T& Input, + const Range2T& Search, + int Nth, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::nth_finder(Search,Nth,is_iequal(Loc))); + } + +// find_head ----------------------------------------------------------------------// + + //! Find head algorithm + /*! + Get the head of the input. Head is a prefix of the string of the + given size. If the input is shorter then required, whole input is considered + to be the head. + + \param Input An input string + \param N Length of the head + For N>=0, at most N characters are extracted. + For N<0, at most size(Input)-|N| characters are extracted. + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c Range1T::iterator or + \c Range1T::const_iterator, depending on the constness of + the input parameter. + + \note This function provides the strong exception-safety guarantee + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + find_head( + RangeT& Input, + int N) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::head_finder(N)); + } + +// find_tail ----------------------------------------------------------------------// + + //! Find tail algorithm + /*! + Get the tail of the input. Tail is a suffix of the string of the + given size. If the input is shorter then required, whole input is considered + to be the tail. + + \param Input An input string + \param N Length of the tail. + For N>=0, at most N characters are extracted. + For N<0, at most size(Input)-|N| characters are extracted. + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c RangeT::iterator or + \c RangeT::const_iterator, depending on the constness of + the input parameter. + + + \note This function provides the strong exception-safety guarantee + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + find_tail( + RangeT& Input, + int N) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::tail_finder(N)); + } + +// find_token --------------------------------------------------------------------// + + //! Find token algorithm + /*! + Look for a given token in the string. Token is a character that matches the + given predicate. + If the "token compress mode" is enabled, adjacent tokens are considered to be one match. + + \param Input A input string. + \param Pred A unary predicate to identify a token + \param eCompress Enable/Disable compressing of adjacent tokens + \return + An \c iterator_range delimiting the match. + Returned iterator is either \c RangeT::iterator or + \c RangeT::const_iterator, depending on the constness of + the input parameter. + + \note This function provides the strong exception-safety guarantee + */ + template + inline iterator_range< + BOOST_STRING_TYPENAME range_iterator::type> + find_token( + RangeT& Input, + PredicateT Pred, + token_compress_mode_type eCompress=token_compress_off) + { + return ::boost::algorithm::find(Input, ::boost::algorithm::token_finder(Pred, eCompress)); + } + + } // namespace algorithm + + // pull names to the boost namespace + using algorithm::find; + using algorithm::find_first; + using algorithm::ifind_first; + using algorithm::find_last; + using algorithm::ifind_last; + using algorithm::find_nth; + using algorithm::ifind_nth; + using algorithm::find_head; + using algorithm::find_tail; + using algorithm::find_token; + +} // namespace boost + + +#endif // BOOST_STRING_FIND_HPP diff --git a/extern/boost/boost/algorithm/string/find_format.hpp b/extern/boost/boost/algorithm/string/find_format.hpp new file mode 100644 index 0000000000..4d9315cb17 --- /dev/null +++ b/extern/boost/boost/algorithm/string/find_format.hpp @@ -0,0 +1,286 @@ +// Boost string_algo library find_format.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FIND_FORMAT_HPP +#define BOOST_STRING_FIND_FORMAT_HPP + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/*! \file + Defines generic replace algorithms. Each algorithm replaces + part(s) of the input. The part to be replaced is looked up using a Finder object. + Result of finding is then used by a Formatter object to generate the replacement. +*/ + +namespace boost { + namespace algorithm { + +// generic replace -----------------------------------------------------------------// + + //! Generic replace algorithm + /*! + Use the Finder to search for a substring. Use the Formatter to format + this substring and replace it in the input. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input sequence + \param Finder A Finder object used to search for a match to be replaced + \param Formatter A Formatter object used to format a match + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename RangeT, + typename FinderT, + typename FormatterT> + inline OutputIteratorT find_format_copy( + OutputIteratorT Output, + const RangeT& Input, + FinderT Finder, + FormatterT Formatter ) + { + // Concept check + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + iterator_range::type> lit_input(::boost::as_literal(Input)); + + return detail::find_format_copy_impl( + Output, + lit_input, + Formatter, + Finder( ::boost::begin(lit_input), ::boost::end(lit_input) ) ); + } + + //! Generic replace algorithm + /*! + \overload + */ + template< + typename SequenceT, + typename FinderT, + typename FormatterT> + inline SequenceT find_format_copy( + const SequenceT& Input, + FinderT Finder, + FormatterT Formatter ) + { + // Concept check + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + return detail::find_format_copy_impl( + Input, + Formatter, + Finder(::boost::begin(Input), ::boost::end(Input))); + } + + //! Generic replace algorithm + /*! + Use the Finder to search for a substring. Use the Formatter to format + this substring and replace it in the input. The input is modified in-place. + + \param Input An input sequence + \param Finder A Finder object used to search for a match to be replaced + \param Formatter A Formatter object used to format a match + */ + template< + typename SequenceT, + typename FinderT, + typename FormatterT> + inline void find_format( + SequenceT& Input, + FinderT Finder, + FormatterT Formatter) + { + // Concept check + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + detail::find_format_impl( + Input, + Formatter, + Finder(::boost::begin(Input), ::boost::end(Input))); + } + + +// find_format_all generic ----------------------------------------------------------------// + + //! Generic replace all algorithm + /*! + Use the Finder to search for a substring. Use the Formatter to format + this substring and replace it in the input. Repeat this for all matching + substrings. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input sequence + \param Finder A Finder object used to search for a match to be replaced + \param Formatter A Formatter object used to format a match + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename RangeT, + typename FinderT, + typename FormatterT> + inline OutputIteratorT find_format_all_copy( + OutputIteratorT Output, + const RangeT& Input, + FinderT Finder, + FormatterT Formatter) + { + // Concept check + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + iterator_range::type> lit_input(::boost::as_literal(Input)); + + return detail::find_format_all_copy_impl( + Output, + lit_input, + Finder, + Formatter, + Finder(::boost::begin(lit_input), ::boost::end(lit_input))); + } + + //! Generic replace all algorithm + /*! + \overload + */ + template< + typename SequenceT, + typename FinderT, + typename FormatterT > + inline SequenceT find_format_all_copy( + const SequenceT& Input, + FinderT Finder, + FormatterT Formatter ) + { + // Concept check + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + return detail::find_format_all_copy_impl( + Input, + Finder, + Formatter, + Finder( ::boost::begin(Input), ::boost::end(Input) ) ); + } + + //! Generic replace all algorithm + /*! + Use the Finder to search for a substring. Use the Formatter to format + this substring and replace it in the input. Repeat this for all matching + substrings.The input is modified in-place. + + \param Input An input sequence + \param Finder A Finder object used to search for a match to be replaced + \param Formatter A Formatter object used to format a match + */ + template< + typename SequenceT, + typename FinderT, + typename FormatterT > + inline void find_format_all( + SequenceT& Input, + FinderT Finder, + FormatterT Formatter ) + { + // Concept check + BOOST_CONCEPT_ASSERT(( + FinderConcept< + FinderT, + BOOST_STRING_TYPENAME range_const_iterator::type> + )); + BOOST_CONCEPT_ASSERT(( + FormatterConcept< + FormatterT, + FinderT,BOOST_STRING_TYPENAME range_const_iterator::type> + )); + + detail::find_format_all_impl( + Input, + Finder, + Formatter, + Finder(::boost::begin(Input), ::boost::end(Input))); + + } + + } // namespace algorithm + + // pull the names to the boost namespace + using algorithm::find_format_copy; + using algorithm::find_format; + using algorithm::find_format_all_copy; + using algorithm::find_format_all; + +} // namespace boost + + +#endif // BOOST_STRING_FIND_FORMAT_HPP diff --git a/extern/boost/boost/algorithm/string/find_iterator.hpp b/extern/boost/boost/algorithm/string/find_iterator.hpp index 5a52d92e41..47c20e673c 100644 --- a/extern/boost/boost/algorithm/string/find_iterator.hpp +++ b/extern/boost/boost/algorithm/string/find_iterator.hpp @@ -74,7 +74,7 @@ namespace boost { \post eof()==true */ - find_iterator() {} + BOOST_DEFAULTED_FUNCTION(find_iterator(), {}) //! Copy constructor /*! @@ -85,6 +85,18 @@ namespace boost { m_Match(Other.m_Match), m_End(Other.m_End) {} + //! Copy assignment + /*! + Assigns a copy of the find_iterator + */ + BOOST_DEFAULTED_FUNCTION(find_iterator& operator=( const find_iterator& Other ), { + if (this == &Other) return *this; + this->base_type::operator=(Other); + m_Match = Other.m_Match; + m_End = Other.m_End; + return *this; + }) + //! Constructor /*! Construct new find_iterator for a given finder @@ -248,6 +260,20 @@ namespace boost { m_bEof(Other.m_bEof) {} + //! Assignment operator + /*! + Assigns a copy of the split_iterator + */ + BOOST_DEFAULTED_FUNCTION(split_iterator& operator=( const split_iterator& Other ), { + if (this == &Other) return *this; + this->base_type::operator=(Other); + m_Match = Other.m_Match; + m_Next = Other.m_Next; + m_End = Other.m_End; + m_bEof = Other.m_bEof; + return *this; + }) + //! Constructor /*! Construct new split_iterator for a given finder diff --git a/extern/boost/boost/algorithm/string/formatter.hpp b/extern/boost/boost/algorithm/string/formatter.hpp new file mode 100644 index 0000000000..0e08ae7b39 --- /dev/null +++ b/extern/boost/boost/algorithm/string/formatter.hpp @@ -0,0 +1,119 @@ +// Boost string_algo library formatter.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_FORMATTER_HPP +#define BOOST_STRING_FORMATTER_HPP + +#include +#include +#include + +#include + +/*! \file + Defines Formatter generators. Formatter is a functor which formats + a string according to given parameters. A Formatter works + in conjunction with a Finder. A Finder can provide additional information + for a specific Formatter. An example of such a cooperation is regex_finder + and regex_formatter. + + Formatters are used as pluggable components for replace facilities. + This header contains generator functions for the Formatters provided in this library. +*/ + +namespace boost { + namespace algorithm { + +// generic formatters ---------------------------------------------------------------// + + //! Constant formatter + /*! + Constructs a \c const_formatter. Const formatter always returns + the same value, regardless of the parameter. + + \param Format A predefined value used as a result for formatting + \return An instance of the \c const_formatter object. + */ + template + inline detail::const_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> > + const_formatter(const RangeT& Format) + { + return detail::const_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> >(::boost::as_literal(Format)); + } + + //! Identity formatter + /*! + Constructs an \c identity_formatter. Identity formatter always returns + the parameter. + + \return An instance of the \c identity_formatter object. + */ + template + inline detail::identity_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> > + identity_formatter() + { + return detail::identity_formatF< + iterator_range< + BOOST_STRING_TYPENAME range_const_iterator::type> >(); + } + + //! Empty formatter + /*! + Constructs an \c empty_formatter. Empty formatter always returns an empty + sequence. + + \param Input container used to select a correct value_type for the + resulting empty_container<>. + \return An instance of the \c empty_formatter object. + */ + template + inline detail::empty_formatF< + BOOST_STRING_TYPENAME range_value::type> + empty_formatter(const RangeT&) + { + return detail::empty_formatF< + BOOST_STRING_TYPENAME range_value::type>(); + } + + //! Empty formatter + /*! + Constructs a \c dissect_formatter. Dissect formatter uses a specified finder + to extract a portion of the formatted sequence. The first finder's match is returned + as a result + + \param Finder a finder used to select a portion of the formatted sequence + \return An instance of the \c dissect_formatter object. + */ + template + inline detail::dissect_formatF< FinderT > + dissect_formatter(const FinderT& Finder) + { + return detail::dissect_formatF(Finder); + } + + + } // namespace algorithm + + // pull the names to the boost namespace + using algorithm::const_formatter; + using algorithm::identity_formatter; + using algorithm::empty_formatter; + using algorithm::dissect_formatter; + +} // namespace boost + + +#endif // BOOST_FORMATTER_HPP diff --git a/extern/boost/boost/algorithm/string/join.hpp b/extern/boost/boost/algorithm/string/join.hpp new file mode 100644 index 0000000000..b871eb44f6 --- /dev/null +++ b/extern/boost/boost/algorithm/string/join.hpp @@ -0,0 +1,145 @@ +// Boost string_algo library join.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2006. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_JOIN_HPP +#define BOOST_STRING_JOIN_HPP + +#include +#include +#include +#include + +/*! \file + Defines join algorithm. + + Join algorithm is a counterpart to split algorithms. + It joins strings from a 'list' by adding user defined separator. + Additionally there is a version that allows simple filtering + by providing a predicate. +*/ + +namespace boost { + namespace algorithm { + +// join --------------------------------------------------------------// + + //! Join algorithm + /*! + This algorithm joins all strings in a 'list' into one long string. + Segments are concatenated by given separator. + + \param Input A container that holds the input strings. It must be a container-of-containers. + \param Separator A string that will separate the joined segments. + \return Concatenated string. + + \note This function provides the strong exception-safety guarantee + */ + template< typename SequenceSequenceT, typename Range1T> + inline typename range_value::type + join( + const SequenceSequenceT& Input, + const Range1T& Separator) + { + // Define working types + typedef typename range_value::type ResultT; + typedef typename range_const_iterator::type InputIteratorT; + + // Parse input + InputIteratorT itBegin=::boost::begin(Input); + InputIteratorT itEnd=::boost::end(Input); + + // Construct container to hold the result + ResultT Result; + + // Append first element + if(itBegin!=itEnd) + { + detail::insert(Result, ::boost::end(Result), *itBegin); + ++itBegin; + } + + for(;itBegin!=itEnd; ++itBegin) + { + // Add separator + detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator)); + // Add element + detail::insert(Result, ::boost::end(Result), *itBegin); + } + + return Result; + } + +// join_if ----------------------------------------------------------// + + //! Conditional join algorithm + /*! + This algorithm joins all strings in a 'list' into one long string. + Segments are concatenated by given separator. Only segments that + satisfy the predicate will be added to the result. + + \param Input A container that holds the input strings. It must be a container-of-containers. + \param Separator A string that will separate the joined segments. + \param Pred A segment selection predicate + \return Concatenated string. + + \note This function provides the strong exception-safety guarantee + */ + template< typename SequenceSequenceT, typename Range1T, typename PredicateT> + inline typename range_value::type + join_if( + const SequenceSequenceT& Input, + const Range1T& Separator, + PredicateT Pred) + { + // Define working types + typedef typename range_value::type ResultT; + typedef typename range_const_iterator::type InputIteratorT; + + // Parse input + InputIteratorT itBegin=::boost::begin(Input); + InputIteratorT itEnd=::boost::end(Input); + + // Construct container to hold the result + ResultT Result; + + // Roll to the first element that will be added + while(itBegin!=itEnd && !Pred(*itBegin)) ++itBegin; + // Add this element + if(itBegin!=itEnd) + { + detail::insert(Result, ::boost::end(Result), *itBegin); + ++itBegin; + } + + for(;itBegin!=itEnd; ++itBegin) + { + if(Pred(*itBegin)) + { + // Add separator + detail::insert(Result, ::boost::end(Result), ::boost::as_literal(Separator)); + // Add element + detail::insert(Result, ::boost::end(Result), *itBegin); + } + } + + return Result; + } + + } // namespace algorithm + + // pull names to the boost namespace + using algorithm::join; + using algorithm::join_if; + +} // namespace boost + + +#endif // BOOST_STRING_JOIN_HPP + diff --git a/extern/boost/boost/algorithm/string/predicate.hpp b/extern/boost/boost/algorithm/string/predicate.hpp new file mode 100644 index 0000000000..d7c86e8a5a --- /dev/null +++ b/extern/boost/boost/algorithm/string/predicate.hpp @@ -0,0 +1,476 @@ +// Boost string_algo library predicate.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_PREDICATE_HPP +#define BOOST_STRING_PREDICATE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/*! \file boost/algorithm/string/predicate.hpp + Defines string-related predicates. + The predicates determine whether a substring is contained in the input string + under various conditions: a string starts with the substring, ends with the + substring, simply contains the substring or if both strings are equal. + Additionaly the algorithm \c all() checks all elements of a container to satisfy a + condition. + + All predicates provide the strong exception guarantee. +*/ + +namespace boost { + namespace algorithm { + +// starts_with predicate -----------------------------------------------// + + //! 'Starts with' predicate + /*! + This predicate holds when the test string is a prefix of the Input. + In other words, if the input starts with the test. + When the optional predicate is specified, it is used for character-wise + comparison. + + \param Input An input sequence + \param Test A test sequence + \param Comp An element comparison predicate + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool starts_with( + const Range1T& Input, + const Range2T& Test, + PredicateT Comp) + { + iterator_range::type> lit_input(::boost::as_literal(Input)); + iterator_range::type> lit_test(::boost::as_literal(Test)); + + typedef BOOST_STRING_TYPENAME + range_const_iterator::type Iterator1T; + typedef BOOST_STRING_TYPENAME + range_const_iterator::type Iterator2T; + + Iterator1T InputEnd=::boost::end(lit_input); + Iterator2T TestEnd=::boost::end(lit_test); + + Iterator1T it=::boost::begin(lit_input); + Iterator2T pit=::boost::begin(lit_test); + for(; + it!=InputEnd && pit!=TestEnd; + ++it,++pit) + { + if( !(Comp(*it,*pit)) ) + return false; + } + + return pit==TestEnd; + } + + //! 'Starts with' predicate + /*! + \overload + */ + template + inline bool starts_with( + const Range1T& Input, + const Range2T& Test) + { + return ::boost::algorithm::starts_with(Input, Test, is_equal()); + } + + //! 'Starts with' predicate ( case insensitive ) + /*! + This predicate holds when the test string is a prefix of the Input. + In other words, if the input starts with the test. + Elements are compared case insensitively. + + \param Input An input sequence + \param Test A test sequence + \param Loc A locale used for case insensitive comparison + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool istarts_with( + const Range1T& Input, + const Range2T& Test, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::starts_with(Input, Test, is_iequal(Loc)); + } + + +// ends_with predicate -----------------------------------------------// + + //! 'Ends with' predicate + /*! + This predicate holds when the test string is a suffix of the Input. + In other words, if the input ends with the test. + When the optional predicate is specified, it is used for character-wise + comparison. + + + \param Input An input sequence + \param Test A test sequence + \param Comp An element comparison predicate + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool ends_with( + const Range1T& Input, + const Range2T& Test, + PredicateT Comp) + { + iterator_range::type> lit_input(::boost::as_literal(Input)); + iterator_range::type> lit_test(::boost::as_literal(Test)); + + typedef BOOST_STRING_TYPENAME + range_const_iterator::type Iterator1T; + typedef BOOST_STRING_TYPENAME + std::iterator_traits::iterator_category category; + + return detail:: + ends_with_iter_select( + ::boost::begin(lit_input), + ::boost::end(lit_input), + ::boost::begin(lit_test), + ::boost::end(lit_test), + Comp, + category()); + } + + + //! 'Ends with' predicate + /*! + \overload + */ + template + inline bool ends_with( + const Range1T& Input, + const Range2T& Test) + { + return ::boost::algorithm::ends_with(Input, Test, is_equal()); + } + + //! 'Ends with' predicate ( case insensitive ) + /*! + This predicate holds when the test container is a suffix of the Input. + In other words, if the input ends with the test. + Elements are compared case insensitively. + + \param Input An input sequence + \param Test A test sequence + \param Loc A locale used for case insensitive comparison + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool iends_with( + const Range1T& Input, + const Range2T& Test, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::ends_with(Input, Test, is_iequal(Loc)); + } + +// contains predicate -----------------------------------------------// + + //! 'Contains' predicate + /*! + This predicate holds when the test container is contained in the Input. + When the optional predicate is specified, it is used for character-wise + comparison. + + \param Input An input sequence + \param Test A test sequence + \param Comp An element comparison predicate + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool contains( + const Range1T& Input, + const Range2T& Test, + PredicateT Comp) + { + iterator_range::type> lit_input(::boost::as_literal(Input)); + iterator_range::type> lit_test(::boost::as_literal(Test)); + + if (::boost::empty(lit_test)) + { + // Empty range is contained always + return true; + } + + // Use the temporary variable to make VACPP happy + bool bResult=(::boost::algorithm::first_finder(lit_test,Comp)(::boost::begin(lit_input), ::boost::end(lit_input))); + return bResult; + } + + //! 'Contains' predicate + /*! + \overload + */ + template + inline bool contains( + const Range1T& Input, + const Range2T& Test) + { + return ::boost::algorithm::contains(Input, Test, is_equal()); + } + + //! 'Contains' predicate ( case insensitive ) + /*! + This predicate holds when the test container is contained in the Input. + Elements are compared case insensitively. + + \param Input An input sequence + \param Test A test sequence + \param Loc A locale used for case insensitive comparison + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool icontains( + const Range1T& Input, + const Range2T& Test, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::contains(Input, Test, is_iequal(Loc)); + } + +// equals predicate -----------------------------------------------// + + //! 'Equals' predicate + /*! + This predicate holds when the test container is equal to the + input container i.e. all elements in both containers are same. + When the optional predicate is specified, it is used for character-wise + comparison. + + \param Input An input sequence + \param Test A test sequence + \param Comp An element comparison predicate + \return The result of the test + + \note This is a two-way version of \c std::equal algorithm + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool equals( + const Range1T& Input, + const Range2T& Test, + PredicateT Comp) + { + iterator_range::type> lit_input(::boost::as_literal(Input)); + iterator_range::type> lit_test(::boost::as_literal(Test)); + + typedef BOOST_STRING_TYPENAME + range_const_iterator::type Iterator1T; + typedef BOOST_STRING_TYPENAME + range_const_iterator::type Iterator2T; + + Iterator1T InputEnd=::boost::end(lit_input); + Iterator2T TestEnd=::boost::end(lit_test); + + Iterator1T it=::boost::begin(lit_input); + Iterator2T pit=::boost::begin(lit_test); + for(; + it!=InputEnd && pit!=TestEnd; + ++it,++pit) + { + if( !(Comp(*it,*pit)) ) + return false; + } + + return (pit==TestEnd) && (it==InputEnd); + } + + //! 'Equals' predicate + /*! + \overload + */ + template + inline bool equals( + const Range1T& Input, + const Range2T& Test) + { + return ::boost::algorithm::equals(Input, Test, is_equal()); + } + + //! 'Equals' predicate ( case insensitive ) + /*! + This predicate holds when the test container is equal to the + input container i.e. all elements in both containers are same. + Elements are compared case insensitively. + + \param Input An input sequence + \param Test A test sequence + \param Loc A locale used for case insensitive comparison + \return The result of the test + + \note This is a two-way version of \c std::equal algorithm + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool iequals( + const Range1T& Input, + const Range2T& Test, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::equals(Input, Test, is_iequal(Loc)); + } + +// lexicographical_compare predicate -----------------------------// + + //! Lexicographical compare predicate + /*! + This predicate is an overload of std::lexicographical_compare + for range arguments + + It check whether the first argument is lexicographically less + then the second one. + + If the optional predicate is specified, it is used for character-wise + comparison + + \param Arg1 First argument + \param Arg2 Second argument + \param Pred Comparison predicate + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool lexicographical_compare( + const Range1T& Arg1, + const Range2T& Arg2, + PredicateT Pred) + { + iterator_range::type> lit_arg1(::boost::as_literal(Arg1)); + iterator_range::type> lit_arg2(::boost::as_literal(Arg2)); + + return std::lexicographical_compare( + ::boost::begin(lit_arg1), + ::boost::end(lit_arg1), + ::boost::begin(lit_arg2), + ::boost::end(lit_arg2), + Pred); + } + + //! Lexicographical compare predicate + /*! + \overload + */ + template + inline bool lexicographical_compare( + const Range1T& Arg1, + const Range2T& Arg2) + { + return ::boost::algorithm::lexicographical_compare(Arg1, Arg2, is_less()); + } + + //! Lexicographical compare predicate (case-insensitive) + /*! + This predicate is an overload of std::lexicographical_compare + for range arguments. + It check whether the first argument is lexicographically less + then the second one. + Elements are compared case insensitively + + + \param Arg1 First argument + \param Arg2 Second argument + \param Loc A locale used for case insensitive comparison + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool ilexicographical_compare( + const Range1T& Arg1, + const Range2T& Arg2, + const std::locale& Loc=std::locale()) + { + return ::boost::algorithm::lexicographical_compare(Arg1, Arg2, is_iless(Loc)); + } + + +// all predicate -----------------------------------------------// + + //! 'All' predicate + /*! + This predicate holds it all its elements satisfy a given + condition, represented by the predicate. + + \param Input An input sequence + \param Pred A predicate + \return The result of the test + + \note This function provides the strong exception-safety guarantee + */ + template + inline bool all( + const RangeT& Input, + PredicateT Pred) + { + iterator_range::type> lit_input(::boost::as_literal(Input)); + + typedef BOOST_STRING_TYPENAME + range_const_iterator::type Iterator1T; + + Iterator1T InputEnd=::boost::end(lit_input); + for( Iterator1T It=::boost::begin(lit_input); It!=InputEnd; ++It) + { + if (!Pred(*It)) + return false; + } + + return true; + } + + } // namespace algorithm + + // pull names to the boost namespace + using algorithm::starts_with; + using algorithm::istarts_with; + using algorithm::ends_with; + using algorithm::iends_with; + using algorithm::contains; + using algorithm::icontains; + using algorithm::equals; + using algorithm::iequals; + using algorithm::all; + using algorithm::lexicographical_compare; + using algorithm::ilexicographical_compare; + +} // namespace boost + + +#endif // BOOST_STRING_PREDICATE_HPP diff --git a/extern/boost/boost/algorithm/string/replace.hpp b/extern/boost/boost/algorithm/string/replace.hpp new file mode 100644 index 0000000000..2adb031c59 --- /dev/null +++ b/extern/boost/boost/algorithm/string/replace.hpp @@ -0,0 +1,926 @@ +// Boost string_algo library replace.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2006. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_REPLACE_HPP +#define BOOST_STRING_REPLACE_HPP + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +/*! \file + Defines various replace algorithms. Each algorithm replaces + part(s) of the input according to set of searching and replace criteria. +*/ + +namespace boost { + namespace algorithm { + +// replace_range --------------------------------------------------------------------// + + //! Replace range algorithm + /*! + Replace the given range in the input string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param SearchRange A range in the input to be substituted + \param Format A substitute string + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT replace_range_copy( + OutputIteratorT Output, + const Range1T& Input, + const iterator_range< + BOOST_STRING_TYPENAME + range_const_iterator::type>& SearchRange, + const Range2T& Format) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::const_formatter(Format)); + } + + //! Replace range algorithm + /*! + \overload + */ + template + inline SequenceT replace_range_copy( + const SequenceT& Input, + const iterator_range< + BOOST_STRING_TYPENAME + range_const_iterator::type>& SearchRange, + const RangeT& Format) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::const_formatter(Format)); + } + + //! Replace range algorithm + /*! + Replace the given range in the input string. + The input sequence is modified in-place. + + \param Input An input string + \param SearchRange A range in the input to be substituted + \param Format A substitute string + */ + template + inline void replace_range( + SequenceT& Input, + const iterator_range< + BOOST_STRING_TYPENAME + range_iterator::type>& SearchRange, + const RangeT& Format) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::range_finder(SearchRange), + ::boost::algorithm::const_formatter(Format)); + } + +// replace_first --------------------------------------------------------------------// + + //! Replace first algorithm + /*! + Replace the first match of the search substring in the input + with the format string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T, + typename Range3T> + inline OutputIteratorT replace_first_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const Range3T& Format) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace first algorithm + /*! + \overload + */ + template + inline SequenceT replace_first_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace first algorithm + /*! + replace the first match of the search substring in the input + with the format string. The input sequence is modified in-place. + + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + */ + template + inline void replace_first( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_first ( case insensitive ) ---------------------------------------------// + + //! Replace first algorithm ( case insensitive ) + /*! + Replace the first match of the search substring in the input + with the format string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + Searching is case insensitive. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \param Loc A locale used for case insensitive comparison + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T, + typename Range3T> + inline OutputIteratorT ireplace_first_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const Range3T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace first algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ireplace_first_copy( + const SequenceT& Input, + const Range2T& Search, + const Range1T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace first algorithm ( case insensitive ) + /*! + Replace the first match of the search substring in the input + with the format string. Input sequence is modified in-place. + Searching is case insensitive. + + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \param Loc A locale used for case insensitive comparison + */ + template + inline void ireplace_first( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_last --------------------------------------------------------------------// + + //! Replace last algorithm + /*! + Replace the last match of the search string in the input + with the format string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T, + typename Range3T> + inline OutputIteratorT replace_last_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const Range3T& Format ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace last algorithm + /*! + \overload + */ + template + inline SequenceT replace_last_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace last algorithm + /*! + Replace the last match of the search string in the input + with the format string. Input sequence is modified in-place. + + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + */ + template + inline void replace_last( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::last_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_last ( case insensitive ) -----------------------------------------------// + + //! Replace last algorithm ( case insensitive ) + /*! + Replace the last match of the search string in the input + with the format string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + Searching is case insensitive. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \param Loc A locale used for case insensitive comparison + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T, + typename Range3T> + inline OutputIteratorT ireplace_last_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const Range3T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace last algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ireplace_last_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace last algorithm ( case insensitive ) + /*! + Replace the last match of the search string in the input + with the format string.The input sequence is modified in-place. + Searching is case insensitive. + + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \param Loc A locale used for case insensitive comparison + */ + template + inline void ireplace_last( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::last_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_nth --------------------------------------------------------------------// + + //! Replace nth algorithm + /*! + Replace an Nth (zero-indexed) match of the search string in the input + with the format string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Nth An index of the match to be replaced. The index is 0-based. + For negative N, matches are counted from the end of string. + \param Format A substitute string + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T, + typename Range3T> + inline OutputIteratorT replace_nth_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + int Nth, + const Range3T& Format ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace nth algorithm + /*! + \overload + */ + template + inline SequenceT replace_nth_copy( + const SequenceT& Input, + const Range1T& Search, + int Nth, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace nth algorithm + /*! + Replace an Nth (zero-indexed) match of the search string in the input + with the format string. Input sequence is modified in-place. + + \param Input An input string + \param Search A substring to be searched for + \param Nth An index of the match to be replaced. The index is 0-based. + For negative N, matches are counted from the end of string. + \param Format A substitute string + */ + template + inline void replace_nth( + SequenceT& Input, + const Range1T& Search, + int Nth, + const Range2T& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::nth_finder(Search, Nth), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_nth ( case insensitive ) -----------------------------------------------// + + //! Replace nth algorithm ( case insensitive ) + /*! + Replace an Nth (zero-indexed) match of the search string in the input + with the format string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + Searching is case insensitive. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Nth An index of the match to be replaced. The index is 0-based. + For negative N, matches are counted from the end of string. + \param Format A substitute string + \param Loc A locale used for case insensitive comparison + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T, + typename Range3T> + inline OutputIteratorT ireplace_nth_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + int Nth, + const Range3T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc) ), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace nth algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ireplace_nth_copy( + const SequenceT& Input, + const Range1T& Search, + int Nth, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace nth algorithm ( case insensitive ) + /*! + Replace an Nth (zero-indexed) match of the search string in the input + with the format string. Input sequence is modified in-place. + Searching is case insensitive. + + \param Input An input string + \param Search A substring to be searched for + \param Nth An index of the match to be replaced. The index is 0-based. + For negative N, matches are counted from the end of string. + \param Format A substitute string + \param Loc A locale used for case insensitive comparison + */ + template + inline void ireplace_nth( + SequenceT& Input, + const Range1T& Search, + int Nth, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::nth_finder(Search, Nth, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_all --------------------------------------------------------------------// + + //! Replace all algorithm + /*! + Replace all occurrences of the search string in the input + with the format string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T, + typename Range3T> + inline OutputIteratorT replace_all_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const Range3T& Format ) + { + return ::boost::algorithm::find_format_all_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace all algorithm + /*! + \overload + */ + template + inline SequenceT replace_all_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_all_copy( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace all algorithm + /*! + Replace all occurrences of the search string in the input + with the format string. The input sequence is modified in-place. + + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + */ + template + inline void replace_all( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format ) + { + ::boost::algorithm::find_format_all( + Input, + ::boost::algorithm::first_finder(Search), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_all ( case insensitive ) -----------------------------------------------// + + //! Replace all algorithm ( case insensitive ) + /*! + Replace all occurrences of the search string in the input + with the format string. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + Searching is case insensitive. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \param Loc A locale used for case insensitive comparison + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T, + typename Range3T> + inline OutputIteratorT ireplace_all_copy( + OutputIteratorT Output, + const Range1T& Input, + const Range2T& Search, + const Range3T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_all_copy( + Output, + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace all algorithm ( case insensitive ) + /*! + \overload + */ + template + inline SequenceT ireplace_all_copy( + const SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + return ::boost::algorithm::find_format_all_copy( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace all algorithm ( case insensitive ) + /*! + Replace all occurrences of the search string in the input + with the format string.The input sequence is modified in-place. + Searching is case insensitive. + + \param Input An input string + \param Search A substring to be searched for + \param Format A substitute string + \param Loc A locale used for case insensitive comparison + */ + template + inline void ireplace_all( + SequenceT& Input, + const Range1T& Search, + const Range2T& Format, + const std::locale& Loc=std::locale() ) + { + ::boost::algorithm::find_format_all( + Input, + ::boost::algorithm::first_finder(Search, is_iequal(Loc)), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_head --------------------------------------------------------------------// + + //! Replace head algorithm + /*! + Replace the head of the input with the given format string. + The head is a prefix of a string of given size. + If the sequence is shorter then required, whole string if + considered to be the head. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param N Length of the head. + For N>=0, at most N characters are extracted. + For N<0, size(Input)-|N| characters are extracted. + \param Format A substitute string + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT replace_head_copy( + OutputIteratorT Output, + const Range1T& Input, + int N, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace head algorithm + /*! + \overload + */ + template + inline SequenceT replace_head_copy( + const SequenceT& Input, + int N, + const RangeT& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace head algorithm + /*! + Replace the head of the input with the given format string. + The head is a prefix of a string of given size. + If the sequence is shorter then required, the whole string is + considered to be the head. The input sequence is modified in-place. + + \param Input An input string + \param N Length of the head. + For N>=0, at most N characters are extracted. + For N<0, size(Input)-|N| characters are extracted. + \param Format A substitute string + */ + template + inline void replace_head( + SequenceT& Input, + int N, + const RangeT& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::head_finder(N), + ::boost::algorithm::const_formatter(Format) ); + } + +// replace_tail --------------------------------------------------------------------// + + //! Replace tail algorithm + /*! + Replace the tail of the input with the given format string. + The tail is a suffix of a string of given size. + If the sequence is shorter then required, whole string is + considered to be the tail. + The result is a modified copy of the input. It is returned as a sequence + or copied to the output iterator. + + \param Output An output iterator to which the result will be copied + \param Input An input string + \param N Length of the tail. + For N>=0, at most N characters are extracted. + For N<0, size(Input)-|N| characters are extracted. + \param Format A substitute string + \return An output iterator pointing just after the last inserted character or + a modified copy of the input + + \note The second variant of this function provides the strong exception-safety guarantee + */ + template< + typename OutputIteratorT, + typename Range1T, + typename Range2T> + inline OutputIteratorT replace_tail_copy( + OutputIteratorT Output, + const Range1T& Input, + int N, + const Range2T& Format ) + { + return ::boost::algorithm::find_format_copy( + Output, + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace tail algorithm + /*! + \overload + */ + template + inline SequenceT replace_tail_copy( + const SequenceT& Input, + int N, + const RangeT& Format ) + { + return ::boost::algorithm::find_format_copy( + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::const_formatter(Format) ); + } + + //! Replace tail algorithm + /*! + Replace the tail of the input with the given format sequence. + The tail is a suffix of a string of given size. + If the sequence is shorter then required, the whole string is + considered to be the tail. The input sequence is modified in-place. + + \param Input An input string + \param N Length of the tail. + For N>=0, at most N characters are extracted. + For N<0, size(Input)-|N| characters are extracted. + \param Format A substitute string + */ + template + inline void replace_tail( + SequenceT& Input, + int N, + const RangeT& Format ) + { + ::boost::algorithm::find_format( + Input, + ::boost::algorithm::tail_finder(N), + ::boost::algorithm::const_formatter(Format) ); + } + + } // namespace algorithm + + // pull names to the boost namespace + using algorithm::replace_range_copy; + using algorithm::replace_range; + using algorithm::replace_first_copy; + using algorithm::replace_first; + using algorithm::ireplace_first_copy; + using algorithm::ireplace_first; + using algorithm::replace_last_copy; + using algorithm::replace_last; + using algorithm::ireplace_last_copy; + using algorithm::ireplace_last; + using algorithm::replace_nth_copy; + using algorithm::replace_nth; + using algorithm::ireplace_nth_copy; + using algorithm::ireplace_nth; + using algorithm::replace_all_copy; + using algorithm::replace_all; + using algorithm::ireplace_all_copy; + using algorithm::ireplace_all; + using algorithm::replace_head_copy; + using algorithm::replace_head; + using algorithm::replace_tail_copy; + using algorithm::replace_tail; + +} // namespace boost + +#endif // BOOST_REPLACE_HPP diff --git a/extern/boost/boost/algorithm/string/sequence_traits.hpp b/extern/boost/boost/algorithm/string/sequence_traits.hpp new file mode 100644 index 0000000000..be151f8d3d --- /dev/null +++ b/extern/boost/boost/algorithm/string/sequence_traits.hpp @@ -0,0 +1,120 @@ +// Boost string_algo library sequence_traits.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP +#define BOOST_STRING_SEQUENCE_TRAITS_HPP + +#include +#include +#include + +/*! \file + Traits defined in this header are used by various algorithms to achieve + better performance for specific containers. + Traits provide fail-safe defaults. If a container supports some of these + features, it is possible to specialize the specific trait for this container. + For lacking compilers, it is possible of define an override for a specific tester + function. + + Due to a language restriction, it is not currently possible to define specializations for + stl containers without including the corresponding header. To decrease the overhead + needed by this inclusion, user can selectively include a specialization + header for a specific container. They are located in boost/algorithm/string/stl + directory. Alternatively she can include boost/algorithm/string/std_collection_traits.hpp + header which contains specializations for all stl containers. +*/ + +namespace boost { + namespace algorithm { + +// sequence traits -----------------------------------------------// + + + //! Native replace trait + /*! + This trait specifies that the sequence has \c std::string like replace method + */ + template< typename T > + class has_native_replace + { + + public: +# if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = false }; +# else + BOOST_STATIC_CONSTANT(bool, value=false); +# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + + + typedef mpl::bool_::value> type; + }; + + + //! Stable iterators trait + /*! + This trait specifies that the sequence has stable iterators. It means + that operations like insert/erase/replace do not invalidate iterators. + */ + template< typename T > + class has_stable_iterators + { + public: +# if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = false }; +# else + BOOST_STATIC_CONSTANT(bool, value=false); +# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + + typedef mpl::bool_::value> type; + }; + + + //! Const time insert trait + /*! + This trait specifies that the sequence's insert method has + constant time complexity. + */ + template< typename T > + class has_const_time_insert + { + public: +# if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = false }; +# else + BOOST_STATIC_CONSTANT(bool, value=false); +# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + + typedef mpl::bool_::value> type; + }; + + + //! Const time erase trait + /*! + This trait specifies that the sequence's erase method has + constant time complexity. + */ + template< typename T > + class has_const_time_erase + { + public: +# if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = false }; +# else + BOOST_STATIC_CONSTANT(bool, value=false); +# endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + + typedef mpl::bool_::value> type; + }; + + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_SEQUENCE_TRAITS_HPP diff --git a/extern/boost/boost/algorithm/string/std/list_traits.hpp b/extern/boost/boost/algorithm/string/std/list_traits.hpp new file mode 100644 index 0000000000..a3cf7bb18c --- /dev/null +++ b/extern/boost/boost/algorithm/string/std/list_traits.hpp @@ -0,0 +1,68 @@ +// Boost string_algo library list_traits.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_STD_LIST_TRAITS_HPP +#define BOOST_STRING_STD_LIST_TRAITS_HPP + +#include +#include +#include + +namespace boost { + namespace algorithm { + +// std::list<> traits -----------------------------------------------// + + + // stable iterators trait + template + class has_stable_iterators< ::std::list > + { + public: +#if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = true }; +#else + BOOST_STATIC_CONSTANT(bool, value=true); +#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + typedef mpl::bool_::value> type; + }; + + // const time insert trait + template + class has_const_time_insert< ::std::list > + { + public: +#if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = true }; +#else + BOOST_STATIC_CONSTANT(bool, value=true); +#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + typedef mpl::bool_::value> type; + }; + + // const time erase trait + template + class has_const_time_erase< ::std::list > + { + public: +#if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = true }; +#else + BOOST_STATIC_CONSTANT(bool, value=true); +#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + typedef mpl::bool_::value> type; + }; + + + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_STD_LIST_TRAITS_HPP diff --git a/extern/boost/boost/algorithm/string/std/slist_traits.hpp b/extern/boost/boost/algorithm/string/std/slist_traits.hpp new file mode 100644 index 0000000000..c30b93c73a --- /dev/null +++ b/extern/boost/boost/algorithm/string/std/slist_traits.hpp @@ -0,0 +1,69 @@ +// Boost string_algo library slist_traits.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_STD_SLIST_TRAITS_HPP +#define BOOST_STRING_STD_SLIST_TRAITS_HPP + +#include +#include +#include BOOST_SLIST_HEADER +#include + +namespace boost { + namespace algorithm { + +// SGI's std::slist<> traits -----------------------------------------------// + + + // stable iterators trait + template + class has_stable_iterators< BOOST_STD_EXTENSION_NAMESPACE::slist > + { + public: +#if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = true }; +#else + BOOST_STATIC_CONSTANT(bool, value=true); +#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + typedef mpl::bool_::value> type; + }; + + // const time insert trait + template + class has_const_time_insert< BOOST_STD_EXTENSION_NAMESPACE::slist > + { + public: +#if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = true }; +#else + BOOST_STATIC_CONSTANT(bool, value=true); +#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + typedef mpl::bool_::value> type; + }; + + // const time erase trait + template + class has_const_time_erase< BOOST_STD_EXTENSION_NAMESPACE::slist > + { + public: +#if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = true }; +#else + BOOST_STATIC_CONSTANT(bool, value=true); +#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + typedef mpl::bool_::value> type; + }; + + + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_STD_LIST_TRAITS_HPP diff --git a/extern/boost/boost/algorithm/string/std/string_traits.hpp b/extern/boost/boost/algorithm/string/std/string_traits.hpp new file mode 100644 index 0000000000..c9408307d3 --- /dev/null +++ b/extern/boost/boost/algorithm/string/std/string_traits.hpp @@ -0,0 +1,44 @@ +// Boost string_algo library string_traits.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_STD_STRING_TRAITS_HPP +#define BOOST_STRING_STD_STRING_TRAITS_HPP + +#include +#include +#include + +namespace boost { + namespace algorithm { + +// std::basic_string<> traits -----------------------------------------------// + + + // native replace trait + template + class has_native_replace< std::basic_string > + { + public: +#if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + enum { value = true } ; +#else + BOOST_STATIC_CONSTANT(bool, value=true); +#endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) + + typedef mpl::bool_::value> type; + }; + + + + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_LIST_TRAITS_HPP diff --git a/extern/boost/boost/algorithm/string/std_containers_traits.hpp b/extern/boost/boost/algorithm/string/std_containers_traits.hpp new file mode 100644 index 0000000000..3f02246fda --- /dev/null +++ b/extern/boost/boost/algorithm/string/std_containers_traits.hpp @@ -0,0 +1,26 @@ +// Boost string_algo library std_containers_traits.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_STD_CONTAINERS_TRAITS_HPP +#define BOOST_STRING_STD_CONTAINERS_TRAITS_HPP + +/*!\file + This file includes sequence traits for stl containers. +*/ + +#include +#include +#include + +#ifdef BOOST_HAS_SLIST +# include +#endif + +#endif // BOOST_STRING_STD_CONTAINERS_TRAITS_HPP diff --git a/extern/boost/boost/algorithm/string/yes_no_type.hpp b/extern/boost/boost/algorithm/string/yes_no_type.hpp new file mode 100644 index 0000000000..b76cc6c155 --- /dev/null +++ b/extern/boost/boost/algorithm/string/yes_no_type.hpp @@ -0,0 +1,33 @@ +// Boost string_algo library yes_no_type.hpp header file ---------------------------// + +// Copyright Pavol Droba 2002-2003. +// +// Distributed under the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +// See http://www.boost.org/ for updates, documentation, and revision history. + +#ifndef BOOST_STRING_YES_NO_TYPE_DETAIL_HPP +#define BOOST_STRING_YES_NO_TYPE_DETAIL_HPP + +namespace boost { + namespace algorithm { + + // taken from boost mailing-list + // when yes_no_type will become officially + // a part of boost distribution, this header + // will be deprecated + template struct size_descriptor + { + typedef char (& type)[I]; + }; + + typedef size_descriptor<1>::type yes_type; + typedef size_descriptor<2>::type no_type; + + } // namespace algorithm +} // namespace boost + + +#endif // BOOST_STRING_YES_NO_TYPE_DETAIL_HPP diff --git a/extern/boost/boost/align/aligned_alloc.hpp b/extern/boost/boost/align/aligned_alloc.hpp index 1d81a13372..b5b6bd8595 100644 --- a/extern/boost/boost/align/aligned_alloc.hpp +++ b/extern/boost/boost/align/aligned_alloc.hpp @@ -38,7 +38,7 @@ Distributed under the Boost Software License, Version 1.0. #include #elif defined(sun) || defined(__sun) #include -#elif (_POSIX_C_SOURCE >= 200112L) || (_XOPEN_SOURCE >= 600) +#elif defined(_POSIX_VERSION) #include #else #include diff --git a/extern/boost/boost/array.hpp b/extern/boost/boost/array.hpp deleted file mode 100644 index a32d1e99c6..0000000000 --- a/extern/boost/boost/array.hpp +++ /dev/null @@ -1,456 +0,0 @@ -/* The following code declares class array, - * an STL container (as wrapper) for arrays of constant size. - * - * See - * http://www.boost.org/libs/array/ - * for documentation. - * - * The original author site is at: http://www.josuttis.com/ - * - * (C) Copyright Nicolai M. Josuttis 2001. - * - * Distributed under the Boost Software License, Version 1.0. (See - * accompanying file LICENSE_1_0.txt or copy at - * http://www.boost.org/LICENSE_1_0.txt) - * - * 9 Jan 2013 - (mtc) Added constexpr - * 14 Apr 2012 - (mtc) Added support for boost::hash - * 28 Dec 2010 - (mtc) Added cbegin and cend (and crbegin and crend) for C++Ox compatibility. - * 10 Mar 2010 - (mtc) fill method added, matching resolution of the standard library working group. - * See or Trac issue #3168 - * Eventually, we should remove "assign" which is now a synonym for "fill" (Marshall Clow) - * 10 Mar 2010 - added workaround for SUNCC and !STLPort [trac #3893] (Marshall Clow) - * 29 Jan 2004 - c_array() added, BOOST_NO_PRIVATE_IN_AGGREGATE removed (Nico Josuttis) - * 23 Aug 2002 - fix for Non-MSVC compilers combined with MSVC libraries. - * 05 Aug 2001 - minor update (Nico Josuttis) - * 20 Jan 2001 - STLport fix (Beman Dawes) - * 29 Sep 2000 - Initial Revision (Nico Josuttis) - * - * Jan 29, 2004 - */ -#ifndef BOOST_ARRAY_HPP -#define BOOST_ARRAY_HPP - -#include - -#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) -# pragma warning(push) -# pragma warning(disable:4996) // 'std::equal': Function call with parameters that may be unsafe -# pragma warning(disable:4510) // boost::array' : default constructor could not be generated -# pragma warning(disable:4610) // warning C4610: class 'boost::array' can never be instantiated - user defined constructor required -#endif - -#include -#include -#include -#include -#include -#include - -#include -#include - -// FIXES for broken compilers -#include - - -namespace boost { - - template - class array { - public: - T elems[N]; // fixed-size array of elements of type T - - public: - // type definitions - typedef T value_type; - typedef T* iterator; - typedef const T* const_iterator; - typedef T& reference; - typedef const T& const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - - // iterator support - iterator begin() { return elems; } - const_iterator begin() const { return elems; } - const_iterator cbegin() const { return elems; } - - iterator end() { return elems+N; } - const_iterator end() const { return elems+N; } - const_iterator cend() const { return elems+N; } - - // reverse iterator support -#if !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; -#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; -#else - // workaround for broken reverse_iterator implementations - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; -#endif - - reverse_iterator rbegin() { return reverse_iterator(end()); } - const_reverse_iterator rbegin() const { - return const_reverse_iterator(end()); - } - const_reverse_iterator crbegin() const { - return const_reverse_iterator(end()); - } - - reverse_iterator rend() { return reverse_iterator(begin()); } - const_reverse_iterator rend() const { - return const_reverse_iterator(begin()); - } - const_reverse_iterator crend() const { - return const_reverse_iterator(begin()); - } - - // operator[] - reference operator[](size_type i) - { - return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i]; - } - - /*BOOST_CONSTEXPR*/ const_reference operator[](size_type i) const - { - return BOOST_ASSERT_MSG( i < N, "out of range" ), elems[i]; - } - - // at() with range check - reference at(size_type i) { return rangecheck(i), elems[i]; } - /*BOOST_CONSTEXPR*/ const_reference at(size_type i) const { return rangecheck(i), elems[i]; } - - // front() and back() - reference front() - { - return elems[0]; - } - - BOOST_CONSTEXPR const_reference front() const - { - return elems[0]; - } - - reference back() - { - return elems[N-1]; - } - - BOOST_CONSTEXPR const_reference back() const - { - return elems[N-1]; - } - - // size is constant - static BOOST_CONSTEXPR size_type size() { return N; } - static BOOST_CONSTEXPR bool empty() { return false; } - static BOOST_CONSTEXPR size_type max_size() { return N; } - enum { static_size = N }; - - // swap (note: linear complexity) - void swap (array& y) { - for (size_type i = 0; i < N; ++i) - boost::swap(elems[i],y.elems[i]); - } - - // direct access to data (read-only) - const T* data() const { return elems; } - T* data() { return elems; } - - // use array as C array (direct read/write access to data) - T* c_array() { return elems; } - - // assignment with type conversion - template - array& operator= (const array& rhs) { - std::copy(rhs.begin(),rhs.end(), begin()); - return *this; - } - - // assign one value to all elements - void assign (const T& value) { fill ( value ); } // A synonym for fill - void fill (const T& value) - { - std::fill_n(begin(),size(),value); - } - - // check range (may be private because it is static) - static BOOST_CONSTEXPR bool rangecheck (size_type i) { - return i >= size() ? boost::throw_exception(std::out_of_range ("array<>: index out of range")), true : true; - } - - }; - - template< class T > - class array< T, 0 > { - - public: - // type definitions - typedef T value_type; - typedef T* iterator; - typedef const T* const_iterator; - typedef T& reference; - typedef const T& const_reference; - typedef std::size_t size_type; - typedef std::ptrdiff_t difference_type; - - // iterator support - iterator begin() { return iterator( reinterpret_cast< T * >( this ) ); } - const_iterator begin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); } - const_iterator cbegin() const { return const_iterator( reinterpret_cast< const T * >( this ) ); } - - iterator end() { return begin(); } - const_iterator end() const { return begin(); } - const_iterator cend() const { return cbegin(); } - - // reverse iterator support -#if !defined(BOOST_MSVC_STD_ITERATOR) && !defined(BOOST_NO_STD_ITERATOR_TRAITS) - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; -#elif defined(_RWSTD_NO_CLASS_PARTIAL_SPEC) - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; -#else - // workaround for broken reverse_iterator implementations - typedef std::reverse_iterator reverse_iterator; - typedef std::reverse_iterator const_reverse_iterator; -#endif - - reverse_iterator rbegin() { return reverse_iterator(end()); } - const_reverse_iterator rbegin() const { - return const_reverse_iterator(end()); - } - const_reverse_iterator crbegin() const { - return const_reverse_iterator(end()); - } - - reverse_iterator rend() { return reverse_iterator(begin()); } - const_reverse_iterator rend() const { - return const_reverse_iterator(begin()); - } - const_reverse_iterator crend() const { - return const_reverse_iterator(begin()); - } - - // operator[] - reference operator[](size_type /*i*/) - { - return failed_rangecheck(); - } - - /*BOOST_CONSTEXPR*/ const_reference operator[](size_type /*i*/) const - { - return failed_rangecheck(); - } - - // at() with range check - reference at(size_type /*i*/) { return failed_rangecheck(); } - /*BOOST_CONSTEXPR*/ const_reference at(size_type /*i*/) const { return failed_rangecheck(); } - - // front() and back() - reference front() - { - return failed_rangecheck(); - } - - BOOST_CONSTEXPR const_reference front() const - { - return failed_rangecheck(); - } - - reference back() - { - return failed_rangecheck(); - } - - BOOST_CONSTEXPR const_reference back() const - { - return failed_rangecheck(); - } - - // size is constant - static BOOST_CONSTEXPR size_type size() { return 0; } - static BOOST_CONSTEXPR bool empty() { return true; } - static BOOST_CONSTEXPR size_type max_size() { return 0; } - enum { static_size = 0 }; - - void swap (array& /*y*/) { - } - - // direct access to data (read-only) - const T* data() const { return 0; } - T* data() { return 0; } - - // use array as C array (direct read/write access to data) - T* c_array() { return 0; } - - // assignment with type conversion - template - array& operator= (const array& ) { - return *this; - } - - // assign one value to all elements - void assign (const T& value) { fill ( value ); } - void fill (const T& ) {} - - // check range (may be private because it is static) - static reference failed_rangecheck () { - std::out_of_range e("attempt to access element of an empty array"); - boost::throw_exception(e); -#if defined(BOOST_NO_EXCEPTIONS) || (!defined(BOOST_MSVC) && !defined(__PATHSCALE__)) - // - // We need to return something here to keep - // some compilers happy: however we will never - // actually get here.... - // - static T placeholder; - return placeholder; -#endif - } - }; - - // comparisons - template - bool operator== (const array& x, const array& y) { - return std::equal(x.begin(), x.end(), y.begin()); - } - template - bool operator< (const array& x, const array& y) { - return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end()); - } - template - bool operator!= (const array& x, const array& y) { - return !(x==y); - } - template - bool operator> (const array& x, const array& y) { - return y - bool operator<= (const array& x, const array& y) { - return !(y - bool operator>= (const array& x, const array& y) { - return !(x - inline void swap (array& x, array& y) { - x.swap(y); - } - -#if defined(__SUNPRO_CC) -// Trac ticket #4757; the Sun Solaris compiler can't handle -// syntax like 'T(&get_c_array(boost::array& arg))[N]' -// -// We can't just use this for all compilers, because the -// borland compilers can't handle this form. - namespace detail { - template struct c_array - { - typedef T type[N]; - }; - } - - // Specific for boost::array: simply returns its elems data member. - template - typename detail::c_array::type& get_c_array(boost::array& arg) - { - return arg.elems; - } - - // Specific for boost::array: simply returns its elems data member. - template - typename detail::c_array::type const& get_c_array(const boost::array& arg) - { - return arg.elems; - } -#else -// Specific for boost::array: simply returns its elems data member. - template - T(&get_c_array(boost::array& arg))[N] - { - return arg.elems; - } - - // Const version. - template - const T(&get_c_array(const boost::array& arg))[N] - { - return arg.elems; - } -#endif - -#if 0 - // Overload for std::array, assuming that std::array will have - // explicit conversion functions as discussed at the WG21 meeting - // in Summit, March 2009. - template - T(&get_c_array(std::array& arg))[N] - { - return static_cast(arg); - } - - // Const version. - template - const T(&get_c_array(const std::array& arg))[N] - { - return static_cast(arg); - } -#endif - - template std::size_t hash_range(It, It); - - template - std::size_t hash_value(const array& arr) - { - return boost::hash_range(arr.begin(), arr.end()); - } - - template - T &get(boost::array &arr) BOOST_NOEXCEPT { - BOOST_STATIC_ASSERT_MSG ( Idx < N, "boost::get<>(boost::array &) index out of range" ); - return arr[Idx]; - } - - template - const T &get(const boost::array &arr) BOOST_NOEXCEPT { - BOOST_STATIC_ASSERT_MSG ( Idx < N, "boost::get<>(const boost::array &) index out of range" ); - return arr[Idx]; - } - -} /* namespace boost */ - -#ifndef BOOST_NO_CXX11_HDR_ARRAY -// If we don't have std::array, I'm assuming that we don't have std::get -namespace std { - template - T &get(boost::array &arr) BOOST_NOEXCEPT { - BOOST_STATIC_ASSERT_MSG ( Idx < N, "std::get<>(boost::array &) index out of range" ); - return arr[Idx]; - } - - template - const T &get(const boost::array &arr) BOOST_NOEXCEPT { - BOOST_STATIC_ASSERT_MSG ( Idx < N, "std::get<>(const boost::array &) index out of range" ); - return arr[Idx]; - } -} -#endif - -#if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) -# pragma warning(pop) -#endif - -#endif /*BOOST_ARRAY_HPP*/ diff --git a/extern/boost/boost/asio.hpp b/extern/boost/boost/asio.hpp new file mode 100644 index 0000000000..09efee9d6a --- /dev/null +++ b/extern/boost/boost/asio.hpp @@ -0,0 +1,204 @@ +// +// asio.hpp +// ~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// See www.boost.org/libs/asio for documentation. +// + +#ifndef BOOST_ASIO_HPP +#define BOOST_ASIO_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#endif // BOOST_ASIO_HPP diff --git a/extern/boost/boost/asio/any_completion_executor.hpp b/extern/boost/boost/asio/any_completion_executor.hpp new file mode 100644 index 0000000000..861ef7efc4 --- /dev/null +++ b/extern/boost/boost/asio/any_completion_executor.hpp @@ -0,0 +1,338 @@ +// +// any_completion_executor.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_ANY_COMPLETION_EXECUTOR_HPP +#define BOOST_ASIO_ANY_COMPLETION_EXECUTOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#if defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) +# include +#else // defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) +# include +#endif // defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +#include + +namespace boost { +namespace asio { + +#if defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +typedef executor any_completion_executor; + +#else // defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +/// Polymorphic executor type for use with I/O objects. +/** + * The @c any_completion_executor type is a polymorphic executor that supports + * the set of properties required for the execution of completion handlers. It + * is defined as the execution::any_executor class template parameterised as + * follows: + * @code execution::any_executor< + * execution::prefer_only, + * execution::prefer_only + * execution::prefer_only, + * execution::prefer_only + * > @endcode + */ +class any_completion_executor : +#if defined(GENERATING_DOCUMENTATION) + public execution::any_executor<...> +#else // defined(GENERATING_DOCUMENTATION) + public execution::any_executor< + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only + > +#endif // defined(GENERATING_DOCUMENTATION) +{ +public: +#if !defined(GENERATING_DOCUMENTATION) + typedef execution::any_executor< + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only + > base_type; + + typedef void supportable_properties_type( + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only + ); +#endif // !defined(GENERATING_DOCUMENTATION) + + /// Default constructor. + BOOST_ASIO_DECL any_completion_executor() noexcept; + + /// Construct in an empty state. Equivalent effects to default constructor. + BOOST_ASIO_DECL any_completion_executor(nullptr_t) noexcept; + + /// Copy constructor. + BOOST_ASIO_DECL any_completion_executor( + const any_completion_executor& e) noexcept; + + /// Move constructor. + BOOST_ASIO_DECL any_completion_executor( + any_completion_executor&& e) noexcept; + + /// Construct to point to the same target as another any_executor. +#if defined(GENERATING_DOCUMENTATION) + template + any_completion_executor( + execution::any_executor e); +#else // defined(GENERATING_DOCUMENTATION) + template + any_completion_executor(OtherAnyExecutor e, + constraint_t< + conditional< + !is_same::value + && is_base_of::value, + typename execution::detail::supportable_properties< + 0, supportable_properties_type>::template + is_valid_target, + false_type + >::type::value + > = 0) + : base_type(static_cast(e)) + { + } +#endif // defined(GENERATING_DOCUMENTATION) + + /// Construct to point to the same target as another any_executor. +#if defined(GENERATING_DOCUMENTATION) + template + any_completion_executor(std::nothrow_t, + execution::any_executor e); +#else // defined(GENERATING_DOCUMENTATION) + template + any_completion_executor(std::nothrow_t, OtherAnyExecutor e, + constraint_t< + conditional< + !is_same::value + && is_base_of::value, + typename execution::detail::supportable_properties< + 0, supportable_properties_type>::template + is_valid_target, + false_type + >::type::value + > = 0) noexcept + : base_type(std::nothrow, static_cast(e)) + { + } +#endif // defined(GENERATING_DOCUMENTATION) + + /// Construct to point to the same target as another any_executor. + BOOST_ASIO_DECL any_completion_executor(std::nothrow_t, + const any_completion_executor& e) noexcept; + + /// Construct to point to the same target as another any_executor. + BOOST_ASIO_DECL any_completion_executor(std::nothrow_t, + any_completion_executor&& e) noexcept; + + /// Construct a polymorphic wrapper for the specified executor. +#if defined(GENERATING_DOCUMENTATION) + template + any_completion_executor(Executor e); +#else // defined(GENERATING_DOCUMENTATION) + template + any_completion_executor(Executor e, + constraint_t< + conditional< + !is_same::value + && !is_base_of::value, + execution::detail::is_valid_target_executor< + Executor, supportable_properties_type>, + false_type + >::type::value + > = 0) + : base_type(static_cast(e)) + { + } +#endif // defined(GENERATING_DOCUMENTATION) + + /// Construct a polymorphic wrapper for the specified executor. +#if defined(GENERATING_DOCUMENTATION) + template + any_completion_executor(std::nothrow_t, Executor e); +#else // defined(GENERATING_DOCUMENTATION) + template + any_completion_executor(std::nothrow_t, Executor e, + constraint_t< + conditional< + !is_same::value + && !is_base_of::value, + execution::detail::is_valid_target_executor< + Executor, supportable_properties_type>, + false_type + >::type::value + > = 0) noexcept + : base_type(std::nothrow, static_cast(e)) + { + } +#endif // defined(GENERATING_DOCUMENTATION) + + /// Assignment operator. + BOOST_ASIO_DECL any_completion_executor& operator=( + const any_completion_executor& e) noexcept; + + /// Move assignment operator. + BOOST_ASIO_DECL any_completion_executor& operator=( + any_completion_executor&& e) noexcept; + + /// Assignment operator that sets the polymorphic wrapper to the empty state. + BOOST_ASIO_DECL any_completion_executor& operator=(nullptr_t); + + /// Destructor. + BOOST_ASIO_DECL ~any_completion_executor(); + + /// Swap targets with another polymorphic wrapper. + BOOST_ASIO_DECL void swap(any_completion_executor& other) noexcept; + + /// Obtain a polymorphic wrapper with the specified property. + /** + * Do not call this function directly. It is intended for use with the + * boost::asio::require and boost::asio::prefer customisation points. + * + * For example: + * @code any_completion_executor ex = ...; + * auto ex2 = boost::asio::require(ex, execution::relationship.fork); @endcode + */ + template + any_completion_executor require(const Property& p, + constraint_t< + traits::require_member::is_valid + > = 0) const + { + return static_cast(*this).require(p); + } + + /// Obtain a polymorphic wrapper with the specified property. + /** + * Do not call this function directly. It is intended for use with the + * boost::asio::prefer customisation point. + * + * For example: + * @code any_completion_executor ex = ...; + * auto ex2 = boost::asio::prefer(ex, execution::relationship.fork); @endcode + */ + template + any_completion_executor prefer(const Property& p, + constraint_t< + traits::prefer_member::is_valid + > = 0) const + { + return static_cast(*this).prefer(p); + } +}; + +#if !defined(GENERATING_DOCUMENTATION) + +template <> +BOOST_ASIO_DECL any_completion_executor any_completion_executor::prefer( + const execution::outstanding_work_t::tracked_t&, int) const; + +template <> +BOOST_ASIO_DECL any_completion_executor any_completion_executor::prefer( + const execution::outstanding_work_t::untracked_t&, int) const; + +template <> +BOOST_ASIO_DECL any_completion_executor any_completion_executor::prefer( + const execution::relationship_t::fork_t&, int) const; + +template <> +BOOST_ASIO_DECL any_completion_executor any_completion_executor::prefer( + const execution::relationship_t::continuation_t&, int) const; + +namespace traits { + +#if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT) + +template <> +struct equality_comparable +{ + static const bool is_valid = true; + static const bool is_noexcept = true; +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT) + +#if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT) + +template +struct execute_member +{ + static const bool is_valid = true; + static const bool is_noexcept = false; + typedef void result_type; +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT) + +#if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT) + +template +struct query_member : + query_member +{ +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT) + +#if !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT) + +template +struct require_member : + require_member +{ + typedef any_completion_executor result_type; +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT) + +#if !defined(BOOST_ASIO_HAS_DEDUCED_PREFER_MEMBER_TRAIT) + +template +struct prefer_member : + prefer_member +{ + typedef any_completion_executor result_type; +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_PREFER_MEMBER_TRAIT) + +} // namespace traits + +#endif // !defined(GENERATING_DOCUMENTATION) + +#endif // defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +} // namespace asio +} // namespace boost + +#include + +#if defined(BOOST_ASIO_HEADER_ONLY) \ + && !defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) +# include +#endif // defined(BOOST_ASIO_HEADER_ONLY) + // && !defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +#endif // BOOST_ASIO_ANY_COMPLETION_EXECUTOR_HPP diff --git a/extern/boost/boost/asio/any_completion_handler.hpp b/extern/boost/boost/asio/any_completion_handler.hpp new file mode 100644 index 0000000000..ed48e76943 --- /dev/null +++ b/extern/boost/boost/asio/any_completion_handler.hpp @@ -0,0 +1,824 @@ +// +// any_completion_handler.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_ANY_COMPLETION_HANDLER_HPP +#define BOOST_ASIO_ANY_COMPLETION_HANDLER_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { +namespace detail { + +class any_completion_handler_impl_base +{ +public: + template + explicit any_completion_handler_impl_base(S&& slot) + : cancel_state_(static_cast(slot), enable_total_cancellation()) + { + } + + cancellation_slot get_cancellation_slot() const noexcept + { + return cancel_state_.slot(); + } + +private: + cancellation_state cancel_state_; +}; + +template +class any_completion_handler_impl : + public any_completion_handler_impl_base +{ +public: + template + any_completion_handler_impl(S&& slot, H&& h) + : any_completion_handler_impl_base(static_cast(slot)), + handler_(static_cast(h)) + { + } + + struct uninit_deleter + { + typename std::allocator_traits< + associated_allocator_t>>::template + rebind_alloc alloc; + + void operator()(any_completion_handler_impl* ptr) + { + std::allocator_traits::deallocate(alloc, ptr, 1); + } + }; + + struct deleter + { + typename std::allocator_traits< + associated_allocator_t>>::template + rebind_alloc alloc; + + void operator()(any_completion_handler_impl* ptr) + { + std::allocator_traits::destroy(alloc, ptr); + std::allocator_traits::deallocate(alloc, ptr, 1); + } + }; + + template + static any_completion_handler_impl* create(S&& slot, H&& h) + { + uninit_deleter d{ + (get_associated_allocator)(h, + boost::asio::recycling_allocator())}; + + std::unique_ptr uninit_ptr( + std::allocator_traits::allocate(d.alloc, 1), d); + + any_completion_handler_impl* ptr = + new (uninit_ptr.get()) any_completion_handler_impl( + static_cast(slot), static_cast(h)); + + uninit_ptr.release(); + return ptr; + } + + void destroy() + { + deleter d{ + (get_associated_allocator)(handler_, + boost::asio::recycling_allocator())}; + + d(this); + } + + any_completion_executor executor( + const any_completion_executor& candidate) const noexcept + { + return any_completion_executor(std::nothrow, + (get_associated_executor)(handler_, candidate)); + } + + any_completion_executor immediate_executor( + const any_io_executor& candidate) const noexcept + { + return any_completion_executor(std::nothrow, + (get_associated_immediate_executor)(handler_, candidate)); + } + + void* allocate(std::size_t size, std::size_t align) const + { + typename std::allocator_traits< + associated_allocator_t>>::template + rebind_alloc alloc( + (get_associated_allocator)(handler_, + boost::asio::recycling_allocator())); + + std::size_t space = size + align - 1; + unsigned char* base = + std::allocator_traits::allocate( + alloc, space + sizeof(std::ptrdiff_t)); + + void* p = base; + if (detail::align(align, size, p, space)) + { + std::ptrdiff_t off = static_cast(p) - base; + std::memcpy(static_cast(p) + size, &off, sizeof(off)); + return p; + } + + std::bad_alloc ex; + boost::asio::detail::throw_exception(ex); + return nullptr; + } + + void deallocate(void* p, std::size_t size, std::size_t align) const + { + if (p) + { + typename std::allocator_traits< + associated_allocator_t>>::template + rebind_alloc alloc( + (get_associated_allocator)(handler_, + boost::asio::recycling_allocator())); + + std::ptrdiff_t off; + std::memcpy(&off, static_cast(p) + size, sizeof(off)); + unsigned char* base = static_cast(p) - off; + + std::allocator_traits::deallocate( + alloc, base, size + align -1 + sizeof(std::ptrdiff_t)); + } + } + + template + void call(Args&&... args) + { + deleter d{ + (get_associated_allocator)(handler_, + boost::asio::recycling_allocator())}; + + std::unique_ptr ptr(this, d); + Handler handler(static_cast(handler_)); + ptr.reset(); + + static_cast(handler)( + static_cast(args)...); + } + +private: + Handler handler_; +}; + +template +class any_completion_handler_call_fn; + +template +class any_completion_handler_call_fn +{ +public: + using type = void(*)(any_completion_handler_impl_base*, Args...); + + constexpr any_completion_handler_call_fn(type fn) + : call_fn_(fn) + { + } + + void call(any_completion_handler_impl_base* impl, Args... args) const + { + call_fn_(impl, static_cast(args)...); + } + + template + static void impl(any_completion_handler_impl_base* impl, Args... args) + { + static_cast*>(impl)->call( + static_cast(args)...); + } + +private: + type call_fn_; +}; + +template +class any_completion_handler_call_fns; + +template +class any_completion_handler_call_fns : + public any_completion_handler_call_fn +{ +public: + using any_completion_handler_call_fn< + Signature>::any_completion_handler_call_fn; + using any_completion_handler_call_fn::call; +}; + +template +class any_completion_handler_call_fns : + public any_completion_handler_call_fn, + public any_completion_handler_call_fns +{ +public: + template + constexpr any_completion_handler_call_fns(CallFn fn, CallFns... fns) + : any_completion_handler_call_fn(fn), + any_completion_handler_call_fns(fns...) + { + } + + using any_completion_handler_call_fn::call; + using any_completion_handler_call_fns::call; +}; + +class any_completion_handler_destroy_fn +{ +public: + using type = void(*)(any_completion_handler_impl_base*); + + constexpr any_completion_handler_destroy_fn(type fn) + : destroy_fn_(fn) + { + } + + void destroy(any_completion_handler_impl_base* impl) const + { + destroy_fn_(impl); + } + + template + static void impl(any_completion_handler_impl_base* impl) + { + static_cast*>(impl)->destroy(); + } + +private: + type destroy_fn_; +}; + +class any_completion_handler_executor_fn +{ +public: + using type = any_completion_executor(*)( + any_completion_handler_impl_base*, const any_completion_executor&); + + constexpr any_completion_handler_executor_fn(type fn) + : executor_fn_(fn) + { + } + + any_completion_executor executor(any_completion_handler_impl_base* impl, + const any_completion_executor& candidate) const + { + return executor_fn_(impl, candidate); + } + + template + static any_completion_executor impl(any_completion_handler_impl_base* impl, + const any_completion_executor& candidate) + { + return static_cast*>(impl)->executor( + candidate); + } + +private: + type executor_fn_; +}; + +class any_completion_handler_immediate_executor_fn +{ +public: + using type = any_completion_executor(*)( + any_completion_handler_impl_base*, const any_io_executor&); + + constexpr any_completion_handler_immediate_executor_fn(type fn) + : immediate_executor_fn_(fn) + { + } + + any_completion_executor immediate_executor( + any_completion_handler_impl_base* impl, + const any_io_executor& candidate) const + { + return immediate_executor_fn_(impl, candidate); + } + + template + static any_completion_executor impl(any_completion_handler_impl_base* impl, + const any_io_executor& candidate) + { + return static_cast*>( + impl)->immediate_executor(candidate); + } + +private: + type immediate_executor_fn_; +}; + +class any_completion_handler_allocate_fn +{ +public: + using type = void*(*)(any_completion_handler_impl_base*, + std::size_t, std::size_t); + + constexpr any_completion_handler_allocate_fn(type fn) + : allocate_fn_(fn) + { + } + + void* allocate(any_completion_handler_impl_base* impl, + std::size_t size, std::size_t align) const + { + return allocate_fn_(impl, size, align); + } + + template + static void* impl(any_completion_handler_impl_base* impl, + std::size_t size, std::size_t align) + { + return static_cast*>(impl)->allocate( + size, align); + } + +private: + type allocate_fn_; +}; + +class any_completion_handler_deallocate_fn +{ +public: + using type = void(*)(any_completion_handler_impl_base*, + void*, std::size_t, std::size_t); + + constexpr any_completion_handler_deallocate_fn(type fn) + : deallocate_fn_(fn) + { + } + + void deallocate(any_completion_handler_impl_base* impl, + void* p, std::size_t size, std::size_t align) const + { + deallocate_fn_(impl, p, size, align); + } + + template + static void impl(any_completion_handler_impl_base* impl, + void* p, std::size_t size, std::size_t align) + { + static_cast*>(impl)->deallocate( + p, size, align); + } + +private: + type deallocate_fn_; +}; + +template +class any_completion_handler_fn_table + : private any_completion_handler_destroy_fn, + private any_completion_handler_executor_fn, + private any_completion_handler_immediate_executor_fn, + private any_completion_handler_allocate_fn, + private any_completion_handler_deallocate_fn, + private any_completion_handler_call_fns +{ +public: + template + constexpr any_completion_handler_fn_table( + any_completion_handler_destroy_fn::type destroy_fn, + any_completion_handler_executor_fn::type executor_fn, + any_completion_handler_immediate_executor_fn::type immediate_executor_fn, + any_completion_handler_allocate_fn::type allocate_fn, + any_completion_handler_deallocate_fn::type deallocate_fn, + CallFns... call_fns) + : any_completion_handler_destroy_fn(destroy_fn), + any_completion_handler_executor_fn(executor_fn), + any_completion_handler_immediate_executor_fn(immediate_executor_fn), + any_completion_handler_allocate_fn(allocate_fn), + any_completion_handler_deallocate_fn(deallocate_fn), + any_completion_handler_call_fns(call_fns...) + { + } + + using any_completion_handler_destroy_fn::destroy; + using any_completion_handler_executor_fn::executor; + using any_completion_handler_immediate_executor_fn::immediate_executor; + using any_completion_handler_allocate_fn::allocate; + using any_completion_handler_deallocate_fn::deallocate; + using any_completion_handler_call_fns::call; +}; + +template +struct any_completion_handler_fn_table_instance +{ + static constexpr any_completion_handler_fn_table + value = any_completion_handler_fn_table( + &any_completion_handler_destroy_fn::impl, + &any_completion_handler_executor_fn::impl, + &any_completion_handler_immediate_executor_fn::impl, + &any_completion_handler_allocate_fn::impl, + &any_completion_handler_deallocate_fn::impl, + &any_completion_handler_call_fn::template impl...); +}; + +template +constexpr any_completion_handler_fn_table +any_completion_handler_fn_table_instance::value; + +} // namespace detail + +template +class any_completion_handler; + +/// An allocator type that forwards memory allocation operations through an +/// instance of @c any_completion_handler. +template +class any_completion_handler_allocator +{ +private: + template + friend class any_completion_handler; + + template + friend class any_completion_handler_allocator; + + const detail::any_completion_handler_fn_table* fn_table_; + detail::any_completion_handler_impl_base* impl_; + + constexpr any_completion_handler_allocator(int, + const any_completion_handler& h) noexcept + : fn_table_(h.fn_table_), + impl_(h.impl_) + { + } + +public: + /// The type of objects that may be allocated by the allocator. + typedef T value_type; + + /// Rebinds an allocator to another value type. + template + struct rebind + { + /// Specifies the type of the rebound allocator. + typedef any_completion_handler_allocator other; + }; + + /// Construct from another @c any_completion_handler_allocator. + template + constexpr any_completion_handler_allocator( + const any_completion_handler_allocator& a) + noexcept + : fn_table_(a.fn_table_), + impl_(a.impl_) + { + } + + /// Equality operator. + constexpr bool operator==( + const any_completion_handler_allocator& other) const noexcept + { + return fn_table_ == other.fn_table_ && impl_ == other.impl_; + } + + /// Inequality operator. + constexpr bool operator!=( + const any_completion_handler_allocator& other) const noexcept + { + return fn_table_ != other.fn_table_ || impl_ != other.impl_; + } + + /// Allocate space for @c n objects of the allocator's value type. + T* allocate(std::size_t n) const + { + if (fn_table_) + { + return static_cast( + fn_table_->allocate( + impl_, sizeof(T) * n, alignof(T))); + } + std::bad_alloc ex; + boost::asio::detail::throw_exception(ex); + return nullptr; + } + + /// Deallocate space for @c n objects of the allocator's value type. + void deallocate(T* p, std::size_t n) const + { + fn_table_->deallocate(impl_, p, sizeof(T) * n, alignof(T)); + } +}; + +/// A protoco-allocator type that may be rebound to obtain an allocator that +/// forwards memory allocation operations through an instance of +/// @c any_completion_handler. +template +class any_completion_handler_allocator +{ +private: + template + friend class any_completion_handler; + + template + friend class any_completion_handler_allocator; + + const detail::any_completion_handler_fn_table* fn_table_; + detail::any_completion_handler_impl_base* impl_; + + constexpr any_completion_handler_allocator(int, + const any_completion_handler& h) noexcept + : fn_table_(h.fn_table_), + impl_(h.impl_) + { + } + +public: + /// @c void as no objects can be allocated through a proto-allocator. + typedef void value_type; + + /// Rebinds an allocator to another value type. + template + struct rebind + { + /// Specifies the type of the rebound allocator. + typedef any_completion_handler_allocator other; + }; + + /// Construct from another @c any_completion_handler_allocator. + template + constexpr any_completion_handler_allocator( + const any_completion_handler_allocator& a) + noexcept + : fn_table_(a.fn_table_), + impl_(a.impl_) + { + } + + /// Equality operator. + constexpr bool operator==( + const any_completion_handler_allocator& other) const noexcept + { + return fn_table_ == other.fn_table_ && impl_ == other.impl_; + } + + /// Inequality operator. + constexpr bool operator!=( + const any_completion_handler_allocator& other) const noexcept + { + return fn_table_ != other.fn_table_ || impl_ != other.impl_; + } +}; + +/// Polymorphic wrapper for completion handlers. +/** + * The @c any_completion_handler class template is a polymorphic wrapper for + * completion handlers that propagates the associated executor, associated + * allocator, and associated cancellation slot through a type-erasing interface. + * + * When using @c any_completion_handler, specify one or more completion + * signatures as template parameters. These will dictate the arguments that may + * be passed to the handler through the polymorphic interface. + * + * Typical uses for @c any_completion_handler include: + * + * @li Separate compilation of asynchronous operation implementations. + * + * @li Enabling interoperability between asynchronous operations and virtual + * functions. + */ +template +class any_completion_handler +{ +#if !defined(GENERATING_DOCUMENTATION) +private: + template + friend class any_completion_handler_allocator; + + template + friend struct associated_executor; + + template + friend struct associated_immediate_executor; + + const detail::any_completion_handler_fn_table* fn_table_; + detail::any_completion_handler_impl_base* impl_; +#endif // !defined(GENERATING_DOCUMENTATION) + +public: + /// The associated allocator type. + using allocator_type = any_completion_handler_allocator; + + /// The associated cancellation slot type. + using cancellation_slot_type = cancellation_slot; + + /// Construct an @c any_completion_handler in an empty state, without a target + /// object. + constexpr any_completion_handler() + : fn_table_(nullptr), + impl_(nullptr) + { + } + + /// Construct an @c any_completion_handler in an empty state, without a target + /// object. + constexpr any_completion_handler(nullptr_t) + : fn_table_(nullptr), + impl_(nullptr) + { + } + + /// Construct an @c any_completion_handler to contain the specified target. + template > + any_completion_handler(H&& h, + constraint_t< + !is_same, any_completion_handler>::value + > = 0) + : fn_table_( + &detail::any_completion_handler_fn_table_instance< + Handler, Signatures...>::value), + impl_(detail::any_completion_handler_impl::create( + (get_associated_cancellation_slot)(h), static_cast(h))) + { + } + + /// Move-construct an @c any_completion_handler from another. + /** + * After the operation, the moved-from object @c other has no target. + */ + any_completion_handler(any_completion_handler&& other) noexcept + : fn_table_(other.fn_table_), + impl_(other.impl_) + { + other.fn_table_ = nullptr; + other.impl_ = nullptr; + } + + /// Move-assign an @c any_completion_handler from another. + /** + * After the operation, the moved-from object @c other has no target. + */ + any_completion_handler& operator=( + any_completion_handler&& other) noexcept + { + any_completion_handler( + static_cast(other)).swap(*this); + return *this; + } + + /// Assignment operator that sets the polymorphic wrapper to the empty state. + any_completion_handler& operator=(nullptr_t) noexcept + { + any_completion_handler().swap(*this); + return *this; + } + + /// Destructor. + ~any_completion_handler() + { + if (impl_) + fn_table_->destroy(impl_); + } + + /// Test if the polymorphic wrapper is empty. + constexpr explicit operator bool() const noexcept + { + return impl_ != nullptr; + } + + /// Test if the polymorphic wrapper is non-empty. + constexpr bool operator!() const noexcept + { + return impl_ == nullptr; + } + + /// Swap the content of an @c any_completion_handler with another. + void swap(any_completion_handler& other) noexcept + { + std::swap(fn_table_, other.fn_table_); + std::swap(impl_, other.impl_); + } + + /// Get the associated allocator. + allocator_type get_allocator() const noexcept + { + return allocator_type(0, *this); + } + + /// Get the associated cancellation slot. + cancellation_slot_type get_cancellation_slot() const noexcept + { + return impl_ ? impl_->get_cancellation_slot() : cancellation_slot_type(); + } + + /// Function call operator. + /** + * Invokes target completion handler with the supplied arguments. + * + * This function may only be called once, as the target handler is moved from. + * The polymorphic wrapper is left in an empty state. + * + * Throws @c std::bad_function_call if the polymorphic wrapper is empty. + */ + template + auto operator()(Args&&... args) + -> decltype(fn_table_->call(impl_, static_cast(args)...)) + { + if (detail::any_completion_handler_impl_base* impl = impl_) + { + impl_ = nullptr; + return fn_table_->call(impl, static_cast(args)...); + } + std::bad_function_call ex; + boost::asio::detail::throw_exception(ex); + } + + /// Equality operator. + friend constexpr bool operator==( + const any_completion_handler& a, nullptr_t) noexcept + { + return a.impl_ == nullptr; + } + + /// Equality operator. + friend constexpr bool operator==( + nullptr_t, const any_completion_handler& b) noexcept + { + return nullptr == b.impl_; + } + + /// Inequality operator. + friend constexpr bool operator!=( + const any_completion_handler& a, nullptr_t) noexcept + { + return a.impl_ != nullptr; + } + + /// Inequality operator. + friend constexpr bool operator!=( + nullptr_t, const any_completion_handler& b) noexcept + { + return nullptr != b.impl_; + } +}; + +template +struct associated_executor, Candidate> +{ + using type = any_completion_executor; + + static type get(const any_completion_handler& handler, + const Candidate& candidate = Candidate()) noexcept + { + any_completion_executor any_candidate(std::nothrow, candidate); + return handler.fn_table_ + ? handler.fn_table_->executor(handler.impl_, any_candidate) + : any_candidate; + } +}; + +template +struct associated_immediate_executor< + any_completion_handler, Candidate> +{ + using type = any_completion_executor; + + static type get(const any_completion_handler& handler, + const Candidate& candidate = Candidate()) noexcept + { + any_io_executor any_candidate(std::nothrow, candidate); + return handler.fn_table_ + ? handler.fn_table_->immediate_executor(handler.impl_, any_candidate) + : any_candidate; + } +}; + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_ANY_COMPLETION_HANDLER_HPP diff --git a/extern/boost/boost/asio/any_io_executor.hpp b/extern/boost/boost/asio/any_io_executor.hpp new file mode 100644 index 0000000000..5f96d57c08 --- /dev/null +++ b/extern/boost/boost/asio/any_io_executor.hpp @@ -0,0 +1,353 @@ +// +// any_io_executor.hpp +// ~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_ANY_IO_EXECUTOR_HPP +#define BOOST_ASIO_ANY_IO_EXECUTOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#if defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) +# include +#else // defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) +# include +# include +#endif // defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +#include + +namespace boost { +namespace asio { + +#if defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +typedef executor any_io_executor; + +#else // defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +/// Polymorphic executor type for use with I/O objects. +/** + * The @c any_io_executor type is a polymorphic executor that supports the set + * of properties required by I/O objects. It is defined as the + * execution::any_executor class template parameterised as follows: + * @code execution::any_executor< + * execution::context_as_t, + * execution::blocking_t::never_t, + * execution::prefer_only, + * execution::prefer_only, + * execution::prefer_only, + * execution::prefer_only, + * execution::prefer_only + * > @endcode + */ +class any_io_executor : +#if defined(GENERATING_DOCUMENTATION) + public execution::any_executor<...> +#else // defined(GENERATING_DOCUMENTATION) + public execution::any_executor< + execution::context_as_t, + execution::blocking_t::never_t, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only + > +#endif // defined(GENERATING_DOCUMENTATION) +{ +public: +#if !defined(GENERATING_DOCUMENTATION) + typedef execution::any_executor< + execution::context_as_t, + execution::blocking_t::never_t, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only + > base_type; + + typedef void supportable_properties_type( + execution::context_as_t, + execution::blocking_t::never_t, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only, + execution::prefer_only + ); +#endif // !defined(GENERATING_DOCUMENTATION) + + /// Default constructor. + BOOST_ASIO_DECL any_io_executor() noexcept; + + /// Construct in an empty state. Equivalent effects to default constructor. + BOOST_ASIO_DECL any_io_executor(nullptr_t) noexcept; + + /// Copy constructor. + BOOST_ASIO_DECL any_io_executor(const any_io_executor& e) noexcept; + + /// Move constructor. + BOOST_ASIO_DECL any_io_executor(any_io_executor&& e) noexcept; + + /// Construct to point to the same target as another any_executor. +#if defined(GENERATING_DOCUMENTATION) + template + any_io_executor(execution::any_executor e); +#else // defined(GENERATING_DOCUMENTATION) + template + any_io_executor(OtherAnyExecutor e, + constraint_t< + conditional_t< + !is_same::value + && is_base_of::value, + typename execution::detail::supportable_properties< + 0, supportable_properties_type>::template + is_valid_target, + false_type + >::value + > = 0) + : base_type(static_cast(e)) + { + } +#endif // defined(GENERATING_DOCUMENTATION) + + /// Construct to point to the same target as another any_executor. +#if defined(GENERATING_DOCUMENTATION) + template + any_io_executor(std::nothrow_t, + execution::any_executor e); +#else // defined(GENERATING_DOCUMENTATION) + template + any_io_executor(std::nothrow_t, OtherAnyExecutor e, + constraint_t< + conditional_t< + !is_same::value + && is_base_of::value, + typename execution::detail::supportable_properties< + 0, supportable_properties_type>::template + is_valid_target, + false_type + >::value + > = 0) noexcept + : base_type(std::nothrow, static_cast(e)) + { + } +#endif // defined(GENERATING_DOCUMENTATION) + + /// Construct to point to the same target as another any_executor. + BOOST_ASIO_DECL any_io_executor(std::nothrow_t, + const any_io_executor& e) noexcept; + + /// Construct to point to the same target as another any_executor. + BOOST_ASIO_DECL any_io_executor(std::nothrow_t, any_io_executor&& e) noexcept; + + /// Construct a polymorphic wrapper for the specified executor. +#if defined(GENERATING_DOCUMENTATION) + template + any_io_executor(Executor e); +#else // defined(GENERATING_DOCUMENTATION) + template + any_io_executor(Executor e, + constraint_t< + conditional_t< + !is_same::value + && !is_base_of::value, + execution::detail::is_valid_target_executor< + Executor, supportable_properties_type>, + false_type + >::value + > = 0) + : base_type(static_cast(e)) + { + } +#endif // defined(GENERATING_DOCUMENTATION) + + /// Construct a polymorphic wrapper for the specified executor. +#if defined(GENERATING_DOCUMENTATION) + template + any_io_executor(std::nothrow_t, Executor e); +#else // defined(GENERATING_DOCUMENTATION) + template + any_io_executor(std::nothrow_t, Executor e, + constraint_t< + conditional_t< + !is_same::value + && !is_base_of::value, + execution::detail::is_valid_target_executor< + Executor, supportable_properties_type>, + false_type + >::value + > = 0) noexcept + : base_type(std::nothrow, static_cast(e)) + { + } +#endif // defined(GENERATING_DOCUMENTATION) + + /// Assignment operator. + BOOST_ASIO_DECL any_io_executor& operator=( + const any_io_executor& e) noexcept; + + /// Move assignment operator. + BOOST_ASIO_DECL any_io_executor& operator=(any_io_executor&& e) noexcept; + + /// Assignment operator that sets the polymorphic wrapper to the empty state. + BOOST_ASIO_DECL any_io_executor& operator=(nullptr_t); + + /// Destructor. + BOOST_ASIO_DECL ~any_io_executor(); + + /// Swap targets with another polymorphic wrapper. + BOOST_ASIO_DECL void swap(any_io_executor& other) noexcept; + + /// Obtain a polymorphic wrapper with the specified property. + /** + * Do not call this function directly. It is intended for use with the + * boost::asio::require and boost::asio::prefer customisation points. + * + * For example: + * @code any_io_executor ex = ...; + * auto ex2 = boost::asio::require(ex, execution::blocking.possibly); @endcode + */ + template + any_io_executor require(const Property& p, + constraint_t< + traits::require_member::is_valid + > = 0) const + { + return static_cast(*this).require(p); + } + + /// Obtain a polymorphic wrapper with the specified property. + /** + * Do not call this function directly. It is intended for use with the + * boost::asio::prefer customisation point. + * + * For example: + * @code any_io_executor ex = ...; + * auto ex2 = boost::asio::prefer(ex, execution::blocking.possibly); @endcode + */ + template + any_io_executor prefer(const Property& p, + constraint_t< + traits::prefer_member::is_valid + > = 0) const + { + return static_cast(*this).prefer(p); + } +}; + +#if !defined(GENERATING_DOCUMENTATION) + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::require( + const execution::blocking_t::never_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::blocking_t::possibly_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::outstanding_work_t::tracked_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::outstanding_work_t::untracked_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::relationship_t::fork_t&, int) const; + +template <> +BOOST_ASIO_DECL any_io_executor any_io_executor::prefer( + const execution::relationship_t::continuation_t&, int) const; + +namespace traits { + +#if !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT) + +template <> +struct equality_comparable +{ + static const bool is_valid = true; + static const bool is_noexcept = true; +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_EQUALITY_COMPARABLE_TRAIT) + +#if !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT) + +template +struct execute_member +{ + static const bool is_valid = true; + static const bool is_noexcept = false; + typedef void result_type; +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_EXECUTE_MEMBER_TRAIT) + +#if !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT) + +template +struct query_member : + query_member +{ +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_QUERY_MEMBER_TRAIT) + +#if !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT) + +template +struct require_member : + require_member +{ + typedef any_io_executor result_type; +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_REQUIRE_MEMBER_TRAIT) + +#if !defined(BOOST_ASIO_HAS_DEDUCED_PREFER_MEMBER_TRAIT) + +template +struct prefer_member : + prefer_member +{ + typedef any_io_executor result_type; +}; + +#endif // !defined(BOOST_ASIO_HAS_DEDUCED_PREFER_MEMBER_TRAIT) + +} // namespace traits + +#endif // !defined(GENERATING_DOCUMENTATION) + +#endif // defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +} // namespace asio +} // namespace boost + +#include + +#if defined(BOOST_ASIO_HEADER_ONLY) \ + && !defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) +# include +#endif // defined(BOOST_ASIO_HEADER_ONLY) + // && !defined(BOOST_ASIO_USE_TS_EXECUTOR_AS_DEFAULT) + +#endif // BOOST_ASIO_ANY_IO_EXECUTOR_HPP diff --git a/extern/boost/boost/asio/append.hpp b/extern/boost/boost/asio/append.hpp new file mode 100644 index 0000000000..b6714a7be2 --- /dev/null +++ b/extern/boost/boost/asio/append.hpp @@ -0,0 +1,67 @@ +// +// append.hpp +// ~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_APPEND_HPP +#define BOOST_ASIO_APPEND_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include + +#include + +namespace boost { +namespace asio { + +/// Completion token type used to specify that the completion handler +/// arguments should be passed additional values after the results of the +/// operation. +template +class append_t +{ +public: + /// Constructor. + template + constexpr explicit append_t(T&& completion_token, V&&... values) + : token_(static_cast(completion_token)), + values_(static_cast(values)...) + { + } + +//private: + CompletionToken token_; + std::tuple values_; +}; + +/// Completion token type used to specify that the completion handler +/// arguments should be passed additional values after the results of the +/// operation. +template +BOOST_ASIO_NODISCARD inline constexpr +append_t, decay_t...> +append(CompletionToken&& completion_token, Values&&... values) +{ + return append_t, decay_t...>( + static_cast(completion_token), + static_cast(values)...); +} + +} // namespace asio +} // namespace boost + +#include + +#include + +#endif // BOOST_ASIO_APPEND_HPP diff --git a/extern/boost/boost/asio/as_tuple.hpp b/extern/boost/boost/asio/as_tuple.hpp new file mode 100644 index 0000000000..be508b8681 --- /dev/null +++ b/extern/boost/boost/asio/as_tuple.hpp @@ -0,0 +1,154 @@ +// +// as_tuple.hpp +// ~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_AS_TUPLE_HPP +#define BOOST_ASIO_AS_TUPLE_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include + +#include + +namespace boost { +namespace asio { + +/// A @ref completion_token adapter used to specify that the completion handler +/// arguments should be combined into a single tuple argument. +/** + * The as_tuple_t class is used to indicate that any arguments to the + * completion handler should be combined and passed as a single tuple argument. + * The arguments are first moved into a @c std::tuple and that tuple is then + * passed to the completion handler. + */ +template +class as_tuple_t +{ +public: + /// Tag type used to prevent the "default" constructor from being used for + /// conversions. + struct default_constructor_tag {}; + + /// Default constructor. + /** + * This constructor is only valid if the underlying completion token is + * default constructible and move constructible. The underlying completion + * token is itself defaulted as an argument to allow it to capture a source + * location. + */ + constexpr as_tuple_t( + default_constructor_tag = default_constructor_tag(), + CompletionToken token = CompletionToken()) + : token_(static_cast(token)) + { + } + + /// Constructor. + template + constexpr explicit as_tuple_t( + T&& completion_token) + : token_(static_cast(completion_token)) + { + } + + /// Adapts an executor to add the @c as_tuple_t completion token as the + /// default. + template + struct executor_with_default : InnerExecutor + { + /// Specify @c as_tuple_t as the default completion token type. + typedef as_tuple_t default_completion_token_type; + + /// Construct the adapted executor from the inner executor type. + template + executor_with_default(const InnerExecutor1& ex, + constraint_t< + conditional_t< + !is_same::value, + is_convertible, + false_type + >::value + > = 0) noexcept + : InnerExecutor(ex) + { + } + }; + + /// Type alias to adapt an I/O object to use @c as_tuple_t as its + /// default completion token type. + template + using as_default_on_t = typename T::template rebind_executor< + executor_with_default>::other; + + /// Function helper to adapt an I/O object to use @c as_tuple_t as its + /// default completion token type. + template + static typename decay_t::template rebind_executor< + executor_with_default::executor_type> + >::other + as_default_on(T&& object) + { + return typename decay_t::template rebind_executor< + executor_with_default::executor_type> + >::other(static_cast(object)); + } + +//private: + CompletionToken token_; +}; + +/// A function object type that adapts a @ref completion_token to specify that +/// the completion handler arguments should be combined into a single tuple +/// argument. +/** + * May also be used directly as a completion token, in which case it adapts the + * asynchronous operation's default completion token (or boost::asio::deferred + * if no default is available). + */ +struct partial_as_tuple +{ + /// Default constructor. + constexpr partial_as_tuple() + { + } + + /// Adapt a @ref completion_token to specify that the completion handler + /// arguments should be combined into a single tuple argument. + template + BOOST_ASIO_NODISCARD inline + constexpr as_tuple_t> + operator()(CompletionToken&& completion_token) const + { + return as_tuple_t>( + static_cast(completion_token)); + } +}; + +/// A function object that adapts a @ref completion_token to specify that the +/// completion handler arguments should be combined into a single tuple +/// argument. +/** + * May also be used directly as a completion token, in which case it adapts the + * asynchronous operation's default completion token (or boost::asio::deferred + * if no default is available). + */ +BOOST_ASIO_INLINE_VARIABLE constexpr partial_as_tuple as_tuple; + +} // namespace asio +} // namespace boost + +#include + +#include + +#endif // BOOST_ASIO_AS_TUPLE_HPP diff --git a/extern/boost/boost/asio/associated_allocator.hpp b/extern/boost/boost/asio/associated_allocator.hpp new file mode 100644 index 0000000000..0a8db18a3f --- /dev/null +++ b/extern/boost/boost/asio/associated_allocator.hpp @@ -0,0 +1,216 @@ +// +// associated_allocator.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_ASSOCIATED_ALLOCATOR_HPP +#define BOOST_ASIO_ASSOCIATED_ALLOCATOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { + +template +struct associated_allocator; + +namespace detail { + +template +struct has_allocator_type : false_type +{ +}; + +template +struct has_allocator_type> : true_type +{ +}; + +template +struct associated_allocator_impl +{ + typedef void asio_associated_allocator_is_unspecialised; + + typedef A type; + + static type get(const T&) noexcept + { + return type(); + } + + static const type& get(const T&, const A& a) noexcept + { + return a; + } +}; + +template +struct associated_allocator_impl> +{ + typedef typename T::allocator_type type; + + static auto get(const T& t) noexcept + -> decltype(t.get_allocator()) + { + return t.get_allocator(); + } + + static auto get(const T& t, const A&) noexcept + -> decltype(t.get_allocator()) + { + return t.get_allocator(); + } +}; + +template +struct associated_allocator_impl::value + >, + void_t< + typename associator::type + >> : associator +{ +}; + +} // namespace detail + +/// Traits type used to obtain the allocator associated with an object. +/** + * A program may specialise this traits type if the @c T template parameter in + * the specialisation is a user-defined type. The template parameter @c + * Allocator shall be a type meeting the Allocator requirements. + * + * Specialisations shall meet the following requirements, where @c t is a const + * reference to an object of type @c T, and @c a is an object of type @c + * Allocator. + * + * @li Provide a nested typedef @c type that identifies a type meeting the + * Allocator requirements. + * + * @li Provide a noexcept static member function named @c get, callable as @c + * get(t) and with return type @c type or a (possibly const) reference to @c + * type. + * + * @li Provide a noexcept static member function named @c get, callable as @c + * get(t,a) and with return type @c type or a (possibly const) reference to @c + * type. + */ +template > +struct associated_allocator +#if !defined(GENERATING_DOCUMENTATION) + : detail::associated_allocator_impl +#endif // !defined(GENERATING_DOCUMENTATION) +{ +#if defined(GENERATING_DOCUMENTATION) + /// If @c T has a nested type @c allocator_type, T::allocator_type. + /// Otherwise @c Allocator. + typedef see_below type; + + /// If @c T has a nested type @c allocator_type, returns + /// t.get_allocator(). Otherwise returns @c type(). + static decltype(auto) get(const T& t) noexcept; + + /// If @c T has a nested type @c allocator_type, returns + /// t.get_allocator(). Otherwise returns @c a. + static decltype(auto) get(const T& t, const Allocator& a) noexcept; +#endif // defined(GENERATING_DOCUMENTATION) +}; + +/// Helper function to obtain an object's associated allocator. +/** + * @returns associated_allocator::get(t) + */ +template +BOOST_ASIO_NODISCARD inline typename associated_allocator::type +get_associated_allocator(const T& t) noexcept +{ + return associated_allocator::get(t); +} + +/// Helper function to obtain an object's associated allocator. +/** + * @returns associated_allocator::get(t, a) + */ +template +BOOST_ASIO_NODISCARD inline auto get_associated_allocator( + const T& t, const Allocator& a) noexcept + -> decltype(associated_allocator::get(t, a)) +{ + return associated_allocator::get(t, a); +} + +template > +using associated_allocator_t + = typename associated_allocator::type; + +namespace detail { + +template +struct associated_allocator_forwarding_base +{ +}; + +template +struct associated_allocator_forwarding_base::asio_associated_allocator_is_unspecialised, + void + >::value + >> +{ + typedef void asio_associated_allocator_is_unspecialised; +}; + +} // namespace detail + +/// Specialisation of associated_allocator for @c std::reference_wrapper. +template +struct associated_allocator, Allocator> +#if !defined(GENERATING_DOCUMENTATION) + : detail::associated_allocator_forwarding_base +#endif // !defined(GENERATING_DOCUMENTATION) +{ + /// Forwards @c type to the associator specialisation for the unwrapped type + /// @c T. + typedef typename associated_allocator::type type; + + /// Forwards the request to get the allocator to the associator specialisation + /// for the unwrapped type @c T. + static type get(reference_wrapper t) noexcept + { + return associated_allocator::get(t.get()); + } + + /// Forwards the request to get the allocator to the associator specialisation + /// for the unwrapped type @c T. + static auto get(reference_wrapper t, const Allocator& a) noexcept + -> decltype(associated_allocator::get(t.get(), a)) + { + return associated_allocator::get(t.get(), a); + } +}; + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_ASSOCIATED_ALLOCATOR_HPP diff --git a/extern/boost/boost/asio/associated_cancellation_slot.hpp b/extern/boost/boost/asio/associated_cancellation_slot.hpp new file mode 100644 index 0000000000..ec44de0bd5 --- /dev/null +++ b/extern/boost/boost/asio/associated_cancellation_slot.hpp @@ -0,0 +1,223 @@ +// +// associated_cancellation_slot.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_ASSOCIATED_CANCELLATION_SLOT_HPP +#define BOOST_ASIO_ASSOCIATED_CANCELLATION_SLOT_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { + +template +struct associated_cancellation_slot; + +namespace detail { + +template +struct has_cancellation_slot_type : false_type +{ +}; + +template +struct has_cancellation_slot_type> + : true_type +{ +}; + +template +struct associated_cancellation_slot_impl +{ + typedef void asio_associated_cancellation_slot_is_unspecialised; + + typedef S type; + + static type get(const T&) noexcept + { + return type(); + } + + static const type& get(const T&, const S& s) noexcept + { + return s; + } +}; + +template +struct associated_cancellation_slot_impl> +{ + typedef typename T::cancellation_slot_type type; + + static auto get(const T& t) noexcept + -> decltype(t.get_cancellation_slot()) + { + return t.get_cancellation_slot(); + } + + static auto get(const T& t, const S&) noexcept + -> decltype(t.get_cancellation_slot()) + { + return t.get_cancellation_slot(); + } +}; + +template +struct associated_cancellation_slot_impl::value + >, + void_t< + typename associator::type + >> : associator +{ +}; + +} // namespace detail + +/// Traits type used to obtain the cancellation_slot associated with an object. +/** + * A program may specialise this traits type if the @c T template parameter in + * the specialisation is a user-defined type. The template parameter @c + * CancellationSlot shall be a type meeting the CancellationSlot requirements. + * + * Specialisations shall meet the following requirements, where @c t is a const + * reference to an object of type @c T, and @c s is an object of type @c + * CancellationSlot. + * + * @li Provide a nested typedef @c type that identifies a type meeting the + * CancellationSlot requirements. + * + * @li Provide a noexcept static member function named @c get, callable as @c + * get(t) and with return type @c type or a (possibly const) reference to @c + * type. + * + * @li Provide a noexcept static member function named @c get, callable as @c + * get(t,s) and with return type @c type or a (possibly const) reference to @c + * type. + */ +template +struct associated_cancellation_slot +#if !defined(GENERATING_DOCUMENTATION) + : detail::associated_cancellation_slot_impl +#endif // !defined(GENERATING_DOCUMENTATION) +{ +#if defined(GENERATING_DOCUMENTATION) + /// If @c T has a nested type @c cancellation_slot_type, + /// T::cancellation_slot_type. Otherwise + /// @c CancellationSlot. + typedef see_below type; + + /// If @c T has a nested type @c cancellation_slot_type, returns + /// t.get_cancellation_slot(). Otherwise returns @c type(). + static decltype(auto) get(const T& t) noexcept; + + /// If @c T has a nested type @c cancellation_slot_type, returns + /// t.get_cancellation_slot(). Otherwise returns @c s. + static decltype(auto) get(const T& t, + const CancellationSlot& s) noexcept; +#endif // defined(GENERATING_DOCUMENTATION) +}; + +/// Helper function to obtain an object's associated cancellation_slot. +/** + * @returns associated_cancellation_slot::get(t) + */ +template +BOOST_ASIO_NODISCARD inline typename associated_cancellation_slot::type +get_associated_cancellation_slot(const T& t) noexcept +{ + return associated_cancellation_slot::get(t); +} + +/// Helper function to obtain an object's associated cancellation_slot. +/** + * @returns associated_cancellation_slot::get(t, st) + */ +template +BOOST_ASIO_NODISCARD inline auto get_associated_cancellation_slot( + const T& t, const CancellationSlot& st) noexcept + -> decltype(associated_cancellation_slot::get(t, st)) +{ + return associated_cancellation_slot::get(t, st); +} + +template +using associated_cancellation_slot_t = + typename associated_cancellation_slot::type; + +namespace detail { + +template +struct associated_cancellation_slot_forwarding_base +{ +}; + +template +struct associated_cancellation_slot_forwarding_base::asio_associated_cancellation_slot_is_unspecialised, + void + >::value + >> +{ + typedef void asio_associated_cancellation_slot_is_unspecialised; +}; + +} // namespace detail + +/// Specialisation of associated_cancellation_slot for @c +/// std::reference_wrapper. +template +struct associated_cancellation_slot, CancellationSlot> +#if !defined(GENERATING_DOCUMENTATION) + : detail::associated_cancellation_slot_forwarding_base +#endif // !defined(GENERATING_DOCUMENTATION) +{ + /// Forwards @c type to the associator specialisation for the unwrapped type + /// @c T. + typedef typename associated_cancellation_slot::type type; + + /// Forwards the request to get the cancellation slot to the associator + /// specialisation for the unwrapped type @c T. + static type get(reference_wrapper t) noexcept + { + return associated_cancellation_slot::get(t.get()); + } + + /// Forwards the request to get the cancellation slot to the associator + /// specialisation for the unwrapped type @c T. + static auto get(reference_wrapper t, const CancellationSlot& s) noexcept + -> decltype( + associated_cancellation_slot::get(t.get(), s)) + { + return associated_cancellation_slot::get(t.get(), s); + } +}; + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_ASSOCIATED_CANCELLATION_SLOT_HPP diff --git a/extern/boost/boost/asio/associated_executor.hpp b/extern/boost/boost/asio/associated_executor.hpp new file mode 100644 index 0000000000..bf36647e61 --- /dev/null +++ b/extern/boost/boost/asio/associated_executor.hpp @@ -0,0 +1,237 @@ +// +// associated_executor.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_ASSOCIATED_EXECUTOR_HPP +#define BOOST_ASIO_ASSOCIATED_EXECUTOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { + +template +struct associated_executor; + +namespace detail { + +template +struct has_executor_type : false_type +{ +}; + +template +struct has_executor_type> + : true_type +{ +}; + +template +struct associated_executor_impl +{ + typedef void asio_associated_executor_is_unspecialised; + + typedef E type; + + static type get(const T&) noexcept + { + return type(); + } + + static const type& get(const T&, const E& e) noexcept + { + return e; + } +}; + +template +struct associated_executor_impl> +{ + typedef typename T::executor_type type; + + static auto get(const T& t) noexcept + -> decltype(t.get_executor()) + { + return t.get_executor(); + } + + static auto get(const T& t, const E&) noexcept + -> decltype(t.get_executor()) + { + return t.get_executor(); + } +}; + +template +struct associated_executor_impl::value + >, + void_t< + typename associator::type + >> : associator +{ +}; + +} // namespace detail + +/// Traits type used to obtain the executor associated with an object. +/** + * A program may specialise this traits type if the @c T template parameter in + * the specialisation is a user-defined type. The template parameter @c + * Executor shall be a type meeting the Executor requirements. + * + * Specialisations shall meet the following requirements, where @c t is a const + * reference to an object of type @c T, and @c e is an object of type @c + * Executor. + * + * @li Provide a nested typedef @c type that identifies a type meeting the + * Executor requirements. + * + * @li Provide a noexcept static member function named @c get, callable as @c + * get(t) and with return type @c type or a (possibly const) reference to @c + * type. + * + * @li Provide a noexcept static member function named @c get, callable as @c + * get(t,e) and with return type @c type or a (possibly const) reference to @c + * type. + */ +template +struct associated_executor +#if !defined(GENERATING_DOCUMENTATION) + : detail::associated_executor_impl +#endif // !defined(GENERATING_DOCUMENTATION) +{ +#if defined(GENERATING_DOCUMENTATION) + /// If @c T has a nested type @c executor_type, T::executor_type. + /// Otherwise @c Executor. + typedef see_below type; + + /// If @c T has a nested type @c executor_type, returns + /// t.get_executor(). Otherwise returns @c type(). + static decltype(auto) get(const T& t) noexcept; + + /// If @c T has a nested type @c executor_type, returns + /// t.get_executor(). Otherwise returns @c ex. + static decltype(auto) get(const T& t, const Executor& ex) noexcept; +#endif // defined(GENERATING_DOCUMENTATION) +}; + +/// Helper function to obtain an object's associated executor. +/** + * @returns associated_executor::get(t) + */ +template +BOOST_ASIO_NODISCARD inline typename associated_executor::type +get_associated_executor(const T& t) noexcept +{ + return associated_executor::get(t); +} + +/// Helper function to obtain an object's associated executor. +/** + * @returns associated_executor::get(t, ex) + */ +template +BOOST_ASIO_NODISCARD inline auto get_associated_executor( + const T& t, const Executor& ex, + constraint_t< + is_executor::value || execution::is_executor::value + > = 0) noexcept + -> decltype(associated_executor::get(t, ex)) +{ + return associated_executor::get(t, ex); +} + +/// Helper function to obtain an object's associated executor. +/** + * @returns associated_executor::get(t, ctx.get_executor()) + */ +template +BOOST_ASIO_NODISCARD inline typename associated_executor::type +get_associated_executor(const T& t, ExecutionContext& ctx, + constraint_t::value> = 0) noexcept +{ + return associated_executor::get(t, ctx.get_executor()); +} + +template +using associated_executor_t = typename associated_executor::type; + +namespace detail { + +template +struct associated_executor_forwarding_base +{ +}; + +template +struct associated_executor_forwarding_base::asio_associated_executor_is_unspecialised, + void + >::value + >> +{ + typedef void asio_associated_executor_is_unspecialised; +}; + +} // namespace detail + +/// Specialisation of associated_executor for @c std::reference_wrapper. +template +struct associated_executor, Executor> +#if !defined(GENERATING_DOCUMENTATION) + : detail::associated_executor_forwarding_base +#endif // !defined(GENERATING_DOCUMENTATION) +{ + /// Forwards @c type to the associator specialisation for the unwrapped type + /// @c T. + typedef typename associated_executor::type type; + + /// Forwards the request to get the executor to the associator specialisation + /// for the unwrapped type @c T. + static type get(reference_wrapper t) noexcept + { + return associated_executor::get(t.get()); + } + + /// Forwards the request to get the executor to the associator specialisation + /// for the unwrapped type @c T. + static auto get(reference_wrapper t, const Executor& ex) noexcept + -> decltype(associated_executor::get(t.get(), ex)) + { + return associated_executor::get(t.get(), ex); + } +}; + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_ASSOCIATED_EXECUTOR_HPP diff --git a/extern/boost/boost/asio/associated_immediate_executor.hpp b/extern/boost/boost/asio/associated_immediate_executor.hpp new file mode 100644 index 0000000000..64fa4d943d --- /dev/null +++ b/extern/boost/boost/asio/associated_immediate_executor.hpp @@ -0,0 +1,283 @@ +// +// associated_immediate_executor.hpp +// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_ASSOCIATED_IMMEDIATE_EXECUTOR_HPP +#define BOOST_ASIO_ASSOCIATED_IMMEDIATE_EXECUTOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +namespace boost { +namespace asio { + +template +struct associated_immediate_executor; + +namespace detail { + +template +struct has_immediate_executor_type : false_type +{ +}; + +template +struct has_immediate_executor_type> + : true_type +{ +}; + +template +struct default_immediate_executor +{ + typedef decay_t> type; + + static auto get(const E& e) noexcept + -> decltype(boost::asio::require(e, execution::blocking.never)) + { + return boost::asio::require(e, execution::blocking.never); + } +}; + +template +struct default_immediate_executor::value + >, + enable_if_t< + is_executor::value + >> +{ + class type : public E + { + public: + template + explicit type(const Executor1& e, + constraint_t< + conditional_t< + !is_same::value, + is_convertible, + false_type + >::value + > = 0) noexcept + : E(e) + { + } + + type(const type& other) noexcept + : E(static_cast(other)) + { + } + + type(type&& other) noexcept + : E(static_cast(other)) + { + } + + template + void dispatch(Function&& f, const Allocator& a) const + { + this->post(static_cast(f), a); + } + + friend bool operator==(const type& a, const type& b) noexcept + { + return static_cast(a) == static_cast(b); + } + + friend bool operator!=(const type& a, const type& b) noexcept + { + return static_cast(a) != static_cast(b); + } + }; + + static type get(const E& e) noexcept + { + return type(e); + } +}; + +template +struct associated_immediate_executor_impl +{ + typedef void asio_associated_immediate_executor_is_unspecialised; + + typedef typename default_immediate_executor::type type; + + static auto get(const T&, const E& e) noexcept + -> decltype(default_immediate_executor::get(e)) + { + return default_immediate_executor::get(e); + } +}; + +template +struct associated_immediate_executor_impl> +{ + typedef typename T::immediate_executor_type type; + + static auto get(const T& t, const E&) noexcept + -> decltype(t.get_immediate_executor()) + { + return t.get_immediate_executor(); + } +}; + +template +struct associated_immediate_executor_impl::value + >, + void_t< + typename associator::type + >> : associator +{ +}; + +} // namespace detail + +/// Traits type used to obtain the immediate executor associated with an object. +/** + * A program may specialise this traits type if the @c T template parameter in + * the specialisation is a user-defined type. The template parameter @c + * Executor shall be a type meeting the Executor requirements. + * + * Specialisations shall meet the following requirements, where @c t is a const + * reference to an object of type @c T, and @c e is an object of type @c + * Executor. + * + * @li Provide a nested typedef @c type that identifies a type meeting the + * Executor requirements. + * + * @li Provide a noexcept static member function named @c get, callable as @c + * get(t) and with return type @c type or a (possibly const) reference to @c + * type. + * + * @li Provide a noexcept static member function named @c get, callable as @c + * get(t,e) and with return type @c type or a (possibly const) reference to @c + * type. + */ +template +struct associated_immediate_executor +#if !defined(GENERATING_DOCUMENTATION) + : detail::associated_immediate_executor_impl +#endif // !defined(GENERATING_DOCUMENTATION) +{ +#if defined(GENERATING_DOCUMENTATION) + /// If @c T has a nested type @c immediate_executor_type, + // T::immediate_executor_type. Otherwise @c Executor. + typedef see_below type; + + /// If @c T has a nested type @c immediate_executor_type, returns + /// t.get_immediate_executor(). Otherwise returns + /// boost::asio::require(ex, boost::asio::execution::blocking.never). + static decltype(auto) get(const T& t, const Executor& ex) noexcept; +#endif // defined(GENERATING_DOCUMENTATION) +}; + +/// Helper function to obtain an object's associated executor. +/** + * @returns associated_immediate_executor::get(t, ex) + */ +template +BOOST_ASIO_NODISCARD inline auto get_associated_immediate_executor( + const T& t, const Executor& ex, + constraint_t< + is_executor::value || execution::is_executor::value + > = 0) noexcept + -> decltype(associated_immediate_executor::get(t, ex)) +{ + return associated_immediate_executor::get(t, ex); +} + +/// Helper function to obtain an object's associated executor. +/** + * @returns associated_immediate_executor::get(t, ctx.get_executor()) + */ +template +BOOST_ASIO_NODISCARD inline typename associated_immediate_executor::type +get_associated_immediate_executor(const T& t, ExecutionContext& ctx, + constraint_t< + is_convertible::value + > = 0) noexcept +{ + return associated_immediate_executor::get(t, ctx.get_executor()); +} + +template +using associated_immediate_executor_t = + typename associated_immediate_executor::type; + +namespace detail { + +template +struct associated_immediate_executor_forwarding_base +{ +}; + +template +struct associated_immediate_executor_forwarding_base::asio_associated_immediate_executor_is_unspecialised, + void + >::value + >> +{ + typedef void asio_associated_immediate_executor_is_unspecialised; +}; + +} // namespace detail + +/// Specialisation of associated_immediate_executor for +/// @c std::reference_wrapper. +template +struct associated_immediate_executor, Executor> +#if !defined(GENERATING_DOCUMENTATION) + : detail::associated_immediate_executor_forwarding_base +#endif // !defined(GENERATING_DOCUMENTATION) +{ + /// Forwards @c type to the associator specialisation for the unwrapped type + /// @c T. + typedef typename associated_immediate_executor::type type; + + /// Forwards the request to get the executor to the associator specialisation + /// for the unwrapped type @c T. + static auto get(reference_wrapper t, const Executor& ex) noexcept + -> decltype(associated_immediate_executor::get(t.get(), ex)) + { + return associated_immediate_executor::get(t.get(), ex); + } +}; + +} // namespace asio +} // namespace boost + +#include + +#endif // BOOST_ASIO_ASSOCIATED_IMMEDIATE_EXECUTOR_HPP diff --git a/extern/boost/boost/asio/associator.hpp b/extern/boost/boost/asio/associator.hpp new file mode 100644 index 0000000000..d9f5e6e94e --- /dev/null +++ b/extern/boost/boost/asio/associator.hpp @@ -0,0 +1,37 @@ +// +// associator.hpp +// ~~~~~~~~~~~~~~ +// +// Copyright (c) 2003-2024 Christopher M. Kohlhoff (chris at kohlhoff dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +#ifndef BOOST_ASIO_ASSOCIATOR_HPP +#define BOOST_ASIO_ASSOCIATOR_HPP + +#if defined(_MSC_VER) && (_MSC_VER >= 1200) +# pragma once +#endif // defined(_MSC_VER) && (_MSC_VER >= 1200) + +#include + +#include + +namespace boost { +namespace asio { + +/// Used to generically specialise associators for a type. +template