passenger 6.0.8 → 6.0.9

Sign up to get free protection for your applications and to get access to all the features.
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