passenger 5.3.3 → 5.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1070) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +8 -0
  3. data/build/support/cxx_dependency_map.rb +151 -83
  4. data/dev/configkit-schemas/index.json +3 -3
  5. data/src/agent/Core/AdminPanelConnector.h +5 -3
  6. data/src/agent/Core/ApplicationPool/Common.h +1 -2
  7. data/src/agent/Core/ApplicationPool/Context.h +1 -2
  8. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +2 -2
  9. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +2 -2
  10. data/src/agent/Core/Config.h +1 -1
  11. data/src/agent/Core/Controller.h +2 -1
  12. data/src/agent/Core/Controller/Config.h +6 -5
  13. data/src/agent/Core/Controller/Hooks.cpp +11 -0
  14. data/src/agent/Core/Controller/SendRequest.cpp +7 -7
  15. data/src/agent/Core/CoreMain.cpp +0 -2
  16. data/src/agent/Core/SpawningKit/Context.h +1 -3
  17. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +2 -2
  18. data/src/agent/Core/SpawningKit/Handshake/Perform.h +2 -2
  19. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +17 -38
  20. data/src/agent/Core/SpawningKit/PipeWatcher.h +5 -3
  21. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +13 -5
  22. data/src/agent/Shared/ApiServerUtils.h +2 -2
  23. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +33 -18
  24. data/src/agent/Watchdog/Config.h +1 -1
  25. data/src/agent/Watchdog/WatchdogMain.cpp +20 -20
  26. data/src/apache2_module/Config.cpp +7 -6
  27. data/src/cxx_supportlib/ConfigKit/Store.h +2 -2
  28. data/src/cxx_supportlib/Constants.h +1 -1
  29. data/src/cxx_supportlib/Exceptions.h +0 -1
  30. data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +3 -2
  31. data/src/cxx_supportlib/ResourceLocator.h +3 -21
  32. data/src/cxx_supportlib/SafeLibev.h +6 -6
  33. data/src/cxx_supportlib/ServerKit/Channel.h +2 -2
  34. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +3 -3
  35. data/src/cxx_supportlib/ServerKit/FileBufferedFdSinkChannel.h +2 -2
  36. data/src/cxx_supportlib/ServerKit/HttpServer.h +27 -15
  37. data/src/cxx_supportlib/ServerKit/Server.h +2 -2
  38. data/src/cxx_supportlib/SystemTools/README.md +1 -0
  39. data/src/cxx_supportlib/SystemTools/UserDatabase.cpp +222 -0
  40. data/src/cxx_supportlib/SystemTools/UserDatabase.h +151 -0
  41. data/src/cxx_supportlib/Utils.cpp +1 -113
  42. data/src/cxx_supportlib/Utils.h +1 -29
  43. data/src/cxx_supportlib/Utils/MessagePassing.h +3 -3
  44. data/src/cxx_supportlib/WatchdogLauncher.h +1 -2
  45. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/case_conv.hpp +6 -2
  46. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/find_iterator.hpp +1 -1
  47. data/src/cxx_supportlib/vendor-modified/boost/algorithm/string/detail/util.hpp +3 -2
  48. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +31 -1
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +133 -0
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +151 -0
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/async_result.hpp +149 -22
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +140 -49
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +145 -35
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_io_object.hpp +75 -41
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +139 -49
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +98 -45
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +42 -49
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +45 -38
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +349 -109
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +959 -108
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_iostream.hpp +198 -54
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_streambuf.hpp +424 -284
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +116 -47
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf.hpp +99 -16
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_streambuf_fwd.hpp +4 -1
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +235 -49
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +613 -0
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/buffer.hpp +1139 -1216
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream.hpp +27 -14
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_read_stream_fwd.hpp +1 -1
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream.hpp +26 -6
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_stream_fwd.hpp +1 -1
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream.hpp +27 -14
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/buffered_write_stream_fwd.hpp +1 -1
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/buffers_iterator.hpp +61 -21
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/completion_condition.hpp +1 -1
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/connect.hpp +462 -226
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/coroutine.hpp +7 -7
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/datagram_socket_service.hpp +94 -64
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer.hpp +1 -1
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/deadline_timer_service.hpp +20 -18
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +109 -0
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array.hpp +1 -1
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/array_fwd.hpp +1 -1
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/assert.hpp +1 -1
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/atomic_count.hpp +1 -1
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/base_from_completion_cond.hpp +1 -1
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +404 -77
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_resize_guard.hpp +1 -1
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffer_sequence_adapter.hpp +212 -51
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/buffered_stream_storage.hpp +1 -1
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/call_stack.hpp +2 -2
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono.hpp +68 -0
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/chrono_time_traits.hpp +1 -1
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/completion_handler.hpp +8 -6
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/concurrency_hint.hpp +94 -0
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_event.hpp +114 -0
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/conditionally_enabled_mutex.hpp +151 -0
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +398 -13
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/consuming_buffers.hpp +287 -165
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstddef.hpp +33 -0
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/cstdint.hpp +15 -1
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/date_time_fwd.hpp +1 -1
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/deadline_timer_service.hpp +65 -14
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dependent_type.hpp +1 -1
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_ops.hpp +5 -1
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_read_op.hpp +17 -8
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/descriptor_write_op.hpp +17 -8
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/dev_poll_reactor.hpp +27 -15
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/epoll_reactor.hpp +41 -17
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/event.hpp +1 -1
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/eventfd_select_interrupter.hpp +1 -1
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/executor_op.hpp +86 -0
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fd_set_adapter.hpp +1 -1
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/fenced_block.hpp +1 -1
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{function.hpp → functional.hpp} +10 -10
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_arm_fenced_block.hpp +3 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_hppa_fenced_block.hpp +3 -1
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_sync_fenced_block.hpp +3 -1
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/gcc_x86_fenced_block.hpp +3 -1
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/global.hpp +54 -0
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +158 -3
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_cont_helpers.hpp +2 -2
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_invoke_helpers.hpp +2 -2
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_tracking.hpp +90 -9
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_type_requirements.hpp +117 -39
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +97 -0
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/hash_map.hpp +1 -1
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/buffer_sequence_adapter.ipp +6 -6
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +24 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.hpp +17 -4
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/dev_poll_reactor.ipp +34 -18
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.hpp +17 -4
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/epoll_reactor.ipp +152 -51
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/eventfd_select_interrupter.ipp +1 -1
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +80 -27
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.hpp +19 -6
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/kqueue_reactor.ipp +93 -23
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/null_event.ipp +76 -0
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/pipe_select_interrupter.ipp +1 -1
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_event.ipp +13 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_mutex.ipp +1 -1
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_thread.ipp +11 -1
  144. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/posix_tss_ptr.ipp +1 -1
  145. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_descriptor_service.ipp +27 -13
  146. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_serial_port_service.ipp +7 -6
  147. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/reactive_socket_service_base.ipp +43 -10
  148. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/resolver_service_base.ipp +54 -30
  149. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/{task_io_service.ipp → scheduler.ipp} +167 -70
  150. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.hpp +17 -4
  151. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +46 -26
  152. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.hpp +36 -30
  153. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/service_registry.ipp +39 -30
  154. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/signal_set_service.ipp +43 -21
  155. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +129 -26
  156. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_select_interrupter.ipp +1 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +181 -0
  158. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.ipp +136 -0
  159. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.hpp +13 -13
  160. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_service.ipp +15 -14
  161. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/throw_error.ipp +1 -1
  162. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_ptime.ipp +12 -5
  163. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/timer_queue_set.ipp +1 -1
  164. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/io_control.hpp +1 -51
  165. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_buffer_sequence.hpp +241 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/is_executor.hpp +128 -0
  167. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/keyword_tss_ptr.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/kqueue_reactor.hpp +36 -14
  169. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/local_free_on_block_exit.hpp +1 -1
  170. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/macos_fenced_block.hpp +2 -1
  171. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +42 -1
  172. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/mutex.hpp +1 -1
  173. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/noncopyable.hpp +1 -1
  174. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_event.hpp +17 -5
  175. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_fenced_block.hpp +3 -1
  176. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_global.hpp +61 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_mutex.hpp +1 -1
  178. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_reactor.hpp +10 -9
  179. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_signal_blocker.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_socket_service.hpp +29 -19
  181. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_static_mutex.hpp +1 -1
  182. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_thread.hpp +7 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/null_tss_ptr.hpp +1 -1
  184. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/object_pool.hpp +26 -1
  185. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/old_win_sdk_compat.hpp +1 -1
  186. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/op_queue.hpp +7 -1
  187. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/operation.hpp +3 -3
  188. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pipe_select_interrupter.hpp +1 -1
  189. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/pop_options.hpp +5 -1
  190. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_event.hpp +37 -1
  191. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_fd_set_adapter.hpp +1 -1
  192. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_global.hpp +82 -0
  193. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_mutex.hpp +1 -1
  194. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_signal_blocker.hpp +1 -1
  195. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_static_mutex.hpp +1 -1
  196. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_thread.hpp +5 -1
  197. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/posix_tss_ptr.hpp +1 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/push_options.hpp +10 -1
  199. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_descriptor_service.hpp +86 -20
  200. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_null_buffers_op.hpp +9 -7
  201. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_serial_port_service.hpp +10 -8
  202. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_accept_op.hpp +101 -20
  203. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_connect_op.hpp +14 -7
  204. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recv_op.hpp +20 -8
  205. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvfrom_op.hpp +13 -8
  206. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_recvmsg_op.hpp +15 -8
  207. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_send_op.hpp +25 -11
  208. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_sendto_op.hpp +15 -8
  209. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service.hpp +99 -31
  210. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_socket_service_base.hpp +96 -35
  211. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactive_wait_op.hpp +92 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor.hpp +2 -2
  213. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_fwd.hpp +2 -2
  214. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op.hpp +7 -3
  215. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/reactor_op_queue.hpp +1 -1
  216. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/recycling_allocator.hpp +106 -0
  217. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/regex_fwd.hpp +1 -1
  218. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_endpoint_op.hpp +25 -24
  219. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_op.hpp +6 -92
  220. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolve_query_op.hpp +136 -0
  221. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service.hpp +38 -22
  222. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/resolver_service_base.hpp +30 -19
  223. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service.hpp → scheduler.hpp} +57 -45
  224. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service_operation.hpp → scheduler_operation.hpp} +19 -17
  225. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/{task_io_service_thread_info.hpp → scheduler_thread_info.hpp} +10 -10
  226. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_lock.hpp +1 -1
  227. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/scoped_ptr.hpp +9 -1
  228. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_interrupter.hpp +1 -1
  229. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/select_reactor.hpp +37 -18
  230. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/service_registry.hpp +54 -34
  231. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_blocker.hpp +1 -1
  232. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_handler.hpp +9 -5
  233. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_init.hpp +1 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_op.hpp +1 -1
  235. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/signal_set_service.hpp +14 -13
  236. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_holder.hpp +1 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_ops.hpp +9 -6
  238. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_option.hpp +1 -1
  239. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_select_interrupter.hpp +1 -1
  240. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/socket_types.hpp +10 -2
  241. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/solaris_fenced_block.hpp +2 -1
  242. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/static_mutex.hpp +1 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_event.hpp +1 -1
  244. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_fenced_block.hpp +1 -1
  245. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_global.hpp +72 -0
  246. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_mutex.hpp +1 -1
  247. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_static_mutex.hpp +1 -1
  248. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/std_thread.hpp +7 -1
  249. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_executor_service.hpp +144 -0
  250. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/strand_service.hpp +10 -10
  251. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/string_view.hpp +49 -0
  252. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread.hpp +9 -5
  253. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_context.hpp +44 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_group.hpp +91 -0
  255. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/thread_info_base.hpp +45 -15
  256. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_error.hpp +1 -1
  257. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/throw_exception.hpp +1 -1
  258. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue.hpp +29 -2
  259. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_base.hpp +1 -1
  260. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_ptime.hpp +11 -5
  261. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_queue_set.hpp +1 -1
  262. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler.hpp +2 -2
  263. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/timer_scheduler_fwd.hpp +2 -2
  264. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/tss_ptr.hpp +1 -1
  265. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/type_traits.hpp +29 -1
  266. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/variadic_templates.hpp +74 -18
  267. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_handler.hpp +8 -6
  268. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wait_op.hpp +1 -1
  269. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/winsock_init.hpp +1 -1
  270. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +74 -0
  271. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/wrapped_handler.hpp +1 -1
  272. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +110 -0
  273. data/src/cxx_supportlib/vendor-modified/boost/asio/error.hpp +17 -1
  274. data/src/cxx_supportlib/vendor-modified/boost/asio/execution_context.hpp +413 -0
  275. data/src/cxx_supportlib/vendor-modified/boost/asio/executor.hpp +343 -0
  276. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +172 -0
  277. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental.hpp +22 -0
  278. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_spawn.hpp +228 -0
  279. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detached.hpp +67 -0
  280. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_spawn.hpp +878 -0
  281. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/detached.hpp +93 -0
  282. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/redirect_error.hpp +296 -0
  283. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/redirect_error.hpp +69 -0
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/basic_endpoint.hpp +1 -1
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/datagram_protocol.hpp +1 -1
  286. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/endpoint.hpp +1 -1
  287. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/detail/impl/endpoint.ipp +3 -2
  288. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/raw_protocol.hpp +1 -1
  289. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/seq_packet_protocol.hpp +1 -1
  290. data/src/cxx_supportlib/vendor-modified/boost/asio/generic/stream_protocol.hpp +1 -1
  291. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_alloc_hook.hpp +1 -1
  292. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_continuation_hook.hpp +1 -1
  293. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_invoke_hook.hpp +4 -4
  294. data/src/cxx_supportlib/vendor-modified/boost/asio/handler_type.hpp +11 -73
  295. data/src/cxx_supportlib/vendor-modified/boost/asio/high_resolution_timer.hpp +4 -23
  296. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +86 -15
  297. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +92 -19
  298. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +549 -119
  299. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +79 -0
  300. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +80 -0
  301. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/error.ipp +1 -1
  302. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.hpp +109 -0
  303. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/execution_context.ipp +84 -0
  304. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.hpp +388 -0
  305. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/executor.ipp +40 -0
  306. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +7 -32
  307. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.hpp +347 -0
  308. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_context.ipp +176 -0
  309. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +79 -0
  310. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +341 -379
  311. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +173 -343
  312. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +559 -206
  313. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.hpp +1 -1
  314. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/serial_port_base.ipp +30 -30
  315. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +254 -72
  316. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.cpp +1 -1
  317. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +12 -4
  318. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.hpp +36 -0
  319. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_context.ipp +75 -0
  320. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/system_executor.hpp +87 -0
  321. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.hpp +129 -0
  322. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/thread_pool.ipp +78 -0
  323. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +855 -94
  324. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +358 -449
  325. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +165 -418
  326. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +878 -0
  327. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context_strand.hpp +386 -0
  328. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service.hpp +6 -743
  329. data/src/cxx_supportlib/vendor-modified/boost/asio/io_service_strand.hpp +20 -0
  330. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address.hpp +79 -19
  331. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4.hpp +111 -23
  332. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_iterator.hpp +164 -0
  333. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v4_range.hpp +136 -0
  334. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6.hpp +104 -14
  335. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_iterator.hpp +185 -0
  336. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/address_v6_range.hpp +131 -0
  337. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/bad_address_cast.hpp +50 -0
  338. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_endpoint.hpp +5 -5
  339. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver.hpp +821 -71
  340. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_entry.hpp +23 -4
  341. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_iterator.hpp +31 -99
  342. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_query.hpp +1 -1
  343. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/basic_resolver_results.hpp +313 -0
  344. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/endpoint.hpp +2 -2
  345. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/impl/endpoint.ipp +5 -10
  346. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/detail/socket_option.hpp +16 -19
  347. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/host_name.hpp +1 -1
  348. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/icmp.hpp +1 -1
  349. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.hpp +28 -14
  350. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address.ipp +55 -47
  351. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.hpp +28 -14
  352. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v4.ipp +76 -44
  353. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.hpp +28 -14
  354. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/address_v6.ipp +85 -33
  355. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/basic_endpoint.hpp +2 -14
  356. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/host_name.ipp +1 -1
  357. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.hpp +56 -0
  358. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +218 -0
  359. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.hpp +55 -0
  360. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +187 -0
  361. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/multicast.hpp +8 -8
  362. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v4.hpp +263 -0
  363. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/network_v6.hpp +237 -0
  364. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_base.hpp +131 -0
  365. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_query_base.hpp +3 -90
  366. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/resolver_service.hpp +48 -24
  367. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/tcp.hpp +3 -3
  368. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/udp.hpp +1 -1
  369. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/unicast.hpp +3 -3
  370. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/v6_only.hpp +3 -3
  371. data/src/cxx_supportlib/vendor-modified/boost/asio/is_executor.hpp +48 -0
  372. data/src/cxx_supportlib/vendor-modified/boost/asio/is_read_buffered.hpp +1 -1
  373. data/src/cxx_supportlib/vendor-modified/boost/asio/is_write_buffered.hpp +1 -1
  374. data/src/cxx_supportlib/vendor-modified/boost/asio/local/basic_endpoint.hpp +1 -1
  375. data/src/cxx_supportlib/vendor-modified/boost/asio/local/connect_pair.hpp +23 -21
  376. data/src/cxx_supportlib/vendor-modified/boost/asio/local/datagram_protocol.hpp +1 -1
  377. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/endpoint.hpp +1 -1
  378. data/src/cxx_supportlib/vendor-modified/boost/asio/local/detail/impl/endpoint.ipp +3 -2
  379. data/src/cxx_supportlib/vendor-modified/boost/asio/local/stream_protocol.hpp +1 -1
  380. data/src/cxx_supportlib/vendor-modified/boost/asio/packaged_task.hpp +128 -0
  381. data/src/cxx_supportlib/vendor-modified/boost/asio/placeholders.hpp +30 -2
  382. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +138 -46
  383. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +15 -15
  384. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor.hpp +646 -0
  385. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/descriptor_base.hpp +17 -24
  386. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor.hpp +326 -3
  387. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/stream_descriptor_service.hpp +63 -44
  388. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +109 -0
  389. data/src/cxx_supportlib/vendor-modified/boost/asio/raw_socket_service.hpp +94 -64
  390. data/src/cxx_supportlib/vendor-modified/boost/asio/read.hpp +328 -12
  391. data/src/cxx_supportlib/vendor-modified/boost/asio/read_at.hpp +13 -6
  392. data/src/cxx_supportlib/vendor-modified/boost/asio/read_until.hpp +1148 -247
  393. data/src/cxx_supportlib/vendor-modified/boost/asio/seq_packet_socket_service.hpp +88 -56
  394. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port.hpp +736 -3
  395. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_base.hpp +11 -11
  396. data/src/cxx_supportlib/vendor-modified/boost/asio/serial_port_service.hpp +41 -45
  397. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set.hpp +422 -3
  398. data/src/cxx_supportlib/vendor-modified/boost/asio/signal_set_service.hpp +32 -24
  399. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_acceptor_service.hpp +114 -48
  400. data/src/cxx_supportlib/vendor-modified/boost/asio/socket_base.hpp +85 -46
  401. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +89 -18
  402. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl.hpp +1 -4
  403. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context.hpp +33 -62
  404. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_base.hpp +1 -1
  405. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/buffered_handshake_op.hpp +27 -23
  406. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/engine.hpp +10 -14
  407. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/handshake_op.hpp +2 -8
  408. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/engine.ipp +22 -25
  409. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/impl/openssl_init.ipp +5 -4
  410. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +40 -17
  411. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_init.hpp +2 -2
  412. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/openssl_types.hpp +1 -1
  413. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/password_callback.hpp +4 -10
  414. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/read_op.hpp +3 -9
  415. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/shutdown_op.hpp +2 -8
  416. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/stream_core.hpp +27 -19
  417. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/verify_callback.hpp +2 -8
  418. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/write_op.hpp +3 -9
  419. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/error.hpp +1 -1
  420. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.hpp +8 -12
  421. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/context.ipp +86 -102
  422. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/error.ipp +1 -1
  423. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/rfc2818_verification.ipp +7 -13
  424. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/impl/src.hpp +1 -1
  425. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/rfc2818_verification.hpp +7 -13
  426. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream.hpp +90 -85
  427. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_base.hpp +1 -1
  428. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_context.hpp +3 -9
  429. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/verify_mode.hpp +1 -1
  430. data/src/cxx_supportlib/vendor-modified/boost/asio/steady_timer.hpp +4 -23
  431. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +209 -175
  432. data/src/cxx_supportlib/vendor-modified/boost/asio/stream_socket_service.hpp +88 -56
  433. data/src/cxx_supportlib/vendor-modified/boost/asio/streambuf.hpp +1 -1
  434. data/src/cxx_supportlib/vendor-modified/boost/asio/system_context.hpp +80 -0
  435. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +131 -0
  436. data/src/cxx_supportlib/vendor-modified/boost/asio/system_timer.hpp +4 -19
  437. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +234 -0
  438. data/src/cxx_supportlib/vendor-modified/boost/asio/time_traits.hpp +1 -1
  439. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/buffer.hpp +24 -0
  440. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/executor.hpp +35 -0
  441. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/internet.hpp +40 -0
  442. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/io_context.hpp +20 -0
  443. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/net.hpp +26 -0
  444. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/netfwd.hpp +199 -0
  445. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/socket.hpp +27 -0
  446. data/src/cxx_supportlib/vendor-modified/boost/asio/ts/timer.hpp +26 -0
  447. data/src/cxx_supportlib/vendor-modified/boost/asio/unyield.hpp +1 -1
  448. data/src/cxx_supportlib/vendor-modified/boost/asio/use_future.hpp +70 -3
  449. data/src/cxx_supportlib/vendor-modified/boost/asio/uses_executor.hpp +73 -0
  450. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +2 -2
  451. data/src/cxx_supportlib/vendor-modified/boost/asio/wait_traits.hpp +17 -2
  452. data/src/cxx_supportlib/vendor-modified/boost/asio/waitable_timer_service.hpp +62 -20
  453. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_handle.hpp +22 -30
  454. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +14 -10
  455. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +15 -15
  456. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +15 -15
  457. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle.hpp +346 -3
  458. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/object_handle_service.hpp +26 -20
  459. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_handle.hpp +333 -0
  460. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/overlapped_ptr.hpp +6 -6
  461. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle.hpp +344 -3
  462. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/random_access_handle_service.hpp +31 -37
  463. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle.hpp +328 -3
  464. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/stream_handle_service.hpp +29 -37
  465. data/src/cxx_supportlib/vendor-modified/boost/asio/write.hpp +321 -12
  466. data/src/cxx_supportlib/vendor-modified/boost/asio/write_at.hpp +13 -6
  467. data/src/cxx_supportlib/vendor-modified/boost/asio/yield.hpp +1 -1
  468. data/src/cxx_supportlib/vendor-modified/boost/atomic/atomic.hpp +11 -0
  469. data/src/cxx_supportlib/vendor-modified/boost/atomic/capabilities.hpp +50 -1
  470. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/addressof.hpp +58 -0
  471. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_flag.hpp +1 -0
  472. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/atomic_template.hpp +688 -220
  473. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_cast.hpp +25 -21
  474. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/bitwise_fp_cast.hpp +86 -0
  475. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_arm.hpp +1 -18
  476. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_atomic.hpp +9 -10
  477. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_ppc.hpp +2 -1
  478. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_sync.hpp +7 -8
  479. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/caps_gcc_x86.hpp +1 -36
  480. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/config.hpp +108 -34
  481. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations.hpp +28 -0
  482. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_operations_fwd.hpp +35 -0
  483. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_emulated.hpp +107 -0
  484. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_fp_ops_generic.hpp +189 -0
  485. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations.hpp +28 -0
  486. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_operations_fwd.hpp +35 -0
  487. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_emulated.hpp +238 -0
  488. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_arm.hpp +1111 -0
  489. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_ppc.hpp +840 -0
  490. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_gcc_x86.hpp +1656 -0
  491. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_generic.hpp +402 -0
  492. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_arm.hpp +106 -0
  493. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/extra_ops_msvc_x86.hpp +1301 -0
  494. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/float_sizes.hpp +142 -0
  495. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations.hpp +28 -0
  496. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_operations_fwd.hpp +35 -0
  497. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_emulated.hpp +72 -0
  498. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/fp_ops_generic.hpp +83 -0
  499. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_arm.hpp +67 -0
  500. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_ppc.hpp +42 -0
  501. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/hwcaps_gcc_x86.hpp +58 -0
  502. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/int_sizes.hpp +3 -3
  503. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/integral_extend.hpp +105 -0
  504. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/interlocked.hpp +35 -1
  505. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/operations_lockfree.hpp +1 -1
  506. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_cas_based.hpp +2 -0
  507. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_emulated.hpp +8 -9
  508. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_extending_cas_based.hpp +8 -7
  509. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_alpha.hpp +14 -16
  510. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm.hpp +548 -126
  511. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_arm_common.hpp +134 -0
  512. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_atomic.hpp +36 -44
  513. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc.hpp +524 -96
  514. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_ppc_common.hpp +70 -0
  515. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sparc.hpp +14 -16
  516. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_sync.hpp +27 -59
  517. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86.hpp +104 -57
  518. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_gcc_x86_dcas.hpp +268 -340
  519. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_linux_arm.hpp +9 -9
  520. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_arm.hpp +22 -24
  521. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/ops_msvc_x86.hpp +55 -80
  522. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/platform.hpp +88 -46
  523. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/storage_type.hpp +30 -103
  524. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/string_ops.hpp +61 -0
  525. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/conditional.hpp +42 -0
  526. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/integral_constant.hpp +46 -0
  527. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_floating_point.hpp +42 -0
  528. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_function.hpp +42 -0
  529. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_iec559.hpp +47 -0
  530. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_integral.hpp +43 -0
  531. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_signed.hpp +43 -0
  532. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/is_trivially_default_constructible.hpp +46 -0
  533. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_signed.hpp +43 -0
  534. data/src/cxx_supportlib/vendor-modified/boost/atomic/detail/type_traits/make_unsigned.hpp +43 -0
  535. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +37 -0
  536. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_cc.hpp +30 -30
  537. data/src/cxx_supportlib/vendor-modified/boost/bind/bind_mf_cc.hpp +36 -36
  538. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/system.hpp +0 -10
  539. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +28 -30
  540. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_get.hpp +2 -4
  541. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +1 -1
  542. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +14 -8
  543. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_units.hpp +1 -1
  544. data/src/cxx_supportlib/vendor-modified/boost/chrono/io_v1/chrono_io.hpp +2 -4
  545. data/src/cxx_supportlib/vendor-modified/boost/chrono/process_cpu_clocks.hpp +2 -2
  546. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +0 -1
  547. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/base.hpp +9 -9
  548. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +7 -6
  549. data/src/cxx_supportlib/vendor-modified/boost/config.hpp +4 -4
  550. data/src/cxx_supportlib/vendor-modified/boost/config/auto_link.hpp +26 -4
  551. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/borland.hpp +12 -0
  552. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +30 -2
  553. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/codegear.hpp +13 -0
  554. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/common_edg.hpp +11 -0
  555. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/cray.hpp +32 -2
  556. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/diab.hpp +26 -0
  557. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/digitalmars.hpp +11 -0
  558. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +33 -6
  559. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc_xml.hpp +11 -0
  560. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/intel.hpp +8 -1
  561. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/metrowerks.hpp +11 -0
  562. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/mpw.hpp +11 -0
  563. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/nvcc.hpp +28 -2
  564. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pathscale.hpp +17 -1
  565. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/pgi.hpp +8 -142
  566. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +14 -3
  567. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/vacpp.hpp +16 -0
  568. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +37 -9
  569. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +19 -0
  570. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp_zos.hpp +169 -0
  571. data/src/cxx_supportlib/vendor-modified/boost/config/{posix_features.hpp → detail/posix_features.hpp} +0 -0
  572. data/src/cxx_supportlib/vendor-modified/boost/config/{select_compiler_config.hpp → detail/select_compiler_config.hpp} +15 -5
  573. data/src/cxx_supportlib/vendor-modified/boost/config/{select_platform_config.hpp → detail/select_platform_config.hpp} +8 -3
  574. data/src/cxx_supportlib/vendor-modified/boost/config/{select_stdlib_config.hpp → detail/select_stdlib_config.hpp} +5 -0
  575. data/src/cxx_supportlib/vendor-modified/boost/config/{suffix.hpp → detail/suffix.hpp} +27 -27
  576. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +26 -0
  577. data/src/cxx_supportlib/vendor-modified/boost/config/helper_macros.hpp +37 -0
  578. data/src/cxx_supportlib/vendor-modified/boost/config/platform/aix.hpp +1 -1
  579. data/src/cxx_supportlib/vendor-modified/boost/config/platform/beos.hpp +1 -1
  580. data/src/cxx_supportlib/vendor-modified/boost/config/platform/bsd.hpp +1 -1
  581. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cray.hpp +1 -1
  582. data/src/cxx_supportlib/vendor-modified/boost/config/platform/cygwin.hpp +12 -1
  583. data/src/cxx_supportlib/vendor-modified/boost/config/platform/haiku.hpp +1 -1
  584. data/src/cxx_supportlib/vendor-modified/boost/config/platform/hpux.hpp +1 -1
  585. data/src/cxx_supportlib/vendor-modified/boost/config/platform/irix.hpp +1 -1
  586. data/src/cxx_supportlib/vendor-modified/boost/config/platform/linux.hpp +4 -3
  587. data/src/cxx_supportlib/vendor-modified/boost/config/platform/macos.hpp +1 -1
  588. data/src/cxx_supportlib/vendor-modified/boost/config/platform/qnxnto.hpp +1 -1
  589. data/src/cxx_supportlib/vendor-modified/boost/config/platform/solaris.hpp +1 -1
  590. data/src/cxx_supportlib/vendor-modified/boost/config/platform/symbian.hpp +1 -1
  591. data/src/cxx_supportlib/vendor-modified/boost/config/platform/vxworks.hpp +155 -91
  592. data/src/cxx_supportlib/vendor-modified/boost/config/platform/zos.hpp +32 -0
  593. data/src/cxx_supportlib/vendor-modified/boost/config/pragma_message.hpp +31 -0
  594. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/dinkumware.hpp +21 -2
  595. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcomo.hpp +2 -0
  596. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +20 -0
  597. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +35 -0
  598. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/modena.hpp +2 -0
  599. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/msl.hpp +3 -1
  600. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/roguewave.hpp +2 -0
  601. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/sgi.hpp +2 -0
  602. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/stlport.hpp +2 -0
  603. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/vacpp.hpp +2 -0
  604. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/xlcpp_zos.hpp +60 -0
  605. data/src/cxx_supportlib/vendor-modified/boost/config/workaround.hpp +279 -0
  606. data/src/cxx_supportlib/vendor-modified/boost/container/adaptive_pool.hpp +19 -19
  607. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +5 -5
  608. data/src/cxx_supportlib/vendor-modified/boost/container/allocator_traits.hpp +58 -58
  609. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +7 -28
  610. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +57 -57
  611. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool.hpp +3 -3
  612. data/src/cxx_supportlib/vendor-modified/boost/container/detail/adaptive_node_pool_impl.hpp +10 -10
  613. data/src/cxx_supportlib/vendor-modified/boost/container/detail/addressof.hpp +2 -2
  614. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +18 -18
  615. data/src/cxx_supportlib/vendor-modified/boost/container/detail/algorithm.hpp +122 -0
  616. data/src/cxx_supportlib/vendor-modified/boost/container/detail/alloc_helpers.hpp +8 -8
  617. data/src/cxx_supportlib/vendor-modified/boost/container/detail/allocator_version_traits.hpp +7 -7
  618. data/src/cxx_supportlib/vendor-modified/boost/container/detail/construct_in_place.hpp +1 -1
  619. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_or_allocator_rebind.hpp +49 -0
  620. data/src/cxx_supportlib/vendor-modified/boost/container/detail/container_rebind.hpp +258 -0
  621. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +119 -134
  622. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +15 -15
  623. data/src/cxx_supportlib/vendor-modified/boost/container/detail/dispatch_uses_allocator.hpp +55 -55
  624. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +714 -282
  625. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_container.hpp +55 -0
  626. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_contiguous_container.hpp +47 -0
  627. data/src/cxx_supportlib/vendor-modified/boost/container/detail/is_sorted.hpp +2 -2
  628. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +30 -0
  629. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator_to_raw_pointer.hpp +4 -29
  630. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterators.hpp +9 -9
  631. data/src/cxx_supportlib/vendor-modified/boost/container/detail/math_functions.hpp +2 -2
  632. data/src/cxx_supportlib/vendor-modified/boost/container/detail/min_max.hpp +2 -2
  633. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mpl.hpp +2 -2
  634. data/src/cxx_supportlib/vendor-modified/boost/container/detail/multiallocation_chain.hpp +8 -8
  635. data/src/cxx_supportlib/vendor-modified/boost/container/detail/mutex.hpp +2 -2
  636. data/src/cxx_supportlib/vendor-modified/boost/container/detail/next_capacity.hpp +37 -35
  637. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_alloc_holder.hpp +41 -41
  638. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool.hpp +4 -4
  639. data/src/cxx_supportlib/vendor-modified/boost/container/detail/node_pool_impl.hpp +4 -4
  640. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair.hpp +69 -16
  641. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pair_key_mapped_of_value.hpp +55 -0
  642. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common.hpp +2 -2
  643. data/src/cxx_supportlib/vendor-modified/boost/container/detail/pool_common_alloc.hpp +7 -7
  644. data/src/cxx_supportlib/vendor-modified/boost/container/detail/singleton.hpp +2 -2
  645. data/src/cxx_supportlib/vendor-modified/boost/container/detail/transform_iterator.hpp +1 -1
  646. data/src/cxx_supportlib/vendor-modified/boost/container/detail/tree.hpp +180 -116
  647. data/src/cxx_supportlib/vendor-modified/boost/container/detail/type_traits.hpp +2 -2
  648. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_functors.hpp +36 -0
  649. data/src/cxx_supportlib/vendor-modified/boost/container/detail/value_init.hpp +2 -2
  650. data/src/cxx_supportlib/vendor-modified/boost/container/detail/variadic_templates_tools.hpp +2 -2
  651. data/src/cxx_supportlib/vendor-modified/boost/container/detail/version_type.hpp +8 -8
  652. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +0 -6
  653. data/src/cxx_supportlib/vendor-modified/boost/container/flat_map.hpp +874 -572
  654. data/src/cxx_supportlib/vendor-modified/boost/container/flat_set.hpp +497 -248
  655. data/src/cxx_supportlib/vendor-modified/boost/container/list.hpp +33 -42
  656. data/src/cxx_supportlib/vendor-modified/boost/container/map.hpp +326 -246
  657. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +19 -19
  658. data/src/cxx_supportlib/vendor-modified/boost/container/node_handle.hpp +122 -78
  659. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +165 -0
  660. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_map.hpp +4 -8
  661. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/flat_set.hpp +4 -8
  662. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/map.hpp +4 -4
  663. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/polymorphic_allocator.hpp +6 -6
  664. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/resource_adaptor.hpp +1 -1
  665. data/src/cxx_supportlib/vendor-modified/boost/container/pmr/set.hpp +4 -4
  666. data/src/cxx_supportlib/vendor-modified/boost/container/scoped_allocator.hpp +19 -19
  667. data/src/cxx_supportlib/vendor-modified/boost/container/set.hpp +285 -110
  668. data/src/cxx_supportlib/vendor-modified/boost/container/slist.hpp +35 -53
  669. data/src/cxx_supportlib/vendor-modified/boost/container/small_vector.hpp +18 -19
  670. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +25 -25
  671. data/src/cxx_supportlib/vendor-modified/boost/container/static_vector.hpp +24 -9
  672. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +194 -142
  673. data/src/cxx_supportlib/vendor-modified/boost/container/throw_exception.hpp +15 -5
  674. data/src/cxx_supportlib/vendor-modified/boost/container/uses_allocator.hpp +5 -5
  675. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +395 -421
  676. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/float_functions.hpp +0 -0
  677. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/hash_float.hpp +4 -4
  678. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/detail/limits.hpp +0 -0
  679. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/extensions.hpp +112 -16
  680. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/hash.hpp +195 -7
  681. data/src/cxx_supportlib/vendor-modified/boost/{functional/hash → container_hash}/hash_fwd.hpp +3 -3
  682. data/src/cxx_supportlib/vendor-modified/boost/core/addressof.hpp +53 -44
  683. data/src/cxx_supportlib/vendor-modified/boost/core/lightweight_test.hpp +80 -2
  684. data/src/cxx_supportlib/vendor-modified/boost/core/no_exceptions_support.hpp +1 -1
  685. data/src/cxx_supportlib/vendor-modified/boost/core/pointer_traits.hpp +233 -0
  686. data/src/cxx_supportlib/vendor-modified/boost/core/ref.hpp +2 -2
  687. data/src/cxx_supportlib/vendor-modified/boost/cstdint.hpp +26 -16
  688. data/src/cxx_supportlib/vendor-modified/boost/date_time/adjust_functors.hpp +20 -34
  689. data/src/cxx_supportlib/vendor-modified/boost/date_time/c_local_time_adjustor.hpp +8 -5
  690. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_duration.hpp +4 -0
  691. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting.hpp +2 -0
  692. data/src/cxx_supportlib/vendor-modified/boost/date_time/date_formatting_locales.hpp +7 -6
  693. data/src/cxx_supportlib/vendor-modified/boost/date_time/dst_rules.hpp +6 -6
  694. data/src/cxx_supportlib/vendor-modified/boost/date_time/filetime_functions.hpp +8 -94
  695. data/src/cxx_supportlib/vendor-modified/boost/date_time/format_date_parser.hpp +1 -8
  696. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_day.hpp +3 -3
  697. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_facet.hpp +6 -4
  698. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_month.hpp +3 -3
  699. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_weekday.hpp +2 -2
  700. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_year.hpp +6 -6
  701. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/gregorian_io.hpp +52 -52
  702. data/src/cxx_supportlib/vendor-modified/boost/date_time/int_adapter.hpp +14 -27
  703. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/custom_time_zone.hpp +0 -1
  704. data/src/cxx_supportlib/vendor-modified/boost/date_time/locale_config.hpp +3 -1
  705. data/src/cxx_supportlib/vendor-modified/boost/date_time/microsec_time_clock.hpp +36 -5
  706. data/src/cxx_supportlib/vendor-modified/boost/date_time/period_formatter.hpp +10 -9
  707. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/conversion.hpp +10 -12
  708. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_duration.hpp +18 -10
  709. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/posix_time_io.hpp +12 -12
  710. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_serialize.hpp +65 -20
  711. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +32 -23
  712. data/src/cxx_supportlib/vendor-modified/boost/date_time/string_parse_tree.hpp +6 -5
  713. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_duration.hpp +10 -7
  714. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +8 -3
  715. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +20 -0
  716. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_resolution_traits.hpp +31 -8
  717. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_system_split.hpp +10 -4
  718. data/src/cxx_supportlib/vendor-modified/boost/date_time/tz_db_base.hpp +3 -1
  719. data/src/cxx_supportlib/vendor-modified/boost/detail/workaround.hpp +2 -264
  720. data/src/cxx_supportlib/vendor-modified/boost/enable_shared_from_this.hpp +1 -1
  721. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/error_info_impl.hpp +38 -21
  722. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/exception_ptr.hpp +10 -9
  723. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/is_output_streamable.hpp +3 -2
  724. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/object_hex_dump.hpp +7 -6
  725. data/src/cxx_supportlib/vendor-modified/boost/exception/detail/type_info.hpp +7 -6
  726. data/src/cxx_supportlib/vendor-modified/boost/exception/diagnostic_information.hpp +10 -7
  727. data/src/cxx_supportlib/vendor-modified/boost/exception/get_error_info.hpp +8 -6
  728. data/src/cxx_supportlib/vendor-modified/boost/exception/info.hpp +13 -47
  729. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string.hpp +5 -4
  730. data/src/cxx_supportlib/vendor-modified/boost/exception/to_string_stub.hpp +5 -4
  731. data/src/cxx_supportlib/vendor-modified/boost/function.hpp +12 -4
  732. data/src/cxx_supportlib/vendor-modified/boost/function/detail/gen_maybe_include.pl +2 -0
  733. data/src/cxx_supportlib/vendor-modified/boost/function/detail/maybe_include.hpp +102 -0
  734. data/src/cxx_supportlib/vendor-modified/boost/function/function_base.hpp +20 -0
  735. data/src/cxx_supportlib/vendor-modified/boost/function/function_template.hpp +9 -0
  736. data/src/cxx_supportlib/vendor-modified/boost/functional/hash.hpp +1 -2
  737. data/src/cxx_supportlib/vendor-modified/boost/functional/hash_fwd.hpp +1 -6
  738. data/src/cxx_supportlib/vendor-modified/boost/integer/common_factor_rt.hpp +508 -390
  739. data/src/cxx_supportlib/vendor-modified/boost/integer/integer_mask.hpp +9 -1
  740. data/src/cxx_supportlib/vendor-modified/boost/integer_fwd.hpp +3 -0
  741. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree.hpp +11 -3
  742. data/src/cxx_supportlib/vendor-modified/boost/intrusive/circular_list_algorithms.hpp +1 -1
  743. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/config_begin.hpp +7 -20
  744. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/default_header_holder.hpp +2 -2
  745. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/ebo_functor_holder.hpp +1 -1
  746. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hashtable_node.hpp +1 -1
  747. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/hook_traits.hpp +5 -5
  748. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +108 -2
  749. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/mpl.hpp +15 -5
  750. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/node_to_value.hpp +1 -1
  751. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/tree_value_compare.hpp +8 -4
  752. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +147 -64
  753. data/src/cxx_supportlib/vendor-modified/boost/intrusive/list.hpp +9 -2
  754. data/src/cxx_supportlib/vendor-modified/boost/intrusive/member_value_traits.hpp +3 -3
  755. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_plus_bits.hpp +15 -0
  756. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pointer_traits.hpp +2 -2
  757. data/src/cxx_supportlib/vendor-modified/boost/intrusive/slist.hpp +9 -2
  758. data/src/cxx_supportlib/vendor-modified/boost/intrusive_ptr.hpp +1 -1
  759. data/src/cxx_supportlib/vendor-modified/boost/iterator/advance.hpp +84 -0
  760. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_adaptor.hpp +0 -2
  761. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_categories.hpp +3 -2
  762. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_concepts.hpp +8 -10
  763. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +2 -1
  764. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_traits.hpp +7 -6
  765. data/src/cxx_supportlib/vendor-modified/boost/iterator/reverse_iterator.hpp +7 -4
  766. data/src/cxx_supportlib/vendor-modified/boost/iterator/transform_iterator.hpp +6 -2
  767. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +7 -7
  768. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/once_atomic.cpp +1 -1
  769. data/src/cxx_supportlib/vendor-modified/boost/libs/thread/src/pthread/thread.cpp +36 -92
  770. data/src/cxx_supportlib/vendor-modified/boost/make_shared.hpp +1 -2
  771. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/detail/fp_traits.hpp +2 -1
  772. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/math_fwd.hpp +57 -3
  773. data/src/cxx_supportlib/vendor-modified/boost/math/special_functions/sign.hpp +1 -1
  774. data/src/cxx_supportlib/vendor-modified/boost/math/tools/config.hpp +12 -1
  775. data/src/cxx_supportlib/vendor-modified/boost/memory_order.hpp +40 -9
  776. data/src/cxx_supportlib/vendor-modified/boost/move/adl_move_swap.hpp +6 -0
  777. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_merge.hpp +253 -0
  778. data/src/cxx_supportlib/vendor-modified/boost/move/algo/adaptive_sort.hpp +563 -4
  779. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +324 -1071
  780. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/basic_op.hpp +10 -10
  781. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/heap_sort.hpp +111 -0
  782. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/insertion_sort.hpp +12 -11
  783. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/is_sorted.hpp +55 -0
  784. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge.hpp +59 -143
  785. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/merge_sort.hpp +6 -6
  786. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +334 -0
  787. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/set_difference.hpp +207 -0
  788. data/src/cxx_supportlib/vendor-modified/boost/move/algo/move.hpp +2 -1
  789. data/src/cxx_supportlib/vendor-modified/boost/move/algo/predicate.hpp +86 -0
  790. data/src/cxx_supportlib/vendor-modified/boost/move/algo/unique.hpp +55 -0
  791. data/src/cxx_supportlib/vendor-modified/boost/move/core.hpp +1 -9
  792. data/src/cxx_supportlib/vendor-modified/boost/move/detail/destruct_n.hpp +3 -4
  793. data/src/cxx_supportlib/vendor-modified/boost/move/detail/fwd_macros.hpp +25 -0
  794. data/src/cxx_supportlib/vendor-modified/boost/move/detail/iterator_to_raw_pointer.hpp +59 -0
  795. data/src/cxx_supportlib/vendor-modified/boost/{intrusive → move}/detail/pointer_element.hpp +12 -12
  796. data/src/cxx_supportlib/vendor-modified/boost/move/detail/to_raw_pointer.hpp +45 -0
  797. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +19 -5
  798. data/src/cxx_supportlib/vendor-modified/boost/move/detail/unique_ptr_meta_utils.hpp +1 -1
  799. data/src/cxx_supportlib/vendor-modified/boost/mpl/assert.hpp +1 -1
  800. data/src/cxx_supportlib/vendor-modified/boost/mpl/get_tag.hpp +26 -0
  801. data/src/cxx_supportlib/vendor-modified/boost/next_prior.hpp +85 -55
  802. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/cast.hpp +1 -1
  803. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/conversion_traits.hpp +0 -7
  804. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/converter.hpp +4 -13
  805. data/src/cxx_supportlib/vendor-modified/boost/operators.hpp +26 -7
  806. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/experimental_traits.hpp +98 -0
  807. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/old_optional_implementation.hpp +10 -10
  808. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_aligned_storage.hpp +17 -21
  809. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_config.hpp +25 -6
  810. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_reference_spec.hpp +15 -15
  811. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_relops.hpp +1 -1
  812. data/src/cxx_supportlib/vendor-modified/boost/optional/detail/optional_trivially_copyable_base.hpp +499 -0
  813. data/src/cxx_supportlib/vendor-modified/boost/optional/optional.hpp +126 -21
  814. data/src/cxx_supportlib/vendor-modified/boost/parameter/aux_/arg_list.hpp +1 -0
  815. data/src/cxx_supportlib/vendor-modified/boost/pointer_cast.hpp +10 -9
  816. data/src/cxx_supportlib/vendor-modified/boost/pointer_to_other.hpp +1 -1
  817. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/arm.h +6 -1
  818. data/src/cxx_supportlib/vendor-modified/boost/predef/architecture/parisc.h +1 -1
  819. data/src/cxx_supportlib/vendor-modified/boost/predef/compiler/intel.h +8 -1
  820. data/src/cxx_supportlib/vendor-modified/boost/predef/hardware/simd/arm.h +3 -1
  821. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c.h +1 -0
  822. data/src/cxx_supportlib/vendor-modified/boost/predef/library/c/cloudabi.h +53 -0
  823. data/src/cxx_supportlib/vendor-modified/boost/predef/make.h +4 -0
  824. data/src/cxx_supportlib/vendor-modified/boost/predef/os/android.h +2 -2
  825. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/free.h +10 -3
  826. data/src/cxx_supportlib/vendor-modified/boost/predef/os/bsd/open.h +80 -0
  827. data/src/cxx_supportlib/vendor-modified/boost/predef/other/workaround.h +87 -0
  828. data/src/cxx_supportlib/vendor-modified/boost/predef/platform.h +9 -2
  829. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/cloudabi.h +43 -0
  830. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/ios.h +58 -0
  831. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw.h +4 -4
  832. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw32.h +63 -0
  833. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/mingw64.h +63 -0
  834. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_desktop.h +9 -3
  835. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_phone.h +7 -2
  836. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_runtime.h +13 -5
  837. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_server.h +47 -0
  838. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_store.h +11 -4
  839. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_system.h +47 -0
  840. data/src/cxx_supportlib/vendor-modified/boost/predef/platform/windows_uwp.h +60 -0
  841. data/src/cxx_supportlib/vendor-modified/boost/predef/version.h +1 -1
  842. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/config/config.hpp +11 -9
  843. data/src/cxx_supportlib/vendor-modified/boost/random/binomial_distribution.hpp +27 -27
  844. data/src/cxx_supportlib/vendor-modified/boost/random/detail/vector_io.hpp +3 -0
  845. data/src/cxx_supportlib/vendor-modified/boost/random/discrete_distribution.hpp +2 -2
  846. data/src/cxx_supportlib/vendor-modified/boost/random/hyperexponential_distribution.hpp +0 -11
  847. data/src/cxx_supportlib/vendor-modified/boost/random/independent_bits.hpp +12 -0
  848. data/src/cxx_supportlib/vendor-modified/boost/random/linear_congruential.hpp +5 -1
  849. data/src/cxx_supportlib/vendor-modified/boost/random/poisson_distribution.hpp +17 -17
  850. data/src/cxx_supportlib/vendor-modified/boost/random/seed_seq.hpp +1 -1
  851. data/src/cxx_supportlib/vendor-modified/boost/random/uniform_on_sphere.hpp +6 -2
  852. data/src/cxx_supportlib/vendor-modified/boost/range/concepts.hpp +6 -4
  853. data/src/cxx_supportlib/vendor-modified/boost/range/iterator_range_core.hpp +1 -0
  854. data/src/cxx_supportlib/vendor-modified/boost/regex/config.hpp +1 -1
  855. data/src/cxx_supportlib/vendor-modified/boost/regex/pending/object_cache.hpp +2 -2
  856. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_creator.hpp +2 -2
  857. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/basic_regex_parser.hpp +56 -11
  858. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/instances.hpp +10 -10
  859. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher.hpp +7 -2
  860. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_common.hpp +6 -1
  861. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_non_recursive.hpp +37 -13
  862. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/perl_matcher_recursive.hpp +4 -4
  863. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_traits_defaults.hpp +9 -6
  864. data/src/cxx_supportlib/vendor-modified/boost/regex/v4/regex_workaround.hpp +1 -1
  865. data/src/cxx_supportlib/vendor-modified/boost/scoped_array.hpp +1 -2
  866. data/src/cxx_supportlib/vendor-modified/boost/scoped_ptr.hpp +1 -2
  867. data/src/cxx_supportlib/vendor-modified/boost/shared_array.hpp +1 -1
  868. data/src/cxx_supportlib/vendor-modified/boost/shared_ptr.hpp +1 -1
  869. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/allocate_shared_array.hpp +333 -656
  870. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/bad_weak_ptr.hpp +4 -2
  871. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/atomic_count_gcc.hpp +1 -1
  872. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_counted_base.hpp +148 -0
  873. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/local_sp_deleter.hpp +91 -0
  874. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/operator_bool.hpp +6 -6
  875. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/shared_count.hpp +15 -3
  876. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_acc_ia64.hpp +1 -0
  877. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_aix.hpp +1 -0
  878. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_clang.hpp +3 -2
  879. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_ppc.hpp +1 -0
  880. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_cw_x86.hpp +1 -0
  881. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ia64.hpp +1 -0
  882. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +7 -0
  883. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_ppc.hpp +1 -0
  884. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_sparc.hpp +1 -0
  885. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_gcc_x86.hpp +1 -0
  886. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_nt.hpp +1 -0
  887. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_pt.hpp +1 -0
  888. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_snc_ps3.hpp +1 -0
  889. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_solaris.hpp +1 -0
  890. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_spin.hpp +1 -0
  891. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp +3 -2
  892. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_sync.hpp +1 -0
  893. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_base_vacpp_ppc.hpp +1 -0
  894. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_counted_impl.hpp +29 -0
  895. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/sp_noexcept.hpp +21 -3
  896. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/yield_k.hpp +1 -1
  897. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/enable_shared_from_this.hpp +6 -6
  898. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +26 -26
  899. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ref_counter.hpp +17 -16
  900. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared.hpp +1 -2
  901. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/make_shared_object.hpp +19 -19
  902. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_array.hpp +11 -12
  903. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/scoped_ptr.hpp +15 -16
  904. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_array.hpp +22 -22
  905. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/shared_ptr.hpp +135 -90
  906. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/weak_ptr.hpp +23 -23
  907. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.ipp +140 -111
  908. data/src/cxx_supportlib/vendor-modified/boost/system/error_code.hpp +297 -49
  909. data/src/cxx_supportlib/vendor-modified/boost/system/system_error.hpp +4 -4
  910. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_deque_base.hpp +30 -30
  911. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/detail/sync_queue_base.hpp +30 -30
  912. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_bounded_queue.hpp +4 -2
  913. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_deque.hpp +5 -7
  914. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_priority_queue.hpp +19 -19
  915. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_queue.hpp +5 -15
  916. data/src/cxx_supportlib/vendor-modified/boost/thread/concurrent_queues/sync_timed_queue.hpp +118 -183
  917. data/src/cxx_supportlib/vendor-modified/boost/{detail → thread/detail}/atomic_redef_macros.hpp +0 -0
  918. data/src/cxx_supportlib/vendor-modified/boost/{detail → thread/detail}/atomic_undef_macros.hpp +0 -0
  919. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/config.hpp +62 -11
  920. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/log.hpp +15 -0
  921. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/move.hpp +0 -2
  922. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform.hpp +2 -0
  923. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/platform_time.hpp +478 -0
  924. data/src/cxx_supportlib/vendor-modified/boost/thread/detail/thread.hpp +51 -85
  925. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/basic_thread_pool.hpp +11 -3
  926. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/detail/priority_executor_base.hpp +10 -4
  927. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduled_thread_pool.hpp +1 -0
  928. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduler.hpp +10 -0
  929. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/scheduling_adaptor.hpp +15 -4
  930. data/src/cxx_supportlib/vendor-modified/boost/thread/executors/serial_executor.hpp +9 -0
  931. data/src/cxx_supportlib/vendor-modified/boost/thread/future.hpp +320 -92
  932. data/src/cxx_supportlib/vendor-modified/boost/thread/once.hpp +10 -0
  933. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable.hpp +187 -112
  934. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/condition_variable_fwd.hpp +137 -164
  935. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/mutex.hpp +67 -37
  936. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_helpers.hpp +42 -0
  937. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +15 -9
  938. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/recursive_mutex.hpp +65 -33
  939. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex.hpp +84 -158
  940. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_data.hpp +143 -35
  941. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/thread_heap_alloc.hpp +32 -2
  942. data/src/cxx_supportlib/vendor-modified/boost/thread/shared_mutex.hpp +8 -1
  943. data/src/cxx_supportlib/vendor-modified/boost/thread/thread_only.hpp +1 -1
  944. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/shared_mutex.hpp +579 -589
  945. data/src/cxx_supportlib/vendor-modified/boost/token_functions.hpp +2 -1
  946. data/src/cxx_supportlib/vendor-modified/boost/token_iterator.hpp +5 -2
  947. data/src/cxx_supportlib/vendor-modified/boost/tuple/detail/tuple_basic.hpp +7 -9
  948. data/src/cxx_supportlib/vendor-modified/boost/tuple/tuple.hpp +8 -8
  949. data/src/cxx_supportlib/vendor-modified/boost/type_index.hpp +1 -1
  950. data/src/cxx_supportlib/vendor-modified/boost/type_index/stl_type_index.hpp +6 -2
  951. data/src/cxx_supportlib/vendor-modified/boost/type_index/type_index_facade.hpp +5 -8
  952. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_const.hpp +6 -0
  953. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_cv.hpp +6 -0
  954. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_lvalue_reference.hpp +6 -0
  955. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_pointer.hpp +6 -0
  956. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_reference.hpp +7 -0
  957. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_rvalue_reference.hpp +6 -0
  958. data/src/cxx_supportlib/vendor-modified/boost/type_traits/add_volatile.hpp +6 -0
  959. data/src/cxx_supportlib/vendor-modified/boost/type_traits/common_type.hpp +7 -0
  960. data/src/cxx_supportlib/vendor-modified/boost/type_traits/conditional.hpp +8 -0
  961. data/src/cxx_supportlib/vendor-modified/boost/type_traits/copy_cv.hpp +6 -0
  962. data/src/cxx_supportlib/vendor-modified/boost/type_traits/decay.hpp +6 -0
  963. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/config.hpp +12 -1
  964. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/detector.hpp +37 -0
  965. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_binary_operator.hpp +71 -14
  966. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_postfix_operator.hpp +1 -1
  967. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/has_prefix_operator.hpp +4 -1
  968. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +370 -102
  969. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_likely_lambda.hpp +94 -0
  970. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +1177 -572
  971. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +2 -2
  972. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected.hpp +24 -0
  973. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detected_or.hpp +25 -0
  974. data/src/cxx_supportlib/vendor-modified/boost/type_traits/floating_point_promotion.hpp +8 -0
  975. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_equal_to.hpp +3 -0
  976. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_greater.hpp +3 -0
  977. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_greater_equal.hpp +3 -0
  978. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_less.hpp +3 -0
  979. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_less_equal.hpp +3 -0
  980. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus.hpp +93 -0
  981. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_minus_assign.hpp +95 -2
  982. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_not_equal_to.hpp +3 -0
  983. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_nothrow_destructor.hpp +11 -2
  984. data/src/cxx_supportlib/vendor-modified/boost/type_traits/has_plus_assign.hpp +90 -0
  985. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_constant.hpp +2 -1
  986. data/src/cxx_supportlib/vendor-modified/boost/type_traits/integral_promotion.hpp +6 -0
  987. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +2 -1
  988. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_assignable.hpp +10 -2
  989. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complete.hpp +90 -0
  990. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_complex.hpp +1 -0
  991. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_constructible.hpp +12 -2
  992. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_convertible.hpp +20 -2
  993. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_default_constructible.hpp +16 -2
  994. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_destructible.hpp +10 -2
  995. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected.hpp +29 -0
  996. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_convertible.hpp +29 -0
  997. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_detected_exact.hpp +29 -0
  998. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_list_constructible.hpp +48 -0
  999. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_assignable.hpp +14 -3
  1000. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_move_constructible.hpp +14 -4
  1001. data/src/cxx_supportlib/vendor-modified/boost/type_traits/is_nothrow_swappable.hpp +67 -0
  1002. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_signed.hpp +6 -0
  1003. data/src/cxx_supportlib/vendor-modified/boost/type_traits/make_unsigned.hpp +6 -0
  1004. data/src/cxx_supportlib/vendor-modified/boost/type_traits/nonesuch.hpp +35 -0
  1005. data/src/cxx_supportlib/vendor-modified/boost/type_traits/promote.hpp +6 -0
  1006. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_all_extents.hpp +6 -0
  1007. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_bounds.hpp +7 -0
  1008. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_const.hpp +6 -0
  1009. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv.hpp +5 -0
  1010. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_cv_ref.hpp +30 -0
  1011. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_extent.hpp +6 -0
  1012. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_pointer.hpp +7 -0
  1013. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_reference.hpp +5 -0
  1014. data/src/cxx_supportlib/vendor-modified/boost/type_traits/remove_volatile.hpp +5 -0
  1015. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_identity.hpp +9 -0
  1016. data/src/cxx_supportlib/vendor-modified/boost/type_traits/type_with_alignment.hpp +2 -3
  1017. data/src/cxx_supportlib/vendor-modified/boost/typeof/decltype.hpp +34 -0
  1018. data/src/cxx_supportlib/vendor-modified/boost/typeof/msvc/typeof_impl.hpp +5 -85
  1019. data/src/cxx_supportlib/vendor-modified/boost/typeof/register_fundamental.hpp +1 -2
  1020. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/functional.hpp +6 -0
  1021. data/src/cxx_supportlib/vendor-modified/boost/typeof/std/memory.hpp +2 -0
  1022. data/src/cxx_supportlib/vendor-modified/boost/typeof/typeof.hpp +24 -14
  1023. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fwd.hpp +18 -12
  1024. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +4018 -4052
  1025. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/map.hpp +57 -97
  1026. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/set.hpp +56 -95
  1027. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +2150 -1777
  1028. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map_fwd.hpp +41 -38
  1029. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +1630 -1420
  1030. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set_fwd.hpp +40 -37
  1031. data/src/cxx_supportlib/vendor-modified/boost/utility.hpp +6 -3
  1032. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/minstd_rand.hpp +55 -0
  1033. data/src/cxx_supportlib/vendor-modified/boost/utility/detail/result_of_iterate.hpp +14 -17
  1034. data/src/cxx_supportlib/vendor-modified/boost/utility/result_of.hpp +44 -20
  1035. data/src/cxx_supportlib/vendor-modified/boost/utility/string_view.hpp +30 -30
  1036. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  1037. data/src/cxx_supportlib/vendor-modified/boost/weak_ptr.hpp +1 -1
  1038. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  1039. data/src/ruby_supportlib/phusion_passenger/common_library.rb +3 -0
  1040. data/src/ruby_supportlib/phusion_passenger/platform_info/compiler.rb +8 -1
  1041. data/src/ruby_supportlib/phusion_passenger/platform_info/cxx_portability.rb +7 -1
  1042. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +2 -2
  1043. data/src/ruby_supportlib/phusion_passenger/utils/tee_input.rb +4 -4
  1044. metadata +201 -47
  1045. data/src/cxx_supportlib/ConfigKit/VariantMapUtils.h +0 -96
  1046. data/src/cxx_supportlib/MessageClient.h +0 -309
  1047. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/addressof.hpp +0 -40
  1048. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/task_io_service.hpp +0 -80
  1049. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/shared_ptr.hpp +0 -40
  1050. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/weak_ptr.hpp +0 -40
  1051. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/win_iocp_serial_port_service.hpp +0 -230
  1052. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.hpp +0 -156
  1053. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/io_service.ipp +0 -157
  1054. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/basic_context.hpp +0 -42
  1055. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/context_service.hpp +0 -42
  1056. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/basic_context.hpp +0 -436
  1057. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/context_service.hpp +0 -176
  1058. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_context_service.hpp +0 -396
  1059. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_operation.hpp +0 -526
  1060. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/detail/openssl_stream_service.hpp +0 -573
  1061. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream.hpp +0 -503
  1062. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/old/stream_service.hpp +0 -186
  1063. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/stream_service.hpp +0 -42
  1064. data/src/cxx_supportlib/vendor-modified/boost/container/detail/to_raw_pointer.hpp +0 -33
  1065. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/to_raw_pointer.hpp +0 -47
  1066. data/src/cxx_supportlib/vendor-modified/boost/iterator.hpp +0 -20
  1067. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/shared_mutex_assert.hpp +0 -724
  1068. data/src/cxx_supportlib/vendor-modified/boost/thread/pthread/timespec.hpp +0 -149
  1069. data/src/cxx_supportlib/vendor-modified/boost/thread/v2/thread.hpp +0 -155
  1070. data/src/cxx_supportlib/vendor-modified/boost/utility/empty_deleter.hpp +0 -43
