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
@@ -25,12 +25,12 @@
25
25
  #include <boost/container/detail/workaround.hpp>
26
26
 
27
27
  #include <boost/container/allocator_traits.hpp>
28
- #include <boost/container/detail/to_raw_pointer.hpp>
28
+ #include <boost/move/detail/to_raw_pointer.hpp>
29
29
  #include <boost/container/detail/version_type.hpp>
30
30
 
31
31
  namespace boost {
32
32
  namespace container {
33
- namespace container_detail {
33
+ namespace dtl {
34
34
 
35
35
  //!A deleter for scoped_ptr that deallocates the memory
36
36
  //!allocated for an object using a STL allocator.
@@ -39,8 +39,8 @@ struct scoped_deallocator
39
39
  {
40
40
  typedef allocator_traits<Allocator> allocator_traits_type;
41
41
  typedef typename allocator_traits_type::pointer pointer;
42
- typedef container_detail::integral_constant<unsigned,
43
- boost::container::container_detail::
42
+ typedef dtl::integral_constant<unsigned,
43
+ boost::container::dtl::
44
44
  version<Allocator>::value> alloc_version;
45
45
 
46
46
  private:
@@ -142,8 +142,8 @@ struct scoped_destroy_deallocator
142
142
  typedef boost::container::allocator_traits<Allocator> AllocTraits;
143
143
  typedef typename AllocTraits::pointer pointer;
144
144
  typedef typename AllocTraits::size_type size_type;
145
- typedef container_detail::integral_constant<unsigned,
146
- boost::container::container_detail::
145
+ typedef dtl::integral_constant<unsigned,
146
+ boost::container::dtl::
147
147
  version<Allocator>::value> alloc_version;
148
148
 
149
149
  scoped_destroy_deallocator(pointer p, Allocator& a)
@@ -152,7 +152,7 @@ struct scoped_destroy_deallocator
152
152
  ~scoped_destroy_deallocator()
153
153
  {
154
154
  if(m_ptr){
155
- AllocTraits::destroy(m_alloc, container_detail::to_raw_pointer(m_ptr));
155
+ AllocTraits::destroy(m_alloc, boost::movelib::to_raw_pointer(m_ptr));
156
156
  priv_deallocate(m_ptr, alloc_version());
157
157
  }
158
158
  }
@@ -202,7 +202,7 @@ struct scoped_destructor_n
202
202
  ~scoped_destructor_n()
203
203
  {
204
204
  if(!m_p) return;
205
- value_type *raw_ptr = container_detail::to_raw_pointer(m_p);
205
+ value_type *raw_ptr = boost::movelib::to_raw_pointer(m_p);
206
206
  while(m_n--){
207
207
  AllocTraits::destroy(m_a, raw_ptr++);
208
208
  }
@@ -270,12 +270,12 @@ class scoped_destructor
270
270
  };
271
271
 
272
272
 
273
- template<class Allocator>
273
+ template<class Allocator, class Value = typename Allocator::value_type>
274
274
  class value_destructor
275
275
  {
276
276
  typedef boost::container::allocator_traits<Allocator> AllocTraits;
277
277
  public:
278
- typedef typename Allocator::value_type value_type;
278
+ typedef Value value_type;
279
279
  value_destructor(Allocator &a, value_type &rv)
280
280
  : rv_(rv), a_(a)
281
281
  {}
@@ -296,8 +296,8 @@ class allocator_destroyer
296
296
  typedef boost::container::allocator_traits<Allocator> AllocTraits;
297
297
  typedef typename AllocTraits::value_type value_type;
298
298
  typedef typename AllocTraits::pointer pointer;
299
- typedef container_detail::integral_constant<unsigned,
300
- boost::container::container_detail::
299
+ typedef dtl::integral_constant<unsigned,
300
+ boost::container::dtl::
301
301
  version<Allocator>::value> alloc_version;
302
302
 
303
303
  private:
@@ -317,7 +317,7 @@ class allocator_destroyer
317
317
 
318
318
  void operator()(const pointer &p)
319
319
  {
320
- AllocTraits::destroy(a_, container_detail::to_raw_pointer(p));
320
+ AllocTraits::destroy(a_, boost::movelib::to_raw_pointer(p));
321
321
  this->priv_deallocate(p, alloc_version());
322
322
  }
323
323
  };
@@ -339,7 +339,7 @@ class allocator_destroyer_and_chain_builder
339
339
 
340
340
  void operator()(const typename Allocator::pointer &p)
341
341
  {
342
- allocator_traits<Allocator>::destroy(a_, container_detail::to_raw_pointer(p));
342
+ allocator_traits<Allocator>::destroy(a_, boost::movelib::to_raw_pointer(p));
343
343
  c_.push_back(p);
344
344
  }
345
345
  };
@@ -369,7 +369,7 @@ class allocator_multialloc_chain_node_deallocator
369
369
  }
370
370
  };
371
371
 
372
- } //namespace container_detail {
372
+ } //namespace dtl {
373
373
  } //namespace container {
374
374
  } //namespace boost {
375
375
 
@@ -35,7 +35,7 @@
35
35
 
36
36
  namespace boost { namespace container {
37
37
 
38
- namespace container_detail {
38
+ namespace dtl {
39
39
 
40
40
 
41
41
  // Check if we can detect is_convertible using advanced SFINAE expressions
@@ -110,10 +110,10 @@ template < typename ConstructAlloc
110
110
  , typename T
111
111
  , class ...Args
112
112
  >
113
- inline typename container_detail::enable_if_and
113
+ inline typename dtl::enable_if_and
114
114
  < void
115
- , container_detail::is_not_pair<T>
116
- , container_detail::not_< uses_allocator<T, ArgAlloc> >
115
+ , dtl::is_not_pair<T>
116
+ , dtl::not_< uses_allocator<T, ArgAlloc> >
117
117
  >::type dispatch_uses_allocator
118
118
  ( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p, BOOST_FWD_REF(Args)...args)
119
119
  {
@@ -127,9 +127,9 @@ template < typename ConstructAlloc
127
127
  , typename T
128
128
  , class ...Args
129
129
  >
130
- inline typename container_detail::enable_if_and
130
+ inline typename dtl::enable_if_and
131
131
  < void
132
- , container_detail::is_not_pair<T>
132
+ , dtl::is_not_pair<T>
133
133
  , uses_allocator<T, ArgAlloc>
134
134
  , is_constructible_with_allocator_prefix<T, ArgAlloc, Args...>
135
135
  >::type dispatch_uses_allocator
@@ -146,11 +146,11 @@ template < typename ConstructAlloc
146
146
  , typename T
147
147
  , class ...Args
148
148
  >
149
- inline typename container_detail::enable_if_and
149
+ inline typename dtl::enable_if_and
150
150
  < void
151
- , container_detail::is_not_pair<T>
151
+ , dtl::is_not_pair<T>
152
152
  , uses_allocator<T, ArgAlloc>
153
- , container_detail::not_<is_constructible_with_allocator_prefix<T, ArgAlloc, Args...> >
153
+ , dtl::not_<is_constructible_with_allocator_prefix<T, ArgAlloc, Args...> >
154
154
  >::type dispatch_uses_allocator
155
155
  ( ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p, BOOST_FWD_REF(Args)...args)
156
156
  {
@@ -162,10 +162,10 @@ inline typename container_detail::enable_if_and
162
162
 
163
163
  #define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
164
164
  template <typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
165
- inline typename container_detail::enable_if_and\
165
+ inline typename dtl::enable_if_and\
166
166
  < void\
167
- , container_detail::is_not_pair<T>\
168
- , container_detail::not_<uses_allocator<T, ArgAlloc> >\
167
+ , dtl::is_not_pair<T>\
168
+ , dtl::not_<uses_allocator<T, ArgAlloc> >\
169
169
  >::type\
170
170
  dispatch_uses_allocator\
171
171
  (ConstructAlloc &construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
@@ -179,9 +179,9 @@ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR
179
179
 
180
180
  #define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
181
181
  template < typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
182
- inline typename container_detail::enable_if_and\
182
+ inline typename dtl::enable_if_and\
183
183
  < void\
184
- , container_detail::is_not_pair<T>\
184
+ , dtl::is_not_pair<T>\
185
185
  , uses_allocator<T, ArgAlloc>\
186
186
  , is_constructible_with_allocator_prefix<T, ArgAlloc BOOST_MOVE_I##N BOOST_MOVE_TARG##N>\
187
187
  >::type\
@@ -197,11 +197,11 @@ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR
197
197
 
198
198
  #define BOOST_CONTAINER_SCOPED_ALLOCATOR_DISPATCH_USES_ALLOCATOR_CODE(N) \
199
199
  template < typename ConstructAlloc, typename ArgAlloc, typename T BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
200
- inline typename container_detail::enable_if_and\
200
+ inline typename dtl::enable_if_and\
201
201
  < void\
202
- , container_detail::is_not_pair<T>\
202
+ , dtl::is_not_pair<T>\
203
203
  , uses_allocator<T, ArgAlloc>\
204
- , container_detail::not_<is_constructible_with_allocator_prefix<T, ArgAlloc BOOST_MOVE_I##N BOOST_MOVE_TARG##N> >\
204
+ , dtl::not_<is_constructible_with_allocator_prefix<T, ArgAlloc BOOST_MOVE_I##N BOOST_MOVE_TARG##N> >\
205
205
  >::type\
206
206
  dispatch_uses_allocator\
207
207
  (ConstructAlloc& construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, T* p BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
@@ -219,18 +219,18 @@ template < typename ConstructAlloc
219
219
  , typename ArgAlloc
220
220
  , typename Pair
221
221
  > inline
222
- BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if<container_detail::is_pair<Pair> >::type)
222
+ BOOST_CONTAINER_DOC1ST(void, typename dtl::enable_if<dtl::is_pair<Pair> >::type)
223
223
  dispatch_uses_allocator
224
224
  ( ConstructAlloc & construct_alloc
225
225
  , BOOST_FWD_REF(ArgAlloc) arg_alloc
226
226
  , Pair* p)
227
227
  {
228
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->first));
228
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(p->first));
229
229
  BOOST_TRY{
230
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->second));
230
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(p->second));
231
231
  }
232
232
  BOOST_CATCH(...) {
233
- allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(p->first));
233
+ allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(p->first));
234
234
  BOOST_RETHROW
235
235
  }
236
236
  BOOST_CATCH_END
@@ -240,18 +240,18 @@ BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if<container_deta
240
240
  template < typename ConstructAlloc
241
241
  , typename ArgAlloc
242
242
  , class Pair, class U, class V>
243
- BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if<container_detail::is_pair<Pair> >::type)
243
+ BOOST_CONTAINER_DOC1ST(void, typename dtl::enable_if<dtl::is_pair<Pair> >::type)
244
244
  dispatch_uses_allocator
245
245
  ( ConstructAlloc & construct_alloc
246
246
  , BOOST_FWD_REF(ArgAlloc) arg_alloc
247
247
  , Pair* p, BOOST_FWD_REF(U) x, BOOST_FWD_REF(V) y)
248
248
  {
249
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->first), ::boost::forward<U>(x));
249
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(p->first), ::boost::forward<U>(x));
250
250
  BOOST_TRY{
251
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->second), ::boost::forward<V>(y));
251
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(p->second), ::boost::forward<V>(y));
252
252
  }
253
253
  BOOST_CATCH(...){
254
- allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(p->first));
254
+ allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(p->first));
255
255
  BOOST_RETHROW
