passenger 6.0.8 → 6.0.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1145) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +29 -0
  3. data/CONTRIBUTORS +5 -0
  4. data/src/agent/Core/Config.h +1 -1
  5. data/src/agent/Core/Controller/Config.h +1 -1
  6. data/src/agent/Shared/ApplicationPoolApiKey.h +2 -0
  7. data/src/agent/Watchdog/Config.h +1 -1
  8. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +27 -27
  9. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +1 -1
  10. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +2 -2
  11. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +19 -19
  12. data/src/cxx_supportlib/Constants.h +1 -1
  13. data/src/cxx_supportlib/DataStructures/HashedStaticString.h +2 -0
  14. data/src/cxx_supportlib/FileDescriptor.h +8 -0
  15. data/src/cxx_supportlib/StaticString.h +2 -0
  16. data/src/cxx_supportlib/Utils/HttpConstants.h +1 -1
  17. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/case_conv.hpp +3 -0
  18. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/classification.hpp +2 -0
  19. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_format_all.hpp +2 -0
  20. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +1 -1
  21. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +240 -11
  22. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +1 -1
  23. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +5 -5
  24. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +9 -9
  25. data/src/cxx_supportlib/vendor-modified/boost/asio/awaitable.hpp +1 -1
  26. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +21 -13
  27. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +13 -13
  28. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +1 -1
  29. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +21 -13
  30. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +20 -13
  31. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +18 -18
  32. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +29 -21
  33. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +22 -21
  34. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +58 -51
  35. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +1 -1
  36. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +1 -1
  37. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +20 -13
  38. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +1 -1
  39. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +1 -1
  40. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +16 -16
  41. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +5 -5
  42. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +25 -25
  43. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +1 -1
  44. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  45. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +1 -1
  46. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  47. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +1 -1
  48. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +1 -1
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/co_spawn.hpp +13 -13
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +1 -1
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +19 -19
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +1 -1
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +5 -5
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/detached.hpp +3 -3
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +1 -1
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +1 -1
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +1 -1
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +1 -1
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +5 -1
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/blocking_executor_op.hpp +1 -1
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +1 -1
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bulk_executor_op.hpp +1 -1
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +1 -1
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +1 -1
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +1 -1
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +1 -1
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +1 -1
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +58 -15
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +1 -1
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +1 -1
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +1 -1
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +1 -1
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +1 -1
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +1 -1
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +1 -1
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +1 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +1 -1
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +1 -1
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_function.hpp +3 -2
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +1 -1
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/functional.hpp +1 -1
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/future.hpp +1 -1
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +1 -1
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +1 -1
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +1 -1
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +1 -1
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +1 -1
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +3 -3
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +1 -1
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +1 -1
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +1 -1
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +88 -12
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +1 -1
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +1 -1
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +1 -1
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +1 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +1 -1
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +10 -8
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +1 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +1 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +1 -1
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +1 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +8 -4
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +1 -1
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +1 -1
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +1 -1
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +1 -1
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +1 -1
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/scheduler.ipp +6 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +1 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +1 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +1 -1
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +1 -1
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +1 -1
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +13 -11
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +7 -40
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +25 -1
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +3 -33
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +29 -5
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/thread_context.ipp +37 -0
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +1 -1
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -1
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_object_impl.hpp +4 -7
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +1 -1
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +1 -1
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +1 -1
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +1 -1
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +1 -1
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +1 -1
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/non_const_lvalue.hpp +1 -1
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +1 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +1 -1
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +1 -1
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -1
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +1 -1
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +1 -1
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +1 -1
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +1 -1
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +1 -1
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +1 -1
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +1 -1
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +1 -1
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +1 -1
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +1 -1
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +7 -1
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +1 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +1 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +1 -1
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +1 -1
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +1 -1
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +1 -1
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +1 -1
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +1 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +1 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +1 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +1 -1
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +1 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +1 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +1 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +3 -5
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +11 -2
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +1 -1
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +1 -1
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +3 -3
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +7 -7
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +16 -1
  205. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler.hpp +2 -5
  206. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_operation.hpp +1 -1
  207. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scheduler_thread_info.hpp +1 -1
  208. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +1 -1
  210. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  211. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +1 -1
  212. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +1 -1
  213. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  214. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +1 -1
  215. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  216. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +1 -1
  217. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +1 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  219. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +1 -1
  220. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  221. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +2 -1
  223. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +1 -1
  224. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/source_location.hpp +1 -1
  225. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +1 -1
  226. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +2 -2
  227. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -1
  228. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -1
  230. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -1
  231. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +1 -1
  232. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +8 -1
  233. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +4 -5
  234. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +5 -5
  236. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +10 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +5 -1
  238. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +9 -2
  239. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +1 -1
  241. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +1 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +1 -1
  244. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +1 -1
  246. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +1 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +9 -1
  249. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +1 -1
  250. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +1 -1
  251. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +1 -1
  252. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +1 -1
  253. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +1 -1
  254. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +1 -1
  255. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +5 -5
  256. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +1 -1
  257. data/src/cxx_supportlib/vendor-modified/boost/asio/execution.hpp +1 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +107 -19
  259. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +194 -112
  260. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bad_executor.hpp +1 -1
  261. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +283 -83
  262. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +218 -70
  263. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +47 -42
  264. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +287 -90
  265. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +39 -36
  266. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +62 -14
  267. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +29 -9
  268. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_invocable.hpp +1 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_receiver.hpp +1 -1
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/bulk_sender.hpp +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/submit_receiver.hpp +1 -1
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/void_receiver.hpp +1 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +67 -48
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +39 -25
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/bad_executor.ipp +1 -1
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/impl/receiver_invocation_error.ipp +1 -1
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/invocable_archetype.hpp +1 -1
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +281 -82
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +62 -14
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +1 -1
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +216 -70
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/prefer_only.hpp +7 -3
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +1 -1
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver_invocation_error.hpp +1 -1
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +215 -70
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +14 -17
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +1 -1
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +1 -1
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +7 -10
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +7 -10
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +7 -10
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +7 -10
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +21 -21
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +1 -1
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +1 -1
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +34 -19
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/as_single.hpp +137 -0
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +245 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +1 -1
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +1 -1
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +1 -1
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +1 -1
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +1 -1
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +1 -1
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +1 -1
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +1 -1
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +1 -1
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/awaitable.hpp +4 -4
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +3 -1
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +3 -1
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +13 -13
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +4 -2
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +19 -19
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +13 -9
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/detached.hpp +1 -1
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +13 -9
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +1 -1
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +1 -1
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +1 -1
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +1 -2
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +1 -1
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +3 -3
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +6 -2
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +1 -1
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/multiple_exceptions.ipp +1 -1
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +13 -9
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +56 -44
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +2 -2
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +106 -70
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +2 -1
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +1 -1
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +8 -7
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +2 -1
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +1 -1
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +1 -1
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +1 -2
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +6 -2
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +1 -1
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_awaitable.hpp +14 -14
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +1 -1
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +56 -44
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +2 -2
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +21 -1
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +1 -1
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +1 -1
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +1 -1
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +23 -1
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +21 -1
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +1 -1
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +1 -1
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +47 -6
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +1 -1
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +1 -1
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +1 -1
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +32 -5
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +51 -5
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +1 -1
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +1 -1
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +1 -1
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +1 -1
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +1 -1
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +1 -1
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +1 -1
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +1 -1
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +1 -1
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +1 -1
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +1 -1
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +1 -1
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +2 -2
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +1 -1
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +1 -1
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +1 -1
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +1 -1
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +1 -1
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +1 -1
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +1 -1
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +1 -1
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +1 -1
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +1 -1
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +1 -1
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +1 -1
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +1 -1
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +1 -1
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/is_applicable_property.hpp +1 -1
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +1 -1
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +1 -1
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +1 -1
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +1 -1
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +1 -1
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +1 -1
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +1 -1
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/multiple_exceptions.hpp +1 -1
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +1 -1
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +1 -1
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +11 -10
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +17 -6
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +1 -1
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +1 -1
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +1 -1
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +5 -5
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/prefer.hpp +235 -157
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/query.hpp +79 -51
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +55 -43
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +1 -1
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +106 -70
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/redirect_error.hpp +1 -1
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/require.hpp +136 -89
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/require_concept.hpp +100 -58
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +1 -1
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +1 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +1 -1
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +1 -1
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +7 -7
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +1 -1
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +1 -1
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +1 -1
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +1 -1
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +1 -1
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +1 -1
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +1 -1
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +1 -1
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +2 -1
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +1 -1
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +1 -1
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +1 -1
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +1 -1
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +1 -1
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +1 -1
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +1 -1
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +1 -1
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +1 -1
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/host_name_verification.hpp +1 -1
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +1 -1
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +1 -1
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +1 -1
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/host_name_verification.ipp +1 -1
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +1 -1
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +1 -1
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +1 -1
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +1 -1
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +1 -1
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/static_thread_pool.hpp +1 -1
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +1 -1
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +55 -23
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +1 -1
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +23 -1
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +1 -1
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/this_coro.hpp +1 -1
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +21 -1
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_free.hpp +1 -1
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/bulk_execute_member.hpp +1 -1
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_free.hpp +1 -1
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/connect_member.hpp +1 -1
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/equality_comparable.hpp +7 -3
  468. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_free.hpp +1 -1
  469. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/execute_member.hpp +1 -1
  470. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_free.hpp +1 -1
  471. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/prefer_member.hpp +1 -1
  472. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_free.hpp +1 -1
  473. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_member.hpp +1 -1
  474. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/query_static_constexpr_member.hpp +1 -1
  475. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_free.hpp +1 -1
  476. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_concept_member.hpp +1 -1
  477. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_free.hpp +1 -1
  478. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/require_member.hpp +1 -1
  479. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_free.hpp +1 -1
  480. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/schedule_member.hpp +1 -1
  481. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_free.hpp +1 -1
  482. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_done_member.hpp +1 -1
  483. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_free.hpp +1 -1
  484. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_error_member.hpp +1 -1
  485. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_free.hpp +1 -1
  486. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/set_value_member.hpp +1 -1
  487. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_free.hpp +1 -1
  488. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/start_member.hpp +1 -1
  489. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_query.hpp +1 -1
  490. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require.hpp +1 -1
  491. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/static_require_concept.hpp +3 -2
  492. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_free.hpp +1 -1
  493. data/src/cxx_supportlib/vendor-modified/boost/asio/traits/submit_member.hpp +1 -1
  494. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +1 -1
  495. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +1 -1
  496. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +1 -1
  497. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +1 -1
  498. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +1 -1
  499. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +3 -11
  500. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +1 -1
  501. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +1 -1
  502. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  503. data/src/cxx_supportlib/vendor-modified/boost/asio/use_awaitable.hpp +3 -3
  504. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +1 -1
  505. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +1 -1
  506. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  507. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +1 -1
  508. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +10 -10
  509. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +10 -10
  510. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +6 -6
  511. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +6 -6
  512. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +1 -1
  513. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +1 -1
  514. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +9 -9
  515. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +1 -1
  516. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +1 -1
  517. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +55 -43
  518. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +1 -1
  519. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  520. data/src/cxx_supportlib/vendor-modified/boost/assert/source_location.hpp +6 -0
  521. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_gcc_aarch64.hpp +6 -6
  522. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/core_arch_ops_msvc_arm.hpp +4 -4
  523. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch32.hpp +32 -32
  524. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_aarch64.hpp +15 -15
  525. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +25 -1
  526. data/src/cxx_supportlib/vendor-modified/boost/bind/apply.hpp +13 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +3 -23
  528. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf2_cc.hpp +18 -18
  529. data/src/cxx_supportlib/vendor-modified/boost/bind/detail/result_traits.hpp +154 -0
  530. data/src/cxx_supportlib/vendor-modified/boost/bind/placeholders.hpp +12 -0
  531. data/src/cxx_supportlib/vendor-modified/boost/bind/protect.hpp +52 -8
  532. data/src/cxx_supportlib/vendor-modified/boost/bind/std_placeholders.hpp +39 -0
  533. data/src/cxx_supportlib/vendor-modified/boost/cerrno.hpp +4 -320
  534. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer.hpp +1 -1
  535. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +6 -6
  536. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/space_optimized.hpp +2 -2
  537. data/src/cxx_supportlib/vendor-modified/boost/concept/detail/general.hpp +21 -0
  538. data/src/cxx_supportlib/vendor-modified/boost/concept/usage.hpp +7 -0
  539. data/src/cxx_supportlib/vendor-modified/boost/concept_check.hpp +1 -1
  540. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx03.hpp +214 -0
  541. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx11.hpp +215 -0
  542. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx14.hpp +47 -0
  543. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx17.hpp +59 -0
  544. data/src/cxx_supportlib/vendor-modified/boost/config/assert_cxx98.hpp +23 -0
  545. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +1 -1
  546. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +11 -0
  547. data/src/cxx_supportlib/vendor-modified/boost/config/detail/cxx_composite.hpp +186 -0
  548. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +37 -2
  549. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +11 -4
  550. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +21 -1
  551. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +45 -1
  552. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +8 -0
  553. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +10 -7
  554. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +9 -0
  555. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +6 -0
  556. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +123 -71
  557. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +4 -3
  558. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +117 -45
  559. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +28 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/container/detail/compare_functors.hpp +1 -0
  561. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +0 -3
  562. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +3 -3
  563. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +142 -36
  564. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +100 -31
  565. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +24 -24
  566. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +141 -90
  567. data/src/cxx_supportlib/vendor-modified/boost/container/detail/guards_dended.hpp +198 -0
  568. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +10 -0
  569. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +35 -0
  570. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +12 -8
  571. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +4 -15
  572. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +22 -1
  573. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +1 -1
  574. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +126 -92
  575. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -0
  576. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_functors.hpp +4 -14
  577. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +30 -0
  578. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +3000 -0
  579. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +237 -169
  580. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +10 -28
  581. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +58 -29
  582. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +84 -80
  583. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +41 -0
  584. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/devector.hpp +51 -0
  585. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/memory_resource.hpp +1 -1
  586. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +2 -3
  587. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +21 -35
  588. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +51 -26
  589. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +1 -1
  590. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +109 -57
  591. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +4 -1
  592. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +184 -105
  593. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +123 -15
  594. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +368 -384
  595. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +1 -3
  596. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +1 -1
  597. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +1 -1
  598. data/src/cxx_supportlib/vendor-modified/boost/core/allocator_access.hpp +102 -134
  599. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +581 -0
  600. data/src/cxx_supportlib/vendor-modified/boost/core/cmath.hpp +199 -0
  601. data/src/cxx_supportlib/vendor-modified/boost/core/detail/splitmix64.hpp +54 -0
  602. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +42 -0
  603. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +36 -0
  604. data/src/cxx_supportlib/vendor-modified/boost/cregex.hpp +4 -0
  605. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_iterator.hpp +8 -8
  606. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_iterator.hpp +8 -8
  607. data/src/cxx_supportlib/vendor-modified/boost/detail/atomic_count.hpp +21 -0
  608. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +55 -37
  609. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +2 -1
  610. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +0 -3
  611. data/src/cxx_supportlib/vendor-modified/boost/foreach.hpp +3 -3
  612. data/src/cxx_supportlib/vendor-modified/boost/integer.hpp +2 -2
  613. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor.hpp +2 -2
  614. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_ct.hpp +2 -2
  615. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +1 -1
  616. data/src/cxx_supportlib/vendor-modified/boost/integer/extended_euclidean.hpp +1 -1
  617. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_log2.hpp +1 -1
  618. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +2 -2
  619. data/src/cxx_supportlib/vendor-modified/boost/integer/mod_inverse.hpp +1 -1
  620. data/src/cxx_supportlib/vendor-modified/boost/integer/static_log2.hpp +2 -2
  621. data/src/cxx_supportlib/vendor-modified/boost/integer/static_min_max.hpp +2 -2
  622. data/src/cxx_supportlib/vendor-modified/boost/integer_fwd.hpp +2 -2
  623. data/src/cxx_supportlib/vendor-modified/boost/integer_traits.hpp +2 -2
  624. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +8 -16
  625. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +4 -5
  626. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/array_initializer.hpp +2 -1
  627. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +1 -2
  628. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hash_combine.hpp +94 -0
  629. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/math.hpp +2 -2
  630. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/simple_disposers.hpp +2 -0
  631. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/twin.hpp +49 -0
  632. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/value_functors.hpp +42 -0
  633. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +1 -1
  634. data/src/cxx_supportlib/vendor-modified/boost/intrusive/linear_slist_algorithms.hpp +11 -5
  635. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +11 -11
  636. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree.hpp +7 -15
  637. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +18 -22
  638. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +2 -4
  639. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast.hpp +2 -2
  640. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/bad_lexical_cast.hpp +7 -7
  641. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical.hpp +1 -1
  642. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +38 -38
  643. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +1 -1
  644. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/inf_nan.hpp +13 -16
  645. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/is_character.hpp +1 -1
  646. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_char_constants.hpp +2 -2
  647. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +10 -10
  648. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/widest_char.hpp +1 -1
  649. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/try_lexical_convert.hpp +5 -5
  650. data/src/cxx_supportlib/vendor-modified/boost/libs/random/src/random_device.cpp +1 -1
  651. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/posix_api.cpp +3 -7
  652. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex.cpp +10 -121
  653. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/static_mutex.cpp +5 -1
  654. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wide_posix_api.cpp +4 -8
  655. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +2 -4
  656. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +3 -2
  657. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +31 -14
  658. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +4 -48
  659. data/src/cxx_supportlib/vendor-modified/boost/move/default_delete.hpp +30 -3
  660. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +12 -0
  661. data/src/cxx_supportlib/vendor-modified/boost/move/detail/nsec_clock.hpp +224 -0
  662. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +253 -43
  663. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +0 -26
  664. data/src/cxx_supportlib/vendor-modified/boost/move/unique_ptr.hpp +5 -5
  665. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/enum.hpp +12 -0
  666. data/src/cxx_supportlib/vendor-modified/boost/mpl/aux_/preprocessor/params.hpp +12 -0
  667. data/src/cxx_supportlib/vendor-modified/boost/mpl/has_xxx.hpp +2 -2
  668. data/src/cxx_supportlib/vendor-modified/boost/mpl/string.hpp +6 -6
  669. data/src/cxx_supportlib/vendor-modified/boost/none.hpp +3 -4
  670. data/src/cxx_supportlib/vendor-modified/boost/none_t.hpp +3 -1
  671. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/cast.hpp +1 -1
  672. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/converter_policies.hpp +4 -5
  673. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/converter.hpp +1 -1
  674. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/meta.hpp +1 -1
  675. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +2 -2
  676. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +1 -1
  677. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +8 -1
  678. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/arg_list.hpp +5 -5
  679. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/default.hpp +11 -0
  680. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/maybe.hpp +2 -2
  681. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/name.hpp +1 -1
  682. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/item.hpp +2 -2
  683. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/make_arg_list.hpp +4 -4
  684. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/pack/tag_keyword_arg_ref.hpp +2 -2
  685. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_cast.hpp +1 -1
  686. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/function_forward_match.hpp +1 -1
  687. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/impl/specification.hpp +2 -2
  688. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/is_binary.hpp +1 -1
  689. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/preprocessor/is_nullary.hpp +1 -1
  690. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/set.hpp +1 -1
  691. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tag.hpp +2 -2
  692. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/tagged_argument.hpp +12 -3
  693. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/unwrap_cv_reference.hpp +3 -3
  694. data/src/cxx_supportlib/vendor-modified/boost/parameter/config.hpp +1 -1
  695. data/src/cxx_supportlib/vendor-modified/boost/parameter/macros.hpp +1 -1
  696. data/src/cxx_supportlib/vendor-modified/boost/parameter/match.hpp +1 -1
  697. data/src/cxx_supportlib/vendor-modified/boost/parameter/parameters.hpp +6 -6
  698. data/src/cxx_supportlib/vendor-modified/boost/pool/object_pool.hpp +2 -2
  699. data/src/cxx_supportlib/vendor-modified/boost/pool/pool_alloc.hpp +1 -1
  700. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture.h +1 -1
  701. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/alpha.h +5 -0
  702. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +10 -0
  703. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/blackfin.h +5 -0
  704. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/convex.h +5 -0
  705. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/e2k.h +54 -0
  706. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ia64.h +5 -0
  707. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/m68k.h +5 -0
  708. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/mips.h +10 -0
  709. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/parisc.h +5 -0
  710. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ppc.h +55 -4
  711. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/ptx.h +5 -0
  712. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/pyramid.h +5 -0
  713. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/riscv.h +5 -0
  714. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/rs6k.h +10 -0
  715. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sparc.h +14 -2
  716. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/superh.h +13 -0
  717. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys370.h +5 -0
  718. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/sys390.h +5 -0
  719. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/32.h +5 -0
  720. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/x86/64.h +7 -2
  721. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/z.h +5 -0
  722. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/cxx.h +1 -1
  723. data/src/cxx_supportlib/vendor-modified/boost/predef/library/std/stdcpp3.h +1 -1
  724. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  725. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/bsdi.h +1 -0
  726. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/dragonfly.h +1 -0
  727. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/free.h +1 -0
  728. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/net.h +1 -0
  729. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/open.h +1 -0
  730. data/src/cxx_supportlib/vendor-modified/boost/predef/other.h +3 -2
  731. data/src/cxx_supportlib/vendor-modified/boost/predef/other/endian.h +7 -10
  732. data/src/cxx_supportlib/vendor-modified/boost/predef/other/wordsize.h +73 -0
  733. data/src/cxx_supportlib/vendor-modified/boost/predef/platform.h +0 -1
  734. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  735. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/add.hpp +54 -1
  736. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/dec.hpp +33 -0
  737. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_1_number.hpp +21 -0
  738. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_maximum_number.hpp +22 -0
  739. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/is_minimum_number.hpp +21 -0
  740. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/detail/maximum_number.hpp +19 -0
  741. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/div.hpp +37 -1
  742. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/inc.hpp +33 -0
  743. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_1024.hpp +531 -0
  744. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_256.hpp +276 -0
  745. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/dec_512.hpp +275 -0
  746. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_1024.hpp +536 -0
  747. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_256.hpp +275 -0
  748. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/limits/inc_512.hpp +280 -0
  749. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/mod.hpp +37 -1
  750. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/mul.hpp +60 -1
  751. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/arithmetic/sub.hpp +51 -1
  752. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/detail/get_data.hpp +1 -1
  753. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/enum.hpp +17 -1
  754. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/insert.hpp +71 -0
  755. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/remove.hpp +66 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/array/replace.hpp +58 -0
  757. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_1024.hpp +1044 -0
  758. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_256.hpp +793 -0
  759. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/limits/not_equal_512.hpp +532 -0
  760. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/comparison/not_equal.hpp +44 -1
  761. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +16 -33
  762. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/limits.hpp +136 -3
  763. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/deduce_d.hpp +27 -0
  764. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/dmc/while.hpp +2 -3
  765. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_1024.hpp +1044 -0
  766. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_256.hpp +533 -0
  767. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/limits/while_512.hpp +532 -0
  768. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/edg/while.hpp +27 -0
  769. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_1024.hpp +1044 -0
  770. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_256.hpp +533 -0
  771. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/limits/while_512.hpp +532 -0
  772. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/detail/while.hpp +27 -0
  773. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_1024.hpp +531 -0
  774. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_256.hpp +275 -0
  775. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/limits/while_512.hpp +275 -0
  776. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/control/while.hpp +75 -0
  777. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/auto_rec.hpp +41 -0
  778. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/dmc/auto_rec.hpp +2 -2
  779. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_1024.hpp +532 -0
  780. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_256.hpp +280 -0
  781. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/detail/limits/auto_rec_512.hpp +276 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/intercept.hpp +29 -0
  783. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty.hpp +0 -37
  784. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/is_empty_variadic.hpp +0 -4
  785. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_1024.hpp +530 -0
  786. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_256.hpp +273 -0
  787. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/limits/intercept_512.hpp +274 -0
  788. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/facilities/overload.hpp +1 -3
  789. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward1.hpp +27 -0
  790. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward2.hpp +27 -0
  791. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward3.hpp +27 -0
  792. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward4.hpp +27 -0
  793. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/forward5.hpp +27 -0
  794. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_1024.hpp +2573 -0
  795. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_256.hpp +1296 -0
  796. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward1_512.hpp +1293 -0
  797. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_1024.hpp +2573 -0
  798. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_256.hpp +1296 -0
  799. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward2_512.hpp +1293 -0
  800. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_1024.hpp +2573 -0
  801. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_256.hpp +1296 -0
  802. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward3_512.hpp +1293 -0
  803. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_1024.hpp +2573 -0
  804. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_256.hpp +1296 -0
  805. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward4_512.hpp +1293 -0
  806. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_1024.hpp +2573 -0
  807. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_256.hpp +1296 -0
  808. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/forward5_512.hpp +1293 -0
  809. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_1024.hpp +2571 -0
  810. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_256.hpp +1296 -0
  811. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse1_512.hpp +1291 -0
  812. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_1024.hpp +2571 -0
  813. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_256.hpp +1296 -0
  814. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse2_512.hpp +1293 -0
  815. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_1024.hpp +2571 -0
  816. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_256.hpp +1296 -0
  817. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse3_512.hpp +1293 -0
  818. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_1024.hpp +2571 -0
  819. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_256.hpp +1296 -0
  820. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse4_512.hpp +1293 -0
  821. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_1024.hpp +2571 -0
  822. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_256.hpp +1296 -0
  823. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/limits/reverse5_512.hpp +1293 -0
  824. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse1.hpp +25 -0
  825. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse2.hpp +25 -0
  826. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse3.hpp +25 -0
  827. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse4.hpp +25 -0
  828. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/iter/reverse5.hpp +25 -0
  829. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_1024.hpp +1549 -0
  830. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_256.hpp +782 -0
  831. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/local_512.hpp +781 -0
  832. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_1024.hpp +1549 -0
  833. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_256.hpp +782 -0
  834. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/limits/rlocal_512.hpp +781 -0
  835. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/local.hpp +27 -0
  836. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/iteration/detail/rlocal.hpp +25 -0
  837. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/dmc/fold_left.hpp +3 -2
  838. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/fold_left.hpp +28 -0
  839. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/fold_right.hpp +29 -0
  840. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_1024.hpp +1044 -0
  841. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_256.hpp +533 -0
  842. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_left_512.hpp +532 -0
  843. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_1024.hpp +1557 -0
  844. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_256.hpp +791 -0
  845. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/edg/limits/fold_right_512.hpp +789 -0
  846. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/fold_left.hpp +28 -0
  847. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/fold_right.hpp +26 -0
  848. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_1024.hpp +532 -0
  849. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_256.hpp +275 -0
  850. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_left_512.hpp +276 -0
  851. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_1024.hpp +532 -0
  852. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_256.hpp +275 -0
  853. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/detail/limits/fold_right_512.hpp +276 -0
  854. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/enum.hpp +13 -1
  855. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/fold_left.hpp +60 -0
  856. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/fold_right.hpp +44 -0
  857. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/for_each_product.hpp +25 -6
  858. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_1024.hpp +531 -0
  859. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_256.hpp +275 -0
  860. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/limits/fold_left_512.hpp +275 -0
  861. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/reverse.hpp +35 -0
  862. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/size.hpp +56 -1
  863. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/list/to_array.hpp +5 -72
  864. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/bool.hpp +22 -0
  865. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_1024.hpp +531 -0
  866. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_256.hpp +275 -0
  867. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/logical/limits/bool_512.hpp +275 -0
  868. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/is_begin_parens.hpp +1 -5
  869. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/punctuation/remove_parens.hpp +0 -4
  870. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/deduce_r.hpp +27 -0
  871. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/dmc/for.hpp +3 -2
  872. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/for.hpp +26 -0
  873. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_1024.hpp +1044 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_256.hpp +533 -0
  875. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/edg/limits/for_512.hpp +532 -0
  876. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/for.hpp +28 -0
  877. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_1024.hpp +1044 -0
  878. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_256.hpp +533 -0
  879. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/limits/for_512.hpp +532 -0
  880. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/detail/msvc/for.hpp +1 -0
  881. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/for.hpp +114 -0
  882. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_1024.hpp +531 -0
  883. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_256.hpp +275 -0
  884. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/for_512.hpp +275 -0
  885. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_1024.hpp +1557 -0
  886. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_256.hpp +791 -0
  887. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/limits/repeat_512.hpp +789 -0
  888. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/repeat.hpp +22 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/repetition/repeat_from_to.hpp +27 -0
  890. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/binary_transform.hpp +6 -11
  891. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_1024.hpp +530 -0
  892. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_256.hpp +272 -0
  893. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/limits/split_512.hpp +274 -0
  894. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/detail/split.hpp +23 -0
  895. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/elem.hpp +23 -0
  896. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/enum.hpp +23 -0
  897. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/fold_left.hpp +52 -0
  898. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/fold_right.hpp +37 -0
  899. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_1024.hpp +530 -0
  900. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_256.hpp +272 -0
  901. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/elem_512.hpp +274 -0
  902. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_1024.hpp +530 -0
  903. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_256.hpp +272 -0
  904. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/enum_512.hpp +274 -0
  905. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_1024.hpp +1556 -0
  906. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_256.hpp +1053 -0
  907. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_left_512.hpp +788 -0
  908. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_1024.hpp +530 -0
  909. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_256.hpp +273 -0
  910. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/fold_right_512.hpp +274 -0
  911. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_1024.hpp +1043 -0
  912. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_256.hpp +532 -0
  913. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/limits/size_512.hpp +531 -0
  914. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/rest_n.hpp +9 -3
  915. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/size.hpp +23 -0
  916. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/seq/variadic_seq_to_seq.hpp +0 -2
  917. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/stringize.hpp +0 -4
  918. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/detail/is_single_return.hpp +2 -2
  919. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/eat.hpp +4 -18
  920. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/elem.hpp +11 -157
  921. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/insert.hpp +0 -5
  922. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_128.hpp +403 -0
  923. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_256.hpp +1171 -0
  924. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/reverse_64.hpp +83 -0
  925. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_128.hpp +595 -0
  926. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_256.hpp +1747 -0
  927. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_list_64.hpp +83 -0
  928. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_128.hpp +403 -0
  929. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_256.hpp +1171 -0
  930. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/limits/to_seq_64.hpp +84 -0
  931. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_back.hpp +0 -5
  932. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/pop_front.hpp +0 -5
  933. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_back.hpp +0 -5
  934. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/push_front.hpp +0 -6
  935. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/rem.hpp +17 -39
  936. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/remove.hpp +0 -5
  937. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/replace.hpp +0 -5
  938. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/reverse.hpp +38 -25
  939. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/size.hpp +13 -6
  940. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_array.hpp +15 -12
  941. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_list.hpp +37 -25
  942. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/tuple/to_seq.hpp +38 -24
  943. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/has_opt.hpp +1 -1
  944. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/detail/is_single_return.hpp +2 -2
  945. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/elem.hpp +93 -71
  946. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +1 -1
  947. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_128.hpp +275 -0
  948. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_256.hpp +723 -0
  949. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/elem_64.hpp +81 -0
  950. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_128.hpp +47 -0
  951. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_256.hpp +53 -0
  952. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/limits/size_64.hpp +23 -0
  953. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/size.hpp +39 -4
  954. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_array.hpp +15 -9
  955. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_list.hpp +9 -2
  956. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_seq.hpp +1 -3
  957. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/to_tuple.hpp +1 -3
  958. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/wstringize.hpp +0 -4
  959. data/src/cxx_supportlib/vendor-modified/boost/random.hpp +1 -0
  960. data/src/cxx_supportlib/vendor-modified/boost/random/additive_combine.hpp +2 -2
  961. data/src/cxx_supportlib/vendor-modified/boost/random/detail/gray_coded_qrng.hpp +29 -5
  962. data/src/cxx_supportlib/vendor-modified/boost/random/detail/int_float_pair.hpp +3 -4
  963. data/src/cxx_supportlib/vendor-modified/boost/random/detail/mixmax_skip_N17.ipp +287 -0
  964. data/src/cxx_supportlib/vendor-modified/boost/random/detail/niederreiter_base2_table.hpp +1 -0
  965. data/src/cxx_supportlib/vendor-modified/boost/random/detail/operators.hpp +1 -1
  966. data/src/cxx_supportlib/vendor-modified/boost/random/detail/qrng_base.hpp +5 -5
  967. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed.hpp +9 -11
  968. data/src/cxx_supportlib/vendor-modified/boost/random/detail/seed_impl.hpp +13 -14
  969. data/src/cxx_supportlib/vendor-modified/boost/random/detail/sobol_table.hpp +1 -0
  970. data/src/cxx_supportlib/vendor-modified/boost/random/discard_block.hpp +2 -2
  971. data/src/cxx_supportlib/vendor-modified/boost/random/generate_canonical.hpp +2 -3
  972. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +3 -3
  973. data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +3 -3
  974. data/src/cxx_supportlib/vendor-modified/boost/random/inversive_congruential.hpp +2 -3
  975. data/src/cxx_supportlib/vendor-modified/boost/random/lagged_fibonacci.hpp +4 -4
  976. data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +5 -7
  977. data/src/cxx_supportlib/vendor-modified/boost/random/linear_feedback_shift.hpp +3 -3
  978. data/src/cxx_supportlib/vendor-modified/boost/random/mersenne_twister.hpp +2 -2
  979. data/src/cxx_supportlib/vendor-modified/boost/random/mixmax.hpp +313 -0
  980. data/src/cxx_supportlib/vendor-modified/boost/random/niederreiter_base2.hpp +2 -2
  981. data/src/cxx_supportlib/vendor-modified/boost/random/random_device.hpp +2 -2
  982. data/src/cxx_supportlib/vendor-modified/boost/random/shuffle_order.hpp +2 -2
  983. data/src/cxx_supportlib/vendor-modified/boost/random/sobol.hpp +3 -2
  984. data/src/cxx_supportlib/vendor-modified/boost/random/subtract_with_carry.hpp +4 -4
  985. data/src/cxx_supportlib/vendor-modified/boost/random/traits.hpp +3 -3
  986. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_int_distribution.hpp +7 -7
  987. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_real_distribution.hpp +2 -3
  988. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_smallint.hpp +4 -5
  989. data/src/cxx_supportlib/vendor-modified/boost/random/xor_combine.hpp +4 -2
  990. data/src/cxx_supportlib/vendor-modified/boost/rational.hpp +7 -7
  991. data/src/cxx_supportlib/vendor-modified/boost/regex.hpp +4 -0
  992. data/src/cxx_supportlib/vendor-modified/boost/regex/concepts.hpp +78 -73
  993. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +97 -113
  994. data/src/cxx_supportlib/vendor-modified/boost/regex/pattern_except.hpp +4 -75
  995. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +4 -147
  996. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/unicode_iterator.hpp +8 -761
  997. data/src/cxx_supportlib/vendor-modified/boost/regex/regex_traits.hpp +4 -0
  998. data/src/cxx_supportlib/vendor-modified/boost/regex/user.hpp +2 -0
  999. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex.hpp +8 -9
  1000. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +20 -19
  1001. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +13 -13
  1002. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/c_regex_traits.hpp +342 -42
  1003. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cpp_regex_traits.hpp +107 -24
  1004. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/cregex.hpp +0 -117
  1005. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/icu.hpp +1516 -0
  1006. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_flags.hpp +5 -5
  1007. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/match_results.hpp +8 -8
  1008. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/mem_block_cache.hpp +39 -1
  1009. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/object_cache.hpp +171 -0
  1010. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/pattern_except.hpp +127 -0
  1011. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +13 -4
  1012. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +1 -1
  1013. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +39 -41
  1014. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +6 -6
  1015. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/primary_transform.hpp +1 -1
  1016. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/protected_call.hpp +3 -1
  1017. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex.hpp +0 -36
  1018. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_format.hpp +3 -3
  1019. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_raw_buffer.hpp +35 -4
  1020. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_token_iterator.hpp +2 -0
  1021. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +638 -22
  1022. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/states.hpp +1 -1
  1023. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/unicode_iterator.hpp +790 -0
  1024. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/w32_regex_traits.hpp +521 -37
  1025. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex.hpp +734 -0
  1026. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_creator.hpp +1575 -0
  1027. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/basic_regex_parser.hpp +3117 -0
  1028. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/c_regex_traits.hpp +474 -0
  1029. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/char_regex_traits.hpp +59 -0
  1030. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cpp_regex_traits.hpp +1040 -0
  1031. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/cregex.hpp +195 -0
  1032. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/error_type.hpp +59 -0
  1033. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/icu.hpp +1402 -0
  1034. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/indexed_bit_flag.hpp +54 -0
  1035. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_category.hpp +84 -0
  1036. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/iterator_traits.hpp +32 -0
  1037. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_flags.hpp +156 -0
  1038. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/match_results.hpp +667 -0
  1039. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/mem_block_cache.hpp +175 -0
  1040. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/object_cache.hpp +160 -0
  1041. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/pattern_except.hpp +105 -0
  1042. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher.hpp +576 -0
  1043. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_common.hpp +915 -0
  1044. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/perl_matcher_non_recursive.hpp +1872 -0
  1045. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/primary_transform.hpp +120 -0
  1046. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regbase.hpp +158 -0
  1047. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex.hpp +106 -0
  1048. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_format.hpp +1124 -0
  1049. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_fwd.hpp +73 -0
  1050. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_grep.hpp +98 -0
  1051. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_iterator.hpp +173 -0
  1052. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_match.hpp +92 -0
  1053. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_merge.hpp +71 -0
  1054. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_raw_buffer.hpp +213 -0
  1055. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_replace.hpp +77 -0
  1056. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_search.hpp +103 -0
  1057. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_split.hpp +152 -0
  1058. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_token_iterator.hpp +255 -0
  1059. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_traits.hpp +130 -0
  1060. data/src/cxx_supportlib/vendor-modified/boost/{libs/regex/src/regex_traits_defaults.cpp → regex/v5/regex_traits_defaults.hpp} +719 -415
  1061. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/regex_workaround.hpp +159 -0
  1062. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/states.hpp +299 -0
  1063. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/sub_match.hpp +382 -0
  1064. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/syntax_type.hpp +105 -0
  1065. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_iterator.hpp +177 -0
  1066. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/u32regex_token_iterator.hpp +312 -0
  1067. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/unicode_iterator.hpp +864 -0
  1068. data/src/cxx_supportlib/vendor-modified/boost/regex/v5/w32_regex_traits.hpp +1176 -0
  1069. data/src/cxx_supportlib/vendor-modified/boost/regex_fwd.hpp +4 -0
  1070. data/src/cxx_supportlib/vendor-modified/boost/static_assert.hpp +1 -1
  1071. data/src/cxx_supportlib/vendor-modified/boost/system/detail/cerrno.hpp +329 -0
  1072. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +16 -0
  1073. data/src/cxx_supportlib/vendor-modified/boost/system/detail/enable_if.hpp +32 -0
  1074. data/src/cxx_supportlib/vendor-modified/boost/system/detail/errc.hpp +126 -0
  1075. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +189 -0
  1076. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +108 -0
  1077. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +215 -0
  1078. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +163 -0
  1079. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category.hpp +80 -58
  1080. data/src/cxx_supportlib/vendor-modified/boost/system/detail/generic_category_message.hpp +108 -0
  1081. data/src/cxx_supportlib/vendor-modified/boost/system/detail/{system_category_posix.hpp → is_generic_value.hpp} +7 -14
  1082. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category.hpp +110 -0
  1083. data/src/cxx_supportlib/vendor-modified/boost/system/detail/system_category_impl.hpp +83 -0
  1084. data/src/cxx_supportlib/vendor-modified/boost/system/detail/throws.hpp +59 -0
  1085. data/src/cxx_supportlib/vendor-modified/boost/system/detail/{std_interoperability.hpp → to_std_category.hpp} +11 -2
  1086. data/src/cxx_supportlib/vendor-modified/boost/system/errc.hpp +50 -0
  1087. data/src/cxx_supportlib/vendor-modified/boost/system/error_category.hpp +13 -0
  1088. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +7 -925
  1089. data/src/cxx_supportlib/vendor-modified/boost/system/error_condition.hpp +13 -0
  1090. data/src/cxx_supportlib/vendor-modified/boost/system/generic_category.hpp +13 -0
  1091. data/src/cxx_supportlib/vendor-modified/boost/system/is_error_code_enum.hpp +30 -0
  1092. data/src/cxx_supportlib/vendor-modified/boost/system/is_error_condition_enum.hpp +30 -0
  1093. data/src/cxx_supportlib/vendor-modified/boost/system/system_category.hpp +14 -0
  1094. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +1 -1
  1095. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +26 -0
  1096. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +37 -39
  1097. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +1 -1
  1098. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +1 -1
  1099. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +1 -1
  1100. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_cxx_11.hpp +247 -168
  1101. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_tester.hpp +27 -27
  1102. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +1 -1
  1103. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +27 -27
  1104. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_member_function_pointer_cxx_11.hpp +242 -217
  1105. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_convertible.hpp +1 -1
  1106. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_empty.hpp +1 -1
  1107. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_trivially_copyable.hpp +4 -0
  1108. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +1 -1
  1109. data/src/cxx_supportlib/vendor-modified/boost/typeof/modifiers.hpp +3 -3
  1110. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +2 -2
  1111. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/string.hpp +1 -1
  1112. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_encoding.hpp +1 -1
  1113. data/src/cxx_supportlib/vendor-modified/boost/typeof/template_template_param.hpp +1 -1
  1114. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +4 -4
  1115. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof_impl.hpp +1 -1
  1116. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +8 -8
  1117. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +8 -8
  1118. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  1119. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  1120. data/src/ruby_supportlib/phusion_passenger/platform_info/curl.rb +3 -0
  1121. data/src/ruby_supportlib/phusion_passenger/platform_info/openssl.rb +5 -0
  1122. metadata +223 -28
  1123. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +0 -25
  1124. data/src/cxx_supportlib/vendor-modified/boost/bind.hpp +0 -60
  1125. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/c_regex_traits.cpp +0 -206
  1126. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cpp_regex_traits.cpp +0 -117
  1127. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/cregex.cpp +0 -667
  1128. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/instances.cpp +0 -32
  1129. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/regex_raw_buffer.cpp +0 -72
  1130. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/wc_regex_traits.cpp +0 -314
  1131. data/src/cxx_supportlib/vendor-modified/boost/libs/regex/src/winstances.cpp +0 -35
  1132. data/src/cxx_supportlib/vendor-modified/boost/math/policies/policy.hpp +0 -1038
  1133. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +0 -581
  1134. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/round_fwd.hpp +0 -93
  1135. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/fpclassify.hpp +0 -640
  1136. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +0 -1712
  1137. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/sign.hpp +0 -194
  1138. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +0 -489
  1139. data/src/cxx_supportlib/vendor-modified/boost/math/tools/promotion.hpp +0 -182
  1140. data/src/cxx_supportlib/vendor-modified/boost/math/tools/real_cast.hpp +0 -31
  1141. data/src/cxx_supportlib/vendor-modified/boost/math/tools/user.hpp +0 -105
  1142. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/fileiter.hpp +0 -557
  1143. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +0 -236
  1144. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp.orig +0 -841
  1145. data/src/cxx_supportlib/vendor-modified/boost/thread/once.hpp.orig +0 -54