@@ -51,31 +51,41 @@ namespace container {
51
51
 
52
52
  inline void throw_bad_alloc()
53
53
  {
54
- BOOST_ASSERT(!"boost::container bad_alloc thrown");
54
+ const char msg[] = "boost::container bad_alloc thrown";
55
+ (void)msg;
56
+ BOOST_ASSERT(!msg);
55
57
  std::abort();
56
58
  }
57
59
 
58
60
  inline void throw_out_of_range(const char* str)
59
61
  {
60
- BOOST_ASSERT_MSG(!"boost::container out_of_range thrown", str);
62
+ const char msg[] = "boost::container out_of_range thrown";
63
+ (void)msg; (void)str;
64
+ BOOST_ASSERT_MSG(!msg, str);
61
65
  std::abort();
62
66
  }
63
67
 
64
68
  inline void throw_length_error(const char* str)
65
69
  {
66
- BOOST_ASSERT_MSG(!"boost::container length_error thrown", str);
70
+ const char msg[] = "boost::container length_error thrown";
71
+ (void)msg; (void)str;
72
+ BOOST_ASSERT_MSG(!msg, str);
67
73
  std::abort();
68
74
  }
69
75
 
70
76
  inline void throw_logic_error(const char* str)
71
77
  {
72
- BOOST_ASSERT_MSG(!"boost::container logic_error thrown", str);
78
+ const char msg[] = "boost::container logic_error thrown";
79
+ (void)msg; (void)str;
80
+ BOOST_ASSERT_MSG(!msg, str);
73
81
  std::abort();
74
82
  }
75
83
 
76
84
  inline void throw_runtime_error(const char* str)
77
85
  {
78
- BOOST_ASSERT_MSG(!"boost::container runtime_error thrown", str);
86
+ const char msg[] = "boost::container runtime_error thrown";
87
+ (void)msg; (void)str;
88
+ BOOST_ASSERT_MSG(!msg, str);
79
89
  std::abort();
80
90
  }
81
91
 
@@ -112,7 +112,7 @@ struct constructible_with_allocator_prefix
112
112
 
113
113
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
114
114
 
115
- namespace container_detail {
115
+ namespace dtl {
116
116
 
117
117
  template<typename T, typename Allocator>
118
118
  struct uses_allocator_imp
@@ -130,8 +130,8 @@ struct uses_allocator_imp
130
130
 
131
131
  // Match this function if T::allocator_type exists and it's type is `erased_type`.
132
132
  template <class U, class V>
133
- static typename container_detail::enable_if
134
- < container_detail::is_same<typename U::allocator_type, erased_type>
133
+ static typename dtl::enable_if
134
+ < dtl::is_same<typename U::allocator_type, erased_type>
135
135
  , yes_type
136
136
  >::type test(const V&);
137
137
 
@@ -145,7 +145,7 @@ struct uses_allocator_imp
145
145
  static const bool value = sizeof(test<T>(alloc)) == sizeof(yes_type);
146
146
  };
147
147
 
148
- } //namespace container_detail {
148
+ } //namespace dtl {
149
149
 