256
256
  }
257
257
  BOOST_CATCH_END
@@ -260,7 +260,7 @@ BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if<container_deta
260
260
  template < typename ConstructAlloc
261
261
  , typename ArgAlloc
262
262
  , class Pair, class Pair2>
263
- BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if< container_detail::is_pair<Pair> >::type)
263
+ BOOST_CONTAINER_DOC1ST(void, typename dtl::enable_if< dtl::is_pair<Pair> >::type)
264
264
  dispatch_uses_allocator
265
265
  (ConstructAlloc & construct_alloc
266
266
  , BOOST_FWD_REF(ArgAlloc) arg_alloc
@@ -270,10 +270,10 @@ BOOST_CONTAINER_DOC1ST(void, typename container_detail::enable_if< container_det
270
270
  template < typename ConstructAlloc
271
271
  , typename ArgAlloc
272
272
  , class Pair, class Pair2>
273
- typename container_detail::enable_if_and
273
+ typename dtl::enable_if_and
274
274
  < void
275
- , container_detail::is_pair<Pair>
276
- , container_detail::not_<boost::move_detail::is_reference<Pair2> > >::type //This is needed for MSVC10 and ambiguous overloads
275
+ , dtl::is_pair<Pair>
276
+ , dtl::not_<boost::move_detail::is_reference<Pair2> > >::type //This is needed for MSVC10 and ambiguous overloads
277
277
  dispatch_uses_allocator
278
278
  (ConstructAlloc & construct_alloc
279
279
  , BOOST_FWD_REF(ArgAlloc) arg_alloc
@@ -286,20 +286,20 @@ typename container_detail::enable_if_and
286
286
  template< typename ConstructAlloc, typename ArgAlloc, class Pair \
287
287
  , template<class, class, class, class, class, class, class, class, class, class> class BoostTuple \
288
288
  BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
289
- typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
289
+ typename dtl::enable_if< dtl::is_pair<Pair> >::type\
290
290
  dispatch_uses_allocator( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
291
291
  , BoostTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,N),::boost::tuples::null_type)> p\
292
292
  , BoostTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::boost::tuples::null_type)> q)\
293
293
  {\
294
294
  (void)p; (void)q;\
295
295
  (dispatch_uses_allocator)\
296
- (construct_alloc, arg_alloc, container_detail::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_TMPL_GET##N);\
296
+ (construct_alloc, arg_alloc, dtl::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_TMPL_GET##N);\
297
297
  BOOST_TRY{\
298
298
  (dispatch_uses_allocator)\
299
- (construct_alloc, arg_alloc, container_detail::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_TMPL_GETQ##M);\
299
+ (construct_alloc, arg_alloc, dtl::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_TMPL_GETQ##M);\
300
300
  }\
301
301
  BOOST_CATCH(...) {\
302
- allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(pair->first));\
302
+ allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(pair->first));\
303
303
  BOOST_RETHROW\
304
304
  }\
305
305
  BOOST_CATCH_END\
@@ -317,12 +317,12 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
317
317
  , Tuple<Args1...>& t1, Tuple<Args2...>& t2, index_tuple<Indexes1...>, index_tuple<Indexes2...>)
318
318
  {
319
319
  (void)t1; (void)t2;
320
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(pair->first), ::boost::forward<Args1>(get<Indexes1>(t1))...);
320
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(pair->first), ::boost::forward<Args1>(get<Indexes1>(t1))...);
321
321
  BOOST_TRY{
322
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(pair->second), ::boost::forward<Args2>(get<Indexes2>(t2))...);
322
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(pair->second), ::boost::forward<Args2>(get<Indexes2>(t2))...);
323
323
  }
324
324
  BOOST_CATCH(...){
325
- allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(pair->first));
325
+ allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(pair->first));
326
326
  BOOST_RETHROW
327
327
  }
328
328
  BOOST_CATCH_END
@@ -330,7 +330,7 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
330
330
 
331
331
  template< typename ConstructAlloc, typename ArgAlloc, class Pair
332
332
  , template<class ...> class Tuple, class... Args1, class... Args2>
333
- typename container_detail::enable_if< container_detail::is_pair<Pair> >::type
333
+ typename dtl::enable_if< dtl::is_pair<Pair> >::type
334
334
  dispatch_uses_allocator( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t
335
335
  , Tuple<Args1...> t1, Tuple<Args2...> t2)
336
336
  {
@@ -346,20 +346,20 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
346
346
  template< typename ConstructAlloc, typename ArgAlloc, class Pair\
347
347
  , template<class, class, class, class, class, class, class, class, class, class> class StdTuple\
348
348
  BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
349
- typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
349
+ typename dtl::enable_if< dtl::is_pair<Pair> >::type\
350
350
  dispatch_uses_allocator(ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
351
351
  , StdTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,N),::std::tr1::_Nil)> p\
352
352
  , StdTuple<BOOST_MOVE_TARGQ##M BOOST_MOVE_I##M BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(10,M),::std::tr1::_Nil)> q)\
353
353
  {\
354
354
  (void)p; (void)q;\
355
355
  (dispatch_uses_allocator)\
356
- (construct_alloc, arg_alloc, container_detail::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_GET_IDX##N);\
356
+ (construct_alloc, arg_alloc, dtl::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_GET_IDX##N);\
357
357
  BOOST_TRY{\
358
358
  (dispatch_uses_allocator)\
359
- (construct_alloc, arg_alloc, container_detail::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_GET_IDXQ##M);\
359
+ (construct_alloc, arg_alloc, dtl::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_GET_IDXQ##M);\
360
360
  }\
361
361
  BOOST_CATCH(...) {\
362
- allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(pair->first));\
362
+ allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(pair->first));\
363
363
  BOOST_RETHROW\
364
364
  }\
365
365
  BOOST_CATCH_END\
@@ -380,7 +380,7 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
380
380
  template< typename ConstructAlloc, typename ArgAlloc, class Pair\
381
381
  , template<BOOST_MOVE_REPEAT(_VARIADIC_MAX, class), class, class, class> class StdTuple \
382
382
  BOOST_MOVE_I_IF(BOOST_MOVE_OR(N,M)) BOOST_MOVE_CLASS##N BOOST_MOVE_I_IF(BOOST_MOVE_AND(N,M)) BOOST_MOVE_CLASSQ##M > \
383
- typename container_detail::enable_if< container_detail::is_pair<Pair> >::type\
383
+ typename dtl::enable_if< dtl::is_pair<Pair> >::type\
384
384
  dispatch_uses_allocator\
385
385
  ( ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* pair, piecewise_construct_t\
386
386
  , StdTuple<BOOST_MOVE_TARG##N BOOST_MOVE_I##N BOOST_MOVE_REPEAT(BOOST_MOVE_SUB(BOOST_MOVE_ADD(_VARIADIC_MAX, 3),N),::std::_Nil) > p\
@@ -388,13 +388,13 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
388
388
  {\
389
389
  (void)p; (void)q;\
390
390
  (dispatch_uses_allocator)\
391
- (construct_alloc, arg_alloc, container_detail::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_GET_IDX##N);\
391
+ (construct_alloc, arg_alloc, dtl::addressof(pair->first) BOOST_MOVE_I_IF(N) BOOST_MOVE_GET_IDX##N);\
392
392
  BOOST_TRY{\
393
393
  (dispatch_uses_allocator)\
394
- (construct_alloc, arg_alloc, container_detail::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_GET_IDXQ##M);\
394
+ (construct_alloc, arg_alloc, dtl::addressof(pair->second) BOOST_MOVE_I_IF(M) BOOST_MOVE_GET_IDXQ##M);\
395
395
  }\
396
396
  BOOST_CATCH(...) {\
397
- allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(pair->first));\
397
+ allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(pair->first));\
398
398
  BOOST_RETHROW\
399
399
  }\
400
400
  BOOST_CATCH_END\
@@ -411,16 +411,16 @@ BOOST_MOVE_ITER2D_0TOMAX(9, BOOST_DISPATCH_USES_ALLOCATOR_PIECEWISE_CONSTRUCT_BO
411
411
  template < typename ConstructAlloc
412
412
  , typename ArgAlloc
413
413
  , class Pair, class KeyType, class ... Args>
414
- typename container_detail::enable_if< container_detail::is_pair<Pair>, void >::type
414
+ typename dtl::enable_if< dtl::is_pair<Pair>, void >::type
415
415
  dispatch_uses_allocator
416
416
  (ConstructAlloc & construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* p, try_emplace_t, BOOST_FWD_REF(KeyType) k, BOOST_FWD_REF(Args) ...args)
417
417
  {
418
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->first), ::boost::forward<KeyType>(k));
418
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(p->first), ::boost::forward<KeyType>(k));
419
419
  BOOST_TRY{
420
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->second), ::boost::forward<Args>(args)...);
420
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(p->second), ::boost::forward<Args>(args)...);
421
421
  }
422
422
  BOOST_CATCH(...) {
423
- allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(p->first));
423
+ allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(p->first));
424
424
  BOOST_RETHROW
425
425
  }
426
426
  BOOST_CATCH_END
@@ -430,18 +430,18 @@ typename container_detail::enable_if< container_detail::is_pair<Pair>, void >::t
430
430
 
431
431
  #define BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_PAIR_TRY_EMPLACE_CODE(N) \
432
432
  template <typename ConstructAlloc, typename ArgAlloc, class Pair, class KeyType BOOST_MOVE_I##N BOOST_MOVE_CLASS##N >\
433
- inline typename container_detail::enable_if\
434
- < container_detail::is_pair<Pair>, void >::type\
433
+ inline typename dtl::enable_if\
434
+ < dtl::is_pair<Pair>, void >::type\
435
435
  dispatch_uses_allocator\
436
436
  (ConstructAlloc &construct_alloc, BOOST_FWD_REF(ArgAlloc) arg_alloc, Pair* p, try_emplace_t, \
437
437
  BOOST_FWD_REF(KeyType) k BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
438
438
  {\
439
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->first), ::boost::forward<KeyType>(k));\
439
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(p->first), ::boost::forward<KeyType>(k));\
440
440
  BOOST_TRY{\
441
- (dispatch_uses_allocator)(construct_alloc, arg_alloc, container_detail::addressof(p->second) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
441
+ (dispatch_uses_allocator)(construct_alloc, arg_alloc, dtl::addressof(p->second) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
442
442
  }\
443
443
  BOOST_CATCH(...) {\
444
- allocator_traits<ConstructAlloc>::destroy(construct_alloc, container_detail::addressof(p->first));\
444
+ allocator_traits<ConstructAlloc>::destroy(construct_alloc, dtl::addressof(p->first));\
445
445
  BOOST_RETHROW\
446
446
  }\
447
447
  BOOST_CATCH_END\
@@ -452,7 +452,7 @@ BOOST_MOVE_ITERATE_0TO9(BOOST_CONTAINER_DISPATCH_USES_ALLOCATOR_PAIR_TRY_EMPLACE
452
452
 
453
453
  #endif //!defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
454
454
 
455
- } //namespace container_detail
455
+ } //namespace dtl
456
456
 
457
457
  }} // namespace boost { namespace container {
458
458
 
@@ -28,29 +28,375 @@
28
28
 
29
29
  #include <boost/container/detail/pair.hpp>
30
30
  #include <boost/container/vector.hpp>
31
+ #include <boost/container/allocator_traits.hpp>
32
+
31
33
  #include <boost/container/detail/value_init.hpp>