@@ -40,6 +40,7 @@ using ::boost::move_detail::add_const;
40
40
  using ::boost::move_detail::add_const_reference;
41
41
  using ::boost::move_detail::remove_const;
42
42
  using ::boost::move_detail::remove_reference;
43
+ using ::boost::move_detail::remove_cvref;
43
44
  using ::boost::move_detail::make_unsigned;
44
45
  using ::boost::move_detail::is_floating_point;
45
46
  using ::boost::move_detail::is_integral;
@@ -64,6 +65,7 @@ using ::boost::move_detail::nat;
64
65
  using ::boost::move_detail::nat2;
65
66
  using ::boost::move_detail::nat3;
66
67
  using ::boost::move_detail::max_align_t;
68
+ using ::boost::move_detail::is_convertible;
67
69
 
68
70
  } //namespace dtl {
69
71
  } //namespace container {
@@ -18,23 +18,13 @@
18
18
  # pragma once
19
19
  #endif
20
20
 
21
+ #include <boost/intrusive/detail/value_functors.hpp>
22
+
21
23
  namespace boost {
22
24
  namespace container {
23
25
 
24
- //Functors for member algorithm defaults
25
- template<class ValueType>
26
- struct value_less
27
- {
28
- bool operator()(const ValueType &a, const ValueType &b) const
29
- { return a < b; }
30
- };
31
-
32
- template<class ValueType>
33
- struct value_equal
34
- {
35
- bool operator()(const ValueType &a, const ValueType &b) const
36
- { return a == b; }
37
- };
26
+ using ::boost::intrusive::value_less;
27
+ using ::boost::intrusive::value_equal;
38
28
 
39
29
  } //namespace container {
40
30
  } //namespace boost {