150
150
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
151
151
 
@@ -161,7 +161,7 @@ struct uses_allocator_imp
161
161
  //! is an alias `erased_type`. False otherwise.
162
162
  template <typename T, typename Allocator>
163
163
  struct uses_allocator
164
- : container_detail::uses_allocator_imp<T, Allocator>
164
+ : dtl::uses_allocator_imp<T, Allocator>
165
165
  {};
166
166
 
167
167
  }} //namespace boost::container
@@ -27,6 +27,7 @@
27
27
  #include <boost/container/allocator_traits.hpp>
28
28
  #include <boost/container/new_allocator.hpp> //new_allocator
29
29
  #include <boost/container/throw_exception.hpp>
30
+ #include <boost/container/options.hpp>
30
31
  // container detail
31
32
  #include <boost/container/detail/advanced_insert_int.hpp>
32
33
  #include <boost/container/detail/algorithm.hpp> //equal()
@@ -36,10 +37,11 @@
36
37
  #include <boost/container/detail/destroyers.hpp>
37
38
  #include <boost/container/detail/iterator.hpp>
38
39
  #include <boost/container/detail/iterators.hpp>
39
- #include <boost/container/detail/iterator_to_raw_pointer.hpp>
40
+ #include <boost/move/detail/iterator_to_raw_pointer.hpp>
40
41
  #include <boost/container/detail/mpl.hpp>