32
34
  #include <boost/container/detail/destroyers.hpp>
33
35
  #include <boost/container/detail/algorithm.hpp> //algo_equal(), algo_lexicographical_compare
34
36
  #include <boost/container/detail/iterator.hpp>
35
37
  #include <boost/container/detail/is_sorted.hpp>
36
- #include <boost/container/allocator_traits.hpp>
37
- #ifdef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
38
- #include <boost/intrusive/pointer_traits.hpp>
39
- #endif
40
38
  #include <boost/container/detail/type_traits.hpp>
41
39
  #include <boost/container/detail/iterators.hpp>
40
+ #include <boost/container/detail/mpl.hpp>
41
+ #include <boost/container/detail/is_contiguous_container.hpp>
42
+ #include <boost/container/detail/is_container.hpp>
43
+
44
+ #include <boost/intrusive/detail/minimal_pair_header.hpp> //pair
45
+
42
46
  #include <boost/move/make_unique.hpp>
47
+ #include <boost/move/iterator.hpp>
43
48
  #include <boost/move/adl_move_swap.hpp>
49
+ #include <boost/move/algo/adaptive_sort.hpp>
50
+ #include <boost/move/algo/detail/pdqsort.hpp>
51
+
44
52
  #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
45
53
  #include <boost/move/detail/fwd_macros.hpp>
46
54
  #endif
47
55
 
48
- #include <boost/intrusive/detail/minimal_pair_header.hpp> //pair
49
- #include <boost/move/iterator.hpp>
56
+ #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
57
+
58
+ //merge_unique
59
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME merge_unique
60
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
61
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
62
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 3
63
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 3
64
+ #include <boost/intrusive/detail/has_member_function_callable_with.hpp>
65
+
66
+ //merge_equal
67
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME merge
68
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
69
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
70
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 3
71
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 3
72
+ #include <boost/intrusive/detail/has_member_function_callable_with.hpp>
73
+
74
+ //index_of
75
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME index_of
76
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
77
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
78
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
79
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 1
80
+ #include <boost/intrusive/detail/has_member_function_callable_with.hpp>
81
+
82
+ //nth
83
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME nth
84
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
85
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
86
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
87
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 1
88
+ #include <boost/intrusive/detail/has_member_function_callable_with.hpp>
89
+
90
+ //reserve
91
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME reserve
92
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
93
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
94
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 1
95
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 1
96
+ #include <boost/intrusive/detail/has_member_function_callable_with.hpp>
97
+
98
+ //capacity
99
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_FUNCNAME capacity
100
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_BEG namespace boost { namespace container { namespace dtl {
101
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_NS_END }}}
102
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MIN 0
103
+ #define BOOST_INTRUSIVE_HAS_MEMBER_FUNCTION_CALLABLE_WITH_MAX 0
104
+ #include <boost/intrusive/detail/has_member_function_callable_with.hpp>
105
+
106
+ #endif //#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
50
107
 