@@ -108,6 +108,15 @@
108
108
  #define BOOST_CONTAINER_FORCEINLINE BOOST_FORCEINLINE
109
109
  #endif
110
110
 
111
+ //#define BOOST_CONTAINER_DISABLE_NOINLINE
112
+
113
+ #if defined(BOOST_CONTAINER_DISABLE_NOINLINE)
114
+ #define BOOST_CONTAINER_NOINLINE
115
+ #else
116
+ #define BOOST_CONTAINER_NOINLINE BOOST_NOINLINE
117
+ #endif
118
+
119
+
111
120
  #if !defined(__has_feature)
112
121
  #define BOOST_CONTAINER_HAS_FEATURE(feature) 0
113
122
  #else
@@ -130,4 +139,25 @@
130
139
  #define BOOST_CONTAINER_NO_CXX17_CTAD
131
140
  #endif
132
141
 
142
+ #if defined(BOOST_CONTAINER_DISABLE_ATTRIBUTE_NODISCARD)
143
+ #define BOOST_CONTAINER_ATTRIBUTE_NODISCARD
144
+ #else
145
+ #if defined(BOOST_GCC) && ((BOOST_GCC < 100000) || (__cplusplus < 201703L))
146
+ //Avoid using it in C++ < 17 and GCC < 10 because it warns in SFINAE contexts
147
+ //(see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89070)
148
+ #define BOOST_CONTAINER_ATTRIBUTE_NODISCARD
149
+ #else
150
+ #define BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_ATTRIBUTE_NODISCARD
151
+ #endif
152
+ #endif
153
+
154
+
155
+ //Configuration options:
156
+
157
+ //Define this to use std exception types instead of boost::container's own exception types
158
+ //#define BOOST_CONTAINER_USE_STD_EXCEPTIONS
159
+
160
+
161
+
162
+
133
163
  #endif //#ifndef BOOST_CONTAINER_DETAIL_WORKAROUND_HPP