41
42
  #include <boost/container/detail/next_capacity.hpp>
42
- #include <boost/container/detail/to_raw_pointer.hpp>
43
+ #include <boost/container/detail/value_functors.hpp>
44
+ #include <boost/move/detail/to_raw_pointer.hpp>
43
45
  #include <boost/container/detail/type_traits.hpp>
44
46
  #include <boost/container/detail/version_type.hpp>
45
47
  // intrusive
@@ -54,6 +56,11 @@
54
56
  #include <boost/move/detail/fwd_macros.hpp>
55
57
  #endif
56
58
  #include <boost/move/detail/move_helpers.hpp>
59
+ // move/algo
60
+ #include <boost/move/algo/adaptive_merge.hpp>
61
+ #include <boost/move/algo/unique.hpp>
62
+ #include <boost/move/algo/predicate.hpp>
63
+ #include <boost/move/algo/detail/set_difference.hpp>
57
64
  // other
58
65
  #include <boost/core/no_exceptions_support.hpp>
59
66
  #include <boost/assert.hpp>
@@ -69,11 +76,6 @@ namespace container {
69
76
 
70
77
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
71
78
 
72
- //#define BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
73
-
74
- namespace container_detail {
75
-
76
- #ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
77
79
 
78
80
  template <class Pointer, bool IsConst>
79
81
  class vec_iterator
@@ -82,7 +84,7 @@ class vec_iterator
82
84
  typedef std::random_access_iterator_tag iterator_category;
83
85
  typedef typename boost::intrusive::pointer_traits<Pointer>::element_type value_type;
84
86
  typedef typename boost::intrusive::pointer_traits<Pointer>::difference_type difference_type;
85
- typedef typename if_c
87
+ typedef typename dtl::if_c
86
88
  < IsConst
87
89
  , typename boost::intrusive::pointer_traits<Pointer>::template
88
90
  rebind_pointer<const value_type>::type
@@ -210,103 +212,28 @@ struct vector_insert_ordered_cursor
210
212
  BiDirValueIt last_value_it;
211
213
  };
212
214
 
213
- template<class T, class SizeType, class BiDirValueIt, class Comp>
214
- struct vector_merge_cursor
215
- {
216
- typedef SizeType size_type;
217
- typedef typename iterator_traits<BiDirValueIt>::reference reference;
218
-
219
- BOOST_CONTAINER_FORCEINLINE vector_merge_cursor(T *pbeg, T *plast, BiDirValueIt valueit, Comp &cmp)
220
- : m_pbeg(pbeg), m_pcur(--plast), m_valueit(valueit), m_cmp(cmp)
221
- {}
222
-
223
- void operator --()
224
- {
225
- --m_valueit;
226
- const T &t = *m_valueit;
227
- while((m_pcur + 1) != m_pbeg){
228
- if(!m_cmp(t, *m_pcur)){
229
- break;
230
- }
231
- --m_pcur;
232
- }
233
- }
234
-
235
- BOOST_CONTAINER_FORCEINLINE size_type get_pos() const
236
- { return static_cast<size_type>((m_pcur + 1) - m_pbeg); }
237
-
238
- BOOST_CONTAINER_FORCEINLINE reference get_val()
239
- { return *m_valueit; }
240
-
241
- T *const m_pbeg;
242
- T *m_pcur;
243
- BiDirValueIt m_valueit;
244
- Comp &m_cmp;
245
- };
246
-
247
- } //namespace container_detail {
215
+ struct initial_capacity_t{};
248
216
 
249
217
  template<class Pointer, bool IsConst>
250
- BOOST_CONTAINER_FORCEINLINE const Pointer &vector_iterator_get_ptr(const container_detail::vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW
218
+ BOOST_CONTAINER_FORCEINLINE const Pointer &vector_iterator_get_ptr(const vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW
251
219
  { return it.get_ptr(); }
252
220
 
253
221
  template<class Pointer, bool IsConst>
254
- BOOST_CONTAINER_FORCEINLINE Pointer &get_ptr(container_detail::vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW
222
+ BOOST_CONTAINER_FORCEINLINE Pointer &get_ptr(vec_iterator<Pointer, IsConst> &it) BOOST_NOEXCEPT_OR_NOTHROW
255
223
  { return it.get_ptr(); }
256
224
 
257
- namespace container_detail {
258
-
259
- #else //ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
260
-
261
- template< class MaybeConstPointer
262
- , bool ElementTypeIsConst
263
- = is_const< typename boost::intrusive::pointer_traits<MaybeConstPointer>::element_type>::value >
264
- struct vector_get_ptr_pointer_to_non_const
265
- {
266
- typedef MaybeConstPointer const_pointer;
267
- typedef boost::intrusive::pointer_traits<const_pointer> pointer_traits_t;
268
- typedef typename pointer_traits_t::element_type element_type;
269
- typedef typename remove_const<element_type>::type non_const_element_type;
270
- typedef typename pointer_traits_t
271
- ::template rebind_pointer<non_const_element_type>::type return_type;
272
-
273
- BOOST_CONTAINER_FORCEINLINE static return_type get_ptr(const const_pointer &ptr) BOOST_NOEXCEPT_OR_NOTHROW
274
- { return boost::intrusive::pointer_traits<return_type>::const_cast_from(ptr); }
275
- };
276
-
277
- template<class Pointer>
278
- struct vector_get_ptr_pointer_to_non_const<Pointer, false>
279
- {
280
- typedef const Pointer & return_type;
281
- BOOST_CONTAINER_FORCEINLINE static return_type get_ptr(const Pointer &ptr) BOOST_NOEXCEPT_OR_NOTHROW
282
- { return ptr; }
283
- };
284
-
285
- } //namespace container_detail {
286
-
287
- template<class MaybeConstPointer>
288
- BOOST_CONTAINER_FORCEINLINE typename container_detail::vector_get_ptr_pointer_to_non_const<MaybeConstPointer>::return_type
289
- vector_iterator_get_ptr(const MaybeConstPointer &ptr) BOOST_NOEXCEPT_OR_NOTHROW
290
- {
291
- return container_detail::vector_get_ptr_pointer_to_non_const<MaybeConstPointer>::get_ptr(ptr);
292
- }
293
-
294
- namespace container_detail {
295
-
296
- #endif //#ifndef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
297
-
298
- struct uninitialized_size_t {};
299
- static const uninitialized_size_t uninitialized_size = uninitialized_size_t();
225
+ struct vector_uninitialized_size_t {};
226
+ static const vector_uninitialized_size_t vector_uninitialized_size = vector_uninitialized_size_t();
300
227
 
301
228
  template <class T>
302
229
  struct vector_value_traits_base
303
230
  {
304
- static const bool trivial_dctr = is_trivially_destructible<T>::value;
231
+ static const bool trivial_dctr = dtl::is_trivially_destructible<T>::value;
305
232
  static const bool trivial_dctr_after_move = has_trivial_destructor_after_move<T>::value;
306
- static const bool trivial_copy = is_trivially_copy_constructible<T>::value;
307
- static const bool nothrow_copy = is_nothrow_copy_constructible<T>::value || trivial_copy;
308
- static const bool trivial_assign = is_trivially_copy_assignable<T>::value;
309
- static const bool nothrow_assign = is_nothrow_copy_assignable<T>::value || trivial_assign;
233
+ static const bool trivial_copy = dtl::is_trivially_copy_constructible<T>::value;
234
+ static const bool nothrow_copy = dtl::is_nothrow_copy_constructible<T>::value || trivial_copy;
235
+ static const bool trivial_assign = dtl::is_trivially_copy_assignable<T>::value;
236
+ static const bool nothrow_assign = dtl::is_nothrow_copy_assignable<T>::value || trivial_assign;
310
237
  };
311
238
 
312
239
 
@@ -317,18 +244,19 @@ struct vector_value_traits
317
244
  typedef vector_value_traits_base<typename Allocator::value_type> base_t;
318
245
  //This is the anti-exception array destructor
319
246
  //to deallocate values already constructed
320
- typedef typename container_detail::if_c
247
+ typedef typename dtl::if_c
321
248
  <base_t::trivial_dctr
322
- ,container_detail::null_scoped_destructor_n<Allocator>
323
- ,container_detail::scoped_destructor_n<Allocator>
249
+ ,dtl::null_scoped_destructor_n<Allocator>
250
+ ,dtl::scoped_destructor_n<Allocator>
324
251
  >::type ArrayDestructor;
325
252
  //This is the anti-exception array deallocator
326
- typedef container_detail::scoped_array_deallocator<Allocator> ArrayDeallocator;
253
+ typedef dtl::scoped_array_deallocator<Allocator> ArrayDeallocator;
327
254
  };
328
255
 
329
256
  //!This struct deallocates and allocated memory
330
257
  template < class Allocator
331
- , class AllocatorVersion = typename container_detail::version<Allocator>::type
258
+ , class StoredSizeType
259
+ , class AllocatorVersion = typename dtl::version<Allocator>::type
332
260
  >
333
261
  struct vector_alloc_holder
334
262
  : public Allocator
@@ -337,7 +265,8 @@ struct vector_alloc_holder
337
265
  BOOST_MOVABLE_BUT_NOT_COPYABLE(vector_alloc_holder)
338
266
 
339
267
  public:
340
- typedef Allocator allocator_type;
268
+ typedef Allocator allocator_type;
269
+ typedef StoredSizeType stored_size_type;
341
270
  typedef boost::container::allocator_traits<Allocator> allocator_traits_type;
342
271
  typedef typename allocator_traits_type::pointer pointer;
343
272
  typedef typename allocator_traits_type::size_type size_type;
@@ -361,7 +290,7 @@ struct vector_alloc_holder
361
290
 
362
291
  //Constructor, does not throw
363
292
  vector_alloc_holder()
364
- BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
293
+ BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<Allocator>::value)
365
294
  : Allocator(), m_start(), m_size(), m_capacity()
366
295
  {}
367
296
 
@@ -373,28 +302,34 @@ struct vector_alloc_holder
373
302
 
374
303
  //Constructor, does not throw
375
304
  template<class AllocConvertible>
376
- vector_alloc_holder(uninitialized_size_t, BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
305
+ vector_alloc_holder(vector_uninitialized_size_t, BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
377
306
  : Allocator(boost::forward<AllocConvertible>(a))
378
307
  , m_start()
379
- , m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
308
+ //Size is initialized here so vector should only call uninitialized_xxx after this
309
+ , m_size(static_cast<stored_size_type>(initial_size))
380
310
  , m_capacity()
381
311
  {
382
312
  if(initial_size){
383
313
  pointer reuse = pointer();
384
- m_start = this->allocation_command(allocate_new, initial_size, m_capacity = initial_size, reuse);
314
+ size_type final_cap = initial_size;
315
+ m_start = this->allocation_command(allocate_new, initial_size, final_cap, reuse);
316
+ m_capacity = static_cast<stored_size_type>(final_cap);
385
317
  }
386
318
  }
387
319
 
388
320
  //Constructor, does not throw
389
- vector_alloc_holder(uninitialized_size_t, size_type initial_size)
321
+ vector_alloc_holder(vector_uninitialized_size_t, size_type initial_size)
390
322
  : Allocator()
391
323
  , m_start()
392
- , m_size(initial_size) //Size is initialized here so vector should only call uninitialized_xxx after this
324
+ //Size is initialized here so vector should only call uninitialized_xxx after this
325
+ , m_size(static_cast<stored_size_type>(initial_size))
393
326
  , m_capacity()
394
327
  {
395
328
  if(initial_size){
396
329
  pointer reuse = pointer();
397
- m_start = this->allocation_command(allocate_new, initial_size, m_capacity = initial_size, reuse);
330
+ size_type final_cap = initial_size;
331
+ m_start = this->allocation_command(allocate_new, initial_size, final_cap, reuse);
332
+ m_capacity = static_cast<stored_size_type>(final_cap);
398
333
  }
399
334
  }
400
335
 
@@ -408,17 +343,17 @@ struct vector_alloc_holder
408
343
  holder.m_size = holder.m_capacity = 0;
409
344
  }
410
345
 
411
- vector_alloc_holder(pointer p, size_type capacity, BOOST_RV_REF(vector_alloc_holder) holder)
346
+ vector_alloc_holder(initial_capacity_t, pointer p, size_type capacity, BOOST_RV_REF(vector_alloc_holder) holder)
412
347
  : Allocator(BOOST_MOVE_BASE(Allocator, holder))
413
348
  , m_start(p)
414
349
  , m_size(holder.m_size)
415
- , m_capacity(capacity)
350
+ , m_capacity(static_cast<stored_size_type>(capacity))
416
351
  {
417
352
  allocator_type &this_alloc = this->alloc();
418
353
  allocator_type &x_alloc = holder.alloc();
419
354
  if(this->is_propagable_from(x_alloc, holder.start(), this_alloc, true)){
420
355
  if(this->m_capacity){
421
- this->alloc().deallocate(this->m_start, this->m_capacity);
356
+ this->deallocate(this->m_start, this->m_capacity);
422
357
  }
423
358
  m_start = holder.m_start;
424
359
  m_capacity = holder.m_capacity;
@@ -428,23 +363,26 @@ struct vector_alloc_holder
428
363
  else if(this->m_capacity < holder.m_size){
429
364
  size_type const n = holder.m_size;
430
365
  pointer reuse = pointer();
431
- m_start = this->allocation_command(allocate_new, n, m_capacity = n, reuse);
366
+ size_type final_cap = n;
367
+ m_start = this->allocation_command(allocate_new, n, final_cap, reuse);
368
+ m_capacity = static_cast<stored_size_type>(final_cap);
432
369
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
433
370
  this->num_alloc += n != 0;
434
371
  #endif
435
372
  }
436
373
  }
437
374
 
438
- vector_alloc_holder(pointer p, size_type n)
439
- BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
375
+ vector_alloc_holder(initial_capacity_t, pointer p, size_type n)
376
+ BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<Allocator>::value)
440
377
  : Allocator()
441
378
  , m_start(p)
442
379
  , m_size()
443
- , m_capacity(n)
380
+ //n is guaranteed to fit into stored_size_type
381
+ , m_capacity(static_cast<stored_size_type>(n))
444
382
  {}
445
383
 
446
384
  template<class AllocFwd>
447
- vector_alloc_holder(pointer p, size_type n, BOOST_FWD_REF(AllocFwd) a)
385
+ vector_alloc_holder(initial_capacity_t, pointer p, size_type n, BOOST_FWD_REF(AllocFwd) a)
448
386
  : Allocator(::boost::forward<AllocFwd>(a))
449
387
  , m_start(p)
450
388
  , m_size()
@@ -454,17 +392,32 @@ struct vector_alloc_holder
454
392
  BOOST_CONTAINER_FORCEINLINE ~vector_alloc_holder() BOOST_NOEXCEPT_OR_NOTHROW
455
393
  {
456
394
  if(this->m_capacity){
457
- this->alloc().deallocate(this->m_start, this->m_capacity);
395
+ this->deallocate(this->m_start, this->m_capacity);
458
396
  }
459
397
  }
460
398
 
461
399
  BOOST_CONTAINER_FORCEINLINE pointer allocation_command(boost::container::allocation_type command,
462
400
  size_type limit_size, size_type &prefer_in_recvd_out_size, pointer &reuse)
463
401
  {
464
- typedef typename container_detail::version<Allocator>::type alloc_version;
402
+ typedef typename dtl::version<Allocator>::type alloc_version;
465
403
  return this->priv_allocation_command(alloc_version(), command, limit_size, prefer_in_recvd_out_size, reuse);
466
404
  }
467
405
 
406
+ BOOST_CONTAINER_FORCEINLINE pointer allocate(size_type n)
407
+ {
408
+ const size_type max_alloc = allocator_traits_type::max_size(this->alloc());
409
+ const size_type max = max_alloc <= stored_size_type(-1) ? max_alloc : stored_size_type(-1);
410
+ if ( max < n )
411
+ boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
412
+
413
+ return allocator_traits_type::allocate(this->alloc(), n);
414
+ }
415
+
416
+ BOOST_CONTAINER_FORCEINLINE void deallocate(const pointer &p, size_type n)
417
+ {
418
+ allocator_traits_type::deallocate(this->alloc(), p, n);
419
+ }
420
+
468
421
  bool try_expand_fwd(size_type at_least)
469
422
  {
470
423
  //There is not enough memory, try to expand the old one
@@ -482,17 +435,24 @@ struct vector_alloc_holder
482
435
  return success;
483
436
  }
484
437
 
485
- BOOST_CONTAINER_FORCEINLINE size_type next_capacity(size_type additional_objects) const
438
+ template<class GrowthFactorType>
439
+ size_type next_capacity(size_type additional_objects) const
486
440
  {
487
- return next_capacity_calculator
488
- <size_type, NextCapacityDouble //NextCapacity60Percent
489
- >::get( allocator_traits_type::max_size(this->alloc())
490
- , this->m_capacity, additional_objects );
441
+ BOOST_ASSERT(additional_objects > size_type(this->m_capacity - this->m_size));
442
+ size_type max = allocator_traits_type::max_size(this->alloc());
443
+ (clamp_by_stored_size_type)(max, stored_size_type());
444
+ const size_type remaining_cap = max - size_type(this->m_capacity);
445
+ const size_type min_additional_cap = additional_objects - size_type(this->m_capacity - this->m_size);
446
+
447
+ if ( remaining_cap < min_additional_cap )
448
+ boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
449
+
450
+ return GrowthFactorType()( size_type(this->m_capacity), min_additional_cap, max);
491
451
  }
492
452
 
493
- pointer m_start;
494
- size_type m_size;
495
- size_type m_capacity;
453
+ pointer m_start;
454
+ stored_size_type m_size;
455
+ stored_size_type m_capacity;
496
456
 
497
457
  void swap_resources(vector_alloc_holder &x) BOOST_NOEXCEPT_OR_NOTHROW
498
458
  {
@@ -516,10 +476,14 @@ struct vector_alloc_holder
516
476
  BOOST_CONTAINER_FORCEINLINE const Allocator &alloc() const BOOST_NOEXCEPT_OR_NOTHROW
517
477
  { return *this; }
518
478
 
519
- const pointer &start() const BOOST_NOEXCEPT_OR_NOTHROW { return m_start; }
520
- const size_type &capacity() const BOOST_NOEXCEPT_OR_NOTHROW { return m_capacity; }
521
- void start(const pointer &p) BOOST_NOEXCEPT_OR_NOTHROW { m_start = p; }
522
- void capacity(const size_type &c) BOOST_NOEXCEPT_OR_NOTHROW { m_capacity = c; }
479
+ BOOST_CONTAINER_FORCEINLINE const pointer &start() const BOOST_NOEXCEPT_OR_NOTHROW
480
+ { return m_start; }
481
+ BOOST_CONTAINER_FORCEINLINE size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW
482
+ { return m_capacity; }
483
+ BOOST_CONTAINER_FORCEINLINE void start(const pointer &p) BOOST_NOEXCEPT_OR_NOTHROW
484
+ { m_start = p; }
485
+ BOOST_CONTAINER_FORCEINLINE void capacity(const size_type &c) BOOST_NOEXCEPT_OR_NOTHROW
486
+ { BOOST_ASSERT( c <= stored_size_type(-1)); m_capacity = c; }
523
487
 
524
488
  private:
525
489
  void priv_first_allocation(size_type cap)
@@ -534,15 +498,30 @@ struct vector_alloc_holder
534
498
  }
535
499
  }
536
500
 
501
+ BOOST_CONTAINER_FORCEINLINE static void clamp_by_stored_size_type(size_type &, size_type)
502
+ {}
503
+
504
+ template<class SomeStoredSizeType>
505
+ BOOST_CONTAINER_FORCEINLINE static void clamp_by_stored_size_type(size_type &s, SomeStoredSizeType)
506
+ {
507
+ if (s >= SomeStoredSizeType(-1) )
508
+ s = SomeStoredSizeType(-1);
509
+ }
510
+
537
511
  BOOST_CONTAINER_FORCEINLINE pointer priv_allocation_command(version_1, boost::container::allocation_type command,
538
- size_type ,
512
+ size_type limit_size,
539
513
  size_type &prefer_in_recvd_out_size,
540
514
  pointer &reuse)
541
515
  {
542
516
  (void)command;
543
517
  BOOST_ASSERT( (command & allocate_new));
544
518
  BOOST_ASSERT(!(command & nothrow_allocation));
545
- pointer const p = allocator_traits_type::allocate(this->alloc(), prefer_in_recvd_out_size, reuse);
519
+ //First detect overflow on smaller stored_size_types
520
+ if (limit_size > stored_size_type(-1)){
521
+ boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
522
+ }
523
+ (clamp_by_stored_size_type)(prefer_in_recvd_out_size, stored_size_type());
524
+ pointer const p = this->allocate(prefer_in_recvd_out_size);
546
525
  reuse = pointer();
547
526
  return p;
548
527
  }
@@ -552,13 +531,22 @@ struct vector_alloc_holder
552
531
  size_type &prefer_in_recvd_out_size,
553
532
  pointer &reuse)
554
533
  {
555
- return this->alloc().allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse);
534
+ //First detect overflow on smaller stored_size_types
535
+ if (limit_size > stored_size_type(-1)){
536
+ boost::container::throw_length_error("get_next_capacity, allocator's max size reached");
537
+ }
538
+ (clamp_by_stored_size_type)(prefer_in_recvd_out_size, stored_size_type());
539
+ //Allocate memory
540
+ pointer p = this->alloc().allocation_command(command, limit_size, prefer_in_recvd_out_size, reuse);
541
+ //If after allocation prefer_in_recvd_out_size is not representable by stored_size_type, truncate it.
542
+ (clamp_by_stored_size_type)(prefer_in_recvd_out_size, stored_size_type());
543
+ return p;
556
544
  }