51
108
  namespace boost {
52
109
  namespace container {
53
- namespace container_detail {
110
+ namespace dtl {
111
+
112
+ ///////////////////////////////////////
113
+ //
114
+ // Helper functions to merge elements
115
+ //
116
+ ///////////////////////////////////////
117
+
118
+ BOOST_INTRUSIVE_INSTANTIATE_DEFAULT_TYPE_TMPLT(stored_allocator_type)
119
+
120
+ ///////////////////////////////////////
121
+ //
122
+ // flat_tree_container_inplace_merge
123
+ //
124
+ ///////////////////////////////////////
125
+ template<class SequenceContainer, class Compare>
126
+ void flat_tree_container_inplace_merge //is_contiguous_container == true
127
+ (SequenceContainer& dest, typename SequenceContainer::iterator it, Compare comp , dtl::true_)
128
+ {
129
+ typedef typename SequenceContainer::value_type value_type;
130
+ value_type *const braw = boost::movelib::iterator_to_raw_pointer(dest.begin());
131
+ value_type *const iraw = boost::movelib::iterator_to_raw_pointer(it);
132
+ value_type *const eraw = boost::movelib::iterator_to_raw_pointer(dest.end());
133
+ boost::movelib::adaptive_merge(braw, iraw, eraw, comp, eraw, dest.capacity()- dest.size());
134
+ }
135
+
136
+ template<class SequenceContainer, class Compare>
137
+ void flat_tree_container_inplace_merge //is_contiguous_container == false
138
+ (SequenceContainer& dest, typename SequenceContainer::iterator it, Compare comp, dtl::false_)
139
+ {
140
+ boost::movelib::adaptive_merge(dest.begin(), it, dest.end(), comp);
141
+ }
142
+
143
+ ///////////////////////////////////////
144
+ //
145
+ // flat_tree_container_inplace_sort_ending
146
+ //
147
+ ///////////////////////////////////////
148
+ template<class SequenceContainer, class Compare>
149
+ void flat_tree_container_inplace_sort_ending //is_contiguous_container == true
150
+ (SequenceContainer& dest, typename SequenceContainer::iterator it, Compare comp, dtl::true_)
151
+ {
152
+ typedef typename SequenceContainer::value_type value_type;
153
+ value_type *const iraw = boost::movelib::iterator_to_raw_pointer(it);
154
+ value_type *const eraw = boost::movelib::iterator_to_raw_pointer(dest.end());
155
+ boost::movelib::adaptive_sort(iraw, eraw, comp, eraw, dest.capacity()- dest.size());
156
+ }
157
+
158
+ template<class SequenceContainer, class Compare>
159
+ void flat_tree_container_inplace_sort_ending //is_contiguous_container == false
160
+ (SequenceContainer& dest, typename SequenceContainer::iterator it, Compare comp , dtl::false_)
161
+ {
162
+ boost::movelib::adaptive_sort(it, dest.end(), comp);
163
+ }
164
+
165
+ ///////////////////////////////////////
166
+ //
167
+ // flat_tree_merge
168
+ //
169
+ ///////////////////////////////////////
170
+ template<class SequenceContainer, class Iterator, class Compare>
171
+ BOOST_CONTAINER_FORCEINLINE void flat_tree_merge_equal
172
+ (SequenceContainer& dest, Iterator first, Iterator last, Compare comp, dtl::true_)
173
+ {
174
+ dest.merge(first, last, comp);
175
+ }
176
+
177
+ template<class SequenceContainer, class Iterator, class Compare>
178
+ BOOST_CONTAINER_FORCEINLINE void flat_tree_merge_equal //has_merge_unique == false
179
+ (SequenceContainer& dest, Iterator first, Iterator last, Compare comp, dtl::false_)
180
+ {
181
+ typedef typename SequenceContainer::iterator iterator;
182
+ iterator const it = dest.insert( dest.end(), first, last );
183
+ dtl::bool_<is_contiguous_container<SequenceContainer>::value> contiguous_tag;
184
+ (flat_tree_container_inplace_merge)(dest, it, comp, contiguous_tag);
185
+ }
186
+
187
+ ///////////////////////////////////////
188
+ //
189
+ // flat_tree_merge_unique
190
+ //
191
+ ///////////////////////////////////////
192
+ template<class SequenceContainer, class Iterator, class Compare>
193
+ BOOST_CONTAINER_FORCEINLINE void flat_tree_merge_unique //has_merge_unique == true
194
+ (SequenceContainer& dest, Iterator first, Iterator last, Compare comp, dtl::true_)
195
+ {
196
+ dest.merge_unique(first, last, comp);
197
+ }
198
+
199
+ template<class SequenceContainer, class Iterator, class Compare>
200
+ BOOST_CONTAINER_FORCEINLINE void flat_tree_merge_unique //has_merge_unique == false
201
+ (SequenceContainer& dest, Iterator first, Iterator last, Compare comp, dtl::false_)
202
+ {
203
+ typedef typename SequenceContainer::iterator iterator;
204
+ typedef typename SequenceContainer::size_type size_type;
205
+
206
+ size_type const old_sz = dest.size();
207
+ iterator const first_new = dest.insert(dest.cend(), first, last );
208
+ iterator e = boost::movelib::inplace_set_difference(first_new, dest.end(), dest.begin(), first_new, comp);
209
+ dest.erase(e, dest.end());
210
+ dtl::bool_<is_contiguous_container<SequenceContainer>::value> contiguous_tag;
211
+ (flat_tree_container_inplace_merge)(dest, dest.begin()+old_sz, comp, contiguous_tag);
212
+ }
213
+
214
+ ///////////////////////////////////////
215
+ //
216
+ // flat_tree_index_of
217
+ //
218
+ ///////////////////////////////////////
219
+ template<class SequenceContainer, class Iterator>
220
+ BOOST_CONTAINER_FORCEINLINE typename SequenceContainer::size_type
221
+ flat_tree_index_of // has_index_of == true
222
+ (SequenceContainer& cont, Iterator p, dtl::true_)
223
+ {
224
+ return cont.index_of(p);
225
+ }
226
+
227
+ template<class SequenceContainer, class Iterator>
228
+ BOOST_CONTAINER_FORCEINLINE typename SequenceContainer::size_type
229
+ flat_tree_index_of // has_index_of == false
230
+ (SequenceContainer& cont, Iterator p, dtl::false_)
231
+ {
232
+ typedef typename SequenceContainer::size_type size_type;
233
+ return static_cast<size_type>(p - cont.begin());
234
+ }
235
+
236
+ ///////////////////////////////////////
237
+ //
238
+ // flat_tree_nth
239
+ //
240
+ ///////////////////////////////////////
241
+ template<class Iterator, class SequenceContainer>
242
+ BOOST_CONTAINER_FORCEINLINE Iterator
243
+ flat_tree_nth // has_nth == true
244
+ (SequenceContainer& cont, typename SequenceContainer::size_type n, dtl::true_)
245
+ {
246
+ return cont.nth(n);
247
+ }
248
+
249
+ template<class Iterator, class SequenceContainer>
250
+ BOOST_CONTAINER_FORCEINLINE Iterator
251
+ flat_tree_nth // has_nth == false
252
+ (SequenceContainer& cont, typename SequenceContainer::size_type n, dtl::false_)
253
+ {
254
+ return cont.begin()+ n;
255
+ }
256
+
257
+ ///////////////////////////////////////
258
+ //
259
+ // flat_tree_get_stored_allocator
260
+ //
261
+ ///////////////////////////////////////
262
+ template<class SequenceContainer>
263
+ BOOST_CONTAINER_FORCEINLINE typename SequenceContainer::stored_allocator_type &
264
+ flat_tree_get_stored_allocator // has_get_stored_allocator == true
265
+ (SequenceContainer& cont, dtl::true_)
266
+ {
267
+ return cont.get_stored_allocator();
268
+ }
269
+
270
+ template<class SequenceContainer>
271
+ BOOST_CONTAINER_FORCEINLINE const typename SequenceContainer::stored_allocator_type &
272
+ flat_tree_get_stored_allocator // has_get_stored_allocator == true
273
+ (const SequenceContainer& cont, dtl::true_)
274
+ {
275
+ return cont.get_stored_allocator();
276
+ }
277
+
278
+ template<class SequenceContainer>
279
+ BOOST_CONTAINER_FORCEINLINE typename SequenceContainer::allocator_type
280
+ flat_tree_get_stored_allocator // has_get_stored_allocator == false
281
+ (SequenceContainer& cont, dtl::false_)
282
+ {
283
+ return cont.get_allocator();
284
+ }
285
+
286
+ ///////////////////////////////////////
287
+ //
288
+ // flat_tree_adopt_sequence_equal
289
+ //
290
+ ///////////////////////////////////////
291
+ template<class SequenceContainer, class Compare>
292
+ void flat_tree_sort_contiguous_to_adopt // is_contiguous_container == true
293
+ (SequenceContainer &tseq, BOOST_RV_REF(SequenceContainer) seq, Compare comp)
294
+ {
295
+ if(tseq.capacity() >= (seq.capacity() - seq.size())) {
296
+ tseq.clear();
297
+ boost::movelib::adaptive_sort
298
+ (boost::movelib::iterator_to_raw_pointer(seq.begin())
299
+ , boost::movelib::iterator_to_raw_pointer(seq.end())
300
+ , comp
301
+ , boost::movelib::iterator_to_raw_pointer(tseq.begin())
302
+ , tseq.capacity());
303
+ }
304
+ else{
305
+ boost::movelib::adaptive_sort
306
+ (boost::movelib::iterator_to_raw_pointer(seq.begin())
307
+ , boost::movelib::iterator_to_raw_pointer(seq.end())
308
+ , comp
309
+ , boost::movelib::iterator_to_raw_pointer(seq.end())
310
+ , seq.capacity() - seq.size());
311
+ }
312
+ }
313
+
314
+ template<class SequenceContainer, class Compare>
315
+ void flat_tree_adopt_sequence_equal // is_contiguous_container == true
316
+ (SequenceContainer &tseq, BOOST_RV_REF(SequenceContainer) seq, Compare comp, dtl::true_)
317
+ {
318
+ flat_tree_sort_contiguous_to_adopt(tseq, boost::move(seq), comp);
319
+ tseq = boost::move(seq);
320
+ }
321
+
322
+ template<class SequenceContainer, class Compare>
323
+ void flat_tree_adopt_sequence_equal // is_contiguous_container == false
324
+ (SequenceContainer &tseq, BOOST_RV_REF(SequenceContainer) seq, Compare comp, dtl::false_)
325
+ {
326
+ boost::movelib::adaptive_sort(seq.begin(), seq.end(), comp);
327
+ tseq = boost::move(seq);
328
+ }
329
+
330
+ ///////////////////////////////////////
331
+ //
332
+ // flat_tree_adopt_sequence_unique
333
+ //
334
+ ///////////////////////////////////////
335
+ template<class SequenceContainer, class Compare>
336
+ void flat_tree_adopt_sequence_unique// is_contiguous_container == true
337
+ (SequenceContainer &tseq, BOOST_RV_REF(SequenceContainer) seq, Compare comp, dtl::true_)
338
+ {
339
+ boost::movelib::pdqsort
340
+ ( boost::movelib::iterator_to_raw_pointer(seq.begin())
341
+ , boost::movelib::iterator_to_raw_pointer(seq.end())
342
+ , comp);
343
+ seq.erase(boost::movelib::unique
344
+ (seq.begin(), seq.end(), boost::movelib::negate<Compare>(comp)), seq.cend());
345
+ tseq = boost::move(seq);
346
+ }
347
+
348
+ template<class SequenceContainer, class Compare>
349
+ void flat_tree_adopt_sequence_unique// is_contiguous_container == false
350
+ (SequenceContainer &tseq, BOOST_RV_REF(SequenceContainer) seq, Compare comp, dtl::false_)
351
+ {
352
+ boost::movelib::pdqsort(seq.begin(), seq.end(), comp);
353
+ seq.erase(boost::movelib::unique
354
+ (seq.begin(), seq.end(), boost::movelib::negate<Compare>(comp)), seq.cend());
355
+ tseq = boost::move(seq);
356
+ }
357
+
358
+ ///////////////////////////////////////
359
+ //
360
+ // flat_tree_reserve
361
+ //
362
+ ///////////////////////////////////////
363
+ template<class SequenceContainer>
364
+ BOOST_CONTAINER_FORCEINLINE void // has_reserve == true
365
+ flat_tree_reserve(SequenceContainer &tseq, typename SequenceContainer::size_type cap, dtl::true_)
366
+ {
367
+ tseq.reserve(cap);
368
+ }
369
+
370
+ template<class SequenceContainer>
371
+ BOOST_CONTAINER_FORCEINLINE void // has_reserve == false
372
+ flat_tree_reserve(SequenceContainer &, typename SequenceContainer::size_type, dtl::false_)
373
+ {
374
+ }
375
+
376
+ ///////////////////////////////////////
377
+ //
378
+ // flat_tree_capacity
379
+ //
380
+ ///////////////////////////////////////
381
+ template<class SequenceContainer> // has_capacity == true
382
+ BOOST_CONTAINER_FORCEINLINE typename SequenceContainer::size_type
383
+ flat_tree_capacity(const SequenceContainer &tseq, dtl::true_)
384
+ {
385
+ return tseq.capacity();
386
+ }
387
+
388
+ template<class SequenceContainer> // has_capacity == false
389
+ BOOST_CONTAINER_FORCEINLINE typename SequenceContainer::size_type
390
+ flat_tree_capacity(const SequenceContainer &tseq, dtl::false_)
391
+ {
392
+ return tseq.size();
393
+ }
394
+
395
+ ///////////////////////////////////////
396
+ //
397
+ // flat_tree_value_compare
398
+ //
399
+ ///////////////////////////////////////
54
400
 
55
401
  template<class Compare, class Value, class KeyOfValue>
56
402
  class flat_tree_value_compare
@@ -81,38 +427,47 @@ class flat_tree_value_compare
81
427
  { return *this; }
82
428
  };
83
429
 
84
- template<class Pointer>
85
- struct get_flat_tree_iterators
430
+ ///////////////////////////////////////
431
+ //
432
+ // select_container_type
433
+ //
434
+ ///////////////////////////////////////
435
+ template < class Value, class AllocatorOrContainer
436
+ , bool = boost::container::dtl::is_container<AllocatorOrContainer>::value >
437
+ struct select_container_type
438
+ {
439
+ typedef AllocatorOrContainer type;
440
+ };
441
+
442
+ template <class Value, class AllocatorOrContainer>
443
+ struct select_container_type<Value, AllocatorOrContainer, false>
86
444
  {
87
- #ifdef BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
88
- typedef Pointer iterator;
89
- typedef typename boost::intrusive::
90
- pointer_traits<Pointer>::element_type iterator_element_type;
91
- typedef typename boost::intrusive::
92
- pointer_traits<Pointer>:: template
93
- rebind_pointer<const iterator_element_type>::type const_iterator;
94
- #else //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
95
- typedef typename boost::container::container_detail::
96
- vec_iterator<Pointer, false> iterator;
97
- typedef typename boost::container::container_detail::
98
- vec_iterator<Pointer, true > const_iterator;
99
- #endif //BOOST_CONTAINER_VECTOR_ITERATOR_IS_POINTER
100
- typedef boost::container::reverse_iterator<iterator> reverse_iterator;
101
- typedef boost::container::reverse_iterator<const_iterator> const_reverse_iterator;
445
+ typedef boost::container::vector<Value, AllocatorOrContainer> type;
102
446
  };
103
447
 
448
+
449
+ ///////////////////////////////////////
450
+ //
451
+ // flat_tree
452
+ //
453
+ ///////////////////////////////////////
104
454
  template <class Value, class KeyOfValue,
105
- class Compare, class Allocator>
455
+ class Compare, class AllocatorOrContainer>
106
456
  class flat_tree
107
457
  {
108
- typedef boost::container::vector<Value, Allocator> vector_t;
109
- typedef Allocator allocator_t;
110
- typedef allocator_traits<Allocator> allocator_traits_type;
458
+ public:
459
+ typedef typename select_container_type<Value, AllocatorOrContainer>::type container_type;
460
+ typedef container_type sequence_type; //For backwards compatibility
461
+
462
+ private:
463
+ typedef typename container_type::allocator_type allocator_t;
464
+ typedef allocator_traits<allocator_t> allocator_traits_type;
111
465
 
112
466
  public:
113
467
  typedef flat_tree_value_compare<Compare, Value, KeyOfValue> value_compare;
114
468
 
115
- private:
469
+ private:
470
+
116
471
  struct Data
117
472
  //Inherit from value_compare to do EBO
118
473
  : public value_compare
@@ -121,48 +476,48 @@ class flat_tree
121
476
 
122
477
  public:
123
478
  Data()
124
- : value_compare(), m_vect()
479
+ : value_compare(), m_seq()
125
480
  {}
126
481
 
127
- explicit Data(const Data &d)
128
- : value_compare(static_cast<const value_compare&>(d)), m_vect(d.m_vect)
482
+ explicit Data(const allocator_t &alloc)
483
+ : value_compare(), m_seq(alloc)
129
484
  {}
130
485
 
131
- Data(BOOST_RV_REF(Data) d)
132
- : value_compare(boost::move(static_cast<value_compare&>(d))), m_vect(boost::move(d.m_vect))
486
+ explicit Data(const Compare &comp)
487
+ : value_compare(comp), m_seq()
133
488
  {}
134
489
 
135
- Data(const Data &d, const Allocator &a)
136
- : value_compare(static_cast<const value_compare&>(d)), m_vect(d.m_vect, a)
490
+ Data(const Compare &comp, const allocator_t &alloc)
491
+ : value_compare(comp), m_seq(alloc)
137
492
  {}
138
493
 
139
- Data(BOOST_RV_REF(Data) d, const Allocator &a)
140
- : value_compare(boost::move(static_cast<value_compare&>(d))), m_vect(boost::move(d.m_vect), a)
494
+ explicit Data(const Data &d)
495
+ : value_compare(static_cast<const value_compare&>(d)), m_seq(d.m_seq)
141
496
  {}
142
497
 
143
- explicit Data(const Compare &comp)
144
- : value_compare(comp), m_vect()
498
+ Data(BOOST_RV_REF(Data) d)
499
+ : value_compare(boost::move(static_cast<value_compare&>(d))), m_seq(boost::move(d.m_seq))
145
500
  {}
146
501
 
147
- Data(const Compare &comp, const allocator_t &alloc)
148
- : value_compare(comp), m_vect(alloc)
502
+ Data(const Data &d, const allocator_t &a)
503
+ : value_compare(static_cast<const value_compare&>(d)), m_seq(d.m_seq, a)
149
504
  {}
150
505
 
151
- explicit Data(const allocator_t &alloc)
152
- : value_compare(), m_vect(alloc)
506
+ Data(BOOST_RV_REF(Data) d, const allocator_t &a)
507
+ : value_compare(boost::move(static_cast<value_compare&>(d))), m_seq(boost::move(d.m_seq), a)
153
508
  {}
154
509
 
155
510
  Data& operator=(BOOST_COPY_ASSIGN_REF(Data) d)
156
511
  {
157
512
  this->value_compare::operator=(d);
158
- m_vect = d.m_vect;
513
+ m_seq = d.m_seq;
159
514
  return *this;
160
515
  }
161
516
 
162
517
  Data& operator=(BOOST_RV_REF(Data) d)
163
518
  {
164
519
  this->value_compare::operator=(boost::move(static_cast<value_compare &>(d)));
165
- m_vect = boost::move(d.m_vect);
520
+ m_seq = boost::move(d.m_seq);
166
521
  return *this;
167
522
  }
168
523
 
@@ -170,10 +525,10 @@ class flat_tree
170
525
  {
171
526
  value_compare& mycomp = *this, & othercomp = d;
172
527
  boost::adl_move_swap(mycomp, othercomp);
173
- this->m_vect.swap(d.m_vect);
528
+ this->m_seq.swap(d.m_seq);
174
529
  }
175
530
 
176
- vector_t m_vect;
531
+ container_type m_seq;
177
532
  };
178
533
 
179
534
  Data m_data;
@@ -181,28 +536,39 @@ class flat_tree
181
536
 
182
537
  public:
183
538
 
184
- typedef typename vector_t::value_type value_type;
185
- typedef typename vector_t::pointer pointer;
186
- typedef typename vector_t::const_pointer const_pointer;
187
- typedef typename vector_t::reference reference;
188
- typedef typename vector_t::const_reference const_reference;
189
- typedef typename KeyOfValue::type key_type;
190
- typedef Compare key_compare;
191
- typedef typename vector_t::allocator_type allocator_type;
192
- typedef typename vector_t::size_type size_type;
193
- typedef typename vector_t::difference_type difference_type;
194
- typedef typename vector_t::iterator iterator;
195
- typedef typename vector_t::const_iterator const_iterator;
196
- typedef typename vector_t::reverse_iterator reverse_iterator;
197
- typedef typename vector_t::const_reverse_iterator const_reverse_iterator;
539
+ typedef typename container_type::value_type value_type;
540
+ typedef typename container_type::pointer pointer;
541
+ typedef typename container_type::const_pointer const_pointer;
542
+ typedef typename container_type::reference reference;
543
+ typedef typename container_type::const_reference const_reference;
544
+ typedef typename KeyOfValue::type key_type;
545
+ typedef Compare key_compare;
546
+ typedef typename container_type::allocator_type allocator_type;
547
+ typedef typename container_type::size_type size_type;
548
+ typedef typename container_type::difference_type difference_type;
549
+ typedef typename container_type::iterator iterator;
550
+ typedef typename container_type::const_iterator const_iterator;
551
+ typedef typename container_type::reverse_iterator reverse_iterator;
552
+ typedef typename container_type::const_reverse_iterator const_reverse_iterator;
198
553
 
199
554
  //!Standard extension
200
- typedef allocator_type stored_allocator_type;
555
+ typedef BOOST_INTRUSIVE_OBTAIN_TYPE_WITH_DEFAULT
556
+ (boost::container::dtl::, container_type
557
+ ,stored_allocator_type, allocator_type) stored_allocator_type;
558
+
559
+ static const bool has_stored_allocator_type =
560
+ BOOST_INTRUSIVE_HAS_TYPE(boost::container::dtl::, container_type, stored_allocator_type);
201
561
 
202
562
  private:
203
563
  typedef allocator_traits<stored_allocator_type> stored_allocator_traits;
204
564
 
205
565
  public:
566
+ typedef typename dtl::if_c
567
+ <has_stored_allocator_type, const stored_allocator_type &, allocator_type>::type get_stored_allocator_const_return_t;
568
+
569
+ typedef typename dtl::if_c
570
+ <has_stored_allocator_type, stored_allocator_type &, allocator_type>::type get_stored_allocator_noconst_return_t;
571
+
206
572
  BOOST_CONTAINER_FORCEINLINE flat_tree()
207
573
  : m_data()
208
574
  { }
@@ -211,20 +577,20 @@ class flat_tree
211
577
  : m_data(comp)
212
578
  { }
213
579
 
214
- BOOST_CONTAINER_FORCEINLINE flat_tree(const Compare& comp, const allocator_type& a)
215
- : m_data(comp, a)
216
- { }
217
-
218
580
  BOOST_CONTAINER_FORCEINLINE explicit flat_tree(const allocator_type& a)
219
581
  : m_data(a)
220
582
  { }
221
583
 
584
+ BOOST_CONTAINER_FORCEINLINE flat_tree(const Compare& comp, const allocator_type& a)
585
+ : m_data(comp, a)
586
+ { }
587
+
222
588
  BOOST_CONTAINER_FORCEINLINE flat_tree(const flat_tree& x)
223
589
  : m_data(x.m_data)
224
590
  { }
225
591
 
226
592
  BOOST_CONTAINER_FORCEINLINE flat_tree(BOOST_RV_REF(flat_tree) x)
227
- BOOST_NOEXCEPT_IF(boost::container::container_detail::is_nothrow_move_constructible<Compare>::value)
593
+ BOOST_NOEXCEPT_IF(boost::container::dtl::is_nothrow_move_constructible<Compare>::value)
228
594
  : m_data(boost::move(x.m_data))
229
595
  { }
230
596
 
@@ -237,46 +603,92 @@ class flat_tree
237
603
  { }
238
604
 
239
605
  template <class InputIterator>
240
- flat_tree( ordered_range_t, InputIterator first, InputIterator last
241
- , const Compare& comp = Compare()
242
- , const allocator_type& a = allocator_type())
606
+ BOOST_CONTAINER_FORCEINLINE
607
+ flat_tree( ordered_range_t, InputIterator first, InputIterator last)
608
+ : m_data()
609
+ {
610
+ this->m_data.m_seq.insert(this->m_data.m_seq.end(), first, last);
611
+ BOOST_ASSERT((is_sorted)(this->m_data.m_seq.cbegin(), this->m_data.m_seq.cend(), this->priv_value_comp()));
612
+ }
613
+
614
+ template <class InputIterator>
615
+ BOOST_CONTAINER_FORCEINLINE
616
+ flat_tree( ordered_range_t, InputIterator first, InputIterator last, const Compare& comp)
617
+ : m_data(comp)
618
+ {
619
+ this->m_data.m_seq.insert(this->m_data.m_seq.end(), first, last);
620
+ BOOST_ASSERT((is_sorted)(this->m_data.m_seq.cbegin(), this->m_data.m_seq.cend(), this->priv_value_comp()));
621
+ }
622
+
623
+ template <class InputIterator>
624
+ BOOST_CONTAINER_FORCEINLINE
625
+ flat_tree( ordered_range_t, InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a)
243
626
  : m_data(comp, a)
244
627
  {
245
- this->m_data.m_vect.insert(this->m_data.m_vect.end(), first, last);
246
- BOOST_ASSERT((is_sorted)(this->m_data.m_vect.cbegin(), this->m_data.m_vect.cend(), this->priv_value_comp()));
628
+ this->m_data.m_seq.insert(this->m_data.m_seq.end(), first, last);
629
+ BOOST_ASSERT((is_sorted)(this->m_data.m_seq.cbegin(), this->m_data.m_seq.cend(), this->priv_value_comp()));
630
+ }
631
+
632
+ template <class InputIterator>
633
+ BOOST_CONTAINER_FORCEINLINE
634
+ flat_tree( ordered_unique_range_t, InputIterator first, InputIterator last)
635
+ : m_data()
636
+ {
637
+ this->m_data.m_seq.insert(this->m_data.m_seq.end(), first, last);
638
+ BOOST_ASSERT((is_sorted_and_unique)(this->m_data.m_seq.cbegin(), this->m_data.m_seq.cend(), this->priv_value_comp()));
639
+ }
640
+
641
+ template <class InputIterator>
642
+ BOOST_CONTAINER_FORCEINLINE
643
+ flat_tree( ordered_unique_range_t, InputIterator first, InputIterator last, const Compare& comp)
644
+ : m_data(comp)
645
+ {
646
+ this->m_data.m_seq.insert(this->m_data.m_seq.end(), first, last);
647
+ BOOST_ASSERT((is_sorted_and_unique)(this->m_data.m_seq.cbegin(), this->m_data.m_seq.cend(), this->priv_value_comp()));
247
648
  }
248
649
 
249
650
  template <class InputIterator>
250
- flat_tree( ordered_unique_range_t, InputIterator first, InputIterator last
251
- , const Compare& comp = Compare()
252
- , const allocator_type& a = allocator_type())
651
+ BOOST_CONTAINER_FORCEINLINE
652
+ flat_tree( ordered_unique_range_t, InputIterator first, InputIterator last, const Compare& comp, const allocator_type& a)
253
653
  : m_data(comp, a)
254
654
  {
255
- this->m_data.m_vect.insert(this->m_data.m_vect.end(), first, last);
256
- BOOST_ASSERT((is_sorted_and_unique)(this->m_data.m_vect.cbegin(), this->m_data.m_vect.cend(), this->priv_value_comp()));
655
+ this->m_data.m_seq.insert(this->m_data.m_seq.end(), first, last);
656
+ BOOST_ASSERT((is_sorted_and_unique)(this->m_data.m_seq.cbegin(), this->m_data.m_seq.cend(), this->priv_value_comp()));
657
+ }
658
+
659
+ template <class InputIterator>
660
+ BOOST_CONTAINER_FORCEINLINE
661
+ flat_tree( bool unique_insertion, InputIterator first, InputIterator last)
662
+ : m_data()
663
+ {
664
+ this->priv_range_insertion_construct(unique_insertion, first, last);
665
+ }
666
+
667
+ template <class InputIterator>
668
+ BOOST_CONTAINER_FORCEINLINE
669
+ flat_tree( bool unique_insertion, InputIterator first, InputIterator last
670
+ , const Compare& comp)
671
+ : m_data(comp)
672
+ {
673
+ this->priv_range_insertion_construct(unique_insertion, first, last);
674
+ }
675
+
676
+ template <class InputIterator>
677
+ BOOST_CONTAINER_FORCEINLINE
678
+ flat_tree( bool unique_insertion, InputIterator first, InputIterator last
679
+ , const allocator_type& a)
680
+ : m_data(a)
681
+ {
682
+ this->priv_range_insertion_construct(unique_insertion, first, last);
257
683
  }
258
684
 
259
685
  template <class InputIterator>
260
- flat_tree( bool unique_insertion
261
- , InputIterator first, InputIterator last
262
- , const Compare& comp = Compare()
263
- , const allocator_type& a = allocator_type())
686
+ BOOST_CONTAINER_FORCEINLINE
687
+ flat_tree( bool unique_insertion, InputIterator first, InputIterator last
688
+ , const Compare& comp, const allocator_type& a)
264
689
  : m_data(comp, a)
265
690
  {
266
- //Use cend() as hint to achieve linear time for
267
- //ordered ranges as required by the standard
268
- //for the constructor
269
- //Call end() every iteration as reallocation might have invalidated iterators
270
- if(unique_insertion){
271
- for ( ; first != last; ++first){
272
- this->insert_unique(this->cend(), *first);
273
- }
274
- }
275
- else{
276
- for ( ; first != last; ++first){
277
- this->insert_equal(this->cend(), *first);
278
- }
279
- }
691
+ this->priv_range_insertion_construct(unique_insertion, first, last);
280
692
  }
281
693
 
282
694
  BOOST_CONTAINER_FORCEINLINE ~flat_tree()
@@ -288,7 +700,7 @@ class flat_tree
288
700
  BOOST_CONTAINER_FORCEINLINE flat_tree& operator=(BOOST_RV_REF(flat_tree) x)
289
701
  BOOST_NOEXCEPT_IF( (allocator_traits_type::propagate_on_container_move_assignment::value ||
290
702
  allocator_traits_type::is_always_equal::value) &&
291
- boost::container::container_detail::is_nothrow_move_assignable<Compare>::value)
703
+ boost::container::dtl::is_nothrow_move_assignable<Compare>::value)
292
704
  { m_data = boost::move(x.m_data); return *this; }
293
705
 
294
706
  BOOST_CONTAINER_FORCEINLINE const value_compare &priv_value_comp() const
@@ -303,6 +715,11 @@ class flat_tree
303
715
  BOOST_CONTAINER_FORCEINLINE key_compare &priv_key_comp()
304
716
  { return this->priv_value_comp().get_comp(); }
305
717
 
718
+ struct insert_commit_data
719
+ {
720
+ const_iterator position;
721
+ };
722
+
306
723
  public:
307
724
  // accessors:
308
725
  BOOST_CONTAINER_FORCEINLINE Compare key_comp() const
@@ -312,31 +729,35 @@ class flat_tree
312
729
  { return this->m_data; }
313
730
 
314
731
  BOOST_CONTAINER_FORCEINLINE allocator_type get_allocator() const
315
- { return this->m_data.m_vect.get_allocator(); }
732
+ { return this->m_data.m_seq.get_allocator(); }
316
733
 
317
- BOOST_CONTAINER_FORCEINLINE const stored_allocator_type &get_stored_allocator() const
318
- { return this->m_data.m_vect.get_stored_allocator(); }
734
+ BOOST_CONTAINER_FORCEINLINE get_stored_allocator_const_return_t get_stored_allocator() const
735
+ {
736
+ return flat_tree_get_stored_allocator(this->m_data.m_seq, dtl::bool_<has_stored_allocator_type>());
737
+ }
319
738
 
320
- BOOST_CONTAINER_FORCEINLINE stored_allocator_type &get_stored_allocator()
321
- { return this->m_data.m_vect.get_stored_allocator(); }
739
+ BOOST_CONTAINER_FORCEINLINE get_stored_allocator_noconst_return_t get_stored_allocator()
740
+ {
741
+ return flat_tree_get_stored_allocator(this->m_data.m_seq, dtl::bool_<has_stored_allocator_type>());
742
+ }
322
743
 
323
744
  BOOST_CONTAINER_FORCEINLINE iterator begin()
324
- { return this->m_data.m_vect.begin(); }
745
+ { return this->m_data.m_seq.begin(); }
325
746
 
326
747
  BOOST_CONTAINER_FORCEINLINE const_iterator begin() const
327
748
  { return this->cbegin(); }
328
749
 
329
750
  BOOST_CONTAINER_FORCEINLINE const_iterator cbegin() const
330
- { return this->m_data.m_vect.begin(); }
751
+ { return this->m_data.m_seq.begin(); }
331
752
 
332
753
  BOOST_CONTAINER_FORCEINLINE iterator end()
333
- { return this->m_data.m_vect.end(); }
754
+ { return this->m_data.m_seq.end(); }
334
755
 
335
756
  BOOST_CONTAINER_FORCEINLINE const_iterator end() const
336
757
  { return this->cend(); }
337
758
 
338
759
  BOOST_CONTAINER_FORCEINLINE const_iterator cend() const
339
- { return this->m_data.m_vect.end(); }
760
+ { return this->m_data.m_seq.end(); }
340
761
 
341
762
  BOOST_CONTAINER_FORCEINLINE reverse_iterator rbegin()
342
763
  { return reverse_iterator(this->end()); }
@@ -357,17 +778,17 @@ class flat_tree
357
778
  { return const_reverse_iterator(this->cbegin()); }
358
779
 
359
780
  BOOST_CONTAINER_FORCEINLINE bool empty() const
360
- { return this->m_data.m_vect.empty(); }
781
+ { return this->m_data.m_seq.empty(); }
361
782
 
362
783
  BOOST_CONTAINER_FORCEINLINE size_type size() const
363
- { return this->m_data.m_vect.size(); }
784
+ { return this->m_data.m_seq.size(); }
364
785
 
365
786
  BOOST_CONTAINER_FORCEINLINE size_type max_size() const
366
- { return this->m_data.m_vect.max_size(); }
787
+ { return this->m_data.m_seq.max_size(); }
367
788
 
368
789
  BOOST_CONTAINER_FORCEINLINE void swap(flat_tree& other)
369
790
  BOOST_NOEXCEPT_IF( allocator_traits_type::is_always_equal::value
370
- && boost::container::container_detail::is_nothrow_swappable<Compare>::value )
791
+ && boost::container::dtl::is_nothrow_swappable<Compare>::value )
371
792
  { this->m_data.swap(other.m_data); }
372
793
 
373
794
  public:
@@ -378,7 +799,8 @@ class flat_tree
378
799
  insert_commit_data data;
379
800
  ret.second = this->priv_insert_unique_prepare(KeyOfValue()(val), data);
380
801
  ret.first = ret.second ? this->priv_insert_commit(data, val)
381
- : iterator(vector_iterator_get_ptr(data.position));
802
+ : this->begin() + (data.position - this->cbegin());
803
+ //: iterator(vector_iterator_get_ptr(data.position));
382
804
  return ret;
383
805
  }