@@ -0,0 +1,3000 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Benedek Thaler 2015-2016
4
+ // (C) Copyright Ion Gaztanaga 2019-2020. Distributed under the Boost
5
+ // Software License, Version 1.0. (See accompanying file
6
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // See http://www.boost.org/libs/container for documentation.
9
+ //
10
+ //////////////////////////////////////////////////////////////////////////////
11
+
12
+ #ifndef BOOST_CONTAINER_DEVECTOR_HPP
13
+ #define BOOST_CONTAINER_DEVECTOR_HPP
14
+
15
+ #include <boost/container/detail/config_begin.hpp>
16
+ #include <boost/container/detail/workaround.hpp>
17
+
18
+ //#include <algorithm>
19
+ #include <cstring> // memcpy
20
+
21
+ #include <boost/assert.hpp>
22
+ #include <boost/aligned_storage.hpp>
23
+
24
+ #include <boost/container/detail/copy_move_algo.hpp>
25
+ #include <boost/container/new_allocator.hpp> //new_allocator
26
+ #include <boost/container/allocator_traits.hpp> //allocator_traits
27
+ #include <boost/container/detail/algorithm.hpp> //equal()
28
+ #include <boost/container/throw_exception.hpp>
29
+ #include <boost/container/options.hpp>
30
+
31
+ #include <boost/container/detail/guards_dended.hpp>
32
+ #include <boost/container/detail/iterator.hpp>
33
+ #include <boost/container/detail/iterators.hpp>
34
+ #include <boost/container/detail/destroyers.hpp>
35
+ #include <boost/container/detail/min_max.hpp>
36
+ #include <boost/container/detail/next_capacity.hpp>
37
+ #include <boost/container/detail/alloc_helpers.hpp>
38
+
39
+ // move
40
+ #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
41
+ #include <boost/move/detail/fwd_macros.hpp>
42
+ #endif
43
+ #include <boost/move/detail/move_helpers.hpp>
44
+ #include <boost/move/adl_move_swap.hpp>
45
+ #include <boost/move/iterator.hpp>
46
+ #include <boost/move/traits.hpp>
47
+ #include <boost/move/utility_core.hpp>
48
+ #include <boost/move/detail/to_raw_pointer.hpp>
49
+ #include <boost/move/algo/detail/merge.hpp>
50
+
51
+ #include <boost/type_traits/is_nothrow_move_constructible.hpp>
52
+
53
+ //std
54
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
55
+ #include <initializer_list> //for std::initializer_list
56
+ #endif
57
+
58
+ namespace boost {
59
+ namespace container {
60
+
61
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
62
+
63
+ struct growth_factor_60;
64
+
65
+ template<class Options, class AllocatorSizeType>
66
+ struct get_devector_opt
67
+ {
68
+ typedef devector_opt< typename default_if_void<typename Options::growth_factor_type, growth_factor_60>::type
69
+ , typename default_if_void<typename Options::stored_size_type, AllocatorSizeType>::type
70
+ > type;
71
+ };
72
+
73
+ template<class AllocatorSizeType>
74
+ struct get_devector_opt<void, AllocatorSizeType>
75
+ {
76
+ typedef vector_opt<growth_factor_60, AllocatorSizeType> type;
77
+ };
78
+
79
+ #endif //#if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
80
+
81
+ struct reserve_only_tag_t {};
82
+ //struct unsafe_uninitialized_tag_t {};
83
+
84
+ /**
85
+ * A vector-like sequence container providing front and back operations
86
+ * (e.g: `push_front`/`pop_front`/`push_back`/`pop_back`) with amortized constant complexity
87
+ * and unsafe methods geared towards additional performance.
88
+ *
89
+ * Models the [SequenceContainer], [ReversibleContainer], and [AllocatorAwareContainer] concepts.
90
+ *
91
+ * **Requires**:
92
+ * - `T` shall be [MoveInsertable] into the devector.
93
+ * - `T` shall be [Erasable] from any `devector<T, allocator_type, GP>`.
94
+ * - `GrowthFactor`, and `Allocator` must model the concepts with the same names or be void.
95
+ *
96
+ * **Definition**: `T` is `NothrowConstructible` if it's either nothrow move constructible or
97
+ * nothrow copy constructible.
98
+ *
99
+ * **Definition**: `T` is `NothrowAssignable` if it's either nothrow move assignable or
100
+ * nothrow copy assignable.
101
+ *
102
+ * **Exceptions**: The exception specifications assume `T` is nothrow [Destructible].
103
+ *
104
+ * Most methods providing the strong exception guarantee assume `T` either has a move
105
+ * constructor marked noexcept or is [CopyInsertable] into the devector. If it isn't true,
106
+ * and the move constructor throws, the guarantee is waived and the effects are unspecified.
107
+ *
108
+ * In addition to the exceptions specified in the **Throws** clause, the following operations
109
+ * of `T` can throw when any of the specified concept is required:
110
+ * - [DefaultInsertable][]: Default constructor
111
+ * - [MoveInsertable][]: Move constructor
112
+ * - [CopyInsertable][]: Copy constructor
113
+ * - [DefaultConstructible][]: Default constructor
114
+ * - [EmplaceConstructible][]: Constructor selected by the given arguments
115
+ * - [MoveAssignable][]: Move assignment operator
116
+ * - [CopyAssignable][]: Copy assignment operator
117
+ *
118
+ * Furthermore, not `noexcept` methods throws whatever the allocator throws
119
+ * if memory allocation fails. Such methods also throw `length_error` if the capacity
120
+ * exceeds `max_size()`.
121
+ *
122
+ * **Remark**: If a method invalidates some iterators, it also invalidates references
123
+ * and pointers to the elements pointed by the invalidated iterators.
124
+ *
125
+ * **Policies**:
126
+ *
127
+ * @ref devector_growth_policy models the `GrowthFactor` concept.
128
+ *
129
+ * [SequenceContainer]: http://en.cppreference.com/w/cpp/concept/SequenceContainer
130
+ * [ReversibleContainer]: http://en.cppreference.com/w/cpp/concept/ReversibleContainer
131
+ * [AllocatorAwareContainer]: http://en.cppreference.com/w/cpp/concept/AllocatorAwareContainer
132
+ * [DefaultInsertable]: http://en.cppreference.com/w/cpp/concept/DefaultInsertable
133
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
134
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
135
+ * [Erasable]: http://en.cppreference.com/w/cpp/concept/Erasable
136
+ * [DefaultConstructible]: http://en.cppreference.com/w/cpp/concept/DefaultConstructible
137
+ * [Destructible]: http://en.cppreference.com/w/cpp/concept/Destructible
138
+ * [EmplaceConstructible]: http://en.cppreference.com/w/cpp/concept/EmplaceConstructible
139
+ * [MoveAssignable]: http://en.cppreference.com/w/cpp/concept/MoveAssignable
140
+ * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
141
+ */
142
+ template < typename T, class A BOOST_CONTAINER_DOCONLY(= void), class Options BOOST_CONTAINER_DOCONLY(= void)>
143
+ class devector
144
+ {
145
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
146
+ typedef boost::container::allocator_traits
147
+ <typename real_allocator<T, A>::type> allocator_traits_type;
148
+ typedef typename allocator_traits_type::size_type alloc_size_type;
149
+ typedef typename get_devector_opt<Options, alloc_size_type>::type options_type;
150
+ typedef typename options_type::growth_factor_type growth_factor_type;
151
+ typedef typename options_type::stored_size_type stored_size_type;
152
+
153
+ #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
154
+
155
+ public:
156
+ // Standard Interface Types:
157
+ typedef T value_type;
158
+ typedef BOOST_CONTAINER_IMPDEF
159
+ (typename real_allocator<T BOOST_MOVE_I A>::type) allocator_type;
160
+ typedef allocator_type stored_allocator_type;
161
+ typedef typename allocator_traits<allocator_type>::pointer pointer;
162
+ typedef typename allocator_traits<allocator_type>::const_pointer const_pointer;
163
+ typedef typename allocator_traits<allocator_type>::reference reference;
164
+ typedef typename allocator_traits<allocator_type>::const_reference const_reference;
165
+ typedef typename allocator_traits<allocator_type>::size_type size_type;
166
+ typedef typename allocator_traits<allocator_type>::difference_type difference_type;
167
+ typedef pointer iterator;
168
+ typedef const_pointer const_iterator;
169
+ typedef BOOST_CONTAINER_IMPDEF
170
+ (boost::container::reverse_iterator<iterator>) reverse_iterator;
171
+ typedef BOOST_CONTAINER_IMPDEF
172
+ (boost::container::reverse_iterator<const_iterator>) const_reverse_iterator;
173
+
174
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
175
+ private:
176
+ BOOST_COPYABLE_AND_MOVABLE(devector)
177
+
178
+ // Guard to deallocate buffer on exception
179
+ typedef typename detail::allocation_guard<allocator_type> allocation_guard;
180
+
181
+ // Random access pseudo iterator always yielding to the same result
182
+ typedef constant_iterator<T, difference_type> cvalue_iterator;
183
+
184
+ #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
185
+
186
+ // Standard Interface
187
+ public:
188
+ // construct/copy/destroy
189
+
190
+ /**
191
+ * **Effects**: Constructs an empty devector.
192
+ *
193
+ * **Postcondition**: `empty() && front_free_capacity() == 0
194
+ * && back_free_capacity() == 0`.
195
+ *
196
+ * **Complexity**: Constant.
197
+ */
198
+ devector() BOOST_NOEXCEPT
199
+ : m_()
200
+ {}
201
+
202
+ /**
203
+ * **Effects**: Constructs an empty devector, using the specified allocator.
204
+ *
205
+ * **Postcondition**: `empty() && front_free_capacity() == 0
206
+ * && back_free_capacity() == 0`.
207
+ *
208
+ * **Complexity**: Constant.
209
+ */
210
+ explicit devector(const allocator_type& allocator) BOOST_NOEXCEPT
211
+ : m_(allocator)
212
+ {}
213
+
214
+ /**
215
+ * **Effects**: Constructs an empty devector, using the specified allocator
216
+ * and reserves `n` slots as if `reserve(n)` was called.
217
+ *
218
+ * **Postcondition**: `empty() && front_free_capacity() == 0
219
+ * && back_free_capacity() >= n`.
220
+ *
221
+ * **Exceptions**: Strong exception guarantee.
222
+ *
223
+ * **Complexity**: Constant.
224
+ */
225
+ devector(size_type n, reserve_only_tag_t, const allocator_type& allocator = allocator_type())
226
+ : m_(allocator, this->allocate(n), 0u, 0u, n)
227
+ {}
228
+
229
+ /**
230
+ * **Effects**: Constructs an empty devector, using the specified allocator
231
+ * and reserves `front_cap + back_cap` slots as if `reserve_front(front_cap)` and
232
+ * `reserve_back(back_cap)` was called.
233
+ *
234
+ * **Postcondition**: `empty() && front_free_capacity() == front_cap
235
+ * && back_free_capacity() >= back_cap`.
236
+ *
237
+ * **Exceptions**: Strong exception guarantee.
238
+ *
239
+ * **Complexity**: Constant.
240
+ */
241
+ devector(size_type front_cap, size_type back_cap, reserve_only_tag_t, const allocator_type& allocator = allocator_type())
242
+ : m_(allocator, this->allocate(front_cap + back_cap), front_cap, front_cap, front_cap + back_cap)
243
+ {}
244
+
245
+ /**
246
+ * [DefaultInsertable]: http://en.cppreference.com/w/cpp/concept/DefaultInsertable
247
+ *
248
+ * **Effects**: Constructs a devector with `n` default-inserted elements using the specified allocator.
249
+ *
250
+ * **Requires**: `T` shall be [DefaultInsertable] into `*this`.
251
+ *
252
+ * **Postcondition**: `size() == n && front_free_capacity() == 0`.
253
+ *
254
+ * **Exceptions**: Strong exception guarantee.
255
+ *
256
+ * **Complexity**: Linear in `n`.
257
+ */
258
+ explicit devector(size_type n, const allocator_type& allocator = allocator_type())
259
+ : m_(allocator, n ? allocate(n): pointer(), 0u, n, n)
260
+ {
261
+ // Cannot use construct_from_range/constant_iterator and copy_range,
262
+ // because we are not allowed to default construct T
263
+ allocation_guard buffer_guard(m_.buffer, m_.capacity, get_allocator_ref());
264
+ detail::construction_guard<allocator_type> copy_guard(m_.buffer, get_allocator_ref());
265
+
266
+ for (size_type i = 0; i < n; ++i)
267
+ {
268
+ this->alloc_construct(m_.buffer + i);
269
+ copy_guard.extend();
270
+ }
271
+
272
+ copy_guard.release();
273
+ buffer_guard.release();
274
+
275
+ BOOST_ASSERT(invariants_ok());
276
+ }
277
+
278
+ /**
279
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
280
+ *
281
+ * **Effects**: Constructs a devector with `n` copies of `value`, using the specified allocator.
282
+ *
283
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
284
+ *
285
+ * **Postcondition**: `size() == n && front_free_capacity() == 0`.
286
+ *
287
+ * **Exceptions**: Strong exception guarantee.
288
+ *
289
+ * **Complexity**: Linear in `n`.
290
+ */
291
+ devector(size_type n, const T& value, const allocator_type& allocator = allocator_type())
292
+ : m_(allocator, n ? allocate(n): pointer(), 0u, n, n)
293
+ {
294
+ construct_from_range(cvalue_iterator(value, n), cvalue_iterator());
295
+ BOOST_ASSERT(invariants_ok());
296
+ }
297
+
298
+ /**
299
+ * **Effects**: Constructs a devector equal to the range `[first,last)`, using the specified allocator.
300
+ *
301
+ * **Requires**: `T` shall be [EmplaceConstructible] into `*this` from `*first`. If the specified
302
+ * iterator does not meet the forward iterator requirements, `T` shall also be [MoveInsertable]
303
+ * into `*this`.
304
+ *
305
+ * **Postcondition**: `size() == boost::container::iterator_distance(first, last)
306
+ *
307
+ * **Exceptions**: Strong exception guarantee.
308
+ *
309
+ * **Complexity**: Makes only `N` calls to the copy constructor of `T` (where `N` is the distance between `first`
310
+ * and `last`), at most one allocation and no reallocations if iterators first and last are of forward,
311
+ * bidirectional, or random access categories. It makes `O(N)` calls to the copy constructor of `T`
312
+ * and `O(log(N)) reallocations if they are just input iterators.
313
+ *
314
+ * **Remarks**: Each iterator in the range `[first,last)` shall be dereferenced exactly once,
315
+ * unless an exception is thrown.
316
+ *
317
+ * [EmplaceConstructible]: http://en.cppreference.com/w/cpp/concept/EmplaceConstructible
318
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
319
+ */
320
+ template <class InputIterator>
321
+ devector(InputIterator first, InputIterator last, const allocator_type& allocator = allocator_type()
322
+ //Input iterators
323
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
324
+ < void
325
+ BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
326
+ BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
327
+ >::type * = 0)
328
+ )
329
+ : m_(allocator, pointer(), 0u, 0u, 0u)
330
+ {
331
+ while (first != last) {
332
+ this->emplace_back(*first++);
333
+ }
334
+
335
+ BOOST_ASSERT(invariants_ok());
336
+ }
337
+
338
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
339
+
340
+ template <class ForwardIterator>
341
+ devector(ForwardIterator first, ForwardIterator last, const allocator_type& allocator = allocator_type()
342
+ //Other iterators
343
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
344
+ < void
345
+ BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
346
+ BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
347
+ >::type * = 0)
348
+ )
349
+ : m_(allocator, pointer(), 0u, 0u, 0u)
350
+ {
351
+ const size_type n = boost::container::iterator_distance(first, last);
352
+ m_.buffer = n ? allocate(n) : pointer();
353
+ m_.front_idx = 0u;
354
+ //this->allocate(n) will take care of overflows
355
+ m_.set_back_idx(n);
356
+ m_.set_capacity(n);
357
+ //construct_from_range releases memory on failure
358
+ this->construct_from_range(first, last);
359
+ BOOST_ASSERT(invariants_ok());
360
+ }
361
+
362
+ #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
363
+
364
+ /**
365
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
366
+ *
367
+ * **Effects**: Copy constructs a devector.
368
+ *
369
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
370
+ *
371
+ * **Postcondition**: `this->size() == x.size() && front_free_capacity() == 0`.
372
+ *
373
+ * **Exceptions**: Strong exception guarantee.
374
+ *
375
+ * **Complexity**: Linear in the size of `x`.
376
+ */
377
+ devector(const devector& x)
378
+ : m_( allocator_traits_type::select_on_container_copy_construction(x.get_allocator_ref())
379
+ , pointer(), 0u, 0u, 0u)
380
+ {
381
+ const size_type n = x.size();
382
+ m_.buffer = n ? allocate(n) : pointer();
383
+ m_.front_idx = 0u;
384
+ //this->allocate(n) will take care of overflows
385
+ m_.set_back_idx(n);
386
+ m_.set_capacity(n);
387
+ this->construct_from_range(x.begin(), x.end());
388
+ BOOST_ASSERT(invariants_ok());
389
+ }
390
+
391
+ /**
392
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
393
+ *
394
+ * **Effects**: Copy constructs a devector, using the specified allocator.
395
+ *
396
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
397
+ *
398
+ * **Postcondition**: `this->size() == x.size() && front_free_capacity() == 0`.
399
+ *
400
+ * **Exceptions**: Strong exception guarantee.
401
+ *
402
+ * **Complexity**: Linear in the size of `x`.
403
+ */
404
+ devector(const devector& x, const allocator_type& allocator)
405
+ : m_(allocator, pointer(), 0u, 0u, 0u)
406
+ {
407
+ const size_type n = x.size();
408
+ m_.buffer = n ? this->allocate(n) : pointer();
409
+ m_.front_idx = 0u;
410
+ //this->allocate(n) will take care of overflows
411
+ m_.set_back_idx(n);
412
+ m_.set_capacity(n);
413
+ this->construct_from_range(x.begin(), x.end());
414
+ BOOST_ASSERT(invariants_ok());
415
+ }
416
+
417
+ /**
418
+ * **Effects**: Moves `rhs`'s resources to `*this`.
419
+ *
420
+ * **Throws**: Nothing.
421
+ *
422
+ * **Postcondition**: `rhs` is left in an unspecified but valid state.
423
+ *
424
+ * **Exceptions**: Strong exception guarantee if not `noexcept`.
425
+ *
426
+ * **Complexity**: Constant.
427
+ */
428
+ devector(BOOST_RV_REF(devector) rhs) BOOST_NOEXCEPT_OR_NOTHROW
429
+ : m_(::boost::move(rhs.get_allocator_ref()), rhs.m_.buffer, rhs.m_.front_idx, rhs.m_.back_idx, rhs.capacity())
430
+ {
431
+ // buffer is already acquired, reset rhs
432
+ rhs.m_.capacity = 0u;
433
+ rhs.m_.buffer = pointer();
434
+ rhs.m_.front_idx = 0;
435
+ rhs.m_.back_idx = 0;
436
+ BOOST_ASSERT( invariants_ok());
437
+ BOOST_ASSERT(rhs.invariants_ok());
438
+ }
439
+
440
+ /**
441
+ * **Effects**: Moves `rhs`'s resources to `*this`, using the specified allocator.
442
+ *
443
+ * **Throws**: If allocation or T's move constructor throws.
444
+ *
445
+ * **Postcondition**: `rhs` is left in an unspecified but valid state.
446
+ *
447
+ * **Exceptions**: Strong exception guarantee if not `noexcept`.
448
+ *
449
+ * **Complexity**: Linear if allocator != rhs.get_allocator(), otherwise constant.
450
+ */
451
+ devector(BOOST_RV_REF(devector) rhs, const allocator_type& allocator)
452
+ : m_(allocator, rhs.m_.buffer, rhs.m_.front_idx, rhs.m_.back_idx, rhs.capacity())
453
+ {
454
+ // TODO should move elems-by-elems if the two allocators differ
455
+ // buffer is already acquired, reset rhs
456
+ rhs.m_.capacity = 0u;
457
+ rhs.m_.buffer = pointer();
458
+ rhs.m_.front_idx = 0;
459
+ rhs.m_.back_idx = 0;
460
+ BOOST_ASSERT( invariants_ok());
461
+ BOOST_ASSERT(rhs.invariants_ok());
462
+ }
463
+
464
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
465
+ /**
466
+ * **Equivalent to**: `devector(il.begin(), il.end())` or `devector(il.begin(), il.end(), allocator)`.
467
+ */
468
+ devector(const std::initializer_list<T>& il, const allocator_type& allocator = allocator_type())
469
+ : m_(allocator, pointer(), 0u, 0u, 0u)
470
+ {
471
+ const size_type n = il.size();
472
+ m_.buffer = n ? allocate(n) : pointer();
473
+ m_.front_idx = 0u;
474
+ //this->allocate(n) will take care of overflows
475
+ m_.set_back_idx(n);
476
+ m_.set_capacity(n);
477
+ //construct_from_range releases memory on failure
478
+ this->construct_from_range(il.begin(), il.end());
479
+ BOOST_ASSERT(invariants_ok());
480
+ }
481
+ #endif
482
+
483
+ /**
484
+ * **Effects**: Destroys the devector. All stored values are destroyed and
485
+ * used memory, if any, deallocated.
486
+ *
487
+ * **Complexity**: Linear in the size of `*this`.
488
+ */
489
+ ~devector() BOOST_NOEXCEPT
490
+ {
491
+ destroy_elements(m_.buffer + m_.front_idx, m_.buffer + m_.back_idx);
492
+ deallocate_buffer();
493
+ }
494
+
495
+ /**
496
+ * **Effects**: Copies elements of `x` to `*this`. Previously
497
+ * held elements get copy assigned to or destroyed.
498
+ *
499
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
500
+ *
501
+ * **Postcondition**: `this->size() == x.size()`, the elements of
502
+ * `*this` are copies of elements in `x` in the same order.
503
+ *
504
+ * **Returns**: `*this`.
505
+ *
506
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowConstructible`
507
+ * and the allocator is allowed to be propagated
508
+ * ([propagate_on_container_copy_assignment] is true),
509
+ * Basic exception guarantee otherwise.
510
+ *
511
+ * **Complexity**: Linear in the size of `x` and `*this`.
512
+ *
513
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
514
+ * [propagate_on_container_copy_assignment]: http://en.cppreference.com/w/cpp/memory/allocator_traits
515
+ */
516
+
517
+ BOOST_CONTAINER_FORCEINLINE devector& operator=(BOOST_COPY_ASSIGN_REF(devector) rhs)
518
+ {
519
+ const devector &x = rhs;
520
+ if (this == &x) { return *this; } // skip self
521
+
522
+ BOOST_IF_CONSTEXPR(allocator_traits_type::propagate_on_container_copy_assignment::value)
523
+ {
524
+ allocator_type &this_alloc = this->get_allocator_ref();
525
+ const allocator_type &other_alloc = x.get_allocator_ref();
526
+ if (this_alloc != other_alloc)
527
+ {
528
+ // new allocator cannot free existing storage
529
+ this->clear();
530
+ this->deallocate_buffer();
531
+ m_.capacity = 0u;
532
+ m_.buffer = pointer();
533
+ }
534
+
535
+ this_alloc = other_alloc;
536
+ }
537
+
538
+ size_type n = x.size();
539
+ if (capacity() >= n)
540
+ {
541
+ this->overwrite_buffer(x.begin(), x.end());
542
+ }
543
+ else
544
+ {
545
+ this->allocate_and_copy_range(x.begin(), x.end());
546
+ }
547
+
548
+ BOOST_ASSERT(invariants_ok());
549
+
550
+ return *this;
551
+ }
552
+
553
+ /**
554
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
555
+ *
556
+ * **Effects**: Moves elements of `x` to `*this`. Previously
557
+ * held elements get move/copy assigned to or destroyed.
558
+ *
559
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
560
+ *
561
+ * **Postcondition**: `x` is left in an unspecified but valid state.
562
+ *
563
+ * **Returns**: `*this`.
564
+ *
565
+ * **Exceptions**: Basic exception guarantee if not `noexcept`.
566
+ *
567
+ * **Complexity**: Constant if allocator_traits_type::
568
+ * propagate_on_container_move_assignment is true or
569
+ * this->get>allocator() == x.get_allocator(). Linear otherwise.
570
+ */
571
+ devector& operator=(BOOST_RV_REF(devector) x)
572
+ BOOST_NOEXCEPT_IF(allocator_traits_type::propagate_on_container_move_assignment::value
573
+ || allocator_traits_type::is_always_equal::value)
574
+ {
575
+ BOOST_CONSTEXPR_OR_CONST bool copy_alloc = allocator_traits_type::propagate_on_container_move_assignment::value;
576
+
577
+ BOOST_IF_CONSTEXPR (copy_alloc || get_allocator_ref() == x.get_allocator_ref())
578
+ {
579
+ this->clear();
580
+ this->deallocate_buffer();
581
+
582
+ if (copy_alloc)
583
+ {
584
+ this->get_allocator_ref() = boost::move(x.get_allocator_ref());
585
+ }
586
+
587
+ m_.capacity = x.m_.capacity;
588
+ m_.buffer = x.m_.buffer;
589
+ m_.front_idx = x.m_.front_idx;
590
+ m_.back_idx = x.m_.back_idx;
591
+
592
+ // leave x in valid state
593
+ x.m_.capacity = 0u;
594
+ x.m_.buffer = pointer();
595
+ x.m_.back_idx = x.m_.front_idx = 0;
596
+ }
597
+ else
598
+ {
599
+ // if the allocator shouldn't be copied and they do not compare equal
600
+ // we can't steal memory.
601
+
602
+ move_iterator<iterator> xbegin = boost::make_move_iterator(x.begin());
603
+ move_iterator<iterator> xend = boost::make_move_iterator(x.end());
604
+
605
+ if (copy_alloc)
606
+ {
607
+ get_allocator_ref() = boost::move(x.get_allocator_ref());
608
+ }
609
+
610
+ if (capacity() >= x.size())
611
+ {
612
+ overwrite_buffer(xbegin, xend);
613
+ }
614
+ else
615
+ {
616
+ allocate_and_copy_range(xbegin, xend);
617
+ }
618
+ }
619
+
620
+ BOOST_ASSERT(invariants_ok());
621
+
622
+ return *this;
623
+ }
624
+
625
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
626
+ /**
627
+ * **Effects**: Copies elements of `il` to `*this`. Previously
628
+ * held elements get copy assigned to or destroyed.
629
+ *
630
+ * **Requires**: `T` shall be [CopyInsertable] into `*this` and [CopyAssignable].
631
+ *
632
+ * **Postcondition**: `this->size() == il.size()`, the elements of
633
+ * `*this` are copies of elements in `il` in the same order.
634
+ *
635
+ * **Exceptions**: Strong exception guarantee if `T` is nothrow copy assignable
636
+ * from `T` and `NothrowConstructible`, Basic exception guarantee otherwise.
637
+ *
638
+ * **Returns**: `*this`.
639
+ *
640
+ * **Complexity**: Linear in the size of `il` and `*this`.
641
+ *
642
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
643
+ * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
644
+ */
645
+ devector& operator=(std::initializer_list<T> il)
646
+ {
647
+ assign(il.begin(), il.end());
648
+ return *this;
649
+ }
650
+ #endif
651
+
652
+ /**
653
+ * **Effects**: Replaces elements of `*this` with a copy of `[first,last)`.
654
+ * Previously held elements get copy assigned to or destroyed.
655
+ *
656
+ * **Requires**: `T` shall be [EmplaceConstructible] from `*first`. If the specified iterator
657
+ * does not meet the forward iterator requirements, `T` shall be also [MoveInsertable] into `*this`.
658
+ *
659
+ * **Precondition**: `first` and `last` are not iterators into `*this`.
660
+ *
661
+ * **Postcondition**: `size() == N`, where `N` is the distance between `first` and `last`.
662
+ *
663
+ * **Exceptions**: Strong exception guarantee if `T` is nothrow copy assignable
664
+ * from `*first` and `NothrowConstructible`, Basic exception guarantee otherwise.
665
+ *
666
+ * **Complexity**: Linear in the distance between `first` and `last`.
667
+ * Makes a single reallocation at most if the iterators `first` and `last`
668
+ * are of forward, bidirectional, or random access categories. It makes
669
+ * `O(log(N))` reallocations if they are just input iterators.
670
+ *
671
+ * **Remarks**: Each iterator in the range `[first,last)` shall be dereferenced exactly once,
672
+ * unless an exception is thrown.
673
+ *
674
+ * [EmplaceConstructible]: http://en.cppreference.com/w/cpp/concept/EmplaceConstructible
675
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
676
+ */
677
+ template <class InputIterator>
678
+ void assign(InputIterator first, InputIterator last
679
+ //Input iterators
680
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
681
+ < void
682
+ BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
683
+ BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
684
+ >::type * = 0)
685
+ )
686
+ {
687
+ first = overwrite_buffer_impl(first, last, dtl::false_());
688
+ while (first != last)
689
+ {
690
+ this->emplace_back(*first++);
691
+ }
692
+ }
693
+
694
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
695
+
696
+ template <class ForwardIterator>
697
+ void assign(ForwardIterator first, ForwardIterator last
698
+ //Other iterators
699
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
700
+ < void
701
+ BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
702
+ BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
703
+ >::type * = 0)
704
+ )
705
+ {
706
+ const size_type n = boost::container::iterator_distance(first, last);
707
+
708
+ if (capacity() >= n)
709
+ {
710
+ overwrite_buffer(first, last);
711
+ }
712
+ else
713
+ {
714
+ allocate_and_copy_range(first, last);
715
+ }
716
+
717
+ BOOST_ASSERT(invariants_ok());
718
+ }
719
+
720
+ #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
721
+
722
+ /**
723
+ * **Effects**: Replaces elements of `*this` with `n` copies of `u`.
724
+ * Previously held elements get copy assigned to or destroyed.
725
+ *
726
+ * **Requires**: `T` shall be [CopyInsertable] into `*this` and
727
+ * [CopyAssignable].
728
+ *
729
+ * **Precondition**: `u` is not a reference into `*this`.
730
+ *
731
+ * **Postcondition**: `size() == n` and the elements of
732
+ * `*this` are copies of `u`.
733
+ *
734
+ * **Exceptions**: Strong exception guarantee if `T` is nothrow copy assignable
735
+ * from `u` and `NothrowConstructible`, Basic exception guarantee otherwise.
736
+ *
737
+ * **Complexity**: Linear in `n` and the size of `*this`.
738
+ *
739
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
740
+ * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
741
+ */
742
+ void assign(size_type n, const T& u)
743
+ {
744
+ cvalue_iterator first(u, n);
745
+ cvalue_iterator last;
746
+
747
+ assign(first, last);
748
+ }
749
+
750
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
751
+ /** **Equivalent to**: `assign(il.begin(), il.end())`. */
752
+ void assign(std::initializer_list<T> il)
753
+ {
754
+ assign(il.begin(), il.end());
755
+ }
756
+ #endif
757
+
758
+ /**
759
+ * **Returns**: A copy of the allocator associated with the container.
760
+ *
761
+ * **Complexity**: Constant.
762
+ */
763
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
764
+ allocator_type get_allocator() const BOOST_NOEXCEPT
765
+ {
766
+ return static_cast<const allocator_type&>(m_);
767
+ }
768
+
769
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
770
+ const allocator_type &get_stored_allocator() const BOOST_NOEXCEPT
771
+ {
772
+ return static_cast<const allocator_type&>(m_);
773
+ }
774
+
775
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
776
+ allocator_type &get_stored_allocator() BOOST_NOEXCEPT
777
+ {
778
+ return static_cast<allocator_type&>(m_);
779
+ }
780
+
781
+ // iterators
782
+
783
+ /**
784
+ * **Returns**: A iterator pointing to the first element in the devector,
785
+ * or the past the end iterator if the devector is empty.
786
+ *
787
+ * **Complexity**: Constant.
788
+ */
789
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
790
+ iterator begin() BOOST_NOEXCEPT
791
+ {
792
+ return m_.buffer + m_.front_idx;
793
+ }
794
+
795
+ /**
796
+ * **Returns**: A constant iterator pointing to the first element in the devector,
797
+ * or the past the end iterator if the devector is empty.
798
+ *
799
+ * **Complexity**: Constant.
800
+ */
801
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
802
+ const_iterator begin() const BOOST_NOEXCEPT
803
+ {
804
+ return m_.buffer + m_.front_idx;
805
+ }
806
+
807
+ /**
808
+ * **Returns**: An iterator pointing past the last element of the container.
809
+ *
810
+ * **Complexity**: Constant.
811
+ */
812
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
813
+ iterator end() BOOST_NOEXCEPT
814
+ {
815
+ return m_.buffer + m_.back_idx;
816
+ }
817
+
818
+ /**
819
+ * **Returns**: A constant iterator pointing past the last element of the container.
820
+ *
821
+ * **Complexity**: Constant.
822
+ */
823
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
824
+ const_iterator end() const BOOST_NOEXCEPT
825
+ {
826
+ return m_.buffer + m_.back_idx;
827
+ }
828
+
829
+ /**
830
+ * **Returns**: A reverse iterator pointing to the first element in the reversed devector,
831
+ * or the reverse past the end iterator if the devector is empty.
832
+ *
833
+ * **Complexity**: Constant.
834
+ */
835
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
836
+ reverse_iterator rbegin() BOOST_NOEXCEPT
837
+ {
838
+ return reverse_iterator(m_.buffer + m_.back_idx);
839
+ }
840
+
841
+ /**
842
+ * **Returns**: A constant reverse iterator
843
+ * pointing to the first element in the reversed devector,
844
+ * or the reverse past the end iterator if the devector is empty.
845
+ *
846
+ * **Complexity**: Constant.
847
+ */
848
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
849
+ const_reverse_iterator rbegin() const BOOST_NOEXCEPT
850
+ {
851
+ return const_reverse_iterator(m_.buffer + m_.back_idx);
852
+ }
853
+
854
+ /**
855
+ * **Returns**: A reverse iterator pointing past the last element in the
856
+ * reversed container, or to the beginning of the reversed container if it's empty.
857
+ *
858
+ * **Complexity**: Constant.
859
+ */
860
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
861
+ reverse_iterator rend() BOOST_NOEXCEPT
862
+ {
863
+ return reverse_iterator(m_.buffer + m_.front_idx);
864
+ }
865
+
866
+ /**
867
+ * **Returns**: A constant reverse iterator pointing past the last element in the
868
+ * reversed container, or to the beginning of the reversed container if it's empty.
869
+ *
870
+ * **Complexity**: Constant.
871
+ */
872
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
873
+ const_reverse_iterator rend() const BOOST_NOEXCEPT
874
+ {
875
+ return const_reverse_iterator(m_.buffer + m_.front_idx);
876
+ }
877
+
878
+ /**
879
+ * **Returns**: A constant iterator pointing to the first element in the devector,
880
+ * or the past the end iterator if the devector is empty.
881
+ *
882
+ * **Complexity**: Constant.
883
+ */
884
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
885
+ const_iterator cbegin() const BOOST_NOEXCEPT
886
+ {
887
+ return m_.buffer + m_.front_idx;
888
+ }
889
+
890
+ /**
891
+ * **Returns**: A constant iterator pointing past the last element of the container.
892
+ *
893
+ * **Complexity**: Constant.
894
+ */
895
+ const_iterator cend() const BOOST_NOEXCEPT
896
+ {
897
+ return m_.buffer + m_.back_idx;
898
+ }
899
+
900
+ /**
901
+ * **Returns**: A constant reverse iterator
902
+ * pointing to the first element in the reversed devector,
903
+ * or the reverse past the end iterator if the devector is empty.
904
+ *
905
+ * **Complexity**: Constant.
906
+ */
907
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
908
+ const_reverse_iterator crbegin() const BOOST_NOEXCEPT
909
+ {
910
+ return const_reverse_iterator(m_.buffer + m_.back_idx);
911
+ }
912
+
913
+ /**
914
+ * **Returns**: A constant reverse iterator pointing past the last element in the
915
+ * reversed container, or to the beginning of the reversed container if it's empty.
916
+ *
917
+ * **Complexity**: Constant.
918
+ */
919
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
920
+ const_reverse_iterator crend() const BOOST_NOEXCEPT
921
+ {
922
+ return const_reverse_iterator(m_.buffer + m_.front_idx);
923
+ }
924
+
925
+ // capacity
926
+
927
+ /**
928
+ * **Returns**: True, if `size() == 0`, false otherwise.
929
+ *
930
+ * **Complexity**: Constant.
931
+ */
932
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
933
+ bool empty() const BOOST_NOEXCEPT
934
+ {
935
+ return m_.front_idx == m_.back_idx;
936
+ }
937
+
938
+ /**
939
+ * **Returns**: The number of elements the devector contains.
940
+ *
941
+ * **Complexity**: Constant.
942
+ */
943
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
944
+ size_type size() const BOOST_NOEXCEPT
945
+ {
946
+ return m_.back_idx - m_.front_idx;
947
+ }
948
+
949
+ /**
950
+ * **Returns**: The maximum number of elements the devector could possibly hold.
951
+ *
952
+ * **Complexity**: Constant.
953
+ */
954
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
955
+ size_type max_size() const BOOST_NOEXCEPT
956
+ {
957
+ size_type alloc_max = allocator_traits_type::max_size(get_allocator_ref());
958
+ size_type size_type_max = (size_type)-1;
959
+ return (alloc_max <= size_type_max) ? size_type(alloc_max) : size_type_max;
960
+ }
961
+
962
+ /**
963
+ * **Returns**: The total number of elements that the devector can hold without requiring reallocation.
964
+ *
965
+ * **Complexity**: Constant.
966
+ */
967
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
968
+ size_type capacity() const BOOST_NOEXCEPT
969
+ {
970
+ return m_.capacity;
971
+ }
972
+
973
+ /**
974
+ * **Returns**: The total number of elements that can be pushed to the front of the
975
+ * devector without requiring reallocation.
976
+ *
977
+ * **Complexity**: Constant.
978
+ */
979
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
980
+ size_type front_free_capacity() const BOOST_NOEXCEPT
981
+ {
982
+ return m_.front_idx;
983
+ }
984
+
985
+ /**
986
+ * **Returns**: The total number of elements that can be pushed to the back of the
987
+ * devector without requiring reallocation.
988
+ *
989
+ * **Complexity**: Constant.
990
+ */
991
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
992
+ size_type back_free_capacity() const BOOST_NOEXCEPT
993
+ {
994
+ return m_.capacity - m_.back_idx;
995
+ }
996
+
997
+ /** **Equivalent to**: `resize_back(sz)` */
998
+ void resize(size_type sz) { resize_back(sz); }
999
+
1000
+ /** **Equivalent to**: `resize_back(sz, c)` */
1001
+ void resize(size_type sz, const T& c) { resize_back(sz, c); }
1002
+
1003
+ /**
1004
+ * **Effects**: If `sz` is greater than the size of `*this`,
1005
+ * additional value-initialized elements are inserted
1006
+ * to the front. Invalidates iterators if reallocation is needed.
1007
+ * If `sz` is smaller than than the size of `*this`,
1008
+ * elements are popped from the front.
1009
+ *
1010
+ * **Requires**: T shall be [MoveInsertable] into *this and [DefaultConstructible].
1011
+ *
1012
+ * **Postcondition**: `sz == size()`.
1013
+ *
1014
+ * **Exceptions**: Strong exception guarantee.
1015
+ *
1016
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1017
+ *
1018
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1019
+ * [DefaultConstructible]: http://en.cppreference.com/w/cpp/concept/DefaultConstructible
1020
+ */
1021
+ void resize_front(size_type sz)
1022
+ {
1023
+ resize_front_impl(sz);
1024
+ BOOST_ASSERT(invariants_ok());
1025
+ }
1026
+
1027
+ /**
1028
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1029
+ *
1030
+ * **Effects**: If `sz` is greater than the size of `*this`,
1031
+ * copies of `c` are inserted to the front.
1032
+ * Invalidates iterators if reallocation is needed.
1033
+ * If `sz` is smaller than than the size of `*this`,
1034
+ * elements are popped from the front.
1035
+ *
1036
+ * **Postcondition**: `sz == size()`.
1037
+ *
1038
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
1039
+ *
1040
+ * **Exceptions**: Strong exception guarantee.
1041
+ *
1042
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1043
+ */
1044
+ void resize_front(size_type sz, const T& c)
1045
+ {
1046
+ resize_front_impl(sz, c);
1047
+ BOOST_ASSERT(invariants_ok());
1048
+ }
1049
+
1050
+ /**
1051
+ * **Effects**: If `sz` is greater than the size of `*this`,
1052
+ * additional value-initialized elements are inserted
1053
+ * to the back. Invalidates iterators if reallocation is needed.
1054
+ * If `sz` is smaller than than the size of `*this`,
1055
+ * elements are popped from the back.
1056
+ *
1057
+ * **Requires**: T shall be [MoveInsertable] into *this and [DefaultConstructible].
1058
+ *
1059
+ * **Postcondition**: `sz == size()`.
1060
+ *
1061
+ * **Exceptions**: Strong exception guarantee.
1062
+ *
1063
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1064
+ *
1065
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1066
+ * [DefaultConstructible]: http://en.cppreference.com/w/cpp/concept/DefaultConstructible
1067
+ */
1068
+ void resize_back(size_type sz)
1069
+ {
1070
+ resize_back_impl(sz);
1071
+ BOOST_ASSERT(invariants_ok());
1072
+ }
1073
+
1074
+ /**
1075
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1076
+ *
1077
+ * **Effects**: If `sz` is greater than the size of `*this`,
1078
+ * copies of `c` are inserted to the back.
1079
+ * If `sz` is smaller than than the size of `*this`,
1080
+ * elements are popped from the back.
1081
+ *
1082
+ * **Postcondition**: `sz == size()`.
1083
+ *
1084
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
1085
+ *
1086
+ * **Exceptions**: Strong exception guarantee.
1087
+ *
1088
+ * **Complexity**: Linear in the size of `*this` and `sz`.
1089
+ */
1090
+ void resize_back(size_type sz, const T& c)
1091
+ {
1092
+ resize_back_impl(sz, c);
1093
+ BOOST_ASSERT(invariants_ok());
1094
+ }
1095
+
1096
+ // unsafe uninitialized resize methods
1097
+
1098
+ /**
1099
+ * **Unsafe method**, use with care.
1100
+ *
1101
+ * **Effects**: Changes the size of the devector without properly
1102
+ * initializing the extra or destroying the superfluous elements.
1103
+ * If `n < size()`, elements are removed from the front without
1104
+ * getting destroyed; if `n > size()`, uninitialized elements are added
1105
+ * before the first element at the front.
1106
+ * Invalidates iterators if reallocation is needed.
1107
+ *
1108
+ * **Postcondition**: `size() == n`.
1109
+ *
1110
+ * **Exceptions**: Strong exception guarantee.
1111
+ *
1112
+ * **Complexity**: Linear in `size()` if `capacity() < n`, constant otherwise.
1113
+ *
1114
+ * **Remarks**: The devector does not keep track of initialization of the elements:
1115
+ * Elements without a trivial destructor must be manually destroyed before shrinking,
1116
+ * elements without a trivial constructor must be initialized after growing.
1117
+ */
1118
+ /*
1119
+ void unsafe_uninitialized_resize_front(size_type n)
1120
+ {
1121
+ if (n > size())
1122
+ {
1123
+ unsafe_uninitialized_grow_front(n);
1124
+ }
1125
+ else
1126
+ {
1127
+ unsafe_uninitialized_shrink_front(n);
1128
+ }
1129
+ }
1130
+ */
1131
+ /**
1132
+ * **Unsafe method**, use with care.
1133
+ *
1134
+ * **Effects**: Changes the size of the devector without properly
1135
+ * initializing the extra or destroying the superfluous elements.
1136
+ * If `n < size()`, elements are removed from the back without
1137
+ * getting destroyed; if `n > size()`, uninitialized elements are added
1138
+ * after the last element at the back.
1139
+ * Invalidates iterators if reallocation is needed.
1140
+ *
1141
+ * **Postcondition**: `size() == n`.
1142
+ *
1143
+ * **Exceptions**: Strong exception guarantee.
1144
+ *
1145
+ * **Complexity**: Linear in `size()` if `capacity() < n`, constant otherwise.
1146
+ *
1147
+ * **Remarks**: The devector does not keep track of initialization of the elements:
1148
+ * Elements without a trivial destructor must be manually destroyed before shrinking,
1149
+ * elements without a trivial constructor must be initialized after growing.
1150
+ */
1151
+ /*
1152
+ void unsafe_uninitialized_resize_back(size_type n)
1153
+ {
1154
+ if (n > size())
1155
+ {
1156
+ unsafe_uninitialized_grow_back(n);
1157
+ }
1158
+ else
1159
+ {
1160
+ unsafe_uninitialized_shrink_back(n);
1161
+ }
1162
+ }
1163
+ */
1164
+ // reserve promise:
1165
+ // after reserve_[front,back](n), n - size() push_[front,back] will not allocate
1166
+
1167
+ /** **Equivalent to**: `reserve_back(new_capacity)` */
1168
+ void reserve(size_type new_capacity) { reserve_back(new_capacity); }
1169
+
1170
+ /**
1171
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1172
+ *
1173
+ * **Effects**: Ensures that `n` elements can be pushed to the front
1174
+ * without requiring reallocation, where `n` is `new_capacity - size()`,
1175
+ * if `n` is positive. Otherwise, there are no effects.
1176
+ * Invalidates iterators if reallocation is needed.
1177
+ *
1178
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1179
+ *
1180
+ * **Complexity**: Linear in the size of *this.
1181
+ *
1182
+ * **Exceptions**: Strong exception guarantee.
1183
+ *
1184
+ * **Throws**: `length_error` if `new_capacity > max_size()`.
1185
+ */
1186
+ void reserve_front(size_type new_capacity)
1187
+ {
1188
+ if (front_capacity() >= new_capacity) { return; }
1189
+
1190
+ reallocate_at(new_capacity + back_free_capacity(), new_capacity - size());
1191
+
1192
+ BOOST_ASSERT(invariants_ok());
1193
+ }
1194
+
1195
+ /**
1196
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1197
+ *
1198
+ * **Effects**: Ensures that `n` elements can be pushed to the back
1199
+ * without requiring reallocation, where `n` is `new_capacity - size()`,
1200
+ * if `n` is positive. Otherwise, there are no effects.
1201
+ * Invalidates iterators if reallocation is needed.
1202
+ *
1203
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1204
+ *
1205
+ * **Complexity**: Linear in the size of *this.
1206
+ *
1207
+ * **Exceptions**: Strong exception guarantee.
1208
+ *
1209
+ * **Throws**: length_error if `new_capacity > max_size()`.
1210
+ */
1211
+ void reserve_back(size_type new_capacity)
1212
+ {
1213
+ if (back_capacity() >= new_capacity) { return; }
1214
+
1215
+ reallocate_at(new_capacity + front_free_capacity(), m_.front_idx);
1216
+
1217
+ BOOST_ASSERT(invariants_ok());
1218
+ }
1219
+
1220
+
1221
+ /**
1222
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1223
+ *
1224
+ * **Effects**: Reduces `capacity()` to `size()`. Invalidates iterators.
1225
+ *
1226
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1227
+ *
1228
+ * **Exceptions**: Strong exception guarantee.
1229
+ *
1230
+ * **Complexity**: Linear in the size of *this.
1231
+ */
1232
+ void shrink_to_fit()
1233
+ {
1234
+ if(this->front_capacity() || this->back_capacity())
1235
+ this->reallocate_at(size(), 0);
1236
+ }
1237
+
1238
+ // element access:
1239
+
1240
+ /**
1241
+ * **Returns**: A reference to the `n`th element in the devector.
1242
+ *
1243
+ * **Precondition**: `n < size()`.
1244
+ *
1245
+ * **Complexity**: Constant.
1246
+ */
1247
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1248
+ reference operator[](size_type n) BOOST_NOEXCEPT
1249
+ {
1250
+ BOOST_ASSERT(n < size());
1251
+ return *(begin() + n);
1252
+ }
1253
+
1254
+ /**
1255
+ * **Returns**: A constant reference to the `n`th element in the devector.
1256
+ *
1257
+ * **Precondition**: `n < size()`.
1258
+ *
1259
+ * **Complexity**: Constant.
1260
+ */
1261
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1262
+ const_reference operator[](size_type n) const BOOST_NOEXCEPT
1263
+ {
1264
+ BOOST_ASSERT(n < size());
1265
+
1266
+ return *(begin() + n);
1267
+ }
1268
+
1269
+ /**
1270
+ * **Returns**: A reference to the `n`th element in the devector.
1271
+ *
1272
+ * **Throws**: `std::out_of_range`, if `n >= size()`.
1273
+ *
1274
+ * **Complexity**: Constant.
1275
+ */
1276
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1277
+ reference at(size_type n)
1278
+ {
1279
+ if (size() <= n)
1280
+ throw_out_of_range("devector::at out of range");
1281
+ return (*this)[n];
1282
+ }
1283
+
1284
+ /**
1285
+ * **Returns**: A constant reference to the `n`th element in the devector.
1286
+ *
1287
+ * **Throws**: `std::out_of_range`, if `n >= size()`.
1288
+ *
1289
+ * **Complexity**: Constant.
1290
+ */
1291
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1292
+ const_reference at(size_type n) const
1293
+ {
1294
+ if (size() <= n)
1295
+ throw_out_of_range("devector::at out of range");
1296
+ return (*this)[n];
1297
+ }
1298
+
1299
+ /**
1300
+ * **Returns**: A reference to the first element in the devector.
1301
+ *
1302
+ * **Precondition**: `!empty()`.
1303
+ *
1304
+ * **Complexity**: Constant.
1305
+ */
1306
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1307
+ reference front() BOOST_NOEXCEPT
1308
+ {
1309
+ BOOST_ASSERT(!empty());
1310
+
1311
+ return *(m_.buffer + m_.front_idx);
1312
+ }
1313
+
1314
+ /**
1315
+ * **Returns**: A constant reference to the first element in the devector.
1316
+ *
1317
+ * **Precondition**: `!empty()`.
1318
+ *
1319
+ * **Complexity**: Constant.
1320
+ */
1321
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1322
+ const_reference front() const BOOST_NOEXCEPT
1323
+ {
1324
+ BOOST_ASSERT(!empty());
1325
+
1326
+ return *(m_.buffer + m_.front_idx);
1327
+ }
1328
+
1329
+ /**
1330
+ * **Returns**: A reference to the last element in the devector.
1331
+ *
1332
+ * **Precondition**: `!empty()`.
1333
+ *
1334
+ * **Complexity**: Constant.
1335
+ */
1336
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1337
+ reference back() BOOST_NOEXCEPT
1338
+ {
1339
+ BOOST_ASSERT(!empty());
1340
+
1341
+ return *(m_.buffer + m_.back_idx -1);
1342
+ }
1343
+
1344
+ /**
1345
+ * **Returns**: A constant reference to the last element in the devector.
1346
+ *
1347
+ * **Precondition**: `!empty()`.
1348
+ *
1349
+ * **Complexity**: Constant.
1350
+ */
1351
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1352
+ const_reference back() const BOOST_NOEXCEPT
1353
+ {
1354
+ BOOST_ASSERT(!empty());
1355
+
1356
+ return *(m_.buffer + m_.back_idx -1);
1357
+ }
1358
+
1359
+ /**
1360
+ * **Returns**: A pointer to the underlying array serving as element storage.
1361
+ * The range `[data(); data() + size())` is always valid. For a non-empty devector,
1362
+ * `data() == &front()`.
1363
+ *
1364
+ * **Complexity**: Constant.
1365
+ */
1366
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1367
+ T* data() BOOST_NOEXCEPT
1368
+ {
1369
+ return boost::movelib::to_raw_pointer(m_.buffer) + m_.front_idx;
1370
+ }
1371
+
1372
+ /**
1373
+ * **Returns**: A constant pointer to the underlying array serving as element storage.
1374
+ * The range `[data(); data() + size())` is always valid. For a non-empty devector,
1375
+ * `data() == &front()`.
1376
+ *
1377
+ * **Complexity**: Constant.
1378
+ */
1379
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1380
+ const T* data() const BOOST_NOEXCEPT
1381
+ {
1382
+ return boost::movelib::to_raw_pointer(m_.buffer) + m_.front_idx;
1383
+ }
1384
+
1385
+ // modifiers:
1386
+
1387
+ /**
1388
+ * **Effects**: Pushes a new element to the front of the devector.
1389
+ * The element is constructed in-place, using the perfect forwarded `args`
1390
+ * as constructor arguments. Invalidates iterators if reallocation is needed.
1391
+ * (`front_free_capacity() == 0`)
1392
+ *
1393
+ * **Requires**: `T` shall be [EmplaceConstructible] from `args` and [MoveInsertable] into `*this`.
1394
+ *
1395
+ * **Exceptions**: Strong exception guarantee.
1396
+ *
1397
+ * **Complexity**: Amortized constant in the size of `*this`.
1398
+ * (Constant, if `front_free_capacity() > 0`)
1399
+ *
1400
+ * [EmplaceConstructible]: http://en.cppreference.com/w/cpp/concept/EmplaceConstructible
1401
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1402
+ */
1403
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1404
+ template <class... Args>
1405
+ void emplace_front(Args&&... args)
1406
+ {
1407
+ if (front_free_capacity()) // fast path
1408
+ {
1409
+ this->alloc_construct(m_.buffer + m_.front_idx - 1, boost::forward<Args>(args)...);
1410
+ --m_.front_idx;
1411
+ }
1412
+ else
1413
+ {
1414
+ this->emplace_reallocating_slow_path(true, 0, boost::forward<Args>(args)...);
1415
+ }
1416
+
1417
+ BOOST_ASSERT(invariants_ok());
1418
+ }
1419
+
1420
+ #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1421
+
1422
+ #define BOOST_CONTAINER_DEVECTOR_EMPLACE_FRONT(N) \
1423
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1424
+ BOOST_CONTAINER_FORCEINLINE void emplace_front(BOOST_MOVE_UREF##N)\
1425
+ {\
1426
+ if (front_free_capacity())\
1427
+ {\
1428
+ this->alloc_construct(m_.buffer + m_.front_idx - 1 BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1429
+ --m_.front_idx;\
1430
+ }\
1431
+ else\
1432
+ {\
1433
+ this->emplace_reallocating_slow_path(true, 0 BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1434
+ }\
1435
+ \
1436
+ BOOST_ASSERT(invariants_ok());\
1437
+ }\
1438
+ //
1439
+ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_EMPLACE_FRONT)
1440
+ #undef BOOST_CONTAINER_DEVECTOR_EMPLACE_FRONT
1441
+
1442
+ #endif
1443
+
1444
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1445
+ /**
1446
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1447
+ *
1448
+ * **Effects**: Pushes the copy of `x` to the front of the devector.
1449
+ * Invalidates iterators if reallocation is needed.
1450
+ * (`front_free_capacity() == 0`)
1451
+ *
1452
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
1453
+ *
1454
+ * **Exceptions**: Strong exception guarantee.
1455
+ *
1456
+ * **Complexity**: Amortized constant in the size of `*this`.
1457
+ * (Constant, if `front_free_capacity() > 0`)
1458
+ */
1459
+ void push_front(const T& x);
1460
+
1461
+ /**
1462
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1463
+ *
1464
+ * **Effects**: Move constructs a new element at the front of the devector using `x`.
1465
+ * Invalidates iterators if reallocation is needed.
1466
+ * (`front_free_capacity() == 0`)
1467
+ *
1468
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1469
+ *
1470
+ * **Exceptions**: Strong exception guarantee, not regarding the state of `x`.
1471
+ *
1472
+ * **Complexity**: Amortized constant in the size of `*this`.
1473
+ * (Constant, if `front_free_capacity() > 0`)
1474
+ */
1475
+ void push_front(T&& x);
1476
+
1477
+ #else
1478
+ BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front)
1479
+ #endif
1480
+
1481
+ /**
1482
+ * **Effects**: Removes the first element of `*this`.
1483
+ *
1484
+ * **Precondition**: `!empty()`.
1485
+ *
1486
+ * **Postcondition**: `front_free_capacity()` is incremented by 1.
1487
+ *
1488
+ * **Complexity**: Constant.
1489
+ */
1490
+ void pop_front() BOOST_NOEXCEPT
1491
+ {
1492
+ BOOST_ASSERT(! empty());
1493
+ allocator_traits_type::destroy(get_allocator_ref(), m_.buffer + m_.front_idx);
1494
+ ++m_.front_idx;
1495
+ BOOST_ASSERT(invariants_ok());
1496
+ }
1497
+
1498
+ /**
1499
+ * **Effects**: Pushes a new element to the back of the devector.
1500
+ * The element is constructed in-place, using the perfect forwarded `args`
1501
+ * as constructor arguments. Invalidates iterators if reallocation is needed.
1502
+ * (`back_free_capacity() == 0`)
1503
+ *
1504
+ * **Requires**: `T` shall be [EmplaceConstructible] from `args` and [MoveInsertable] into `*this`,
1505
+ * and [MoveAssignable].
1506
+ *
1507
+ * **Exceptions**: Strong exception guarantee.
1508
+ *
1509
+ * **Complexity**: Amortized constant in the size of `*this`.
1510
+ * (Constant, if `back_free_capacity() > 0`)
1511
+ *
1512
+ * [EmplaceConstructible]: http://en.cppreference.com/w/cpp/concept/EmplaceConstructible
1513
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1514
+ * [MoveAssignable]: http://en.cppreference.com/w/cpp/concept/MoveAssignable
1515
+ */
1516
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1517
+ template <class... Args>
1518
+ BOOST_CONTAINER_FORCEINLINE void emplace_back(Args&&... args)
1519
+ {
1520
+ if (this->back_free_capacity()){
1521
+ this->alloc_construct(m_.buffer + m_.back_idx, boost::forward<Args>(args)...);
1522
+ ++m_.back_idx;
1523
+ }
1524
+ else {
1525
+ this->emplace_reallocating_slow_path(false, size(), boost::forward<Args>(args)...);
1526
+ }
1527
+ BOOST_ASSERT(invariants_ok());
1528
+ }
1529
+
1530
+ #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1531
+
1532
+ #define BOOST_CONTAINER_DEVECTOR_EMPLACE_BACK(N) \
1533
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1534
+ BOOST_CONTAINER_FORCEINLINE void emplace_back(BOOST_MOVE_UREF##N)\
1535
+ {\
1536
+ if (this->back_free_capacity()){\
1537
+ this->alloc_construct(m_.buffer + m_.back_idx BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1538
+ ++m_.back_idx;\
1539
+ }\
1540
+ else {\
1541
+ this->emplace_reallocating_slow_path(false, size() BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1542
+ }\
1543
+ BOOST_ASSERT(invariants_ok());\
1544
+ }\
1545
+ //
1546
+ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_EMPLACE_BACK)
1547
+ #undef BOOST_CONTAINER_DEVECTOR_EMPLACE_BACK
1548
+
1549
+ #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1550
+
1551
+
1552
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1553
+ /**
1554
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1555
+ *
1556
+ * **Effects**: Pushes the copy of `x` to the back of the devector.
1557
+ * Invalidates iterators if reallocation is needed.
1558
+ * (`back_free_capacity() == 0`)
1559
+ *
1560
+ * **Requires**: `T` shall be [CopyInsertable] into `*this`.
1561
+ *
1562
+ * **Exceptions**: Strong exception guarantee.
1563
+ *
1564
+ * **Complexity**: Amortized constant in the size of `*this`.
1565
+ * (Constant, if `back_free_capacity() > 0`)
1566
+ */
1567
+ void push_back(const T& x);
1568
+
1569
+ /**
1570
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1571
+ *
1572
+ * **Effects**: Move constructs a new element at the back of the devector using `x`.
1573
+ * Invalidates iterators if reallocation is needed.
1574
+ * (`back_free_capacity() == 0`)
1575
+ *
1576
+ * **Requires**: `T` shall be [MoveInsertable] into `*this`.
1577
+ *
1578
+ * **Exceptions**: Strong exception guarantee, not regarding the state of `x`.
1579
+ *
1580
+ * **Complexity**: Amortized constant in the size of `*this`.
1581
+ * (Constant, if `back_free_capacity() > 0`)
1582
+ */
1583
+ void push_back(T&& x);
1584
+
1585
+ #else
1586
+ BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back)
1587
+ #endif
1588
+
1589
+ /**
1590
+ * **Effects**: Removes the last element of `*this`.
1591
+ *
1592
+ * **Precondition**: `!empty()`.
1593
+ *
1594
+ * **Postcondition**: `back_free_capacity()` is incremented by 1.
1595
+ *
1596
+ * **Complexity**: Constant.
1597
+ */
1598
+ void pop_back() BOOST_NOEXCEPT
1599
+ {
1600
+ BOOST_ASSERT(! empty());
1601
+ --m_.back_idx;
1602
+ allocator_traits_type::destroy(get_allocator_ref(), m_.buffer + m_.back_idx);
1603
+ BOOST_ASSERT(invariants_ok());
1604
+ }
1605
+
1606
+ /**
1607
+ * **Effects**: Constructs a new element before the element pointed by `position`.
1608
+ * The element is constructed in-place, using the perfect forwarded `args`
1609
+ * as constructor arguments. Invalidates iterators if reallocation is needed.
1610
+ *
1611
+ * **Requires**: `T` shall be [EmplaceConstructible], and [MoveInsertable] into `*this`,
1612
+ * and [MoveAssignable].
1613
+ *
1614
+ * **Returns**: Iterator pointing to the newly constructed element.
1615
+ *
1616
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowConstructible`
1617
+ * and `NothrowAssignable`, Basic exception guarantee otherwise.
1618
+ *
1619
+ * **Complexity**: Linear in the size of `*this`.
1620
+ *
1621
+ * [EmplaceConstructible]: http://en.cppreference.com/w/cpp/concept/EmplaceConstructible
1622
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1623
+ * [MoveAssignable]: http://en.cppreference.com/w/cpp/concept/MoveAssignable
1624
+ */
1625
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1626
+ template <class... Args>
1627
+ iterator emplace(const_iterator position, Args&&... args)
1628
+ {
1629
+ BOOST_ASSERT(position >= begin());
1630
+ BOOST_ASSERT(position <= end());
1631
+
1632
+ if (position == end() && back_free_capacity()) // fast path
1633
+ {
1634
+ this->alloc_construct(m_.buffer + m_.back_idx, boost::forward<Args>(args)...);
1635
+ ++m_.back_idx;
1636
+ return end() - 1;
1637
+ }
1638
+ else if (position == begin() && front_free_capacity()) // secondary fast path
1639
+ {
1640
+ this->alloc_construct(m_.buffer + (m_.front_idx - 1), boost::forward<Args>(args)...);
1641
+ --m_.front_idx;
1642
+ return begin();
1643
+ }
1644
+ else
1645
+ {
1646
+ size_type new_elem_index = position - begin();
1647
+ return this->emplace_slow_path(new_elem_index, boost::forward<Args>(args)...);
1648
+ }
1649
+ }
1650
+
1651
+ #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1652
+
1653
+ #define BOOST_CONTAINER_DEVECTOR_EMPLACE(N) \
1654
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
1655
+ iterator emplace(const_iterator position BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
1656
+ {\
1657
+ BOOST_ASSERT(position >= begin());\
1658
+ BOOST_ASSERT(position <= end());\
1659
+ \
1660
+ if (position == end() && back_free_capacity()){\
1661
+ this->alloc_construct(m_.buffer + m_.back_idx BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1662
+ ++m_.back_idx;\
1663
+ return end() - 1;\
1664
+ }\
1665
+ else if (position == begin() && front_free_capacity()){\
1666
+ this->alloc_construct(m_.buffer + m_.front_idx - 1 BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1667
+ --m_.front_idx;\
1668
+ return begin();\
1669
+ }\
1670
+ else{\
1671
+ size_type new_elem_index = position - begin();\
1672
+ return this->emplace_slow_path(new_elem_index BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
1673
+ }\
1674
+ }\
1675
+ //
1676
+ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_EMPLACE)
1677
+ #undef BOOST_CONTAINER_DEVECTOR_EMPLACE
1678
+
1679
+ #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1680
+
1681
+
1682
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1683
+ /**
1684
+ * **Effects**: Copy constructs a new element before the element pointed by `position`,
1685
+ * using `x` as constructor argument. Invalidates iterators if reallocation is needed.
1686
+ *
1687
+ * **Requires**: `T` shall be [CopyInsertable] into `*this` and and [CopyAssignable].
1688
+ *
1689
+ * **Returns**: Iterator pointing to the newly constructed element.
1690
+ *
1691
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowConstructible`
1692
+ * and `NothrowAssignable`, Basic exception guarantee otherwise.
1693
+ *
1694
+ * **Complexity**: Linear in the size of `*this`.
1695
+ *
1696
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1697
+ * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
1698
+ */
1699
+ iterator insert(const_iterator position, const T &x);
1700
+
1701
+ /**
1702
+ * **Effects**: Move constructs a new element before the element pointed by `position`,
1703
+ * using `x` as constructor argument. Invalidates iterators if reallocation is needed.
1704
+ *
1705
+ * **Requires**: `T` shall be [MoveInsertable] into `*this` and and [CopyAssignable].
1706
+ *
1707
+ * **Returns**: Iterator pointing to the newly constructed element.
1708
+ *
1709
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowConstructible`
1710
+ * and `NothrowAssignable` (not regarding the state of `x`),
1711
+ * Basic exception guarantee otherwise.
1712
+ *
1713
+ * **Complexity**: Linear in the size of `*this`.
1714
+ *
1715
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1716
+ * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
1717
+ */
1718
+ iterator insert(const_iterator position, T &&x);
1719
+ #else
1720
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator, const_iterator)
1721
+ #endif
1722
+
1723
+ /**
1724
+ * **Effects**: Copy constructs `n` elements before the element pointed by `position`,
1725
+ * using `x` as constructor argument. Invalidates iterators if reallocation is needed.
1726
+ *
1727
+ * **Requires**: `T` shall be [CopyInsertable] into `*this` and and [CopyAssignable].
1728
+ *
1729
+ * **Returns**: Iterator pointing to the first inserted element, or `position`, if `n` is zero.
1730
+ *
1731
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowConstructible`
1732
+ * and `NothrowAssignable`, Basic exception guarantee otherwise.
1733
+ *
1734
+ * **Complexity**: Linear in the size of `*this` and `n`.
1735
+ *
1736
+ * [CopyInsertable]: http://en.cppreference.com/w/cpp/concept/CopyInsertable
1737
+ * [CopyAssignable]: http://en.cppreference.com/w/cpp/concept/CopyAssignable
1738
+ */
1739
+ iterator insert(const_iterator position, size_type n, const T& x)
1740
+ {
1741
+ cvalue_iterator first(x, n);
1742
+ cvalue_iterator last = first + n;
1743
+ return insert_range(position, first, last);
1744
+ }
1745
+
1746
+ /**
1747
+ * **Effects**: Copy constructs elements before the element pointed by position
1748
+ * using each element in the rage pointed by `first` and `last` as constructor arguments.
1749
+ * Invalidates iterators if reallocation is needed.
1750
+ *
1751
+ * **Requires**: `T` shall be [EmplaceConstructible] into `*this` from `*first`. If the specified iterator
1752
+ * does not meet the forward iterator requirements, `T` shall also be [MoveInsertable] into `*this`
1753
+ * and [MoveAssignable].
1754
+ *
1755
+ * **Precondition**: `first` and `last` are not iterators into `*this`.
1756
+ *
1757
+ * **Returns**: Iterator pointing to the first inserted element, or `position`, if `first == last`.
1758
+ *
1759
+ * **Complexity**: Linear in the size of `*this` and `N` (where `N` is the distance between `first` and `last`).
1760
+ * Makes only `N` calls to the constructor of `T` and no reallocations if iterators `first` and `last`
1761
+ * are of forward, bidirectional, or random access categories. It makes 2N calls to the copy constructor of `T`
1762
+ * and allocates memory twice at most if they are just input iterators.
1763
+ *
1764
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowConstructible`
1765
+ * and `NothrowAssignable`, Basic exception guarantee otherwise.
1766
+ *
1767
+ * **Remarks**: Each iterator in the range `[first,last)` shall be dereferenced exactly once,
1768
+ * unless an exception is thrown.
1769
+ *
1770
+ * [EmplaceConstructible]: http://en.cppreference.com/w/cpp/concept/EmplaceConstructible
1771
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1772
+ * [MoveAssignable]: http://en.cppreference.com/w/cpp/concept/MoveAssignable
1773
+ */
1774
+ template <class InputIterator>
1775
+ iterator insert(const_iterator position, InputIterator first, InputIterator last
1776
+ //Input iterators
1777
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
1778
+ < void
1779
+ BOOST_MOVE_I dtl::is_convertible<InputIterator BOOST_MOVE_I size_type>
1780
+ BOOST_MOVE_I dtl::is_not_input_iterator<InputIterator>
1781
+ >::type * = 0)
1782
+ )
1783
+ {
1784
+ if (position == end())
1785
+ {
1786
+ size_type insert_index = size();
1787
+
1788
+ for (; first != last; ++first)
1789
+ {
1790
+ this->emplace_back(*first);
1791
+ }
1792
+
1793
+ return begin() + insert_index;
1794
+ }
1795
+ else
1796
+ {
1797
+ const size_type insert_index = static_cast<size_type>(position - this->cbegin());
1798
+ const size_type old_size = static_cast<size_type>(this->size());
1799
+
1800
+ for (; first != last; ++first) {
1801
+ this->emplace_back(*first);
1802
+ }
1803
+ iterator rit (this->begin() + insert_index);
1804
+ boost::movelib::rotate_gcd(rit, this->begin() + old_size, this->begin() + this->size());
1805
+ return rit;
1806
+ }
1807
+ }
1808
+
1809
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1810
+
1811
+ template <class ForwardIterator>
1812
+ iterator insert(const_iterator position, ForwardIterator first, ForwardIterator last
1813
+ //Other iterators
1814
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
1815
+ < void
1816
+ BOOST_MOVE_I dtl::is_convertible<ForwardIterator BOOST_MOVE_I size_type>
1817
+ BOOST_MOVE_I dtl::is_input_iterator<ForwardIterator>
1818
+ >::type * = 0)
1819
+ )
1820
+ {
1821
+ return insert_range(position, first, last);
1822
+ }
1823
+
1824
+ #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
1825
+
1826
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1827
+ /** **Equivalent to**: `insert(position, il.begin(), il.end())` */
1828
+ iterator insert(const_iterator position, std::initializer_list<T> il)
1829
+ {
1830
+ return insert_range(position, il.begin(), il.end());
1831
+ }
1832
+ #endif
1833
+
1834
+ /**
1835
+ * [MoveAssignable]: http://en.cppreference.com/w/cpp/concept/MoveAssignable
1836
+ *
1837
+ * **Effects**: Destroys the element pointed by `position` and removes it from the devector.
1838
+ * Invalidates iterators.
1839
+ *
1840
+ * **Requires**: `T` shall be [MoveAssignable].
1841
+ *
1842
+ * **Precondition**: `position` must be in the range of `[begin(), end())`.
1843
+ *
1844
+ * **Returns**: Iterator pointing to the element immediately following the erased element
1845
+ * prior to its erasure. If no such element exists, `end()` is returned.
1846
+ *
1847
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowAssignable`,
1848
+ * Basic exception guarantee otherwise.
1849
+ *
1850
+ * **Complexity**: Linear in half the size of `*this`.
1851
+ */
1852
+ iterator erase(const_iterator position)
1853
+ {
1854
+ return erase(position, position + 1);
1855
+ }
1856
+
1857
+ /**
1858
+ * [MoveAssignable]: http://en.cppreference.com/w/cpp/concept/MoveAssignable
1859
+ *
1860
+ * **Effects**: Destroys the range `[first,last)` and removes it from the devector.
1861
+ * Invalidates iterators.
1862
+ *
1863
+ * **Requires**: `T` shall be [MoveAssignable].
1864
+ *
1865
+ * **Precondition**: `[first,last)` must be in the range of `[begin(), end())`.
1866
+ *
1867
+ * **Returns**: Iterator pointing to the element pointed to by `last` prior to any elements
1868
+ * being erased. If no such element exists, `end()` is returned.
1869
+ *
1870
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowAssignable`,
1871
+ * Basic exception guarantee otherwise.
1872
+ *
1873
+ * **Complexity**: Linear in half the size of `*this`
1874
+ * plus the distance between `first` and `last`.
1875
+ */
1876
+ iterator erase(const_iterator first, const_iterator last)
1877
+ {
1878
+ iterator nc_first = begin() + (first - begin());
1879
+ iterator nc_last = begin() + (last - begin());
1880
+ return erase(nc_first, nc_last);
1881
+ }
1882
+
1883
+ /**
1884
+ * [MoveAssignable]: http://en.cppreference.com/w/cpp/concept/MoveAssignable
1885
+ *
1886
+ * **Effects**: Destroys the range `[first,last)` and removes it from the devector.
1887
+ * Invalidates iterators.
1888
+ *
1889
+ * **Requires**: `T` shall be [MoveAssignable].
1890
+ *
1891
+ * **Precondition**: `[first,last)` must be in the range of `[begin(), end())`.
1892
+ *
1893
+ * **Returns**: Iterator pointing to the element pointed to by `last` prior to any elements
1894
+ * being erased. If no such element exists, `end()` is returned.
1895
+ *
1896
+ * **Exceptions**: Strong exception guarantee if `T` is `NothrowAssignable`,
1897
+ * Basic exception guarantee otherwise.
1898
+ *
1899
+ * **Complexity**: Linear in half the size of `*this`.
1900
+ */
1901
+ iterator erase(iterator first, iterator last)
1902
+ {
1903
+ size_type front_distance = last - begin();
1904
+ size_type back_distance = end() - first;
1905
+ size_type n = boost::container::iterator_distance(first, last);
1906
+
1907
+ if (front_distance < back_distance)
1908
+ {
1909
+ // move n to the right
1910
+ boost::container::move_backward(begin(), first, last);
1911
+
1912
+ for (iterator i = begin(); i != begin() + n; ++i)
1913
+ {
1914
+ allocator_traits_type::destroy(get_allocator_ref(), i);
1915
+ }
1916
+ //n is always less than max stored_size_type
1917
+ m_.set_front_idx(m_.front_idx + n);
1918
+
1919
+ BOOST_ASSERT(invariants_ok());
1920
+ return last;
1921
+ }
1922
+ else {
1923
+ // move n to the left
1924
+ boost::container::move(last, end(), first);
1925
+
1926
+ for (iterator i = end() - n; i != end(); ++i)
1927
+ {
1928
+ allocator_traits_type::destroy(get_allocator_ref(), i);
1929
+ }
1930
+ //n is always less than max stored_size_type
1931
+ m_.set_back_idx(m_.back_idx - n);
1932
+
1933
+ BOOST_ASSERT(invariants_ok());
1934
+ return first;
1935
+ }
1936
+ }
1937
+
1938
+ /**
1939
+ * [MoveInsertable]: http://en.cppreference.com/w/cpp/concept/MoveInsertable
1940
+ *
1941
+ * **Effects**: exchanges the contents of `*this` and `b`.
1942
+ *
1943
+ * **Requires**: instances of `T` must be swappable by unqualified call of `swap`
1944
+ * and `T` must be [MoveInsertable] into `*this`.
1945
+ *
1946
+ * **Precondition**: The allocators should allow propagation or should compare equal.
1947
+ *
1948
+ * **Exceptions**: Basic exceptions guarantee if not `noexcept`.
1949
+ *
1950
+ * **Complexity**: Constant.
1951
+ */
1952
+ void swap(devector& b)
1953
+ BOOST_NOEXCEPT_IF( allocator_traits_type::propagate_on_container_swap::value
1954
+ || allocator_traits_type::is_always_equal::value)
1955
+ {
1956
+ BOOST_CONSTEXPR_OR_CONST bool propagate_alloc = allocator_traits_type::propagate_on_container_swap::value;
1957
+ BOOST_ASSERT(propagate_alloc || get_allocator_ref() == b.get_allocator_ref()); // else it's undefined behavior
1958
+
1959
+ swap_big_big(*this, b);
1960
+
1961
+ // swap indices
1962
+ boost::adl_move_swap(m_.front_idx, b.m_.front_idx);
1963
+ boost::adl_move_swap(m_.back_idx, b.m_.back_idx);
1964
+
1965
+ //And now swap the allocator
1966
+ dtl::swap_alloc(this->get_allocator_ref(), b.get_allocator_ref(), dtl::bool_<propagate_alloc>());
1967
+
1968
+ BOOST_ASSERT( invariants_ok());
1969
+ BOOST_ASSERT(b.invariants_ok());
1970
+ }
1971
+
1972
+ /**
1973
+ * **Effects**: Destroys all elements in the devector.
1974
+ * Invalidates all references, pointers and iterators to the
1975
+ * elements of the devector.
1976
+ *
1977
+ * **Postcondition**: `empty() && front_free_capacity() == 0
1978
+ * && back_free_capacity() == old capacity`.
1979
+ *
1980
+ * **Complexity**: Linear in the size of `*this`.
1981
+ *
1982
+ * **Remarks**: Does not free memory.
1983
+ */
1984
+ void clear() BOOST_NOEXCEPT
1985
+ {
1986
+ destroy_elements(begin(), end());
1987
+ m_.front_idx = m_.back_idx = 0;
1988
+ }
1989
+
1990
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1991
+ friend bool operator==(const devector& x, const devector& y)
1992
+ { return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); }
1993
+
1994
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1995
+ friend bool operator!=(const devector& x, const devector& y)
1996
+ { return !(x == y); }
1997
+
1998
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
1999
+ friend bool operator< (const devector& x, const devector& y)
2000
+ { return boost::container::algo_lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
2001
+
2002
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2003
+ friend bool operator>(const devector& x, const devector& y)
2004
+ { return y < x; }
2005
+
2006
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2007
+ friend bool operator<=(const devector& x, const devector& y)
2008
+ { return !(y < x); }
2009
+
2010
+ BOOST_CONTAINER_ATTRIBUTE_NODISCARD BOOST_CONTAINER_FORCEINLINE
2011
+ friend bool operator>=(const devector& x, const devector& y)
2012
+ { return !(x < y); }
2013
+
2014
+ BOOST_CONTAINER_FORCEINLINE friend void swap(devector& x, devector& y)
2015
+ BOOST_NOEXCEPT_IF( allocator_traits_type::propagate_on_container_swap::value
2016
+ || allocator_traits_type::is_always_equal::value)
2017
+ { x.swap(y); }
2018
+
2019
+ private:
2020
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
2021
+
2022
+ BOOST_CONTAINER_FORCEINLINE T* raw_begin() BOOST_NOEXCEPT
2023
+ { return boost::movelib::to_raw_pointer(m_.buffer) + m_.front_idx; }
2024
+
2025
+ BOOST_CONTAINER_FORCEINLINE T* raw_end() BOOST_NOEXCEPT
2026
+ { return boost::movelib::to_raw_pointer(m_.buffer) + m_.back_idx; }
2027
+
2028
+
2029
+ template <class U>
2030
+ BOOST_CONTAINER_FORCEINLINE void priv_push_front(BOOST_FWD_REF(U) u)
2031
+ {
2032
+ this->emplace_front(boost::forward<U>(u));
2033
+ }
2034
+
2035
+ template <class U>
2036
+ BOOST_CONTAINER_FORCEINLINE void priv_push_back(BOOST_FWD_REF(U) u)
2037
+ {
2038
+ this->emplace_back(boost::forward<U>(u));
2039
+ }
2040
+
2041
+ template <class U>
2042
+ BOOST_CONTAINER_FORCEINLINE iterator priv_insert(const_iterator pos, BOOST_FWD_REF(U) u)
2043
+ {
2044
+ return this->emplace(pos, boost::forward<U>(u));
2045
+ }
2046
+
2047
+ // allocator_type wrappers
2048
+
2049
+ BOOST_CONTAINER_FORCEINLINE allocator_type& get_allocator_ref() BOOST_NOEXCEPT
2050
+ {
2051
+ return static_cast<allocator_type&>(m_);
2052
+ }
2053
+
2054
+ BOOST_CONTAINER_FORCEINLINE const allocator_type& get_allocator_ref() const BOOST_NOEXCEPT
2055
+ {
2056
+ return static_cast<const allocator_type&>(m_);
2057
+ }
2058
+
2059
+ pointer allocate(size_type capacity)
2060
+ {
2061
+ //First detect overflow on smaller stored_size_types
2062
+ if (capacity > stored_size_type(-1)){
2063
+ boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
2064
+ }
2065
+ //(clamp_by_stored_size_type<size_type>)(prefer_in_recvd_out_size, stored_size_type());
2066
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2067
+ ++m_.capacity_alloc_count;
2068
+ #endif // BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2069
+ return allocator_traits_type::allocate(get_allocator_ref(), capacity);
2070
+ }
2071
+
2072
+ void destroy_elements(pointer begin, pointer end)
2073
+ {
2074
+ for (; begin != end; ++begin)
2075
+ {
2076
+ allocator_traits_type::destroy(get_allocator_ref(), begin);
2077
+ }
2078
+ }
2079
+
2080
+ void deallocate_buffer()
2081
+ {
2082
+ if (m_.buffer)
2083
+ {
2084
+ allocator_traits_type::deallocate(get_allocator_ref(), m_.buffer, m_.capacity);
2085
+ }
2086
+ }
2087
+
2088
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2089
+ template <typename... Args>
2090
+ BOOST_CONTAINER_FORCEINLINE void alloc_construct(pointer dst, Args&&... args)
2091
+ {
2092
+ allocator_traits_type::construct(
2093
+ get_allocator_ref(),
2094
+ dst,
2095
+ boost::forward<Args>(args)...
2096
+ );
2097
+ }
2098
+
2099
+ template <typename... Args>
2100
+ void construct_n(pointer buffer, size_type n, Args&&... args)
2101
+ {
2102
+ detail::construction_guard<allocator_type> ctr_guard(buffer, get_allocator_ref());
2103
+ guarded_construct_n(buffer, n, ctr_guard, boost::forward<Args>(args)...);
2104
+ ctr_guard.release();
2105
+ }
2106
+
2107
+ template <typename... Args>
2108
+ void guarded_construct_n(pointer buffer, size_type n, detail::construction_guard<allocator_type>& ctr_guard, Args&&... args)
2109
+ {
2110
+ for (size_type i = 0; i < n; ++i) {
2111
+ this->alloc_construct(buffer + i, boost::forward<Args>(args)...);
2112
+ ctr_guard.extend();
2113
+ }
2114
+ }
2115
+
2116
+ #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2117
+
2118
+ #define BOOST_CONTAINER_DEVECTOR_ALLOC_CONSTRUCT(N) \
2119
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2120
+ BOOST_CONTAINER_FORCEINLINE void alloc_construct(pointer dst BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2121
+ {\
2122
+ allocator_traits_type::construct(\
2123
+ get_allocator_ref(), dst BOOST_MOVE_I##N BOOST_MOVE_FWD##N );\
2124
+ }\
2125
+ \
2126
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2127
+ void construct_n(pointer buffer, size_type n BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2128
+ {\
2129
+ detail::construction_guard<allocator_type> ctr_guard(buffer, get_allocator_ref());\
2130
+ guarded_construct_n(buffer, n, ctr_guard BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2131
+ ctr_guard.release();\
2132
+ }\
2133
+ \
2134
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2135
+ void guarded_construct_n(pointer buffer, size_type n, detail::construction_guard<allocator_type>& ctr_guard BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2136
+ {\
2137
+ for (size_type i = 0; i < n; ++i) {\
2138
+ this->alloc_construct(buffer + i BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2139
+ ctr_guard.extend();\
2140
+ }\
2141
+ }
2142
+ //
2143
+ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_ALLOC_CONSTRUCT)
2144
+ #undef BOOST_CONTAINER_DEVECTOR_ALLOC_CONSTRUCT
2145
+
2146
+ #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2147
+
2148
+ BOOST_CONTAINER_FORCEINLINE size_type front_capacity() const
2149
+ {
2150
+ return m_.back_idx;
2151
+ }
2152
+
2153
+ BOOST_CONTAINER_FORCEINLINE size_type back_capacity() const
2154
+ {
2155
+ return m_.capacity - m_.front_idx;
2156
+ }
2157
+
2158
+ size_type calculate_new_capacity(size_type requested_capacity)
2159
+ {
2160
+ size_type max = allocator_traits_type::max_size(this->get_allocator_ref());
2161
+ (clamp_by_stored_size_type)(max, stored_size_type());
2162
+ const size_type remaining_additional_cap = max - size_type(m_.capacity);
2163
+ const size_type min_additional_cap = requested_capacity - size_type(m_.capacity);
2164
+ if ( remaining_additional_cap < min_additional_cap )
2165
+ boost::container::throw_length_error("devector: get_next_capacity, max size exceeded");
2166
+
2167
+ return growth_factor_type()( size_type(m_.capacity), min_additional_cap, max);
2168
+ }
2169
+
2170
+ void buffer_move_or_copy(pointer dst)
2171
+ {
2172
+ detail::construction_guard<allocator_type> guard(dst, get_allocator_ref());
2173
+
2174
+ buffer_move_or_copy(dst, guard);
2175
+
2176
+ guard.release();
2177
+ }
2178
+
2179
+ void buffer_move_or_copy(pointer dst, detail::construction_guard<allocator_type>& guard)
2180
+ {
2181
+ opt_move_or_copy(begin(), end(), dst, guard);
2182
+
2183
+ destroy_elements(data(), data() + size());
2184
+ deallocate_buffer();
2185
+ }
2186
+
2187
+ void opt_move_or_copy(pointer begin, pointer end, pointer dst)
2188
+ {
2189
+ typedef typename dtl::if_c
2190
+ < boost::move_detail::is_nothrow_copy_constructible<T>::value || boost::is_nothrow_move_constructible<T>::value
2191
+ , detail::null_construction_guard
2192
+ , detail::construction_guard<allocator_type>
2193
+ >::type guard_t;
2194
+
2195
+ guard_t guard(dst, get_allocator_ref());
2196
+
2197
+ opt_move_or_copy(begin, end, dst, guard);
2198
+
2199
+ guard.release();
2200
+ }
2201
+
2202
+ template <typename Guard>
2203
+ void opt_move_or_copy(pointer begin, pointer end, pointer dst, Guard& guard)
2204
+ {
2205
+ // if trivial copy and default allocator, memcpy
2206
+ boost::container::uninitialized_move_alloc(get_allocator_ref(), begin, end, dst);
2207
+ guard.extend();
2208
+ }
2209
+
2210
+ template <typename Iterator>
2211
+ void opt_copy(Iterator begin, Iterator end, pointer dst)
2212
+ {
2213
+ typedef typename dtl::if_c
2214
+ < boost::move_detail::is_nothrow_copy_constructible<T>::value
2215
+ , detail::null_construction_guard
2216
+ , detail::construction_guard<allocator_type>
2217
+ >::type guard_t;
2218
+
2219
+ guard_t guard(dst, get_allocator_ref());
2220
+
2221
+ opt_copy(begin, end, dst, guard);
2222
+
2223
+ guard.release();
2224
+ }
2225
+
2226
+ template <typename Iterator, typename Guard>
2227
+ void opt_copy(Iterator begin, Iterator end, pointer dst, Guard& guard)
2228
+ {
2229
+ while (begin != end)
2230
+ {
2231
+ this->alloc_construct(dst++, *begin++);
2232
+ guard.extend();
2233
+ }
2234
+ }
2235
+
2236
+ template <typename Guard>
2237
+ void opt_copy(const_pointer begin, const_pointer end, pointer dst, Guard& guard)
2238
+ {
2239
+ // if trivial copy and default allocator, memcpy
2240
+ boost::container::uninitialized_copy_alloc(get_allocator_ref(), begin, end, dst);
2241
+ guard.extend();
2242
+ }
2243
+
2244
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2245
+
2246
+ template <typename... Args>
2247
+ void resize_front_impl(size_type sz , Args&&... args)
2248
+ {
2249
+ if (sz > size())
2250
+ {
2251
+ const size_type n = sz - size();
2252
+
2253
+ if (sz <= front_capacity())
2254
+ {
2255
+ construct_n(m_.buffer + m_.front_idx - n, n, boost::forward<Args>(args)...);
2256
+ m_.set_front_idx(m_.front_idx - n);
2257
+ }
2258
+ else
2259
+ {
2260
+ resize_front_slow_path(sz, n, boost::forward<Args>(args)...);
2261
+ }
2262
+ }
2263
+ else {
2264
+ while (this->size() > sz)
2265
+ {
2266
+ this->pop_front();
2267
+ }
2268
+ }
2269
+ }
2270
+
2271
+ template <typename... Args>
2272
+ void resize_front_slow_path(size_type sz, size_type n, Args&&... args)
2273
+ {
2274
+ const size_type new_capacity = calculate_new_capacity(sz + back_free_capacity());
2275
+ pointer new_buffer = allocate(new_capacity);
2276
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2277
+
2278
+ const size_type new_old_elem_index = new_capacity - size();
2279
+ const size_type new_elem_index = new_old_elem_index - n;
2280
+
2281
+ detail::construction_guard<allocator_type> guard(new_buffer + new_elem_index, get_allocator_ref());
2282
+ guarded_construct_n(new_buffer + new_elem_index, n, guard, boost::forward<Args>(args)...);
2283
+
2284
+ buffer_move_or_copy(new_buffer + new_old_elem_index, guard);
2285
+
2286
+ guard.release();
2287
+ new_buffer_guard.release();
2288
+
2289
+ m_.buffer = new_buffer;
2290
+ m_.set_capacity(new_capacity);
2291
+ m_.set_back_idx(new_old_elem_index + m_.back_idx - m_.front_idx);
2292
+ m_.set_front_idx(new_elem_index);
2293
+ }
2294
+
2295
+ template <typename... Args>
2296
+ void resize_back_impl(size_type sz, Args&&... args)
2297
+ {
2298
+ if (sz > size())
2299
+ {
2300
+ const size_type n = sz - size();
2301
+
2302
+ if (sz <= back_capacity())
2303
+ {
2304
+ construct_n(m_.buffer + m_.back_idx, n, boost::forward<Args>(args)...);
2305
+ m_.set_back_idx(m_.back_idx + n);
2306
+ }
2307
+ else
2308
+ {
2309
+ resize_back_slow_path(sz, n, boost::forward<Args>(args)...);
2310
+ }
2311
+ }
2312
+ else
2313
+ {
2314
+ while (size() > sz)
2315
+ {
2316
+ pop_back();
2317
+ }
2318
+ }
2319
+ }
2320
+
2321
+ template <typename... Args>
2322
+ void resize_back_slow_path(size_type sz, size_type n, Args&&... args)
2323
+ {
2324
+ const size_type new_capacity = calculate_new_capacity(sz + front_free_capacity());
2325
+ pointer new_buffer = allocate(new_capacity);
2326
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2327
+
2328
+ detail::construction_guard<allocator_type> guard(new_buffer + m_.back_idx, get_allocator_ref());
2329
+ guarded_construct_n(new_buffer + m_.back_idx, n, guard, boost::forward<Args>(args)...);
2330
+
2331
+ buffer_move_or_copy(new_buffer + m_.front_idx);
2332
+
2333
+ guard.release();
2334
+ new_buffer_guard.release();
2335
+
2336
+ m_.buffer = new_buffer;
2337
+ m_.set_capacity(new_capacity);
2338
+ m_.set_back_idx(m_.back_idx + n);
2339
+ }
2340
+
2341
+ template <typename... Args>
2342
+ iterator emplace_slow_path(size_type new_elem_index, Args&&... args)
2343
+ {
2344
+ pointer position = begin() + new_elem_index;
2345
+
2346
+ // prefer moving front to access memory forward if there are less elems to move
2347
+ bool prefer_move_front = new_elem_index <= size()/2;
2348
+
2349
+ if (front_free_capacity() && (!back_free_capacity() || prefer_move_front))
2350
+ {
2351
+ BOOST_ASSERT(size() >= 1);
2352
+
2353
+ // move things closer to the front a bit
2354
+
2355
+ // avoid invalidating any reference in args later
2356
+ T tmp(boost::forward<Args>(args)...);
2357
+
2358
+ // construct at front - 1 from front (no guard)
2359
+ this->alloc_construct(begin() - 1, boost::move(*begin()));
2360
+
2361
+ // move front half left
2362
+ boost::move(begin() + 1, position, begin());
2363
+ --m_.front_idx;
2364
+
2365
+ // move assign new elem before pos
2366
+ --position;
2367
+ *position = boost::move(tmp);
2368
+
2369
+ return position;
2370
+ }
2371
+ else if (back_free_capacity()) {
2372
+ BOOST_ASSERT(size() >= 1);
2373
+
2374
+ // move things closer to the end a bit
2375
+
2376
+ // avoid invalidating any reference in args later
2377
+ T tmp(boost::forward<Args>(args)...);
2378
+
2379
+ // construct at back + 1 from back (no guard)
2380
+ this->alloc_construct(end(), boost::move(back()));
2381
+
2382
+ // move back half right
2383
+ boost::container::move_backward(position, end() - 1, end());
2384
+ ++m_.back_idx;
2385
+
2386
+ // move assign new elem to pos
2387
+ *position = boost::move(tmp);
2388
+
2389
+ return position;
2390
+ }
2391
+ else
2392
+ {
2393
+ return emplace_reallocating_slow_path(prefer_move_front, new_elem_index, boost::forward<Args>(args)...);
2394
+ }
2395
+ }
2396
+
2397
+ template <typename... Args>
2398
+ pointer emplace_reallocating_slow_path(bool make_front_free, size_type new_elem_index, Args&&... args)
2399
+ {
2400
+ // reallocate
2401
+ size_type new_capacity = calculate_new_capacity(capacity() + 1);
2402
+ pointer new_buffer = allocate(new_capacity);
2403
+
2404
+ // guard allocation
2405
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2406
+
2407
+ size_type new_front_index = (make_front_free)
2408
+ ? new_capacity - back_free_capacity() - size() - 1
2409
+ : m_.front_idx;
2410
+
2411
+ iterator new_begin = new_buffer + new_front_index;
2412
+ iterator new_position = new_begin + new_elem_index;
2413
+ iterator old_position = begin() + new_elem_index;
2414
+
2415
+ // construct new element (and guard it)
2416
+ this->alloc_construct(new_position, boost::forward<Args>(args)...);
2417
+
2418
+ detail::construction_guard<allocator_type> second_half_guard(new_position, get_allocator_ref());
2419
+ second_half_guard.extend();
2420
+
2421
+ // move front-pos (possibly guarded)
2422
+ detail::construction_guard<allocator_type> first_half_guard(new_begin, get_allocator_ref());
2423
+ opt_move_or_copy(begin(), old_position, new_begin, first_half_guard);
2424
+
2425
+ // move pos+1-end (possibly guarded)
2426
+ opt_move_or_copy(old_position, end(), new_position + 1, second_half_guard);
2427
+
2428
+ // cleanup
2429
+ destroy_elements(begin(), end());
2430
+ deallocate_buffer();
2431
+
2432
+ // release alloc and other guards
2433
+ second_half_guard.release();
2434
+ first_half_guard.release();
2435
+ new_buffer_guard.release();
2436
+
2437
+ // rebind members
2438
+ m_.set_capacity(new_capacity);
2439
+ m_.buffer = new_buffer;
2440
+ m_.set_back_idx(new_front_index + size() + 1);
2441
+ m_.set_front_idx(new_front_index);
2442
+
2443
+ return new_position;
2444
+ }
2445
+
2446
+ #else //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2447
+
2448
+ #define BOOST_CONTAINER_DEVECTOR_SLOW_PATH(N) \
2449
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2450
+ void resize_front_impl(size_type sz BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2451
+ {\
2452
+ if (sz > size())\
2453
+ {\
2454
+ const size_type n = sz - size();\
2455
+ if (sz <= front_capacity()){\
2456
+ construct_n(m_.buffer + m_.front_idx - n, n BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2457
+ m_.set_front_idx(m_.front_idx - n);\
2458
+ }\
2459
+ else\
2460
+ {\
2461
+ resize_front_slow_path(sz, n BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2462
+ }\
2463
+ }\
2464
+ else {\
2465
+ while (this->size() > sz)\
2466
+ {\
2467
+ this->pop_front();\
2468
+ }\
2469
+ }\
2470
+ }\
2471
+ \
2472
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2473
+ void resize_front_slow_path(size_type sz, size_type n BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2474
+ {\
2475
+ const size_type new_capacity = calculate_new_capacity(sz + back_free_capacity());\
2476
+ pointer new_buffer = allocate(new_capacity);\
2477
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());\
2478
+ \
2479
+ const size_type new_old_elem_index = new_capacity - size();\
2480
+ const size_type new_elem_index = new_old_elem_index - n;\
2481
+ \
2482
+ detail::construction_guard<allocator_type> guard(new_buffer + new_elem_index, get_allocator_ref());\
2483
+ guarded_construct_n(new_buffer + new_elem_index, n, guard BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2484
+ \
2485
+ buffer_move_or_copy(new_buffer + new_old_elem_index, guard);\
2486
+ \
2487
+ guard.release();\
2488
+ new_buffer_guard.release();\
2489
+ m_.buffer = new_buffer;\
2490
+ m_.set_capacity(new_capacity);\
2491
+ m_.set_back_idx(new_old_elem_index + m_.back_idx - m_.front_idx);\
2492
+ m_.set_front_idx(new_elem_index);\
2493
+ }\
2494
+ \
2495
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2496
+ void resize_back_impl(size_type sz BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2497
+ {\
2498
+ if (sz > size())\
2499
+ {\
2500
+ const size_type n = sz - size();\
2501
+ \
2502
+ if (sz <= back_capacity())\
2503
+ {\
2504
+ construct_n(m_.buffer + m_.back_idx, n BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2505
+ m_.set_back_idx(m_.back_idx + n);\
2506
+ }\
2507
+ else\
2508
+ {\
2509
+ resize_back_slow_path(sz, n BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2510
+ }\
2511
+ }\
2512
+ else\
2513
+ {\
2514
+ while (size() > sz)\
2515
+ {\
2516
+ pop_back();\
2517
+ }\
2518
+ }\
2519
+ }\
2520
+ \
2521
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2522
+ void resize_back_slow_path(size_type sz, size_type n BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2523
+ {\
2524
+ const size_type new_capacity = calculate_new_capacity(sz + front_free_capacity());\
2525
+ pointer new_buffer = allocate(new_capacity);\
2526
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());\
2527
+ \
2528
+ detail::construction_guard<allocator_type> guard(new_buffer + m_.back_idx, get_allocator_ref());\
2529
+ guarded_construct_n(new_buffer + m_.back_idx, n, guard BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2530
+ \
2531
+ buffer_move_or_copy(new_buffer + m_.front_idx);\
2532
+ \
2533
+ guard.release();\
2534
+ new_buffer_guard.release();\
2535
+ \
2536
+ m_.buffer = new_buffer;\
2537
+ m_.set_capacity(new_capacity);\
2538
+ m_.set_back_idx(m_.back_idx + n);\
2539
+ }\
2540
+ \
2541
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2542
+ iterator emplace_slow_path(size_type new_elem_index BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2543
+ {\
2544
+ pointer position = begin() + new_elem_index;\
2545
+ \
2546
+ bool prefer_move_front = new_elem_index <= size()/2;\
2547
+ \
2548
+ if (front_free_capacity() && (!back_free_capacity() || prefer_move_front))\
2549
+ {\
2550
+ BOOST_ASSERT(size() >= 1);\
2551
+ typename dtl::aligned_storage<sizeof(T), dtl::alignment_of<T>::value>::type v;\
2552
+ T *vp = reinterpret_cast<T *>(v.data);\
2553
+ allocator_traits_type::construct(get_stored_allocator(), vp BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2554
+ T &tmp = *vp;\
2555
+ dtl::value_destructor<allocator_type> on_exit(get_stored_allocator(), tmp); (void)on_exit;\
2556
+ \
2557
+ this->alloc_construct(begin() - 1, boost::move(*begin()));\
2558
+ boost::move(begin() + 1, position, begin());\
2559
+ --m_.front_idx;\
2560
+ --position;\
2561
+ *position = boost::move(tmp);\
2562
+ return position;\
2563
+ }\
2564
+ else if (back_free_capacity()) {\
2565
+ BOOST_ASSERT(size() >= 1);\
2566
+ typename dtl::aligned_storage<sizeof(T), dtl::alignment_of<T>::value>::type v;\
2567
+ T *vp = reinterpret_cast<T *>(v.data);\
2568
+ allocator_traits_type::construct(get_stored_allocator(), vp BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2569
+ T &tmp = *vp;\
2570
+ dtl::value_destructor<allocator_type> on_exit(get_stored_allocator(), tmp); (void)on_exit;\
2571
+ this->alloc_construct(end(), boost::move(back()));\
2572
+ boost::container::move_backward(position, end() - 1, end());\
2573
+ ++m_.back_idx;\
2574
+ *position = boost::move(tmp);\
2575
+ return position;\
2576
+ }\
2577
+ else {\
2578
+ return emplace_reallocating_slow_path(prefer_move_front, new_elem_index BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2579
+ }\
2580
+ }\
2581
+ \
2582
+ BOOST_MOVE_TMPL_LT##N BOOST_MOVE_CLASS##N BOOST_MOVE_GT##N \
2583
+ pointer emplace_reallocating_slow_path(bool make_front_free, size_type new_elem_index BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
2584
+ {\
2585
+ size_type new_capacity = calculate_new_capacity(capacity() + 1);\
2586
+ pointer new_buffer = allocate(new_capacity);\
2587
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());\
2588
+ size_type new_front_index = (make_front_free)\
2589
+ ? new_capacity - back_free_capacity() - size() - 1\
2590
+ : m_.front_idx;\
2591
+ iterator new_begin = new_buffer + new_front_index;\
2592
+ iterator new_position = new_begin + new_elem_index;\
2593
+ iterator old_position = begin() + new_elem_index;\
2594
+ this->alloc_construct(new_position BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
2595
+ detail::construction_guard<allocator_type> second_half_guard(new_position, get_allocator_ref());\
2596
+ second_half_guard.extend();\
2597
+ detail::construction_guard<allocator_type> first_half_guard(new_begin, get_allocator_ref());\
2598
+ opt_move_or_copy(begin(), old_position, new_begin, first_half_guard);\
2599
+ opt_move_or_copy(old_position, end(), new_position + 1, second_half_guard);\
2600
+ destroy_elements(begin(), end());\
2601
+ deallocate_buffer();\
2602
+ second_half_guard.release();\
2603
+ first_half_guard.release();\
2604
+ new_buffer_guard.release();\
2605
+ m_.set_capacity(new_capacity);\
2606
+ m_.buffer = new_buffer;\
2607
+ m_.set_back_idx(new_front_index + size() + 1);\
2608
+ m_.set_front_idx(new_front_index);\
2609
+ return new_position;\
2610
+ }\
2611
+ //
2612
+ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DEVECTOR_SLOW_PATH)
2613
+ #undef BOOST_CONTAINER_DEVECTOR_SLOW_PATH
2614
+
2615
+ #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
2616
+ /*
2617
+ void unsafe_uninitialized_grow_front(size_type n)
2618
+ {
2619
+ BOOST_ASSERT(n >= size());
2620
+
2621
+ size_type need = n - size();
2622
+
2623
+ if (need > front_free_capacity())
2624
+ {
2625
+ reallocate_at(n + back_free_capacity(), need);
2626
+ }
2627
+
2628
+ m_.set_front_idx(m_.front_idx - need);
2629
+ }
2630
+
2631
+ void unsafe_uninitialized_shrink_front(size_type n)
2632
+ {
2633
+ BOOST_ASSERT(n <= size());
2634
+
2635
+ size_type doesnt_need = size() - n;
2636
+ m_.set_front_idx(m_.front_idx + doesnt_need);
2637
+ }
2638
+
2639
+ void unsafe_uninitialized_grow_back(size_type n)
2640
+ {
2641
+ BOOST_ASSERT(n >= size());
2642
+
2643
+ size_type need = n - size();
2644
+
2645
+ if (need > back_free_capacity())
2646
+ {
2647
+ reallocate_at(n + front_free_capacity(), front_free_capacity());
2648
+ }
2649
+
2650
+ m_.set_back_idx(m_.back_idx + need);
2651
+ }
2652
+
2653
+ void unsafe_uninitialized_shrink_back(size_type n)
2654
+ {
2655
+ BOOST_ASSERT(n <= size());
2656
+
2657
+ size_type doesnt_need = size() - n;
2658
+ m_.set_back_idx(m_.back_idx - doesnt_need);
2659
+ }
2660
+ */
2661
+
2662
+ void reallocate_at(size_type new_capacity, size_type buffer_offset)
2663
+ {
2664
+ pointer new_buffer = allocate(new_capacity);
2665
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2666
+
2667
+ buffer_move_or_copy(new_buffer + buffer_offset);
2668
+
2669
+ new_buffer_guard.release();
2670
+
2671
+ m_.buffer = new_buffer;
2672
+ //Safe cast, allocate() will handle stored_size_type overflow
2673
+ m_.set_capacity(new_capacity);
2674
+ m_.set_back_idx(m_.back_idx - m_.front_idx + buffer_offset);
2675
+ m_.set_front_idx(buffer_offset);
2676
+
2677
+ BOOST_ASSERT(invariants_ok());
2678
+ }
2679
+
2680
+ template <typename ForwardIterator>
2681
+ iterator insert_range(const_iterator position, ForwardIterator first, ForwardIterator last)
2682
+ {
2683
+ size_type n = boost::container::iterator_distance(first, last);
2684
+
2685
+ if (position == end() && back_free_capacity() >= n) {// fast path
2686
+ iterator r(this->end());
2687
+ boost::container::uninitialized_copy_alloc(get_allocator_ref(), first, last, this->raw_end());
2688
+ m_.set_back_idx(m_.back_idx + n);
2689
+ return r;
2690
+ }
2691
+ else if (position == begin() && front_free_capacity() >= n) { // secondary fast path
2692
+ boost::container::uninitialized_copy_alloc(get_allocator_ref(), first, last, this->raw_begin() - n);
2693
+ m_.set_front_idx(m_.front_idx - n);
2694
+ return begin();
2695
+ }
2696
+ else {
2697
+ return insert_range_slow_path(position, first, last);
2698
+ }
2699
+ }
2700
+
2701
+ template <typename ForwardIterator>
2702
+ iterator insert_range_slow_path(const_iterator position, ForwardIterator first, ForwardIterator last)
2703
+ {
2704
+ size_type n = boost::container::iterator_distance(first, last);
2705
+ size_type index = position - begin();
2706
+
2707
+ if (front_free_capacity() + back_free_capacity() >= n) {
2708
+ // if we move enough, it can be done without reallocation
2709
+
2710
+ iterator middle = begin() + index;
2711
+ n -= insert_range_slow_path_near_front(middle, first, n);
2712
+
2713
+ if (n) {
2714
+ insert_range_slow_path_near_back(middle, first, n);
2715
+ }
2716
+
2717
+ BOOST_ASSERT(first == last);
2718
+ return begin() + index;
2719
+ }
2720
+ else {
2721
+ const bool prefer_move_front = 2 * index <= size();
2722
+ return insert_range_reallocating_slow_path(prefer_move_front, index, first, n);
2723
+ }
2724
+ }
2725
+
2726
+ template <typename Iterator>
2727
+ size_type insert_range_slow_path_near_front(iterator position, Iterator& first, size_type n)
2728
+ {
2729
+ size_type n_front = dtl::min_value(front_free_capacity(), n);
2730
+ iterator new_begin = begin() - n_front;
2731
+ iterator ctr_pos = new_begin;
2732
+ detail::construction_guard<allocator_type> ctr_guard(ctr_pos, get_allocator_ref());
2733
+
2734
+ while (ctr_pos != begin()) {
2735
+ this->alloc_construct(ctr_pos++, *(first++));
2736
+ ctr_guard.extend();
2737
+ }
2738
+
2739
+ boost::movelib::rotate_gcd(new_begin, ctr_pos, position);
2740
+ m_.set_front_idx(m_.front_idx - n_front);
2741
+
2742
+ ctr_guard.release();
2743
+
2744
+ BOOST_ASSERT(invariants_ok());
2745
+
2746
+ return n_front;
2747
+ }
2748
+
2749
+ template <typename Iterator>
2750
+ size_type insert_range_slow_path_near_back(iterator position, Iterator& first, size_type n)
2751
+ {
2752
+ const size_type n_back = dtl::min_value(back_free_capacity(), n);
2753
+ iterator ctr_pos = end();
2754
+
2755
+ detail::construction_guard<allocator_type> ctr_guard(ctr_pos, get_allocator_ref());
2756
+
2757
+ for (size_type i = 0; i < n_back; ++i) {
2758
+ this->alloc_construct(ctr_pos++, *first++);
2759
+ ctr_guard.extend();
2760
+ }
2761
+
2762
+ boost::movelib::rotate_gcd(position, end(), ctr_pos);
2763
+ m_.set_back_idx(m_.back_idx + n_back);
2764
+
2765
+ ctr_guard.release();
2766
+
2767
+ BOOST_ASSERT(invariants_ok());
2768
+
2769
+ return n_back;
2770
+ }
2771
+
2772
+ template <typename Iterator>
2773
+ iterator insert_range_reallocating_slow_path
2774
+ (bool make_front_free, size_type new_elem_index, Iterator elems, size_type n)
2775
+ {
2776
+ // reallocate
2777
+ const size_type new_capacity = calculate_new_capacity(capacity() + n);
2778
+ pointer new_buffer = allocate(new_capacity);
2779
+
2780
+ // guard allocation
2781
+ allocation_guard new_buffer_guard(new_buffer, new_capacity, get_allocator_ref());
2782
+
2783
+ const size_type new_front_index = (make_front_free)
2784
+ ? new_capacity - back_free_capacity() - size() - n
2785
+ : m_.front_idx;
2786
+
2787
+ const iterator new_begin = new_buffer + new_front_index;
2788
+ const iterator new_position = new_begin + new_elem_index;
2789
+ const iterator old_position = begin() + new_elem_index;
2790
+
2791
+ // construct new element (and guard it)
2792
+ iterator second_half_position = new_position;
2793
+ detail::construction_guard<allocator_type> second_half_guard(second_half_position, get_allocator_ref());
2794
+
2795
+ for (size_type i = 0; i < n; ++i) {
2796
+ this->alloc_construct(second_half_position++, *(elems++));
2797
+ second_half_guard.extend();
2798
+ }
2799
+
2800
+ // move front-pos (possibly guarded)
2801
+ detail::construction_guard<allocator_type> first_half_guard(new_begin, get_allocator_ref());
2802
+ opt_move_or_copy(begin(), old_position, new_begin, first_half_guard);
2803
+
2804
+ // move pos+1-end (possibly guarded)
2805
+ opt_move_or_copy(old_position, end(), second_half_position, second_half_guard);
2806
+
2807
+ // cleanup
2808
+ destroy_elements(begin(), end());
2809
+ deallocate_buffer();
2810
+
2811
+ // release alloc and other guards
2812
+ second_half_guard.release();
2813
+ first_half_guard.release();
2814
+ new_buffer_guard.release();
2815
+
2816
+ // rebind members
2817
+ m_.set_capacity(new_capacity);
2818
+ m_.buffer = new_buffer;
2819
+ m_.set_back_idx(new_front_index + size() + n);
2820
+ m_.set_front_idx(new_front_index);
2821
+
2822
+ return new_position;
2823
+ }
2824
+
2825
+ template <typename Iterator>
2826
+ void construct_from_range(Iterator begin, Iterator end)
2827
+ {
2828
+ allocation_guard buffer_guard(m_.buffer, m_.capacity, get_allocator_ref());
2829
+ opt_copy(begin, end, m_.buffer);
2830
+
2831
+ buffer_guard.release();
2832
+ }
2833
+
2834
+ template <typename ForwardIterator>
2835
+ void allocate_and_copy_range(ForwardIterator first, ForwardIterator last)
2836
+ {
2837
+ size_type n = boost::container::iterator_distance(first, last);
2838
+
2839
+ pointer new_buffer = n ? allocate(n) : pointer();
2840
+ allocation_guard new_buffer_guard(new_buffer, n, get_allocator_ref());
2841
+
2842
+ opt_copy(first, last, new_buffer);
2843
+
2844
+ destroy_elements(begin(), end());
2845
+ deallocate_buffer();
2846
+
2847
+ m_.set_capacity(n);
2848
+ m_.buffer = new_buffer;
2849
+ m_.front_idx = 0;
2850
+ m_.set_back_idx(n);
2851
+
2852
+ new_buffer_guard.release();
2853
+ }
2854
+
2855
+ static void swap_big_big(devector& a, devector& b) BOOST_NOEXCEPT
2856
+ {
2857
+ boost::adl_move_swap(a.m_.capacity, b.m_.capacity);
2858
+ boost::adl_move_swap(a.m_.buffer, b.m_.buffer);
2859
+ }
2860
+
2861
+ template <typename ForwardIterator>
2862
+ void overwrite_buffer_impl(ForwardIterator first, ForwardIterator last, dtl::true_)
2863
+ {
2864
+ const size_type n = boost::container::iterator_distance(first, last);
2865
+
2866
+ BOOST_ASSERT(capacity() >= n);
2867
+ boost::container::uninitialized_copy_alloc_n
2868
+ ( get_allocator_ref(), boost::movelib::iterator_to_raw_pointer(first)
2869
+ , n, boost::movelib::iterator_to_raw_pointer(m_.buffer));
2870
+ m_.front_idx = 0;
2871
+ m_.set_back_idx(n);
2872
+ }
2873
+
2874
+ template <typename InputIterator>
2875
+ InputIterator overwrite_buffer_impl(InputIterator first, InputIterator last, dtl::false_)
2876
+ {
2877
+ pointer pos = m_.buffer;
2878
+ detail::construction_guard<allocator_type> front_guard(pos, get_allocator_ref());
2879
+
2880
+ while (first != last && pos != begin()) {
2881
+ this->alloc_construct(pos++, *first++);
2882
+ front_guard.extend();
2883
+ }
2884
+
2885
+ while (first != last && pos != end()) {
2886
+ *pos++ = *first++;
2887
+ }
2888
+
2889
+ detail::construction_guard<allocator_type> back_guard(pos, get_allocator_ref());
2890
+
2891
+ iterator capacity_end = m_.buffer + capacity();
2892
+ while (first != last && pos != capacity_end) {
2893
+ this->alloc_construct(pos++, *first++);
2894
+ back_guard.extend();
2895
+ }
2896
+
2897
+ pointer destroy_after = dtl::min_value(dtl::max_value(begin(), pos), end());
2898
+ destroy_elements(destroy_after, end());
2899
+
2900
+ front_guard.release();
2901
+ back_guard.release();
2902
+
2903
+ m_.front_idx = 0;
2904
+ m_.set_back_idx(pos - begin());
2905
+ return first;
2906
+ }
2907
+
2908
+ template <typename ForwardIterator>
2909
+ BOOST_CONTAINER_FORCEINLINE void overwrite_buffer(ForwardIterator first, ForwardIterator last)
2910
+ {
2911
+ this->overwrite_buffer_impl(first, last,
2912
+ dtl::bool_<dtl::is_trivially_destructible<T>::value>());
2913
+ }
2914
+
2915
+ bool invariants_ok()
2916
+ {
2917
+ return (!m_.capacity || m_.buffer)
2918
+ && m_.front_idx <= m_.back_idx
2919
+ && m_.back_idx <= m_.capacity;
2920
+ }
2921
+
2922
+ struct impl : allocator_type
2923
+ {
2924
+ impl()
2925
+ : allocator_type(), buffer(), front_idx(), back_idx(), capacity()
2926
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2927
+ , capacity_alloc_count()
2928
+ #endif
2929
+ {}
2930
+
2931
+ explicit impl(const allocator_type &a)
2932
+ : allocator_type(a), buffer(), front_idx(), back_idx(), capacity()
2933
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2934
+ , capacity_alloc_count()
2935
+ #endif
2936
+ {}
2937
+
2938
+ impl(const allocator_type &a, pointer p, size_type f, size_type b, size_type c)
2939
+ : allocator_type(a), buffer(p)
2940
+ //static cast sizes, as the allocation function will take care of overflows
2941
+ , front_idx(static_cast<stored_size_type>(f))
2942
+ , back_idx(static_cast<stored_size_type>(b))
2943
+ , capacity(static_cast<stored_size_type>(c))
2944
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2945
+ , capacity_alloc_count()
2946
+ #endif
2947
+ {}
2948
+
2949
+ impl(BOOST_RV_REF(allocator_type) a, pointer p, size_type f, size_type b, size_type c)
2950
+ : allocator_type(boost::move(a)), buffer(p)
2951
+ //static cast sizes, as the allocation function will take care of overflows
2952
+ , front_idx(static_cast<stored_size_type>(f))
2953
+ , back_idx(static_cast<stored_size_type>(b))
2954
+ , capacity(static_cast<stored_size_type>(c))
2955
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2956
+ , capacity_alloc_count()
2957
+ #endif
2958
+ {}
2959
+
2960
+ void set_back_idx(size_type bi)
2961
+ { back_idx = static_cast<stored_size_type>(bi);}
2962
+
2963
+ void set_front_idx(size_type fi)
2964
+ { front_idx = static_cast<stored_size_type>(fi);}
2965
+
2966
+ void set_capacity(size_type c)
2967
+ { capacity = static_cast<stored_size_type>(c);}
2968
+
2969
+ pointer buffer;
2970
+ stored_size_type front_idx;
2971
+ stored_size_type back_idx;
2972
+ stored_size_type capacity;
2973
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2974
+ size_type capacity_alloc_count;
2975
+ #endif
2976
+ } m_;
2977
+
2978
+
2979
+ #ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2980
+ public:
2981
+ void reset_alloc_stats()
2982
+ {
2983
+ m_.capacity_alloc_count = 0;
2984
+ }
2985
+
2986
+ size_type get_alloc_count() const
2987
+ {
2988
+ return m_.capacity_alloc_count;
2989
+ }
2990
+
2991
+ #endif // ifdef BOOST_CONTAINER_DEVECTOR_ALLOC_STATS
2992
+
2993
+ #endif // ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
2994
+ };
2995
+
2996
+ }} // namespace boost::container
2997
+
2998
+ #include <boost/container/detail/config_end.hpp>
2999
+
3000
+ #endif // BOOST_CONTAINER_DEVECTOR_HPP