557
545
  };
558
546
 
559
547
  //!This struct deallocates and allocated memory
560
- template <class Allocator>
561
- struct vector_alloc_holder<Allocator, version_0>
548
+ template <class Allocator, class StoredSizeType>
549
+ struct vector_alloc_holder<Allocator, StoredSizeType, version_0>
562
550
  : public Allocator
563
551
  {
564
552
  private:
@@ -569,13 +557,14 @@ struct vector_alloc_holder<Allocator, version_0>
569
557
  typedef typename allocator_traits_type::pointer pointer;
570
558
  typedef typename allocator_traits_type::size_type size_type;
571
559
  typedef typename allocator_traits_type::value_type value_type;
560
+ typedef StoredSizeType stored_size_type;
572
561
 
573
- template <class OtherAllocator, class OtherAllocatorVersion>
562
+ template <class OtherAllocator, class OtherStoredSizeType, class OtherAllocatorVersion>
574
563
  friend struct vector_alloc_holder;
575
564
 
576
565
  //Constructor, does not throw
577
566
  vector_alloc_holder()
578
- BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
567
+ BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<Allocator>::value)
579
568
  : Allocator(), m_size()
580
569
  {}
581
570
 
@@ -587,7 +576,7 @@ struct vector_alloc_holder<Allocator, version_0>
587
576
 
588
577
  //Constructor, does not throw
589
578
  template<class AllocConvertible>