384
806
 
@@ -388,21 +810,22 @@ class flat_tree
388
810
  insert_commit_data data;
389
811
  ret.second = this->priv_insert_unique_prepare(KeyOfValue()(val), data);
390
812
  ret.first = ret.second ? this->priv_insert_commit(data, boost::move(val))
391
- : iterator(vector_iterator_get_ptr(data.position));
813
+ : this->begin() + (data.position - this->cbegin());
814
+ //: iterator(vector_iterator_get_ptr(data.position));
392
815
  return ret;
393
816
  }
394
817
 
395
818
  iterator insert_equal(const value_type& val)
396
819
  {
397
820
  iterator i = this->upper_bound(KeyOfValue()(val));
398
- i = this->m_data.m_vect.insert(i, val);
821
+ i = this->m_data.m_seq.insert(i, val);
399
822
  return i;
400
823
  }
401
824
 
402
825
  iterator insert_equal(BOOST_RV_REF(value_type) mval)
403
826
  {
404
827
  iterator i = this->upper_bound(KeyOfValue()(mval));
405
- i = this->m_data.m_vect.insert(i, boost::move(mval));
828
+ i = this->m_data.m_seq.insert(i, boost::move(mval));
406
829
  return i;
407
830
  }
408
831
 
@@ -412,7 +835,8 @@ class flat_tree
412
835
  insert_commit_data data;