590
- vector_alloc_holder(uninitialized_size_t, BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
579
+ vector_alloc_holder(vector_uninitialized_size_t, BOOST_FWD_REF(AllocConvertible) a, size_type initial_size)
591
580
  : Allocator(boost::forward<AllocConvertible>(a))
592
581
  , m_size(initial_size) //Size is initialized here...
593
582
  {
@@ -596,7 +585,7 @@ struct vector_alloc_holder<Allocator, version_0>
596
585
  }
597
586
 
598
587
  //Constructor, does not throw
599
- vector_alloc_holder(uninitialized_size_t, size_type initial_size)
588
+ vector_alloc_holder(vector_uninitialized_size_t, size_type initial_size)
600
589
  : Allocator()
601
590
  , m_size(initial_size) //Size is initialized here...
602
591
  {
@@ -609,11 +598,11 @@ struct vector_alloc_holder<Allocator, version_0>
609
598
  , m_size(holder.m_size) //Size is initialized here so vector should only call uninitialized_xxx after this
610
599
  {
611
600
  ::boost::container::uninitialized_move_alloc_n
612
- (this->alloc(), container_detail::to_raw_pointer(holder.start()), m_size, container_detail::to_raw_pointer(this->start()));
601
+ (this->alloc(), boost::movelib::to_raw_pointer(holder.start()), m_size, boost::movelib::to_raw_pointer(this->start()));
613
602
  }
614
603
 
615
- template<class OtherAllocator, class OtherAllocatorVersion>
616
- vector_alloc_holder(BOOST_RV_REF_BEG vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> BOOST_RV_REF_END holder)
604
+ template<class OtherAllocator, class OtherStoredSizeType, class OtherAllocatorVersion>
605
+ vector_alloc_holder(BOOST_RV_REF_BEG vector_alloc_holder<OtherAllocator, OtherStoredSizeType, OtherAllocatorVersion> BOOST_RV_REF_END holder)
617
606
  : Allocator()
618
607
  , m_size(holder.m_size) //Initialize it to m_size as first_allocation can only succeed or abort
619
608
  {
@@ -621,7 +610,7 @@ struct vector_alloc_holder<Allocator, version_0>
621
610
  const size_type n = holder.m_size;
622
611
  this->priv_first_allocation(n);
623
612
  ::boost::container::uninitialized_move_alloc_n
624
- (this->alloc(), container_detail::to_raw_pointer(holder.start()), n, container_detail::to_raw_pointer(this->start()));
613
+ (this->alloc(), boost::movelib::to_raw_pointer(holder.start()), n, boost::movelib::to_raw_pointer(this->start()));
625
614
  }
626
615
 
627
616
  BOOST_CONTAINER_FORCEINLINE void priv_first_allocation(size_type cap)
@@ -636,8 +625,8 @@ struct vector_alloc_holder<Allocator, version_0>
636
625
  this->priv_deep_swap(x);
637
626
  }
638
627
 
639
- template<class OtherAllocator, class OtherAllocatorVersion>
640
- void deep_swap(vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> &x)
628
+ template<class OtherAllocator, class OtherStoredSizeType, class OtherAllocatorVersion>
629
+ void deep_swap(vector_alloc_holder<OtherAllocator, OtherStoredSizeType, OtherAllocatorVersion> &x)
641
630
  {
642
631
  if(this->m_size > OtherAllocator::internal_capacity || x.m_size > Allocator::internal_capacity){
643
632
  throw_bad_alloc();
@@ -667,16 +656,16 @@ struct vector_alloc_holder<Allocator, version_0>
667
656
 
668
657
  BOOST_CONTAINER_FORCEINLINE pointer start() const BOOST_NOEXCEPT_OR_NOTHROW { return Allocator::internal_storage(); }
669
658
  BOOST_CONTAINER_FORCEINLINE size_type capacity() const BOOST_NOEXCEPT_OR_NOTHROW { return Allocator::internal_capacity; }
670
- size_type m_size;
659
+ stored_size_type m_size;
671
660
 
672
661
  private:
673
662
 
674
- template<class OtherAllocator, class OtherAllocatorVersion>
675
- void priv_deep_swap(vector_alloc_holder<OtherAllocator, OtherAllocatorVersion> &x)
663
+ template<class OtherAllocator, class OtherStoredSizeType, class OtherAllocatorVersion>
664
+ void priv_deep_swap(vector_alloc_holder<OtherAllocator, OtherStoredSizeType, OtherAllocatorVersion> &x)
676
665
  {
677
666
  const size_type MaxTmpStorage = sizeof(value_type)*Allocator::internal_capacity;
678
- value_type *const first_this = container_detail::to_raw_pointer(this->start());
679
- value_type *const first_x = container_detail::to_raw_pointer(x.start());
667
+ value_type *const first_this = boost::movelib::to_raw_pointer(this->start());
668
+ value_type *const first_x = boost::movelib::to_raw_pointer(x.start());
680
669
 
681
670
  if(this->m_size < x.m_size){
682
671
  boost::container::deep_swap_alloc_n<MaxTmpStorage>(this->alloc(), first_this, this->m_size, first_x, x.m_size);
@@ -688,7 +677,34 @@ struct vector_alloc_holder<Allocator, version_0>
688
677
  }
689
678
  };
690
679
 
691
- } //namespace container_detail {
680
+ struct growth_factor_60;
681
+
682
+ template<class T, class Default>
683
+ struct default_if_void
684
+ {
685
+ typedef T type;
686
+ };
687
+
688
+ template<class Default>
689
+ struct default_if_void<void, Default>
690
+ {
691
+ typedef Default type;
692
+ };
693
+
694
+ template<class Options, class AllocatorSizeType>
695
+ struct get_vector_opt
696
+ {
697
+ typedef vector_opt< typename default_if_void<typename Options::growth_factor_type, growth_factor_60>::type
698
+ , typename default_if_void<typename Options::stored_size_type, AllocatorSizeType>::type
699
+ > type;
700
+ };
701
+
702
+ template<class AllocatorSizeType>
703
+ struct get_vector_opt<void, AllocatorSizeType>
704
+ {
705
+ typedef vector_opt<growth_factor_60, AllocatorSizeType> type;
706
+ };
707
+
692
708
 
693
709
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
694
710
 
@@ -699,28 +715,32 @@ struct vector_alloc_holder<Allocator, version_0>
699
715
  //!
700
716
  //! \tparam T The type of object that is stored in the vector
701
717
  //! \tparam Allocator The allocator used for all internal memory management
702
- template <class T, class Allocator BOOST_CONTAINER_DOCONLY(= new_allocator<T>) >
718
+ //! \tparam Options A type produced from \c boost::container::vector_options.
719
+ template <class T, class Allocator BOOST_CONTAINER_DOCONLY(= new_allocator<T>), class Options BOOST_CONTAINER_DOCONLY(= void) >
703
720
  class vector
704
721
  {
705
722
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
706
723
 
707
- struct value_less
708
- {
709
- typedef typename boost::container::allocator_traits<Allocator>::value_type value_type;
710
- bool operator()(const value_type &a, const value_type &b) const
711
- { return a < b; }
712
- };
724
+ typedef typename boost::container::allocator_traits<Allocator>::size_type alloc_size_type;
725
+ typedef typename get_vector_opt<Options, alloc_size_type>::type options_type;
726
+ typedef typename options_type::growth_factor_type growth_factor_type;
727
+ typedef typename options_type::stored_size_type stored_size_type;
728
+ typedef value_less<T> value_less_t;
729
+
730
+ //If provided the stored_size option must specify a type that is equal or a type that is smaller.
731
+ BOOST_STATIC_ASSERT( (sizeof(stored_size_type) < sizeof(alloc_size_type) ||
732
+ dtl::is_same<stored_size_type, alloc_size_type>::value) );
713
733
 
714
- typedef typename container_detail::version<Allocator>::type alloc_version;
715
- typedef boost::container::container_detail::vector_alloc_holder<Allocator> alloc_holder_t;
734
+ typedef typename dtl::version<Allocator>::type alloc_version;
735
+ typedef boost::container::vector_alloc_holder<Allocator, stored_size_type> alloc_holder_t;
716
736
  alloc_holder_t m_holder;
717
737
  typedef allocator_traits<Allocator> allocator_traits_type;
718
- template <class U, class UAllocator>
738
+ template <class U, class UAllocator, class UOptions>
719
739
  friend class vector;
720
740
 
721
741
  typedef typename allocator_traits_type::pointer pointer_impl;
722
- typedef container_detail::vec_iterator<pointer_impl, false> iterator_impl;
723
- typedef container_detail::vec_iterator<pointer_impl, true > const_iterator_impl;
742
+ typedef vec_iterator<pointer_impl, false> iterator_impl;
743
+ typedef vec_iterator<pointer_impl, true > const_iterator_impl;
724
744
 
725
745
  protected:
726
746
  static bool is_propagable_from(const Allocator &from_alloc, pointer_impl p, const Allocator &to_alloc, bool const propagate_allocator)
@@ -747,20 +767,15 @@ class vector
747
767
  typedef typename ::boost::container::allocator_traits<Allocator>::difference_type difference_type;
748
768
  typedef Allocator allocator_type;
749
769
  typedef Allocator stored_allocator_type;
750
- #if defined BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
751
- typedef BOOST_CONTAINER_IMPDEF(pointer) iterator;
752
- typedef BOOST_CONTAINER_IMPDEF(const_pointer) const_iterator;
753
- #else
754
770
  typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator;
755
771
  typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator;
756
- #endif
757
772
  typedef BOOST_CONTAINER_IMPDEF(boost::container::reverse_iterator<iterator>) reverse_iterator;
758
773
  typedef BOOST_CONTAINER_IMPDEF(boost::container::reverse_iterator<const_iterator>) const_reverse_iterator;
759
774
 
760
775
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
761
776
  private:
762
777
  BOOST_COPYABLE_AND_MOVABLE(vector)
763
- typedef container_detail::vector_value_traits<Allocator> value_traits;
778
+ typedef vector_value_traits<Allocator> value_traits;
764
779
  typedef constant_iterator<T, difference_type> cvalue_iterator;
765
780
 
766
781
  protected:
@@ -768,14 +783,13 @@ class vector
768
783
  BOOST_CONTAINER_FORCEINLINE void steal_resources(vector &x)
769
784
  { return this->m_holder.steal_resources(x.m_holder); }
770
785
 
771
- struct initial_capacity_t{};
772
786
  template<class AllocFwd>
773
787
  BOOST_CONTAINER_FORCEINLINE vector(initial_capacity_t, pointer initial_memory, size_type capacity, BOOST_FWD_REF(AllocFwd) a)
774
- : m_holder(initial_memory, capacity, ::boost::forward<AllocFwd>(a))
788
+ : m_holder(initial_capacity_t(), initial_memory, capacity, ::boost::forward<AllocFwd>(a))
775
789
  {}
776
790
 
777
791
  BOOST_CONTAINER_FORCEINLINE vector(initial_capacity_t, pointer initial_memory, size_type capacity)
778
- : m_holder(initial_memory, capacity)
792
+ : m_holder(initial_capacity_t(), initial_memory, capacity)
779
793
  {}
780
794
 
781
795
  #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
@@ -792,7 +806,7 @@ class vector
792
806
  //! <b>Throws</b>: Nothing.
793
807
  //!
794
808
  //! <b>Complexity</b>: Constant.
795
- vector() BOOST_NOEXCEPT_IF(container_detail::is_nothrow_default_constructible<Allocator>::value)
809
+ vector() BOOST_NOEXCEPT_IF(dtl::is_nothrow_default_constructible<Allocator>::value)
796
810
  : m_holder()
797
811
  {}
798
812
 
@@ -812,7 +826,7 @@ class vector
812
826
  //!
813
827
  //! <b>Complexity</b>: Linear to n.
814
828
  explicit vector(size_type n)
815
- : m_holder(container_detail::uninitialized_size, n)
829
+ : m_holder(vector_uninitialized_size, n)
816
830
  {
817
831
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
818
832
  this->num_alloc += n != 0;
@@ -829,7 +843,7 @@ class vector
829
843
  //!
830
844
  //! <b>Complexity</b>: Linear to n.
831
845
  explicit vector(size_type n, const allocator_type &a)
832
- : m_holder(container_detail::uninitialized_size, a, n)
846
+ : m_holder(vector_uninitialized_size, a, n)
833
847
  {
834
848
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
835
849
  this->num_alloc += n != 0;
@@ -848,7 +862,7 @@ class vector
848
862
  //!
849
863
  //! <b>Note</b>: Non-standard extension
850
864
  vector(size_type n, default_init_t)
851
- : m_holder(container_detail::uninitialized_size, n)
865
+ : m_holder(vector_uninitialized_size, n)
852
866
  {
853
867
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
854
868
  this->num_alloc += n != 0;
@@ -867,7 +881,7 @@ class vector
867
881
  //!
868
882
  //! <b>Note</b>: Non-standard extension
869
883
  vector(size_type n, default_init_t, const allocator_type &a)
870
- : m_holder(container_detail::uninitialized_size, a, n)
884
+ : m_holder(vector_uninitialized_size, a, n)
871
885
  {
872
886
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
873
887
  this->num_alloc += n != 0;
@@ -884,7 +898,7 @@ class vector
884
898
  //!
885
899
  //! <b>Complexity</b>: Linear to n.
886
900
  vector(size_type n, const T& value)
887
- : m_holder(container_detail::uninitialized_size, n)
901
+ : m_holder(vector_uninitialized_size, n)
888
902
  {
889
903
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
890
904
  this->num_alloc += n != 0;
@@ -901,7 +915,7 @@ class vector
901
915
  //!
902
916
  //! <b>Complexity</b>: Linear to n.
903
917
  vector(size_type n, const T& value, const allocator_type& a)
904
- : m_holder(container_detail::uninitialized_size, a, n)
918
+ : m_holder(vector_uninitialized_size, a, n)
905
919
  {
906
920
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
907
921
  this->num_alloc += n != 0;
@@ -919,9 +933,9 @@ class vector
919
933
  //! <b>Complexity</b>: Linear to the range [first, last).
920
934
  template <class InIt>
921
935
  vector(InIt first, InIt last
922
- BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename container_detail::disable_if_c
923
- < container_detail::is_convertible<InIt BOOST_MOVE_I size_type>::value
924
- BOOST_MOVE_I container_detail::nat >::type * = 0)
936
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_c
937
+ < dtl::is_convertible<InIt BOOST_MOVE_I size_type>::value
938
+ BOOST_MOVE_I dtl::nat >::type * = 0)
925
939
  )
926
940
  : m_holder()
927
941
  { this->assign(first, last); }
@@ -935,9 +949,9 @@ class vector
935
949
  //! <b>Complexity</b>: Linear to the range [first, last).
936
950
  template <class InIt>
937
951
  vector(InIt first, InIt last, const allocator_type& a
938
- BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename container_detail::disable_if_c
939
- < container_detail::is_convertible<InIt BOOST_MOVE_I size_type>::value
940
- BOOST_MOVE_I container_detail::nat >::type * = 0)
952
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_c
953
+ < dtl::is_convertible<InIt BOOST_MOVE_I size_type>::value
954
+ BOOST_MOVE_I dtl::nat >::type * = 0)
941
955
  )
942
956
  : m_holder(a)
943
957
  { this->assign(first, last); }
@@ -951,7 +965,7 @@ class vector
951
965
  //!
952
966
  //! <b>Complexity</b>: Linear to the elements x contains.
953
967
  vector(const vector &x)
954
- : m_holder( container_detail::uninitialized_size
968
+ : m_holder( vector_uninitialized_size
955
969
  , allocator_traits_type::select_on_container_copy_construction(x.m_holder.alloc())
956
970
  , x.size())
957
971
  {
@@ -997,8 +1011,8 @@ class vector
997
1011
  //! <b>Note</b>: Non-standard extension to support static_vector
998
1012
  template<class OtherAllocator>
999
1013
  vector(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
1000
- , typename container_detail::enable_if_c
1001
- < container_detail::is_version<OtherAllocator, 0>::value>::type * = 0
1014
+ , typename dtl::enable_if_c
1015
+ < dtl::is_version<OtherAllocator, 0>::value>::type * = 0
1002
1016
  )
1003
1017
  : m_holder(boost::move(x.m_holder))
1004
1018
  {}
@@ -1014,7 +1028,7 @@ class vector
1014
1028
  //!
1015
1029
  //! <b>Complexity</b>: Linear to the elements x contains.
1016
1030
  vector(const vector &x, const allocator_type &a)
1017
- : m_holder(container_detail::uninitialized_size, a, x.size())
1031
+ : m_holder(vector_uninitialized_size, a, x.size())
1018
1032
  {
1019
1033
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
1020
1034
  this->num_alloc += x.size() != 0;
@@ -1032,7 +1046,7 @@ class vector
1032
1046
  //!
1033
1047
  //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
1034
1048
  vector(BOOST_RV_REF(vector) x, const allocator_type &a)
1035
- : m_holder( container_detail::uninitialized_size, a
1049
+ : m_holder( vector_uninitialized_size, a
1036
1050
  , is_propagable_from(x.get_stored_allocator(), x.m_holder.start(), a, true) ? 0 : x.size()
1037
1051
  )
1038
1052
  {
@@ -1123,10 +1137,10 @@ class vector
1123
1137
  //!
1124
1138
  //! <b>Note</b>: Non-standard extension to support static_vector
1125
1139
  template<class OtherAllocator>
1126
- BOOST_CONTAINER_FORCEINLINE typename container_detail::enable_if_and
1140
+ BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and
1127
1141
  < vector&
1128
- , container_detail::is_version<OtherAllocator, 0>
1129
- , container_detail::is_different<OtherAllocator, allocator_type>
1142
+ , dtl::is_version<OtherAllocator, 0>
1143
+ , dtl::is_different<OtherAllocator, allocator_type>
1130
1144
  >::type
1131
1145
  operator=(BOOST_RV_REF_BEG vector<value_type, OtherAllocator> BOOST_RV_REF_END x)
1132
1146
  {
@@ -1145,10 +1159,10 @@ class vector
1145
1159
  //!
1146
1160
  //! <b>Note</b>: Non-standard extension to support static_vector
1147
1161
  template<class OtherAllocator>
1148
- BOOST_CONTAINER_FORCEINLINE typename container_detail::enable_if_and
1162
+ BOOST_CONTAINER_FORCEINLINE typename dtl::enable_if_and
1149
1163
  < vector&
1150
- , container_detail::is_version<OtherAllocator, 0>
1151
- , container_detail::is_different<OtherAllocator, allocator_type>
1164
+ , dtl::is_version<OtherAllocator, 0>
1165
+ , dtl::is_different<OtherAllocator, allocator_type>
1152
1166
  >::type
1153
1167
  operator=(const vector<value_type, OtherAllocator> &x)
1154
1168
  {
@@ -1166,12 +1180,12 @@ class vector
1166
1180
  //! <b>Complexity</b>: Linear to n.
1167
1181
  template <class InIt>
1168
1182
  void assign(InIt first, InIt last
1169
- BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename container_detail::disable_if_or
1183
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
1170
1184
  < void
1171
- BOOST_MOVE_I container_detail::is_convertible<InIt BOOST_MOVE_I size_type>
1172
- BOOST_MOVE_I container_detail::and_
1173
- < container_detail::is_different<alloc_version BOOST_MOVE_I version_0>
1174
- BOOST_MOVE_I container_detail::is_not_input_iterator<InIt>
1185
+ BOOST_MOVE_I dtl::is_convertible<InIt BOOST_MOVE_I size_type>
1186
+ BOOST_MOVE_I dtl::and_
1187
+ < dtl::is_different<alloc_version BOOST_MOVE_I version_0>
1188
+ BOOST_MOVE_I dtl::is_not_input_iterator<InIt>
1175
1189
  >
1176
1190
  >::type * = 0)
1177
1191
  )
@@ -1186,7 +1200,7 @@ class vector
1186
1200
  if (first == last){
1187
1201
  //There are no more elements in the sequence, erase remaining
1188
1202
  T* const end_pos = this->priv_raw_end();
1189
- const size_type n = static_cast<size_type>(end_pos - container_detail::iterator_to_raw_pointer(cur));
1203
+ const size_type n = static_cast<size_type>(end_pos - boost::movelib::iterator_to_raw_pointer(cur));
1190
1204
  this->priv_destroy_last_n(n);
1191
1205
  }
1192
1206
  else{
@@ -1215,11 +1229,11 @@ class vector
1215
1229
  //! <b>Complexity</b>: Linear to n.
1216
1230
  template <class FwdIt>
1217
1231
  void assign(FwdIt first, FwdIt last
1218
- BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename container_detail::disable_if_or
1232
+ BOOST_CONTAINER_DOCIGN(BOOST_MOVE_I typename dtl::disable_if_or
1219
1233
  < void
1220
- BOOST_MOVE_I container_detail::is_same<alloc_version BOOST_MOVE_I version_0>
1221
- BOOST_MOVE_I container_detail::is_convertible<FwdIt BOOST_MOVE_I size_type>
1222
- BOOST_MOVE_I container_detail::is_input_iterator<FwdIt>
1234
+ BOOST_MOVE_I dtl::is_same<alloc_version BOOST_MOVE_I version_0>
1235
+ BOOST_MOVE_I dtl::is_convertible<FwdIt BOOST_MOVE_I size_type>
1236
+ BOOST_MOVE_I dtl::is_input_iterator<FwdIt>
1223
1237
  >::type * = 0)
1224
1238
  )
1225
1239
  {
@@ -1238,7 +1252,7 @@ class vector
1238
1252
  pointer const old_p = this->m_holder.start();
1239
1253
  if(old_p){
1240
1254
  this->priv_destroy_all();
1241
- this->m_holder.alloc().deallocate(old_p, old_capacity);
1255
+ this->m_holder.deallocate(old_p, old_capacity);
1242
1256
  }
1243
1257
  this->m_holder.start(ret);
1244
1258
  this->m_holder.capacity(real_cap);
@@ -1741,7 +1755,7 @@ class vector
1741
1755
  return *p;
1742
1756
  }
1743
1757
  else{
1744
- typedef container_detail::insert_emplace_proxy<Allocator, T*, Args...> type;
1758
+ typedef dtl::insert_emplace_proxy<Allocator, T*, Args...> type;
1745
1759
  return *this->priv_forward_range_insert_no_capacity
1746
1760
  (this->back_ptr(), 1, type(::boost::forward<Args>(args)...), alloc_version());
1747
1761
  }
@@ -1782,7 +1796,7 @@ class vector
1782
1796
  {
1783
1797
  BOOST_ASSERT(this->priv_in_range_or_end(position));
1784
1798
  //Just call more general insert(pos, size, value) and return iterator
1785
- typedef container_detail::insert_emplace_proxy<Allocator, T*, Args...> type;
1799
+ typedef dtl::insert_emplace_proxy<Allocator, T*, Args...> type;
1786
1800
  return this->priv_forward_range_insert( vector_iterator_get_ptr(position), 1
1787
1801
  , type(::boost::forward<Args>(args)...));
1788
1802
  }
@@ -1801,7 +1815,7 @@ class vector
1801
1815
  return *p;\
1802
1816
  }\
1803
1817
  else{\
1804
- typedef container_detail::insert_emplace_proxy_arg##N<Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_TARG##N> type;\
1818
+ typedef dtl::insert_emplace_proxy_arg##N<Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_TARG##N> type;\
1805
1819
  return *this->priv_forward_range_insert_no_capacity\
1806
1820
  ( this->back_ptr(), 1, type(BOOST_MOVE_FWD##N), alloc_version());\
1807
1821
  }\
@@ -1823,7 +1837,7 @@ class vector
1823
1837
  iterator emplace(const_iterator pos BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
1824
1838
  {\
1825
1839
  BOOST_ASSERT(this->priv_in_range_or_end(pos));\
1826
- typedef container_detail::insert_emplace_proxy_arg##N<Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_TARG##N> type;\
1840
+ typedef dtl::insert_emplace_proxy_arg##N<Allocator, T* BOOST_MOVE_I##N BOOST_MOVE_TARG##N> type;\
1827
1841
  return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), 1, type(BOOST_MOVE_FWD##N));\
1828
1842
  }\
1829
1843
  //
@@ -1889,7 +1903,7 @@ class vector
1889
1903
  iterator insert(const_iterator p, size_type n, const T& x)
1890
1904
  {
1891
1905
  BOOST_ASSERT(this->priv_in_range_or_end(p));
1892
- container_detail::insert_n_copies_proxy<Allocator, T*> proxy(x);
1906
+ dtl::insert_n_copies_proxy<Allocator, T*> proxy(x);
1893
1907
  return this->priv_forward_range_insert(vector_iterator_get_ptr(p), n, proxy);
1894
1908
  }
1895
1909
 
@@ -1906,10 +1920,10 @@ class vector
1906
1920
  template <class InIt>
1907
1921
  iterator insert(const_iterator pos, InIt first, InIt last
1908
1922
  #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1909
- , typename container_detail::disable_if_or
1923
+ , typename dtl::disable_if_or
1910
1924
  < void
1911
- , container_detail::is_convertible<InIt, size_type>
1912
- , container_detail::is_not_input_iterator<InIt>
1925
+ , dtl::is_convertible<InIt, size_type>
1926
+ , dtl::is_not_input_iterator<InIt>
1913
1927
  >::type * = 0
1914
1928
  #endif
1915
1929
  )
@@ -1927,15 +1941,15 @@ class vector
1927
1941
  #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1928
1942
  template <class FwdIt>
1929
1943
  iterator insert(const_iterator pos, FwdIt first, FwdIt last
1930
- , typename container_detail::disable_if_or
1944
+ , typename dtl::disable_if_or
1931
1945
  < void
1932
- , container_detail::is_convertible<FwdIt, size_type>
1933
- , container_detail::is_input_iterator<FwdIt>
1946
+ , dtl::is_convertible<FwdIt, size_type>
1947
+ , dtl::is_input_iterator<FwdIt>
1934
1948
  >::type * = 0
1935
1949
  )
1936
1950
  {
1937
1951
  BOOST_ASSERT(this->priv_in_range_or_end(pos));
1938
- container_detail::insert_range_proxy<Allocator, FwdIt, T*> proxy(first);
1952
+ dtl::insert_range_proxy<Allocator, FwdIt, T*> proxy(first);
1939
1953
  return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), boost::container::iterator_distance(first, last), proxy);
1940
1954
  }
1941
1955
  #endif
@@ -1960,10 +1974,10 @@ class vector
1960
1974
  iterator insert(const_iterator pos, size_type num, InIt first, InIt last)
1961
1975
  {
1962
1976
  BOOST_ASSERT(this->priv_in_range_or_end(pos));
1963
- BOOST_ASSERT(container_detail::is_input_iterator<InIt>::value ||
1977
+ BOOST_ASSERT(dtl::is_input_iterator<InIt>::value ||
1964
1978
  num == static_cast<size_type>(boost::container::iterator_distance(first, last)));
1965
1979
  (void)last;
1966
- container_detail::insert_range_proxy<Allocator, InIt, T*> proxy(first);
1980
+ dtl::insert_range_proxy<Allocator, InIt, T*> proxy(first);
1967
1981
  return this->priv_forward_range_insert(vector_iterator_get_ptr(pos), num, proxy);
1968
1982
  }
1969
1983
  #endif
@@ -2005,11 +2019,11 @@ class vector
2005
2019
  {
2006
2020
  BOOST_ASSERT(this->priv_in_range(position));
2007
2021
  const pointer p = vector_iterator_get_ptr(position);
2008
- T *const pos_ptr = container_detail::to_raw_pointer(p);
2022
+ T *const pos_ptr = boost::movelib::to_raw_pointer(p);
2009
2023
  T *const beg_ptr = this->priv_raw_begin();
2010
2024
  T *const new_end_ptr = ::boost::container::move(pos_ptr + 1, beg_ptr + this->m_holder.m_size, pos_ptr);
2011
2025
  //Move elements forward and destroy last
2012
- this->priv_destroy_last(pos_ptr == new_end_ptr);
2026
+ this->priv_destroy_last(pos_ptr != new_end_ptr);
2013
2027
  return iterator(p);
2014
2028
  }
2015
2029
 
@@ -2025,9 +2039,9 @@ class vector
2025
2039
  (first < last && this->priv_in_range(first) && this->priv_in_range_or_end(last)));
2026
2040
  if (first != last){
2027
2041
  T* const old_end_ptr = this->priv_raw_end();
2028
- T* const first_ptr = container_detail::to_raw_pointer(vector_iterator_get_ptr(first));
2029
- T* const last_ptr = container_detail::to_raw_pointer(vector_iterator_get_ptr(last));
2030
- T* const ptr = container_detail::to_raw_pointer(boost::container::move(last_ptr, old_end_ptr, first_ptr));
2042
+ T* const first_ptr = boost::movelib::to_raw_pointer(vector_iterator_get_ptr(first));
2043
+ T* const last_ptr = boost::movelib::to_raw_pointer(vector_iterator_get_ptr(last));
2044
+ T* const ptr = boost::movelib::to_raw_pointer(boost::container::move(last_ptr, old_end_ptr, first_ptr));
2031
2045
  this->priv_destroy_last_n(old_end_ptr - ptr);
2032
2046
  }
2033
2047
  return iterator(vector_iterator_get_ptr(first));
@@ -2038,12 +2052,12 @@ class vector
2038
2052
  //! <b>Throws</b>: Nothing.
2039
2053
  //!
2040
2054
  //! <b>Complexity</b>: Constant.
2041
- void swap(vector& x)
2055
+ BOOST_CONTAINER_FORCEINLINE void swap(vector& x)
2042
2056
  BOOST_NOEXCEPT_IF( ((allocator_traits_type::propagate_on_container_swap::value
2043
2057
  || allocator_traits_type::is_always_equal::value) &&
2044
- !container_detail::is_version<Allocator, 0>::value))
2058
+ !dtl::is_version<Allocator, 0>::value))
2045
2059
  {
2046
- this->priv_swap(x, container_detail::bool_<container_detail::is_version<Allocator, 0>::value>());
2060
+ this->priv_swap(x, dtl::bool_<dtl::is_version<Allocator, 0>::value>());
2047
2061
  }
2048
2062
 
2049
2063
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
@@ -2056,11 +2070,11 @@ class vector
2056
2070
  //!
2057
2071
  //! <b>Note</b>: Non-standard extension to support static_vector
2058
2072
  template<class OtherAllocator>
2059
- void swap(vector<T, OtherAllocator> & x
2060
- , typename container_detail::enable_if_and
2073
+ BOOST_CONTAINER_FORCEINLINE void swap(vector<T, OtherAllocator> & x
2074
+ , typename dtl::enable_if_and
2061
2075
  < void
2062
- , container_detail::is_version<OtherAllocator, 0>
2063
- , container_detail::is_different<OtherAllocator, allocator_type>
2076
+ , dtl::is_version<OtherAllocator, 0>
2077
+ , dtl::is_different<OtherAllocator, allocator_type>
2064
2078
  >::type * = 0
2065
2079
  )
2066
2080
  { this->m_holder.deep_swap(x.m_holder); }
@@ -2072,19 +2086,19 @@ class vector
2072
2086
  //! <b>Throws</b>: Nothing.
2073
2087
  //!
2074
2088
  //! <b>Complexity</b>: Linear to the number of elements in the container.
2075
- void clear() BOOST_NOEXCEPT_OR_NOTHROW
2089
+ BOOST_CONTAINER_FORCEINLINE void clear() BOOST_NOEXCEPT_OR_NOTHROW
2076
2090
  { this->priv_destroy_all(); }
2077
2091
 
2078
2092
  //! <b>Effects</b>: Returns true if x and y are equal
2079
2093
  //!
2080
2094
  //! <b>Complexity</b>: Linear to the number of elements in the container.
2081
- friend bool operator==(const vector& x, const vector& y)
2095
+ BOOST_CONTAINER_FORCEINLINE friend bool operator==(const vector& x, const vector& y)
2082
2096
  { return x.size() == y.size() && ::boost::container::algo_equal(x.begin(), x.end(), y.begin()); }
2083
2097
 
2084
2098
  //! <b>Effects</b>: Returns true if x and y are unequal
2085
2099
  //!
2086
2100
  //! <b>Complexity</b>: Linear to the number of elements in the container.
2087
- friend bool operator!=(const vector& x, const vector& y)
2101
+ BOOST_CONTAINER_FORCEINLINE friend bool operator!=(const vector& x, const vector& y)
2088
2102
  { return !(x == y); }
2089
2103
 
2090
2104
  //! <b>Effects</b>: Returns true if x is less than y
@@ -2104,25 +2118,25 @@ class vector
2104
2118
  //! <b>Effects</b>: Returns true if x is greater than y
2105
2119
  //!
2106
2120
  //! <b>Complexity</b>: Linear to the number of elements in the container.
2107
- friend bool operator>(const vector& x, const vector& y)
2121
+ BOOST_CONTAINER_FORCEINLINE friend bool operator>(const vector& x, const vector& y)
2108
2122
  { return y < x; }
2109
2123
 
2110
2124
  //! <b>Effects</b>: Returns true if x is equal or less than y
2111
2125
  //!
2112
2126
  //! <b>Complexity</b>: Linear to the number of elements in the container.
2113
- friend bool operator<=(const vector& x, const vector& y)
2127
+ BOOST_CONTAINER_FORCEINLINE friend bool operator<=(const vector& x, const vector& y)
2114
2128
  { return !(y < x); }
2115
2129
 
2116
2130
  //! <b>Effects</b>: Returns true if x is equal or greater than y
2117
2131
  //!
2118
2132
  //! <b>Complexity</b>: Linear to the number of elements in the container.
2119
- friend bool operator>=(const vector& x, const vector& y)
2133
+ BOOST_CONTAINER_FORCEINLINE friend bool operator>=(const vector& x, const vector& y)
2120
2134
  { return !(x < y); }
2121
2135
 
2122
2136
  //! <b>Effects</b>: x.swap(y)
2123
2137
  //!
2124
2138
  //! <b>Complexity</b>: Constant.
2125
- friend void swap(vector& x, vector& y)
2139
+ BOOST_CONTAINER_FORCEINLINE friend void swap(vector& x, vector& y)
2126
2140
  { x.swap(y); }
2127
2141
 
2128
2142
  #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
@@ -2143,27 +2157,51 @@ class vector
2143
2157
 
2144
2158
  //Absolutely experimental. This function might change, disappear or simply crash!
2145
2159
  template<class BiDirPosConstIt, class BiDirValueIt>
2146
- void insert_ordered_at(const size_type element_count, BiDirPosConstIt last_position_it, BiDirValueIt last_value_it)
2160
+ BOOST_CONTAINER_FORCEINLINE void insert_ordered_at(const size_type element_count, BiDirPosConstIt last_position_it, BiDirValueIt last_value_it)
2147
2161
  {
2148
- typedef container_detail::vector_insert_ordered_cursor<BiDirPosConstIt, BiDirValueIt> inserter_t;
2162
+ typedef vector_insert_ordered_cursor<BiDirPosConstIt, BiDirValueIt> inserter_t;
2149
2163
  return this->priv_insert_ordered_at(element_count, inserter_t(last_position_it, last_value_it));
2150
2164
  }
2151
2165
 
2152
- template<class BidirIt>
2153
- void merge(BidirIt first, BidirIt last)
2154
- { this->merge(first, last, value_less()); }
2166
+ template<class InputIt>
2167
+ BOOST_CONTAINER_FORCEINLINE void merge(InputIt first, InputIt last)
2168
+ { this->merge(first, last, value_less_t()); }
2155
2169
 
2156
- template<class BidirIt, class Compare>
2157
- void merge(BidirIt first, BidirIt last, Compare comp)
2158
- { this->priv_merge(container_detail::false_type(), first, last, comp); }
2170
+ template<class InputIt, class Compare>
2171
+ BOOST_CONTAINER_FORCEINLINE void merge(InputIt first, InputIt last, Compare comp)
2172
+ {
2173
+ size_type const s = this->size();
2174
+ size_type const c = this->capacity();
2175
+ size_type n = 0;
2176
+ size_type const free_cap = c - s;
2177
+ //If not input iterator and new elements don't fit in the remaining capacity, merge in new buffer
2178
+ if(!dtl::is_input_iterator<InputIt>::value &&
2179
+ free_cap < (n = static_cast<size_type>(boost::container::iterator_distance(first, last)))){
2180
+ this->priv_merge_in_new_buffer(first, n, comp, alloc_version());
2181
+ }
2182
+ else{
2183
+ iterator pos(this->insert(this->cend(), first, last));
2184
+ T *const raw_beg = this->priv_raw_begin();
2185
+ T *const raw_end = this->priv_raw_end();
2186
+ T *const raw_pos = raw_beg + s;
2187
+ boost::movelib::adaptive_merge(raw_beg, raw_pos, raw_end, comp, raw_end, free_cap - n);
2188
+ }
2189
+ }
2159
2190
 
2160
- template<class BidirIt>
2161
- void merge_unique(BidirIt first, BidirIt last)
2162
- { this->priv_merge(container_detail::true_type(), first, last, value_less()); }
2191
+ template<class InputIt>
2192
+ BOOST_CONTAINER_FORCEINLINE void merge_unique(InputIt first, InputIt last)
2193
+ { this->merge_unique(first, last, value_less_t()); }
2163
2194
 
2164
- template<class BidirIt, class Compare>
2165
- void merge_unique(BidirIt first, BidirIt last, Compare comp)
2166
- { this->priv_merge(container_detail::true_type(), first, last, comp); }
2195
+ template<class InputIt, class Compare>
2196
+ BOOST_CONTAINER_FORCEINLINE void merge_unique(InputIt first, InputIt last, Compare comp)
2197
+ {
2198
+ size_type const s = this->size();
2199
+ this->priv_set_difference_back(first, last, comp);
2200
+ T *const raw_beg = this->priv_raw_begin();
2201
+ T *const raw_end = this->priv_raw_end();
2202
+ T *raw_pos = raw_beg + s;
2203
+ boost::movelib::adaptive_merge(raw_beg, raw_pos, raw_end, comp, raw_end, this->capacity() - this->size());
2204
+ }
2167
2205
 
2168
2206
  private:
2169
2207
  template<class PositionValue>
@@ -2223,113 +2261,54 @@ class vector
2223
2261
  }
2224
2262
  }
2225
2263
 
2226
- template<class UniqueBool, class BidirIt, class Compare>
2227
- void priv_merge(UniqueBool, BidirIt first, BidirIt last, Compare comp)
2264
+ template<class InputIt, class Compare>
2265
+ void priv_set_difference_back(InputIt first1, InputIt last1, Compare comp)
2228
2266
  {
2229
- size_type const n = static_cast<size_type>(boost::container::iterator_distance(first, last));
2230
- size_type const s = this->size();
2231
- if(BOOST_LIKELY(s)){
2232
- size_type const c = this->capacity();
2233
- size_type const free_c = (c - s);
2234
- //Use a new buffer if current one is too small for new elements,
2235
- //or there is no room for position indexes
2236
- if(free_c < n){
2237
- size_type const new_size = s + n;
2238
- size_type new_cap = new_size;
2239
- pointer p = pointer();
2240
- p = this->m_holder.allocation_command(allocate_new, new_size, new_cap, p);
2241
- this->priv_merge_in_new_buffer(UniqueBool(), first, n, comp, p, new_cap);
2267
+ T * old_first2 = this->priv_raw_begin();
2268
+ T * first2 = old_first2;
2269
+ T * last2 = this->priv_raw_end();
2270
+
2271
+ while (first1 != last1) {
2272
+ if (first2 == last2){
2273
+ this->insert(this->cend(), first1, last1);
2274
+ return;
2242
2275
  }
2243
- else if(!UniqueBool::value && free_c >= n){
2244
- typedef container_detail::vector_merge_cursor<T, size_type, BidirIt, Compare> inserter_t;
2245
- T* const pbeg = this->priv_raw_begin();
2246
- return this->priv_insert_ordered_at(n, inserter_t(pbeg, pbeg + s, last, comp));
2276
+
2277
+ if (comp(*first1, *first2)) {
2278
+ this->emplace_back(*first1);
2279
+ //Reallocation happened, update range
2280
+ T * const raw_begin = this->priv_raw_begin();
2281
+ if(old_first2 != raw_begin){
2282
+ first2 = raw_begin + (first2 - old_first2);
2283
+ last2 = first2 + (last2 - old_first2);
2284
+ old_first2 = raw_begin;
2285
+ }
2286
+
2287
+ ++first1;
2247
2288
  }
2248
- else{ //UniqueBool::value == true and free_c >= n
2249
- std::size_t remaining = n;
2250
- static const std::size_t PosCount = 64u;
2251
- size_type positions[PosCount];
2252
- size_type *indexes = 0;
2253
- while(remaining){
2254
- //Query for room to store indexes in the remaining buffer
2255
- boost::uintptr_t const szt_align_mask = container_detail::alignment_of<size_type>::value - 1;
2256
- boost::uintptr_t const addr = boost::uintptr_t(this->priv_raw_begin() + s + n);
2257
- boost::uintptr_t const capaddr = boost::uintptr_t(this->priv_raw_begin() + c);
2258
- boost::uintptr_t const aligned_addr = (addr + szt_align_mask) & ~szt_align_mask;
2259
- indexes = reinterpret_cast<size_type *>(aligned_addr);
2260
- std::size_t index_capacity = (aligned_addr >= capaddr) ? 0u : (capaddr - aligned_addr)/sizeof(size_type);
2261
-
2262
- //Capacity is constant, we're not going to change it
2263
- if(index_capacity < PosCount){
2264
- indexes = positions;
2265
- index_capacity = PosCount;
2266
- }
2267
- if(index_capacity > remaining)
2268
- index_capacity = remaining;
2269
- BidirIt limit = first;
2270
- boost::container::iterator_advance(limit, index_capacity);
2271
- this->priv_insert_ordered_range(UniqueBool(), index_capacity, first, limit, indexes, comp);
2272
- first = limit;
2273
- remaining -= index_capacity;
2289
+ else {
2290
+ if (!comp(*first2, *first1)) {
2291
+ ++first1;
2274
2292
  }
2293
+ ++first2;
2275
2294
  }
2276
2295
  }
2277
- else{
2278
- this->insert(this->cend(), n, first, last);
2279
- }
2280
2296
  }
2281
2297
 
2282
- template <class UniqueBool, class BidirIt, class Compare>
2283
- void priv_insert_ordered_range
2284
- (UniqueBool, size_type const n, BidirIt first, BidirIt const last, size_type positions[], Compare comp)
2298
+ template<class FwdIt, class Compare>
2299
+ BOOST_CONTAINER_FORCEINLINE void priv_merge_in_new_buffer(FwdIt, size_type, Compare, version_0)
2285
2300
  {
2286
- //Linear: at most N + M -1 comparisons
2287
- //Log: MlogN
2288
- //Average
2289
- //Linear: N + M - 2
2290
- //Log: MlogN
2291
- //N+M - 2
2292
- //N
2293
- //(N+M)/2 < MlogN
2294
- //(N/M+1)/2 <= logN
2295
- //bool const linear = !s || !n || (s <= n) || ((s+n)/n/2 < logN);
2296
- size_type const s = this->size();
2297
- size_type remaining = n;
2298
- T* const pbeg = this->priv_raw_begin();
2299
- T* const pend = pbeg + s;
2300
- T* pcur = pbeg;
2301
- size_type *position = positions;
2302
- size_type added_in_middle = 0;
2303
- if(first != last && pcur != pend){
2304
- while(1){
2305
- //maintain stability moving external values only if they are strictly less
2306
- if(comp(*first, *pcur)) {
2307
- *position = static_cast<size_type>(pcur - pbeg);
2308
- BOOST_ASSERT((position == positions) || (*(position-1) == size_type(-1)) || (*(position-1) <= *position));
2309
- ++position;
2310
- ++added_in_middle;
2311
- --remaining;
2312
- if(++first == last) break;
2313
- }
2314
- else if(UniqueBool::value && !comp(*pcur, *first)){
2315
- *position = size_type(-1);
2316
- ++position;
2317
- --remaining;
2318
- if(++first == last) break;
2319
- }
2320
- else{
2321
- if(++pcur == pend) break;
2322
- }
2323
- }
2324
- }
2325
- this->insert_ordered_at(added_in_middle, position, first);
2326
- this->insert(this->cend(), remaining, first, last);
2301
+ throw_bad_alloc();
2327
2302
  }
2328
2303
 
2329
- template<class UniqueBool, class FwdIt, class Compare>
2330
- void priv_merge_in_new_buffer
2331
- (UniqueBool, FwdIt first, size_type n, Compare comp, pointer new_storage, size_type const new_cap)
2304
+ template<class FwdIt, class Compare, class Version>
2305
+ void priv_merge_in_new_buffer(FwdIt first, size_type n, Compare comp, Version)
2332
2306
  {
2307
+ size_type const new_size = this->size() + n;
2308
+ size_type new_cap = new_size;
2309
+ pointer p = pointer();
2310
+ pointer const new_storage = this->m_holder.allocation_command(allocate_new, new_size, new_cap, p);
2311
+
2333
2312
  BOOST_ASSERT((new_cap >= this->size() ) && (new_cap - this->size()) >= n);
2334
2313
  allocator_type &a = this->m_holder.alloc();
2335
2314
  typename value_traits::ArrayDeallocator new_buffer_deallocator(new_storage, a, new_cap);
@@ -2337,7 +2316,7 @@ class vector
2337
2316
  T* pbeg = this->priv_raw_begin();
2338
2317
  size_type const old_size = this->size();
2339
2318
  T* const pend = pbeg + old_size;
2340
- T* d_first = container_detail::to_raw_pointer(new_storage);
2319
+ T* d_first = boost::movelib::to_raw_pointer(new_storage);
2341
2320
  size_type added = n;
2342
2321
  //Merge in new buffer loop
2343
2322
  while(1){
@@ -2351,19 +2330,14 @@ class vector
2351
2330
  }
2352
2331
  //maintain stability moving external values only if they are strictly less
2353
2332
  else if(comp(*first, *pbeg)) {
2354
- allocator_traits_type::construct( this->m_holder.alloc(), d_first, ::boost::move(*first) );
2333
+ allocator_traits_type::construct( this->m_holder.alloc(), d_first, *first );
2355
2334
  new_values_destroyer.increment_size(1u);
2356
2335
  ++first;
2357
2336
  --n;
2358
2337
  ++d_first;
2359
2338
  }
2360
- else if(UniqueBool::value && !comp(*pbeg, *first)){
2361
- ++first;
2362
- --n;
2363
- --added;
2364
- }
2365
2339
  else{
2366
- allocator_traits_type::construct( this->m_holder.alloc(), d_first, ::boost::move(*pbeg) );
2340
+ allocator_traits_type::construct( this->m_holder.alloc(), d_first, boost::move(*pbeg) );
2367
2341
  new_values_destroyer.increment_size(1u);
2368
2342
  ++pbeg;
2369
2343
  ++d_first;
@@ -2373,8 +2347,8 @@ class vector
2373
2347
  //Nothrow operations
2374
2348
  pointer const old_p = this->m_holder.start();
2375
2349
  size_type const old_cap = this->m_holder.capacity();
2376
- boost::container::destroy_alloc_n(a, container_detail::to_raw_pointer(old_p), old_size);
2377
- a.deallocate(old_p, old_cap);
2350
+ boost::container::destroy_alloc_n(a, boost::movelib::to_raw_pointer(old_p), old_size);
2351
+ this->m_holder.deallocate(old_p, old_cap);
2378
2352
  this->m_holder.m_size = old_size + added;
2379
2353
  this->m_holder.start(new_storage);
2380
2354
  this->m_holder.capacity(new_cap);
@@ -2382,10 +2356,10 @@ class vector
2382
2356
  new_values_destroyer.release();
2383
2357
  }
2384
2358
 
2385
- bool room_enough() const
2359
+ BOOST_CONTAINER_FORCEINLINE bool room_enough() const
2386
2360
  { return this->m_holder.m_size < this->m_holder.capacity(); }
2387
2361
 
2388
- pointer back_ptr() const
2362
+ BOOST_CONTAINER_FORCEINLINE pointer back_ptr() const
2389
2363
  { return this->m_holder.start() + this->m_holder.m_size; }
2390
2364
 
2391
2365
  size_type priv_index_of(pointer p) const
@@ -2397,10 +2371,10 @@ class vector
2397
2371
 
2398
2372
  template<class OtherAllocator>
2399
2373
  void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
2400
- , typename container_detail::enable_if_c
2401
- < container_detail::is_version<OtherAllocator, 0>::value >::type * = 0)
2374
+ , typename dtl::enable_if_c
2375
+ < dtl::is_version<OtherAllocator, 0>::value >::type * = 0)
2402
2376
  {
2403
- if(!container_detail::is_same<OtherAllocator, allocator_type>::value &&
2377
+ if(!dtl::is_same<OtherAllocator, allocator_type>::value &&
2404
2378
  this->capacity() < x.size()){
2405
2379
  throw_bad_alloc();
2406
2380
  }
@@ -2414,10 +2388,10 @@ class vector
2414
2388
 
2415
2389
  template<class OtherAllocator>
2416
2390
  void priv_move_assign(BOOST_RV_REF_BEG vector<T, OtherAllocator> BOOST_RV_REF_END x
2417
- , typename container_detail::disable_if_or
2391
+ , typename dtl::disable_if_or
2418
2392
  < void
2419
- , container_detail::is_version<OtherAllocator, 0>
2420
- , container_detail::is_different<OtherAllocator, allocator_type>
2393
+ , dtl::is_version<OtherAllocator, 0>
2394
+ , dtl::is_different<OtherAllocator, allocator_type>
2421
2395
  >::type * = 0)
2422
2396
  {
2423
2397
  //for move assignment, no aliasing (&x != this) is assummed.
@@ -2439,25 +2413,25 @@ class vector
2439
2413
  }
2440
2414
  else if(is_propagable_from_x){
2441
2415
  this->clear();
2442
- this->m_holder.alloc().deallocate(this->m_holder.m_start, this->m_holder.m_capacity);
2416
+ this->m_holder.deallocate(this->m_holder.m_start, this->m_holder.m_capacity);
2443
2417
  this->m_holder.steal_resources(x.m_holder);
2444
2418
  }
2445
2419
  //Else do a one by one move
2446
2420
  else{
2447
- this->assign( boost::make_move_iterator(container_detail::iterator_to_raw_pointer(x.begin()))
2448
- , boost::make_move_iterator(container_detail::iterator_to_raw_pointer(x.end() ))
2421
+ this->assign( boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(x.begin()))
2422
+ , boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(x.end() ))
2449
2423
  );
2450
2424
  }
2451
2425
  //Move allocator if needed
2452
- container_detail::move_alloc(this_alloc, x_alloc, container_detail::bool_<propagate_alloc>());
2426
+ dtl::move_alloc(this_alloc, x_alloc, dtl::bool_<propagate_alloc>());
2453
2427
  }
2454
2428
 
2455
2429
  template<class OtherAllocator>
2456
2430
  void priv_copy_assign(const vector<T, OtherAllocator> &x
2457
- , typename container_detail::enable_if_c
2458
- < container_detail::is_version<OtherAllocator, 0>::value >::type * = 0)
2431
+ , typename dtl::enable_if_c
2432
+ < dtl::is_version<OtherAllocator, 0>::value >::type * = 0)
2459
2433
  {
2460
- if(!container_detail::is_same<OtherAllocator, allocator_type>::value &&
2434
+ if(!dtl::is_same<OtherAllocator, allocator_type>::value &&
2461
2435
  this->capacity() < x.size()){
2462
2436
  throw_bad_alloc();
2463
2437
  }
@@ -2470,31 +2444,31 @@ class vector
2470
2444
  }
2471
2445
 
2472
2446
  template<class OtherAllocator>
2473
- typename container_detail::disable_if_or
2447
+ typename dtl::disable_if_or
2474
2448
  < void
2475
- , container_detail::is_version<OtherAllocator, 0>
2476
- , container_detail::is_different<OtherAllocator, allocator_type>
2449
+ , dtl::is_version<OtherAllocator, 0>
2450
+ , dtl::is_different<OtherAllocator, allocator_type>
2477
2451
  >::type
2478
2452
  priv_copy_assign(const vector<T, OtherAllocator> &x)
2479
2453
  {
2480
2454
  allocator_type &this_alloc = this->m_holder.alloc();
2481
2455
  const allocator_type &x_alloc = x.m_holder.alloc();
2482
- container_detail::bool_<allocator_traits_type::
2456
+ dtl::bool_<allocator_traits_type::
2483
2457
  propagate_on_container_copy_assignment::value> flag;
2484
2458
  if(flag && this_alloc != x_alloc){
2485
2459
  this->clear();
2486
2460
  this->shrink_to_fit();
2487
2461
  }
2488
- container_detail::assign_alloc(this_alloc, x_alloc, flag);
2462
+ dtl::assign_alloc(this_alloc, x_alloc, flag);
2489
2463
  this->assign( x.priv_raw_begin(), x.priv_raw_end() );
2490
2464
  }
2491
2465
 
2492
2466
  template<class Vector> //Template it to avoid it in explicit instantiations
2493
- void priv_swap(Vector &x, container_detail::true_type) //version_0
2467
+ void priv_swap(Vector &x, dtl::true_type) //version_0
2494
2468
  { this->m_holder.deep_swap(x.m_holder); }
2495
2469
 
2496
2470
  template<class Vector> //Template it to avoid it in explicit instantiations
2497
- void priv_swap(Vector &x, container_detail::false_type) //version_N
2471
+ void priv_swap(Vector &x, dtl::false_type) //version_N
2498
2472
  {
2499
2473
  const bool propagate_alloc = allocator_traits_type::propagate_on_container_swap::value;
2500
2474
  if(are_swap_propagable( this->get_stored_allocator(), this->m_holder.start()
@@ -2514,22 +2488,22 @@ class vector
2514
2488
  }
2515
2489
  //... and move-insert the remaining range
2516
2490
  sml.insert( sml.cend()
2517
- , boost::make_move_iterator(container_detail::iterator_to_raw_pointer(big.nth(common_elements)))
2518
- , boost::make_move_iterator(container_detail::iterator_to_raw_pointer(big.end()))
2491
+ , boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(big.nth(common_elements)))
2492
+ , boost::make_move_iterator(boost::movelib::iterator_to_raw_pointer(big.end()))
2519
2493
  );
2520
2494
  //Destroy remaining elements
2521
2495
  big.erase(big.nth(common_elements), big.cend());
2522
2496
  }
2523
2497
  //And now swap the allocator
2524
- container_detail::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), container_detail::bool_<propagate_alloc>());
2498
+ dtl::swap_alloc(this->m_holder.alloc(), x.m_holder.alloc(), dtl::bool_<propagate_alloc>());
2525
2499
  }
2526
2500
 
2527
2501
  void priv_reserve_no_capacity(size_type, version_0)
2528
2502
  { throw_bad_alloc(); }
2529
2503
 
2530
- container_detail::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*> priv_dummy_empty_proxy()
2504
+ dtl::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*> priv_dummy_empty_proxy()
2531
2505
  {
2532
- return container_detail::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*>
2506
+ return dtl::insert_range_proxy<Allocator, boost::move_iterator<T*>, T*>
2533
2507
  (::boost::make_move_iterator((T *)0));
2534
2508
  }
2535
2509
 
@@ -2537,10 +2511,10 @@ class vector
2537
2511
  {
2538
2512
  //There is not enough memory, allocate a new buffer
2539
2513
  //Pass the hint so that allocators can take advantage of this.
2540
- pointer const p = allocator_traits_type::allocate(this->m_holder.alloc(), new_cap, this->m_holder.m_start);
2514
+ pointer const p = this->m_holder.allocate(new_cap);
2541
2515
  //We will reuse insert code, so create a dummy input iterator
2542
2516
  this->priv_forward_range_insert_new_allocation
2543
- ( container_detail::to_raw_pointer(p), new_cap, this->priv_raw_end(), 0, this->priv_dummy_empty_proxy());
2517
+ ( boost::movelib::to_raw_pointer(p), new_cap, this->priv_raw_end(), 0, this->priv_dummy_empty_proxy());
2544
2518
  }
2545
2519
 
2546
2520
  void priv_reserve_no_capacity(size_type new_cap, version_2)
@@ -2561,7 +2535,7 @@ class vector
2561
2535
  this->m_holder.capacity(real_cap);
2562
2536
  }
2563
2537
  else{ //If there is no forward expansion, move objects, we will reuse insertion code
2564
- T * const new_mem = container_detail::to_raw_pointer(ret);
2538
+ T * const new_mem = boost::movelib::to_raw_pointer(ret);
2565
2539
  T * const ins_pos = this->priv_raw_end();
2566
2540
  if(reuse){ //Backwards (and possibly forward) expansion
2567
2541
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
@@ -2583,7 +2557,8 @@ class vector
2583
2557
  void priv_destroy_last(const bool moved = false) BOOST_NOEXCEPT_OR_NOTHROW
2584
2558
  {
2585
2559
  (void)moved;
2586
- if(!(value_traits::trivial_dctr || (value_traits::trivial_dctr_after_move && moved))){
2560
+ const bool skip_destructor = value_traits::trivial_dctr || (value_traits::trivial_dctr_after_move && moved);
2561
+ if(!skip_destructor){
2587
2562
  value_type* const p = this->priv_raw_end() - 1;
2588
2563
  allocator_traits_type::destroy(this->get_stored_allocator(), p);
2589
2564
  }
@@ -2620,14 +2595,14 @@ class vector
2620
2595
  {
2621
2596
  BOOST_ASSERT(this->priv_in_range_or_end(p));
2622
2597
  return this->priv_forward_range_insert
2623
- ( vector_iterator_get_ptr(p), 1, container_detail::get_insert_value_proxy<T*, Allocator>(::boost::forward<U>(x)));
2598
+ ( vector_iterator_get_ptr(p), 1, dtl::get_insert_value_proxy<T*, Allocator>(::boost::forward<U>(x)));
2624
2599
  }
2625
2600
 
2626
- container_detail::insert_copy_proxy<Allocator, T*> priv_single_insert_proxy(const T &x)
2627
- { return container_detail::insert_copy_proxy<Allocator, T*> (x); }
2601
+ dtl::insert_copy_proxy<Allocator, T*> priv_single_insert_proxy(const T &x)
2602
+ { return dtl::insert_copy_proxy<Allocator, T*> (x); }
2628
2603
 
2629
- container_detail::insert_move_proxy<Allocator, T*> priv_single_insert_proxy(BOOST_RV_REF(T) x)
2630
- { return container_detail::insert_move_proxy<Allocator, T*> (x); }
2604
+ dtl::insert_move_proxy<Allocator, T*> priv_single_insert_proxy(BOOST_RV_REF(T) x)
2605
+ { return dtl::insert_move_proxy<Allocator, T*> (x); }
2631
2606
 
2632
2607
  template <class U>
2633
2608
  void priv_push_back(BOOST_FWD_REF(U) u)
@@ -2645,14 +2620,14 @@ class vector
2645
2620
  }
2646
2621
  }
2647
2622
 
2648
- container_detail::insert_n_copies_proxy<Allocator, T*> priv_resize_proxy(const T &x)
2649
- { return container_detail::insert_n_copies_proxy<Allocator, T*>(x); }
2623
+ BOOST_CONTAINER_FORCEINLINE dtl::insert_n_copies_proxy<Allocator, T*> priv_resize_proxy(const T &x)
2624
+ { return dtl::insert_n_copies_proxy<Allocator, T*>(x); }
2650
2625
 
2651
- container_detail::insert_default_initialized_n_proxy<Allocator, T*> priv_resize_proxy(default_init_t)
2652
- { return container_detail::insert_default_initialized_n_proxy<Allocator, T*>(); }
2626
+ BOOST_CONTAINER_FORCEINLINE dtl::insert_default_initialized_n_proxy<Allocator, T*> priv_resize_proxy(default_init_t)
2627
+ { return dtl::insert_default_initialized_n_proxy<Allocator, T*>(); }
2653
2628
 
2654
- container_detail::insert_value_initialized_n_proxy<Allocator, T*> priv_resize_proxy(value_init_t)
2655
- { return container_detail::insert_value_initialized_n_proxy<Allocator, T*>(); }
2629
+ BOOST_CONTAINER_FORCEINLINE dtl::insert_value_initialized_n_proxy<Allocator, T*> priv_resize_proxy(value_init_t)
2630
+ { return dtl::insert_value_initialized_n_proxy<Allocator, T*>(); }
2656
2631
 
2657
2632
  template <class U>
2658
2633
  void priv_resize(size_type new_size, const U& u)
@@ -2668,7 +2643,7 @@ class vector
2668
2643
  }
2669
2644
  }
2670
2645
 
2671
- void priv_shrink_to_fit(version_0) BOOST_NOEXCEPT_OR_NOTHROW
2646
+ BOOST_CONTAINER_FORCEINLINE void priv_shrink_to_fit(version_0) BOOST_NOEXCEPT_OR_NOTHROW
2672
2647
  {}
2673
2648
 
2674
2649
  void priv_shrink_to_fit(version_1)
@@ -2677,21 +2652,21 @@ class vector
2677
2652
  if(cp){
2678
2653
  const size_type sz = this->size();
2679
2654
  if(!sz){
2680
- this->m_holder.alloc().deallocate(this->m_holder.m_start, cp);
2655
+ this->m_holder.deallocate(this->m_holder.m_start, cp);
2681
2656
  this->m_holder.m_start = pointer();
2682
2657
  this->m_holder.m_capacity = 0;
2683
2658
  }
2684
2659
  else if(sz < cp){
2685
2660
  //Allocate a new buffer.
2686
2661
  //Pass the hint so that allocators can take advantage of this.
2687
- pointer const p = allocator_traits_type::allocate(this->m_holder.alloc(), sz, this->m_holder.m_start);
2662
+ pointer const p = this->m_holder.allocate(sz);
2688
2663
 
2689
2664
  //We will reuse insert code, so create a dummy input iterator
2690
2665
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
2691
2666
  ++this->num_alloc;
2692
2667
  #endif
2693
2668
  this->priv_forward_range_insert_new_allocation
2694
- ( container_detail::to_raw_pointer(p), sz
2669
+ ( boost::movelib::to_raw_pointer(p), sz
2695
2670
  , this->priv_raw_begin(), 0, this->priv_dummy_empty_proxy());
2696
2671
  }
2697
2672
  }
@@ -2703,7 +2678,7 @@ class vector
2703
2678
  if(cp){
2704
2679
  const size_type sz = this->size();
2705
2680
  if(!sz){
2706
- this->m_holder.alloc().deallocate(this->m_holder.m_start, cp);
2681
+ this->m_holder.deallocate(this->m_holder.m_start, cp);
2707
2682
  this->m_holder.m_start = pointer();
2708
2683
  this->m_holder.m_capacity = 0;
2709
2684
  }
@@ -2735,12 +2710,11 @@ class vector
2735
2710
  {
2736
2711
  //Check if we have enough memory or try to expand current memory
2737
2712
  const size_type n_pos = pos - this->m_holder.start();
2738
- T *const raw_pos = container_detail::to_raw_pointer(pos);
2713
+ T *const raw_pos = boost::movelib::to_raw_pointer(pos);
2739
2714
 
2740
- const size_type new_cap = this->m_holder.next_capacity(n);
2715
+ const size_type new_cap = this->m_holder.template next_capacity<growth_factor_type>(n);
2741
2716
  //Pass the hint so that allocators can take advantage of this.
2742
- T * const new_buf = container_detail::to_raw_pointer
2743
- (allocator_traits_type::allocate(this->m_holder.alloc(), new_cap, this->m_holder.m_start));
2717
+ T * const new_buf = boost::movelib::to_raw_pointer(this->m_holder.allocate(new_cap));
2744
2718
  #ifdef BOOST_CONTAINER_VECTOR_ALLOC_STATS
2745
2719
  ++this->num_alloc;
2746
2720
  #endif
@@ -2754,12 +2728,12 @@ class vector
2754
2728
  (const pointer &pos, const size_type n, const InsertionProxy insert_range_proxy, version_2)
2755
2729
  {
2756
2730
  //Check if we have enough memory or try to expand current memory
2757
- T *const raw_pos = container_detail::to_raw_pointer(pos);
2731
+ T *const raw_pos = boost::movelib::to_raw_pointer(pos);
2758
2732
  const size_type n_pos = raw_pos - this->priv_raw_begin();
2759
2733
 
2760
2734
  //There is not enough memory, allocate a new
2761
2735
  //buffer or expand the old one.
2762
- size_type real_cap = this->m_holder.next_capacity(n);
2736
+ size_type real_cap = this->m_holder.template next_capacity<growth_factor_type>(n);
2763
2737
  pointer reuse(this->m_holder.start());
2764
2738
  pointer const ret (this->m_holder.allocation_command
2765
2739
  (allocate_new | expand_fwd | expand_bwd, this->m_holder.m_size + n, real_cap, reuse));
@@ -2781,7 +2755,7 @@ class vector
2781
2755
  ++this->num_expand_bwd;
2782
2756
  #endif
2783
2757
  this->priv_forward_range_insert_expand_backwards
2784
- (container_detail::to_raw_pointer(ret), real_cap, raw_pos, n, insert_range_proxy);
2758
+ (boost::movelib::to_raw_pointer(ret), real_cap, raw_pos, n, insert_range_proxy);
2785
2759
  }
2786
2760
  }
2787
2761
  //New buffer
@@ -2790,7 +2764,7 @@ class vector
2790
2764
  ++this->num_alloc;
2791
2765
  #endif
2792
2766
  this->priv_forward_range_insert_new_allocation
2793
- ( container_detail::to_raw_pointer(ret), real_cap, raw_pos, n, insert_range_proxy);
2767
+ ( boost::movelib::to_raw_pointer(ret), real_cap, raw_pos, n, insert_range_proxy);
2794
2768
  }
2795
2769
 
2796
2770
  return iterator(this->m_holder.start() + n_pos);
@@ -2810,7 +2784,7 @@ class vector
2810
2784
  }
2811
2785
  else{
2812
2786
  //Expand forward
2813
- T *const raw_pos = container_detail::to_raw_pointer(pos);
2787
+ T *const raw_pos = boost::movelib::to_raw_pointer(pos);
2814
2788
  const size_type n_pos = raw_pos - this->priv_raw_begin();
2815
2789
  this->priv_forward_range_insert_expand_forward(raw_pos, n, insert_range_proxy);
2816
2790
  return iterator(this->m_holder.start() + n_pos);
@@ -2833,7 +2807,7 @@ class vector
2833
2807
  }
2834
2808
 
2835
2809
  template <class InsertionProxy, class AllocVersion>
2836
- iterator priv_forward_range_insert_at_end
2810
+ BOOST_CONTAINER_FORCEINLINE iterator priv_forward_range_insert_at_end
2837
2811
  (const size_type n, const InsertionProxy insert_range_proxy, AllocVersion)
2838
2812
  {
2839
2813
  return this->priv_forward_range_insert(this->back_ptr(), n, insert_range_proxy);
@@ -2926,10 +2900,10 @@ class vector
2926
2900
  }
2927
2901
 
2928
2902
  private:
2929
- T *priv_raw_begin() const
2930
- { return container_detail::to_raw_pointer(m_holder.start()); }
2903
+ BOOST_CONTAINER_FORCEINLINE T *priv_raw_begin() const
2904
+ { return boost::movelib::to_raw_pointer(m_holder.start()); }
2931
2905
 
2932
- T* priv_raw_end() const
2906
+ BOOST_CONTAINER_FORCEINLINE T* priv_raw_end() const
2933
2907
  { return this->priv_raw_begin() + this->m_holder.m_size; }
2934
2908
 
2935
2909
  template <class InsertionProxy>
@@ -3017,10 +2991,10 @@ class vector
3017
2991
  //If there is allocated memory, destroy and deallocate
3018
2992
  if(!value_traits::trivial_dctr_after_move)
3019
2993
  boost::container::destroy_alloc_n(this->get_stored_allocator(), old_buffer, this->m_holder.m_size);
3020
- this->m_holder.alloc().deallocate(this->m_holder.start(), this->m_holder.capacity());
2994
+ this->m_holder.deallocate(this->m_holder.start(), this->m_holder.capacity());
3021
2995
  }
3022
2996
  this->m_holder.start(new_start);
3023
- this->m_holder.m_size = new_finish - new_start;
2997
+ this->m_holder.m_size = size_type(new_finish - new_start);
3024
2998
  this->m_holder.capacity(new_cap);
3025
2999
  //All construction successful, disable rollbacks
3026
3000
  new_values_destroyer.release();
@@ -3356,12 +3330,12 @@ class vector
3356
3330
  }
3357
3331
  }
3358
3332
 
3359
- bool priv_in_range(const_iterator pos) const
3333
+ BOOST_CONTAINER_FORCEINLINE bool priv_in_range(const_iterator pos) const
3360
3334
  {
3361
3335
  return (this->begin() <= pos) && (pos < this->end());
3362
3336
  }
3363
3337
 
3364
- bool priv_in_range_or_end(const_iterator pos) const
3338
+ BOOST_CONTAINER_FORCEINLINE bool priv_in_range_or_end(const_iterator pos) const
3365
3339
  {
3366
3340
  return (this->begin() <= pos) && (pos <= this->end());
3367
3341
  }