413
836
  return this->priv_insert_unique_prepare(hint, KeyOfValue()(val), data)
414
837
  ? this->priv_insert_commit(data, val)
415
- : iterator(vector_iterator_get_ptr(data.position));
838
+ : this->begin() + (data.position - this->cbegin());
839
+ //: iterator(vector_iterator_get_ptr(data.position));
416
840
  }
417
841
 
418
842
  iterator insert_unique(const_iterator hint, BOOST_RV_REF(value_type) val)
@@ -421,7 +845,8 @@ class flat_tree
421
845
  insert_commit_data data;
422
846
  return this->priv_insert_unique_prepare(hint, KeyOfValue()(val), data)
423
847
  ? this->priv_insert_commit(data, boost::move(val))
424
- : iterator(vector_iterator_get_ptr(data.position));
848
+ : this->begin() + (data.position - this->cbegin());
849
+ //: iterator(vector_iterator_get_ptr(data.position));
425
850
  }
426
851
 
427
852
  iterator insert_equal(const_iterator hint, const value_type& val)
@@ -443,113 +868,63 @@ class flat_tree
443
868
  template <class InIt>
444
869
  void insert_unique(InIt first, InIt last)
445
870
  {
446
- for ( ; first != last; ++first){
447
- this->insert_unique(*first);
448
- }
449
- }
871
+ dtl::bool_<is_contiguous_container<container_type>::value> contiguous_tag;
872
+ container_type &seq = this->m_data.m_seq;
873
+ value_compare &val_cmp = this->priv_value_comp();
450
874
 
451
- template <class InIt>
452
- void insert_equal(InIt first, InIt last
453
- #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
454
- , typename container_detail::enable_if_c
455
- < container_detail::is_input_iterator<InIt>::value
456
- >::type * = 0
457
- #endif
458
- )
459
- { this->priv_insert_equal_loop(first, last); }
875
+ //Step 1: put new elements in the back
876
+ typename container_type::iterator const it = seq.insert(seq.cend(), first, last);
877
+
878
+ //Step 2: sort them
879
+ boost::movelib::pdqsort(it, seq.end(), val_cmp);
880
+
881
+ //Step 3: only left unique values from the back not already present in the original range
882
+ typename container_type::iterator const e = boost::movelib::inplace_set_unique_difference
883
+ (it, seq.end(), seq.begin(), it, val_cmp);
884
+ seq.erase(e, seq.cend());
885
+
886
+ //Step 4: merge both ranges
887
+ (flat_tree_container_inplace_merge)(seq, it, this->priv_value_comp(), contiguous_tag);
888
+ }
460
889
 
461
890
  template <class InIt>
462
- void insert_equal(InIt first, InIt last
463
- #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
464
- , typename container_detail::enable_if_c
465
- < !container_detail::is_input_iterator<InIt>::value
466
- >::type * = 0
467
- #endif
468
- )
891
+ void insert_equal(InIt first, InIt last)
469
892
  {
470
- const size_type len = static_cast<size_type>(boost::container::iterator_distance(first, last));
471
- this->reserve(this->size()+len);
472
- this->priv_insert_equal_loop(first, last);
893
+ dtl::bool_<is_contiguous_container<container_type>::value> contiguous_tag;
894
+ container_type &seq = this->m_data.m_seq;
895
+ typename container_type::iterator const it = seq.insert(seq.cend(), first, last);
896
+ (flat_tree_container_inplace_sort_ending)(seq, it, this->priv_value_comp(), contiguous_tag);
897
+ (flat_tree_container_inplace_merge) (seq, it, this->priv_value_comp(), contiguous_tag);
473
898
  }
474
899
 
475
900
  //Ordered
476
901
 
477
902
  template <class InIt>
478
- void insert_equal(ordered_range_t, InIt first, InIt last
479
- #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
480
- , typename container_detail::enable_if_c
481
- < container_detail::is_input_iterator<InIt>::value
482
- >::type * = 0
483
- #endif
484
- )
485
- { this->priv_insert_equal_loop_ordered(first, last); }
486
-
487
- template <class FwdIt>
488
- void insert_equal(ordered_range_t, FwdIt first, FwdIt last
489
- #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
490
- , typename container_detail::enable_if_c
491
- < !container_detail::is_input_iterator<FwdIt>::value &&
492
- container_detail::is_forward_iterator<FwdIt>::value
493
- >::type * = 0
494
- #endif
495
- )
496
- {
497
- const size_type len = static_cast<size_type>(boost::container::iterator_distance(first, last));
498
- this->reserve(this->size()+len);
499
- this->priv_insert_equal_loop_ordered(first, last);
500
- }
501
-
502
- template <class BidirIt>
503
- void insert_equal(ordered_range_t, BidirIt first, BidirIt last
504
- #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
505
- , typename container_detail::disable_if_or
506
- < void
507
- , container_detail::is_input_iterator<BidirIt>
508
- , container_detail::is_forward_iterator<BidirIt>
509
- >::type * = 0
510
- #endif
511
- )
512
- { this->m_data.m_vect.merge(first, last, static_cast<const value_compare &>(this->m_data)); }
903
+ void insert_equal(ordered_range_t, InIt first, InIt last)
904
+ {
905
+ const bool value = boost::container::dtl::
906
+ has_member_function_callable_with_merge_unique<container_type, InIt, InIt, value_compare>::value;
907
+ (flat_tree_merge_equal)(this->m_data.m_seq, first, last, this->priv_value_comp(), dtl::bool_<value>());
908
+ }
513
909
 
514
910
  template <class InIt>
515
- void insert_unique(ordered_unique_range_t, InIt first, InIt last
516
- #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
517
- , typename container_detail::enable_if_or
518
- < void
519
- , container_detail::is_input_iterator<InIt>
520
- , container_detail::is_forward_iterator<InIt>
521
- >::type * = 0
522
- #endif
523
- )
524
- {
525
- const_iterator pos(this->cend());
526
- for ( ; first != last; ++first){
527
- pos = this->insert_unique(pos, *first);
528
- ++pos;
529
- }
911
+ void insert_unique(ordered_unique_range_t, InIt first, InIt last)
912
+ {
913
+ const bool value = boost::container::dtl::
914
+ has_member_function_callable_with_merge_unique<container_type, InIt, InIt, value_compare>::value;
915
+ (flat_tree_merge_unique)(this->m_data.m_seq, first, last, this->priv_value_comp(), dtl::bool_<value>());
530
916
  }
531
917
 
532
- template <class BidirIt>
533
- void insert_unique(ordered_unique_range_t, BidirIt first, BidirIt last
534
- #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
535
- , typename container_detail::enable_if_c
536
- < !(container_detail::is_input_iterator<BidirIt>::value ||
537
- container_detail::is_forward_iterator<BidirIt>::value)
538
- >::type * = 0
539
- #endif
540
- )
541
- { this->m_data.m_vect.merge_unique(first, last, static_cast<const value_compare &>(this->m_data)); }
542
-
543
918
  #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
544
919
 
545
920
  template <class... Args>
546
921
  std::pair<iterator, bool> emplace_unique(BOOST_FWD_REF(Args)... args)
547
922
  {
548
923
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
549
- value_type &val = *static_cast<value_type *>(static_cast<void *>(&v));
550
- stored_allocator_type &a = this->get_stored_allocator();
924
+ value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));
925
+ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
551
926
  stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
552
- value_destructor<stored_allocator_type> d(a, val);
927
+ value_destructor<stored_allocator_type, value_type> d(a, val);
553
928
  return this->insert_unique(::boost::move(val));
554
929
  }
555
930
 
@@ -558,10 +933,10 @@ class flat_tree
558
933
  {
559
934
  //hint checked in insert_unique
560
935
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
561
- value_type &val = *static_cast<value_type *>(static_cast<void *>(&v));
562
- stored_allocator_type &a = this->get_stored_allocator();
936
+ value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));
937
+ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
563
938
  stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
564
- value_destructor<stored_allocator_type> d(a, val);
939
+ value_destructor<stored_allocator_type, value_type> d(a, val);
565
940
  return this->insert_unique(hint, ::boost::move(val));
566
941
  }
567
942
 
@@ -569,10 +944,10 @@ class flat_tree
569
944
  iterator emplace_equal(BOOST_FWD_REF(Args)... args)
570
945
  {
571
946
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
572
- value_type &val = *static_cast<value_type *>(static_cast<void *>(&v));
573
- stored_allocator_type &a = this->get_stored_allocator();
947
+ value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));
948
+ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
574
949
  stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
575
- value_destructor<stored_allocator_type> d(a, val);
950
+ value_destructor<stored_allocator_type, value_type> d(a, val);
576
951
  return this->insert_equal(::boost::move(val));
577
952
  }
578
953
 
@@ -581,10 +956,10 @@ class flat_tree
581
956
  {
582
957
  //hint checked in insert_equal
583
958
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;
584
- value_type &val = *static_cast<value_type *>(static_cast<void *>(&v));
585
- stored_allocator_type &a = this->get_stored_allocator();
959
+ value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));
960
+ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();
586
961
  stored_allocator_traits::construct(a, &val, ::boost::forward<Args>(args)... );
587
- value_destructor<stored_allocator_type> d(a, val);
962
+ value_destructor<stored_allocator_type, value_type> d(a, val);
588
963
  return this->insert_equal(hint, ::boost::move(val));
589
964
  }
590
965
 
@@ -606,7 +981,7 @@ class flat_tree
606
981
  typedef typename emplace_functor_type<try_emplace_t, KeyType, Args...>::type func_t;
607
982
  typedef emplace_iterator<value_type, func_t, difference_type> it_t;
608
983
  func_t func(try_emplace_t(), ::boost::forward<KeyType>(key), ::boost::forward<Args>(args)...);
609
- ret.first = this->m_data.m_vect.insert(data.position, it_t(func), it_t());
984
+ ret.first = this->m_data.m_seq.insert(data.position, it_t(func), it_t());
610
985
  }
611
986
  return ret;
612
987
  }
@@ -618,10 +993,10 @@ class flat_tree
618
993
  std::pair<iterator, bool> emplace_unique(BOOST_MOVE_UREF##N)\
619
994
  {\
620
995
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;\
621
- value_type &val = *static_cast<value_type *>(static_cast<void *>(&v));\
622
- stored_allocator_type &a = this->get_stored_allocator();\
996
+ value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));\
997
+ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
623
998
  stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
624
- value_destructor<stored_allocator_type> d(a, val);\
999
+ value_destructor<stored_allocator_type, value_type> d(a, val);\
625
1000
  return this->insert_unique(::boost::move(val));\
626
1001
  }\
627
1002
  \
@@ -629,10 +1004,10 @@ class flat_tree
629
1004
  iterator emplace_hint_unique(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
630
1005
  {\
631
1006
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;\
632
- value_type &val = *static_cast<value_type *>(static_cast<void *>(&v));\
633
- stored_allocator_type &a = this->get_stored_allocator();\
1007
+ value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));\
1008
+ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
634
1009
  stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
635
- value_destructor<stored_allocator_type> d(a, val);\
1010
+ value_destructor<stored_allocator_type, value_type> d(a, val);\
636
1011
  return this->insert_unique(hint, ::boost::move(val));\
637
1012
  }\
638
1013
  \
@@ -640,10 +1015,10 @@ class flat_tree
640
1015
  iterator emplace_equal(BOOST_MOVE_UREF##N)\
641
1016
  {\
642
1017
  typename aligned_storage<sizeof(value_type), alignment_of<value_type>::value>::type v;\
643
- value_type &val = *static_cast<value_type *>(static_cast<void *>(&v));\
644
- stored_allocator_type &a = this->get_stored_allocator();\
1018
+ value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));\
1019
+ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
645
1020
  stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
646
- value_destructor<stored_allocator_type> d(a, val);\
1021
+ value_destructor<stored_allocator_type, value_type> d(a, val);\
647
1022
  return this->insert_equal(::boost::move(val));\
648
1023
  }\
649
1024
  \
@@ -651,10 +1026,10 @@ class flat_tree
651
1026
  iterator emplace_hint_equal(const_iterator hint BOOST_MOVE_I##N BOOST_MOVE_UREF##N)\
652
1027
  {\
653
1028
  typename aligned_storage <sizeof(value_type), alignment_of<value_type>::value>::type v;\
654
- value_type &val = *static_cast<value_type *>(static_cast<void *>(&v));\
655
- stored_allocator_type &a = this->get_stored_allocator();\
1029
+ value_type &val = *static_cast<value_type *>(static_cast<void *>(v.data));\
1030
+ get_stored_allocator_noconst_return_t a = this->get_stored_allocator();\
656
1031
  stored_allocator_traits::construct(a, &val BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
657
- value_destructor<stored_allocator_type> d(a, val);\
1032
+ value_destructor<stored_allocator_type, value_type> d(a, val);\
658
1033
  return this->insert_equal(hint, ::boost::move(val));\
659
1034
  }\
660
1035
  template <class KeyType BOOST_MOVE_I##N BOOST_MOVE_CLASS##N>\
@@ -675,7 +1050,7 @@ class flat_tree
675
1050
  typedef typename emplace_functor_type<try_emplace_t, KeyType BOOST_MOVE_I##N BOOST_MOVE_TARG##N>::type func_t;\
676
1051
  typedef emplace_iterator<value_type, func_t, difference_type> it_t;\
677
1052
  func_t func(try_emplace_t(), ::boost::forward<KeyType>(key) BOOST_MOVE_I##N BOOST_MOVE_FWD##N);\
678
- ret.first = this->m_data.m_vect.insert(data.position, it_t(func), it_t());\
1053
+ ret.first = this->m_data.m_seq.insert(data.position, it_t(func), it_t());\
679
1054
  }\
680
1055
  return ret;\
681
1056
  }\
@@ -702,29 +1077,29 @@ class flat_tree
702
1077
  typedef typename emplace_functor_type<KeyType, M>::type func_t;
703
1078
  typedef emplace_iterator<value_type, func_t, difference_type> it_t;
704
1079
  func_t func(boost::forward<KeyType>(key), boost::forward<M>(obj));
705
- ret.first = this->m_data.m_vect.insert(data.position, it_t(func), it_t());
1080
+ ret.first = this->m_data.m_seq.insert(data.position, it_t(func), it_t());
706
1081
  }
707
1082
  return ret;
708
1083
  }
709
1084
 
710
1085
  BOOST_CONTAINER_FORCEINLINE iterator erase(const_iterator position)
711
- { return this->m_data.m_vect.erase(position); }
1086
+ { return this->m_data.m_seq.erase(position); }
712
1087
 
713
1088
  size_type erase(const key_type& k)
714
1089
  {
715
1090
  std::pair<iterator,iterator > itp = this->equal_range(k);
716
1091
  size_type ret = static_cast<size_type>(itp.second-itp.first);
717
1092
  if (ret){
718
- this->m_data.m_vect.erase(itp.first, itp.second);
1093
+ this->m_data.m_seq.erase(itp.first, itp.second);
719
1094
  }
720
1095
  return ret;
721
1096
  }
722
1097
 
723
1098
  BOOST_CONTAINER_FORCEINLINE iterator erase(const_iterator first, const_iterator last)
724
- { return this->m_data.m_vect.erase(first, last); }
1099
+ { return this->m_data.m_seq.erase(first, last); }
725
1100
 
726
1101
  BOOST_CONTAINER_FORCEINLINE void clear()
727
- { this->m_data.m_vect.clear(); }
1102
+ { this->m_data.m_seq.clear(); }
728
1103
 
729
1104
  //! <b>Effects</b>: Tries to deallocate the excess of memory created
730
1105
  // with previous allocations. The size of the vector is unchanged
@@ -733,19 +1108,35 @@ class flat_tree
733
1108
  //!
734
1109
  //! <b>Complexity</b>: Linear to size().
735
1110
  BOOST_CONTAINER_FORCEINLINE void shrink_to_fit()
736
- { this->m_data.m_vect.shrink_to_fit(); }
1111
+ { this->m_data.m_seq.shrink_to_fit(); }
737
1112
 
738
1113
  BOOST_CONTAINER_FORCEINLINE iterator nth(size_type n) BOOST_NOEXCEPT_OR_NOTHROW
739
- { return this->m_data.m_vect.nth(n); }
1114
+ {
1115
+ const bool value = boost::container::dtl::
1116
+ has_member_function_callable_with_nth<container_type, size_type>::value;
1117
+ return flat_tree_nth<iterator>(this->m_data.m_seq, n, dtl::bool_<value>());
1118
+ }
740
1119
 
741
1120
  BOOST_CONTAINER_FORCEINLINE const_iterator nth(size_type n) const BOOST_NOEXCEPT_OR_NOTHROW
742
- { return this->m_data.m_vect.nth(n); }
1121
+ {
1122
+ const bool value = boost::container::dtl::
1123
+ has_member_function_callable_with_nth<container_type, size_type>::value;
1124
+ return flat_tree_nth<const_iterator>(this->m_data.m_seq, n, dtl::bool_<value>());
1125
+ }
743
1126
 
744
1127
  BOOST_CONTAINER_FORCEINLINE size_type index_of(iterator p) BOOST_NOEXCEPT_OR_NOTHROW
745
- { return this->m_data.m_vect.index_of(p); }
1128
+ {
1129
+ const bool value = boost::container::dtl::
1130
+ has_member_function_callable_with_index_of<container_type, iterator>::value;
1131
+ return flat_tree_index_of(this->m_data.m_seq, p, dtl::bool_<value>());
1132
+ }
746
1133
 
747
1134
  BOOST_CONTAINER_FORCEINLINE size_type index_of(const_iterator p) const BOOST_NOEXCEPT_OR_NOTHROW
748
- { return this->m_data.m_vect.index_of(p); }
1135
+ {
1136
+ const bool value = boost::container::dtl::
1137
+ has_member_function_callable_with_index_of<container_type, const_iterator>::value;
1138
+ return flat_tree_index_of(this->m_data.m_seq, p, dtl::bool_<value>());
1139
+ }
749
1140
 
750
1141
  // set operations:
751
1142
  iterator find(const key_type& k)
@@ -778,33 +1169,41 @@ class flat_tree
778
1169
  }
779
1170
 
780
1171
  template<class C2>
781
- void merge_unique(flat_tree<Value, KeyOfValue, C2, Allocator>& source)
1172
+ BOOST_CONTAINER_FORCEINLINE void merge_unique(flat_tree<Value, KeyOfValue, C2, AllocatorOrContainer>& source)
782
1173
  {
783
1174
  this->insert( boost::make_move_iterator(source.begin())
784
1175
  , boost::make_move_iterator(source.end()));
785
1176
  }
786
1177
 
787
1178
  template<class C2>
788
- void merge_equal(flat_tree<Value, KeyOfValue, C2, Allocator>& source)
1179
+ BOOST_CONTAINER_FORCEINLINE void merge_equal(flat_tree<Value, KeyOfValue, C2, AllocatorOrContainer>& source)
789
1180
  {
790
1181
  this->insert( boost::make_move_iterator(source.begin())
791
1182
  , boost::make_move_iterator(source.end()));
792
1183
  }
793
1184
 
794
- void merge_unique(flat_tree& source)
1185
+ BOOST_CONTAINER_FORCEINLINE void merge_unique(flat_tree& source)
795
1186
  {
796
- this->m_data.m_vect.merge_unique
797
- ( boost::make_move_iterator(source.begin())
798
- , boost::make_move_iterator(source.end())
799
- , static_cast<const value_compare &>(this->m_data));
1187
+ const bool value = boost::container::dtl::
1188
+ has_member_function_callable_with_merge_unique<container_type, iterator, iterator, value_compare>::value;
1189
+ (flat_tree_merge_unique)
1190
+ ( this->m_data.m_seq
1191
+ , boost::make_move_iterator(source.m_data.m_seq.begin())
1192
+ , boost::make_move_iterator(source.m_data.m_seq.end())
1193
+ , this->priv_value_comp()
1194
+ , dtl::bool_<value>());
800
1195
  }
801
1196
 
802
- void merge_equal(flat_tree& source)
1197
+ BOOST_CONTAINER_FORCEINLINE void merge_equal(flat_tree& source)
803
1198
  {
804
- this->m_data.m_vect.merge
805
- ( boost::make_move_iterator(source.begin())
806
- , boost::make_move_iterator(source.end())
807
- , static_cast<const value_compare &>(this->m_data));
1199
+ const bool value = boost::container::dtl::
1200
+ has_member_function_callable_with_merge<container_type, iterator, iterator, value_compare>::value;
1201
+ (flat_tree_merge_equal)
1202
+ ( this->m_data.m_seq
1203
+ , boost::make_move_iterator(source.m_data.m_seq.begin())
1204
+ , boost::make_move_iterator(source.m_data.m_seq.end())
1205
+ , this->priv_value_comp()
1206
+ , dtl::bool_<value>());
808
1207
  }
809
1208
 
810
1209
  BOOST_CONTAINER_FORCEINLINE iterator lower_bound(const key_type& k)
@@ -832,10 +1231,52 @@ class flat_tree
832
1231
  { return this->priv_lower_bound_range(this->cbegin(), this->cend(), k); }
833
1232
 
834
1233
  BOOST_CONTAINER_FORCEINLINE size_type capacity() const
835
- { return this->m_data.m_vect.capacity(); }
1234
+ {
1235
+ const bool value = boost::container::dtl::
1236
+ has_member_function_callable_with_capacity<container_type>::value;
1237
+ return (flat_tree_capacity)(this->m_data.m_seq, dtl::bool_<value>());
1238
+ }
836
1239
 
837
1240
  BOOST_CONTAINER_FORCEINLINE void reserve(size_type cnt)
838
- { this->m_data.m_vect.reserve(cnt); }
1241
+ {
1242
+ const bool value = boost::container::dtl::
1243
+ has_member_function_callable_with_reserve<container_type, size_type>::value;
1244
+ (flat_tree_reserve)(this->m_data.m_seq, cnt, dtl::bool_<value>());
1245
+ }
1246
+
1247
+ BOOST_CONTAINER_FORCEINLINE container_type extract_sequence()
1248
+ {
1249
+ return boost::move(m_data.m_seq);
1250
+ }
1251
+
1252
+ BOOST_CONTAINER_FORCEINLINE container_type &get_sequence_ref()
1253
+ {
1254
+ return m_data.m_seq;
1255
+ }
1256
+
1257
+ BOOST_CONTAINER_FORCEINLINE void adopt_sequence_equal(BOOST_RV_REF(container_type) seq)
1258
+ {
1259
+ (flat_tree_adopt_sequence_equal)( m_data.m_seq, boost::move(seq), this->priv_value_comp()
1260
+ , dtl::bool_<is_contiguous_container<container_type>::value>());
1261
+ }
1262
+
1263
+ BOOST_CONTAINER_FORCEINLINE void adopt_sequence_unique(BOOST_RV_REF(container_type) seq)
1264
+ {
1265
+ (flat_tree_adopt_sequence_unique)(m_data.m_seq, boost::move(seq), this->priv_value_comp()
1266
+ , dtl::bool_<is_contiguous_container<container_type>::value>());
1267
+ }
1268
+
1269
+ void adopt_sequence_equal(ordered_range_t, BOOST_RV_REF(container_type) seq)
1270
+ {
1271
+ BOOST_ASSERT((is_sorted)(seq.cbegin(), seq.cend(), this->priv_value_comp()));
1272
+ m_data.m_seq = boost::move(seq);
1273
+ }
1274
+
1275
+ void adopt_sequence_unique(ordered_unique_range_t, BOOST_RV_REF(container_type) seq)
1276
+ {
1277
+ BOOST_ASSERT((is_sorted_and_unique)(seq.cbegin(), seq.cend(), this->priv_value_comp()));
1278
+ m_data.m_seq = boost::move(seq);
1279
+ }
839
1280
 
840
1281
  BOOST_CONTAINER_FORCEINLINE friend bool operator==(const flat_tree& x, const flat_tree& y)
841
1282
  {
@@ -864,15 +1305,25 @@ class flat_tree
864
1305
 
865
1306
  private:
866
1307
 
867
- BOOST_CONTAINER_FORCEINLINE bool priv_in_range_or_end(const_iterator pos) const
1308
+ template <class InputIterator>
1309
+ void priv_range_insertion_construct( bool unique_insertion, InputIterator first, InputIterator last)
868
1310
  {
869
- return (this->begin() <= pos) && (pos <= this->end());
1311
+ //Use cend() as hint to achieve linear time for
1312
+ //ordered ranges as required by the standard
1313
+ //for the constructor
1314
+ //Call end() every iteration as reallocation might have invalidated iterators
1315
+ if(unique_insertion){
1316
+ this->insert_unique(first, last);
1317
+ }
1318
+ else{
1319
+ this->insert_equal (first, last);
1320
+ }
870
1321
  }
871
1322
 
872
- struct insert_commit_data
1323
+ BOOST_CONTAINER_FORCEINLINE bool priv_in_range_or_end(const_iterator pos) const
873
1324
  {
874
- const_iterator position;
875
- };
1325
+ return (this->begin() <= pos) && (pos <= this->end());
1326
+ }
876
1327
 
877
1328
  // insert/erase
878
1329
  void priv_insert_equal_prepare
@@ -963,7 +1414,7 @@ class flat_tree
963
1414
  BOOST_CONTAINER_FORCEINLINE iterator priv_insert_commit
964
1415
  (insert_commit_data &commit_data, BOOST_FWD_REF(Convertible) convertible)
965
1416
  {
966
- return this->m_data.m_vect.insert
1417
+ return this->m_data.m_seq.insert
967
1418
  ( commit_data.position
968
1419
  , boost::forward<Convertible>(convertible));
969
1420
  }
@@ -1062,41 +1513,22 @@ class flat_tree
1062
1513
  }
1063
1514
  return std::pair<RanIt, RanIt>(lb, ub);
1064
1515
  }
1065
-
1066
- template<class InIt>
1067
- void priv_insert_equal_loop(InIt first, InIt last)
1068
- {
1069
- for ( ; first != last; ++first){
1070
- this->insert_equal(*first);
1071
- }
1072
- }
1073
-
1074
- template<class InIt>
1075
- void priv_insert_equal_loop_ordered(InIt first, InIt last)
1076
- {
1077
- const_iterator pos(this->cend());
1078
- for ( ; first != last; ++first){
1079
- //If ordered, then try hint version
1080
- //to achieve constant-time complexity per insertion
1081
- //in some cases
1082
- pos = this->insert_equal(pos, *first);
1083
- ++pos;
1084
- }
1085
- }
1086
1516
  };
1087
1517
 
1088
- } //namespace container_detail {
1518
+ } //namespace dtl {
1089
1519
 
1090
1520
  } //namespace container {
1091
1521
 
1092
1522
  //!has_trivial_destructor_after_move<> == true_type
1093
1523
  //!specialization for optimizations
1094
1524
  template <class T, class KeyOfValue,
1095
- class Compare, class Allocator>
1096
- struct has_trivial_destructor_after_move<boost::container::container_detail::flat_tree<T, KeyOfValue, Compare, Allocator> >
1525
+ class Compare, class AllocatorOrContainer>
1526
+ struct has_trivial_destructor_after_move<boost::container::dtl::flat_tree<T, KeyOfValue, Compare, AllocatorOrContainer> >
1097
1527
  {
1098
- typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
1099
- static const bool value = ::boost::has_trivial_destructor_after_move<Allocator>::value &&
1528
+ typedef typename boost::container::dtl::select_container_type<T, AllocatorOrContainer>::type container_type;
1529
+ typedef typename container_type::allocator_type allocator_t;
1530
+ typedef typename ::boost::container::allocator_traits<allocator_t>::pointer pointer;
1531
+ static const bool value = ::boost::has_trivial_destructor_after_move<allocator_t>::value &&
1100
1532
  ::boost::has_trivial_destructor_after_move<pointer>::value;
1101
1533
  };
1102
1534