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
@@ -17,45 +17,48 @@
17
17
  #include <memory>
18
18
 
19
19
  namespace boost {
20
- namespace unordered {
21
- template <class K, class T, class H = boost::hash<K>,
22
- class P = std::equal_to<K>,
23
- class A = std::allocator<std::pair<const K, T> > >
24
- class unordered_map;
25
-
26
- template <class K, class T, class H, class P, class A>
27
- inline bool operator==(
28
- unordered_map<K, T, H, P, A> const&, unordered_map<K, T, H, P, A> const&);
29
- template <class K, class T, class H, class P, class A>
30
- inline bool operator!=(
31
- unordered_map<K, T, H, P, A> const&, unordered_map<K, T, H, P, A> const&);
32
- template <class K, class T, class H, class P, class A>
33
- inline void swap(unordered_map<K, T, H, P, A>&, unordered_map<K, T, H, P, A>&);
34
-
35
- template <class K, class T, class H = boost::hash<K>,
36
- class P = std::equal_to<K>,
37
- class A = std::allocator<std::pair<const K, T> > >
38
- class unordered_multimap;
39
-
40
- template <class K, class T, class H, class P, class A>
41
- inline bool operator==(unordered_multimap<K, T, H, P, A> const&,
42
- unordered_multimap<K, T, H, P, A> const&);
43
- template <class K, class T, class H, class P, class A>
44
- inline bool operator!=(unordered_multimap<K, T, H, P, A> const&,
45
- unordered_multimap<K, T, H, P, A> const&);
46
- template <class K, class T, class H, class P, class A>
47
- inline void swap(
48
- unordered_multimap<K, T, H, P, A>&, unordered_multimap<K, T, H, P, A>&);
49
-
50
- template <class N, class K, class T, class A> class node_handle_map;
51
- template <class N, class K, class T, class A> struct insert_return_type_map;
52
- }
20
+ namespace unordered {
21
+ template <class K, class T, class H = boost::hash<K>,
22
+ class P = std::equal_to<K>,
23
+ class A = std::allocator<std::pair<const K, T> > >
24
+ class unordered_map;
25
+
26
+ template <class K, class T, class H, class P, class A>
27
+ inline bool operator==(
28
+ unordered_map<K, T, H, P, A> const&, unordered_map<K, T, H, P, A> const&);
29
+ template <class K, class T, class H, class P, class A>
30
+ inline bool operator!=(
31
+ unordered_map<K, T, H, P, A> const&, unordered_map<K, T, H, P, A> const&);
32
+ template <class K, class T, class H, class P, class A>
33
+ inline void swap(
34
+ unordered_map<K, T, H, P, A>& m1, unordered_map<K, T, H, P, A>& m2)
35
+ BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(m1.swap(m2)));
36
+
37
+ template <class K, class T, class H = boost::hash<K>,
38
+ class P = std::equal_to<K>,
39
+ class A = std::allocator<std::pair<const K, T> > >
40
+ class unordered_multimap;
41
+
42
+ template <class K, class T, class H, class P, class A>
43
+ inline bool operator==(unordered_multimap<K, T, H, P, A> const&,
44
+ unordered_multimap<K, T, H, P, A> const&);
45
+ template <class K, class T, class H, class P, class A>
46
+ inline bool operator!=(unordered_multimap<K, T, H, P, A> const&,
47
+ unordered_multimap<K, T, H, P, A> const&);
48
+ template <class K, class T, class H, class P, class A>
49
+ inline void swap(unordered_multimap<K, T, H, P, A>& m1,
50
+ unordered_multimap<K, T, H, P, A>& m2)
51
+ BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(m1.swap(m2)));
52
+
53
+ template <class N, class K, class T, class A> class node_handle_map;
54
+ template <class N, class K, class T, class A> struct insert_return_type_map;
55
+ }
53
56
 
54
- using boost::unordered::unordered_map;
55
- using boost::unordered::unordered_multimap;
56
- using boost::unordered::swap;
57
- using boost::unordered::operator==;
58
- using boost::unordered::operator!=;
57
+ using boost::unordered::unordered_map;
58
+ using boost::unordered::unordered_multimap;
59
+ using boost::unordered::swap;
60
+ using boost::unordered::operator==;
61
+ using boost::unordered::operator!=;
59
62
  }
60
63
 
61
64
  #endif
@@ -25,1863 +25,2073 @@
25
25
 
26
26
  #if defined(BOOST_MSVC)
27
27
  #pragma warning(push)
28
+ // conditional expression is constant
29
+ #pragma warning(disable : 4127)
28
30
  #if BOOST_MSVC >= 1400
29
- #pragma warning(disable : 4396) // the inline specifier cannot be used when a
30
- // friend declaration refers to a specialization
31
- // of a function template
31
+ // the inline specifier cannot be used when a friend declaration refers to a
32
+ // specialization of a function template
33
+ #pragma warning(disable : 4396)
32
34
  #endif
33
35
  #endif
34
36
 
35
37
  namespace boost {
36
- namespace unordered {
37
- template <class T, class H, class P, class A> class unordered_set
38
- {
38
+ namespace unordered {
39
+ template <class T, class H, class P, class A> class unordered_set
40
+ {
39
41
  #if defined(BOOST_UNORDERED_USE_MOVE)
40
- BOOST_COPYABLE_AND_MOVABLE(unordered_set)
42
+ BOOST_COPYABLE_AND_MOVABLE(unordered_set)
41
43
  #endif
42
- template <typename, typename, typename, typename>
43
- friend class unordered_multiset;
44
+ template <typename, typename, typename, typename>
45
+ friend class unordered_multiset;
44
46
 
45
- public:
46
- typedef T key_type;
47
- typedef T value_type;
48
- typedef H hasher;
49
- typedef P key_equal;
50
- typedef A allocator_type;
47
+ public:
48
+ typedef T key_type;
49
+ typedef T value_type;
50
+ typedef H hasher;
51
+ typedef P key_equal;
52
+ typedef A allocator_type;
51
53
 
52
- private:
53
- typedef boost::unordered::detail::set<A, T, H, P> types;
54
- typedef typename types::value_allocator_traits value_allocator_traits;
55
- typedef typename types::table table;
54
+ private:
55
+ typedef boost::unordered::detail::set<A, T, H, P> types;
56
+ typedef typename types::value_allocator_traits value_allocator_traits;
57
+ typedef typename types::table table;
58
+ typedef typename table::node_pointer node_pointer;
59
+ typedef typename table::link_pointer link_pointer;
56
60
 
57
- public:
58
- typedef typename value_allocator_traits::pointer pointer;
59
- typedef typename value_allocator_traits::const_pointer const_pointer;
61
+ public:
62
+ typedef typename value_allocator_traits::pointer pointer;
63
+ typedef typename value_allocator_traits::const_pointer const_pointer;
60
64
 
61
- typedef value_type& reference;
62
- typedef value_type const& const_reference;
65
+ typedef value_type& reference;
66
+ typedef value_type const& const_reference;
63
67
 
64
- typedef std::size_t size_type;
65
- typedef std::ptrdiff_t difference_type;
68
+ typedef std::size_t size_type;
69
+ typedef std::ptrdiff_t difference_type;
66
70
 
67
- typedef typename table::cl_iterator const_local_iterator;
68
- typedef typename table::l_iterator local_iterator;
69
- typedef typename table::c_iterator const_iterator;
70
- typedef typename table::iterator iterator;
71
- typedef typename types::node_type node_type;
72
- typedef typename types::insert_return_type insert_return_type;
71
+ typedef typename table::iterator iterator;
72
+ typedef typename table::c_iterator const_iterator;
73
+ typedef typename table::l_iterator local_iterator;
74
+ typedef typename table::cl_iterator const_local_iterator;
75
+ typedef typename types::node_type node_type;
76
+ typedef typename types::insert_return_type insert_return_type;
73
77
 
74
- private:
75
- table table_;
78
+ private:
79
+ table table_;
76
80
 
77
- public:
78
- // constructors
81
+ public:
82
+ // constructors
79
83
 
80
- unordered_set();
84
+ unordered_set();
81
85
 
82
- explicit unordered_set(size_type, const hasher& = hasher(),
86
+ explicit unordered_set(size_type, const hasher& = hasher(),
83
87
  const key_equal& = key_equal(),
84
88
  const allocator_type& = allocator_type());
85
89
 
86
- explicit unordered_set(size_type, const allocator_type&);
87
-
88
- explicit unordered_set(size_type, const hasher&, const allocator_type&);
90
+ template <class InputIt>
91
+ unordered_set(InputIt, InputIt,
92
+ size_type = boost::unordered::detail::default_bucket_count,
93
+ const hasher& = hasher(), const key_equal& = key_equal(),
94
+ const allocator_type& = allocator_type());
89
95
 
90
- explicit unordered_set(allocator_type const&);
96
+ unordered_set(unordered_set const&);
91
97
 
92
- template <class InputIt> unordered_set(InputIt, InputIt);
98
+ #if defined(BOOST_UNORDERED_USE_MOVE) || \
99
+ !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
100
+ unordered_set(BOOST_RV_REF(unordered_set) other)
101
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
102
+ : table_(other.table_, boost::unordered::detail::move_tag())
103
+ {
104
+ // The move is done in table_
105
+ }
106
+ #endif
93
107
 
94
- template <class InputIt>
95
- unordered_set(InputIt, InputIt, size_type, const hasher& = hasher(),
96
- const key_equal& = key_equal());
108
+ explicit unordered_set(allocator_type const&);
97
109
 
98
- template <class InputIt>
99
- unordered_set(InputIt, InputIt, size_type, const hasher&, const key_equal&,
100
- const allocator_type&);
110
+ unordered_set(unordered_set const&, allocator_type const&);
101
111
 
102
- template <class InputIt>
103
- unordered_set(
104
- InputIt, InputIt, size_type, const hasher&, const allocator_type&);
112
+ unordered_set(BOOST_RV_REF(unordered_set), allocator_type const&);
105
113
 
106
- template <class InputIt>
107
- unordered_set(InputIt, InputIt, size_type, const allocator_type&);
114
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
115
+ unordered_set(std::initializer_list<value_type>,
116
+ size_type = boost::unordered::detail::default_bucket_count,
117
+ const hasher& = hasher(), const key_equal& l = key_equal(),
118
+ const allocator_type& = allocator_type());
119
+ #endif
108
120
 
109
- // copy/move constructors
121
+ explicit unordered_set(size_type, const allocator_type&);
110
122
 
111
- unordered_set(unordered_set const&);
123
+ explicit unordered_set(size_type, const hasher&, const allocator_type&);
112
124
 
113
- unordered_set(unordered_set const&, allocator_type const&);
114
- unordered_set(BOOST_RV_REF(unordered_set), allocator_type const&);
125
+ template <class InputIt>
126
+ unordered_set(InputIt, InputIt, size_type, const allocator_type&);
115
127
 
116
- #if defined(BOOST_UNORDERED_USE_MOVE)
117
- unordered_set(BOOST_RV_REF(unordered_set) other)
118
- BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
119
- : table_(other.table_, boost::unordered::detail::move_tag())
120
- {
121
- }
122
- #elif !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
123
- unordered_set(unordered_set&& other)
124
- BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
125
- : table_(other.table_, boost::unordered::detail::move_tag())
126
- {
127
- }
128
- #endif
128
+ template <class InputIt>
129
+ unordered_set(
130
+ InputIt, InputIt, size_type, const hasher&, const allocator_type&);
129
131
 
130
132
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
131
- unordered_set(std::initializer_list<value_type>,
132
- size_type = boost::unordered::detail::default_bucket_count,
133
- const hasher& = hasher(), const key_equal& l = key_equal(),
134
- const allocator_type& = allocator_type());
135
- unordered_set(std::initializer_list<value_type>, size_type, const hasher&,
136
- const allocator_type&);
137
- unordered_set(
133
+ unordered_set(
138
134
  std::initializer_list<value_type>, size_type, const allocator_type&);
135
+
136
+ unordered_set(std::initializer_list<value_type>, size_type, const hasher&,
137
+ const allocator_type&);
139
138
  #endif
140
139
 
141
- // Destructor
140
+ // Destructor
142
141
 
143
- ~unordered_set() BOOST_NOEXCEPT;
142
+ ~unordered_set() BOOST_NOEXCEPT;
144
143
 
145
144
  // Assign
146
145
 
147
146
  #if defined(BOOST_UNORDERED_USE_MOVE)
148
- unordered_set& operator=(BOOST_COPY_ASSIGN_REF(unordered_set) x)
149
- {
150
- table_.assign(x.table_);
147
+ unordered_set& operator=(BOOST_COPY_ASSIGN_REF(unordered_set) x)
148
+ {
149
+ table_.assign(x.table_, boost::unordered::detail::true_type());
151
150
  return *this;
152
- }
153
-
154
- unordered_set& operator=(BOOST_RV_REF(unordered_set) x)
155
- {
156
- table_.move_assign(x.table_);
151
+ }
152
+
153
+ unordered_set& operator=(BOOST_RV_REF(unordered_set) x)
154
+ BOOST_NOEXCEPT_IF(value_allocator_traits::is_always_equal::value&&
155
+ boost::is_nothrow_move_assignable<H>::value&&
156
+ boost::is_nothrow_move_assignable<P>::value)
157
+ {
158
+ table_.move_assign(x.table_, boost::unordered::detail::true_type());
157
159
  return *this;
158
- }
160
+ }
159
161
  #else
160
- unordered_set& operator=(unordered_set const& x)
161
- {
162
- table_.assign(x.table_);
162
+ unordered_set& operator=(unordered_set const& x)
163
+ {
164
+ table_.assign(x.table_, boost::unordered::detail::true_type());
163
165
  return *this;
164
- }
166
+ }
165
167
 
166
168
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
167
- unordered_set& operator=(unordered_set&& x)
168
- {
169
- table_.move_assign(x.table_);
169
+ unordered_set& operator=(unordered_set&& x)
170
+ BOOST_NOEXCEPT_IF(value_allocator_traits::is_always_equal::value&&
171
+ boost::is_nothrow_move_assignable<H>::value&&
172
+ boost::is_nothrow_move_assignable<P>::value)
173
+ {
174
+ table_.move_assign(x.table_, boost::unordered::detail::true_type());
170
175
  return *this;
171
- }
176
+ }
172
177
  #endif
173
178
  #endif
174
179
 
175
180
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
176
- unordered_set& operator=(std::initializer_list<value_type>);
181
+ unordered_set& operator=(std::initializer_list<value_type>);
177
182
  #endif
178
183
 
179
- allocator_type get_allocator() const BOOST_NOEXCEPT
180
- {
184
+ allocator_type get_allocator() const BOOST_NOEXCEPT
185
+ {
181
186
  return table_.node_alloc();
182
- }
183
-
184
- // size and capacity
185
-
186
- bool empty() const BOOST_NOEXCEPT { return table_.size_ == 0; }
187
-
188
- size_type size() const BOOST_NOEXCEPT { return table_.size_; }
189
-
190
- size_type max_size() const BOOST_NOEXCEPT;
187
+ }
191
188
 
192
- // iterators
189
+ // iterators
193
190
 
194
- iterator begin() BOOST_NOEXCEPT { return iterator(table_.begin()); }
191
+ iterator begin() BOOST_NOEXCEPT { return iterator(table_.begin()); }
195
192
 
196
- const_iterator begin() const BOOST_NOEXCEPT
197
- {
193
+ const_iterator begin() const BOOST_NOEXCEPT
194
+ {
198
195
  return const_iterator(table_.begin());
199
- }
196
+ }
200
197
 
201
- iterator end() BOOST_NOEXCEPT { return iterator(); }
198
+ iterator end() BOOST_NOEXCEPT { return iterator(); }
202
199
 
203
- const_iterator end() const BOOST_NOEXCEPT { return const_iterator(); }
200
+ const_iterator end() const BOOST_NOEXCEPT { return const_iterator(); }
204
201
 
205
- const_iterator cbegin() const BOOST_NOEXCEPT
206
- {
202
+ const_iterator cbegin() const BOOST_NOEXCEPT
203
+ {
207
204
  return const_iterator(table_.begin());
208
- }
205
+ }
209
206
 
210
- const_iterator cend() const BOOST_NOEXCEPT { return const_iterator(); }
207
+ const_iterator cend() const BOOST_NOEXCEPT { return const_iterator(); }
211
208
 
212
- // extract
209
+ // size and capacity
213
210
 
214
- node_type extract(const_iterator position)
215
- {
216
- return node_type(
217
- table_.extract_by_iterator(position), table_.node_alloc());
218
- }
211
+ bool empty() const BOOST_NOEXCEPT { return table_.size_ == 0; }
219
212
 
220
- node_type extract(const key_type& k)
221
- {
222
- return node_type(table_.extract_by_key(k), table_.node_alloc());
223
- }
213
+ size_type size() const BOOST_NOEXCEPT { return table_.size_; }
214
+
215
+ size_type max_size() const BOOST_NOEXCEPT;
224
216
 
225
217
  // emplace
226
218
 
227
219
  #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
228
- template <class... Args>
229
- std::pair<iterator, bool> emplace(BOOST_FWD_REF(Args)... args)
230
- {
231
- return table_.emplace(boost::forward<Args>(args)...);
232
- }
233
220
 
234
- template <class... Args>
235
- iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(Args)... args)
236
- {
237
- return table_.emplace_hint(hint, boost::forward<Args>(args)...);
238
- }
221
+ template <class... Args>
222
+ std::pair<iterator, bool> emplace(BOOST_FWD_REF(Args)... args)
223
+ {
224
+ return table_.emplace_unique(
225
+ table::extractor::extract(boost::forward<Args>(args)...),
226
+ boost::forward<Args>(args)...);
227
+ }
228
+
239
229
  #else
240
230
 
241
- #if !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x5100))
231
+ #if !BOOST_UNORDERED_SUN_WORKAROUNDS1
242
232
 
243
- // 0 argument emplace requires special treatment in case
244
- // the container is instantiated with a value type that
245
- // doesn't have a default constructor.
233
+ // 0 argument emplace requires special treatment in case
234
+ // the container is instantiated with a value type that
235
+ // doesn't have a default constructor.
246
236
 
247
- std::pair<iterator, bool> emplace(
237
+ std::pair<iterator, bool> emplace(
248
238
  boost::unordered::detail::empty_emplace =
249
- boost::unordered::detail::empty_emplace(),
239
+ boost::unordered::detail::empty_emplace(),
250
240
  value_type v = value_type())
251
- {
241
+ {
252
242
  return this->emplace(boost::move(v));
253
- }
243
+ }
244
+
245
+ #endif
246
+
247
+ template <typename A0>
248
+ std::pair<iterator, bool> emplace(BOOST_FWD_REF(A0) a0)
249
+ {
250
+ return table_.emplace_unique(
251
+ table::extractor::extract(boost::forward<A0>(a0)),
252
+ boost::unordered::detail::create_emplace_args(
253
+ boost::forward<A0>(a0)));
254
+ }
255
+
256
+ template <typename A0, typename A1>
257
+ std::pair<iterator, bool> emplace(
258
+ BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1)
259
+ {
260
+ return table_.emplace_unique(
261
+ table::extractor::extract(
262
+ boost::forward<A0>(a0), boost::forward<A1>(a1)),
263
+ boost::unordered::detail::create_emplace_args(
264
+ boost::forward<A0>(a0), boost::forward<A1>(a1)));
265
+ }
266
+
267
+ template <typename A0, typename A1, typename A2>
268
+ std::pair<iterator, bool> emplace(
269
+ BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
270
+ {
271
+ return table_.emplace_unique(
272
+ table::extractor::extract(
273
+ boost::forward<A0>(a0), boost::forward<A1>(a1)),
274
+ boost::unordered::detail::create_emplace_args(boost::forward<A0>(a0),
275
+ boost::forward<A1>(a1), boost::forward<A2>(a2)));
276
+ }
277
+
278
+ #endif
279
+
280
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
281
+
282
+ template <class... Args>
283
+ iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(Args)... args)
284
+ {
285
+ return table_.emplace_hint_unique(hint,
286
+ table::extractor::extract(boost::forward<Args>(args)...),
287
+ boost::forward<Args>(args)...);
288
+ }
254
289
 
255
- iterator emplace_hint(const_iterator hint,
290
+ #else
291
+
292
+ #if !BOOST_UNORDERED_SUN_WORKAROUNDS1
293
+
294
+ iterator emplace_hint(const_iterator hint,
256
295
  boost::unordered::detail::empty_emplace =
257
- boost::unordered::detail::empty_emplace(),
296
+ boost::unordered::detail::empty_emplace(),
258
297
  value_type v = value_type())
259
- {
298
+ {
260
299
  return this->emplace_hint(hint, boost::move(v));
261
- }
300
+ }
262
301
 
263
302
  #endif
264
303
 
265
- template <typename A0>
266
- std::pair<iterator, bool> emplace(BOOST_FWD_REF(A0) a0)
267
- {
268
- return table_.emplace(boost::unordered::detail::create_emplace_args(
304
+ template <typename A0>
305
+ iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(A0) a0)
306
+ {
307
+ return table_.emplace_hint_unique(hint,
308
+ table::extractor::extract(boost::forward<A0>(a0)),
309
+ boost::unordered::detail::create_emplace_args(
269
310
  boost::forward<A0>(a0)));
270
- }
271
-
272
- template <typename A0>
273
- iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(A0) a0)
274
- {
275
- return table_.emplace_hint(
276
- hint, boost::unordered::detail::create_emplace_args(
277
- boost::forward<A0>(a0)));
278
- }
311
+ }
279
312
 
280
- template <typename A0, typename A1>
281
- std::pair<iterator, bool> emplace(
282
- BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1)
283
- {
284
- return table_.emplace(boost::unordered::detail::create_emplace_args(
313
+ template <typename A0, typename A1>
314
+ iterator emplace_hint(
315
+ const_iterator hint, BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1)
316
+ {
317
+ return table_.emplace_hint_unique(hint,
318
+ table::extractor::extract(
319
+ boost::forward<A0>(a0), boost::forward<A1>(a1)),
320
+ boost::unordered::detail::create_emplace_args(
285
321
  boost::forward<A0>(a0), boost::forward<A1>(a1)));
286
- }
322
+ }
287
323
 
288
- template <typename A0, typename A1>
289
- iterator emplace_hint(
290
- const_iterator hint, BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1)
291
- {
292
- return table_.emplace_hint(
293
- hint, boost::unordered::detail::create_emplace_args(
294
- boost::forward<A0>(a0), boost::forward<A1>(a1)));
295
- }
324
+ template <typename A0, typename A1, typename A2>
325
+ iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(A0) a0,
326
+ BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
327
+ {
328
+ return table_.emplace_hint_unique(hint,
329
+ table::extractor::extract(
330
+ boost::forward<A0>(a0), boost::forward<A1>(a1)),
331
+ boost::unordered::detail::create_emplace_args(boost::forward<A0>(a0),
332
+ boost::forward<A1>(a1), boost::forward<A2>(a2)));
333
+ }
296
334
 
297
- template <typename A0, typename A1, typename A2>
298
- std::pair<iterator, bool> emplace(
299
- BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
300
- {
301
- return table_.emplace(boost::unordered::detail::create_emplace_args(
302
- boost::forward<A0>(a0), boost::forward<A1>(a1),
303
- boost::forward<A2>(a2)));
304
- }
335
+ #endif
305
336
 
306
- template <typename A0, typename A1, typename A2>
307
- iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(A0) a0,
308
- BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
309
- {
310
- return table_.emplace_hint(
311
- hint, boost::unordered::detail::create_emplace_args(
312
- boost::forward<A0>(a0), boost::forward<A1>(a1),
313
- boost::forward<A2>(a2)));
314
- }
337
+ #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
315
338
 
316
339
  #define BOOST_UNORDERED_EMPLACE(z, n, _) \
317
- template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
318
- std::pair<iterator, bool> emplace( \
319
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, a)) \
320
- { \
321
- return table_.emplace(boost::unordered::detail::create_emplace_args( \
322
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_CALL_FORWARD, a))); \
323
- } \
340
+ template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
341
+ std::pair<iterator, bool> emplace( \
342
+ BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, a)) \
343
+ { \
344
+ return table_.emplace_unique( \
345
+ table::extractor::extract( \
346
+ boost::forward<A0>(a0), boost::forward<A1>(a1)), \
347
+ boost::unordered::detail::create_emplace_args( \
348
+ BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_CALL_FORWARD, a))); \
349
+ } \
324
350
  \
325
- template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
326
- iterator emplace_hint(const_iterator hint, \
327
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, a)) \
328
- { \
329
- return table_.emplace_hint( \
330
- hint, boost::unordered::detail::create_emplace_args( \
331
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_CALL_FORWARD, a))); \
332
- }
333
-
334
- BOOST_PP_REPEAT_FROM_TO(
335
- 4, BOOST_UNORDERED_EMPLACE_LIMIT, BOOST_UNORDERED_EMPLACE, _)
351
+ template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
352
+ iterator emplace_hint( \
353
+ const_iterator hint, BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, a)) \
354
+ { \
355
+ return table_.emplace_hint_unique(hint, \
356
+ table::extractor::extract( \
357
+ boost::forward<A0>(a0), boost::forward<A1>(a1)), \
358
+ boost::unordered::detail::create_emplace_args( \
359
+ BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_CALL_FORWARD, a))); \
360
+ }
361
+
362
+ BOOST_UNORDERED_EMPLACE(1, 4, _)
363
+ BOOST_UNORDERED_EMPLACE(1, 5, _)
364
+ BOOST_UNORDERED_EMPLACE(1, 6, _)
365
+ BOOST_UNORDERED_EMPLACE(1, 7, _)
366
+ BOOST_UNORDERED_EMPLACE(1, 8, _)
367
+ BOOST_UNORDERED_EMPLACE(1, 9, _)
368
+ BOOST_PP_REPEAT_FROM_TO(10, BOOST_PP_INC(BOOST_UNORDERED_EMPLACE_LIMIT),
369
+ BOOST_UNORDERED_EMPLACE, _)
336
370
 
337
371
  #undef BOOST_UNORDERED_EMPLACE
338
372
 
339
373
  #endif
340
374
 
341
- std::pair<iterator, bool> insert(value_type const& x)
342
- {
375
+ std::pair<iterator, bool> insert(value_type const& x)
376
+ {
343
377
  return this->emplace(x);
344
- }
378
+ }
345
379
 
346
- std::pair<iterator, bool> insert(BOOST_UNORDERED_RV_REF(value_type) x)
347
- {
380
+ std::pair<iterator, bool> insert(BOOST_UNORDERED_RV_REF(value_type) x)
381
+ {
348
382
  return this->emplace(boost::move(x));
349
- }
383
+ }
350
384
 
351
- iterator insert(const_iterator hint, value_type const& x)
352
- {
385
+ iterator insert(const_iterator hint, value_type const& x)
386
+ {
353
387
  return this->emplace_hint(hint, x);
354
- }
388
+ }
355
389
 
356
- iterator insert(const_iterator hint, BOOST_UNORDERED_RV_REF(value_type) x)
357
- {
390
+ iterator insert(const_iterator hint, BOOST_UNORDERED_RV_REF(value_type) x)
391
+ {
358
392
  return this->emplace_hint(hint, boost::move(x));
359
- }
393
+ }
360
394
 
361
- template <class InputIt> void insert(InputIt, InputIt);
395
+ template <class InputIt> void insert(InputIt, InputIt);
362
396
 
363
397
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
364
- void insert(std::initializer_list<value_type>);
398
+ void insert(std::initializer_list<value_type>);
365
399
  #endif
366
400
 
367
- insert_return_type insert(BOOST_RV_REF(node_type) np)
368
- {
401
+ // extract
402
+
403
+ node_type extract(const_iterator position)
404
+ {
405
+ return node_type(
406
+ table_.extract_by_iterator_unique(position), table_.node_alloc());
407
+ }
408
+
409
+ node_type extract(const key_type& k)
410
+ {
411
+ return node_type(table_.extract_by_key(k), table_.node_alloc());
412
+ }
413
+
414
+ insert_return_type insert(BOOST_RV_REF(node_type) np)
415
+ {
369
416
  insert_return_type result;
370
- table_.move_insert_node_type(np, result);
417
+ table_.move_insert_node_type_unique(np, result);
371
418
  return boost::move(result);
372
- }
419
+ }
373
420
 
374
- iterator insert(const_iterator hint, BOOST_RV_REF(node_type) np)
375
- {
376
- return table_.move_insert_node_type_with_hint(hint, np);
377
- }
421
+ iterator insert(const_iterator hint, BOOST_RV_REF(node_type) np)
422
+ {
423
+ return table_.move_insert_node_type_with_hint_unique(hint, np);
424
+ }
378
425
 
379
- #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
380
- private:
381
- // Note: Use r-value node_type to insert.
382
- insert_return_type insert(node_type&);
383
- iterator insert(const_iterator, node_type& np);
426
+ #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
427
+ (BOOST_COMP_GNUC && BOOST_COMP_GNUC < BOOST_VERSION_NUMBER(4, 6, 0))
428
+ private:
429
+ // Note: Use r-value node_type to insert.
430
+ insert_return_type insert(node_type&);
431
+ iterator insert(const_iterator, node_type& np);
384
432
 
385
- public:
433
+ public:
386
434
  #endif
387
435
 
388
- iterator erase(const_iterator);
389
- size_type erase(const key_type&);
390
- iterator erase(const_iterator, const_iterator);
391
- void quick_erase(const_iterator it) { erase(it); }
392
- void erase_return_void(const_iterator it) { erase(it); }
436
+ iterator erase(const_iterator);
437
+ size_type erase(const key_type&);
438
+ iterator erase(const_iterator, const_iterator);
439
+ BOOST_UNORDERED_DEPRECATED("Use erase instead")
440
+ void quick_erase(const_iterator it) { erase(it); }
441
+ BOOST_UNORDERED_DEPRECATED("Use erase instead")
442
+ void erase_return_void(const_iterator it) { erase(it); }
393
443
 
394
- void clear();
395
- void swap(unordered_set&);
444
+ void swap(unordered_set&)
445
+ BOOST_NOEXCEPT_IF(value_allocator_traits::is_always_equal::value&&
446
+ boost::is_nothrow_swappable<H>::value&&
447
+ boost::is_nothrow_swappable<P>::value);
448
+ void clear() BOOST_NOEXCEPT { table_.clear_impl(); }
396
449
 
397
- template <typename H2, typename P2>
398
- void merge(boost::unordered_set<T, H2, P2, A>& source);
450
+ template <typename H2, typename P2>
451
+ void merge(boost::unordered_set<T, H2, P2, A>& source);
399
452
 
400
453
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
401
- template <typename H2, typename P2>
402
- void merge(boost::unordered_set<T, H2, P2, A>&& source);
454
+ template <typename H2, typename P2>
455
+ void merge(boost::unordered_set<T, H2, P2, A>&& source);
403
456
  #endif
404
457
 
405
- #if BOOST_UNORDERED_INTEROPERABLE_NODES
406
- template <typename H2, typename P2>
407
- void merge(boost::unordered_multiset<T, H2, P2, A>& source);
458
+ template <typename H2, typename P2>
459
+ void merge(boost::unordered_multiset<T, H2, P2, A>& source);
408
460
 
409
461
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
410
- template <typename H2, typename P2>
411
- void merge(boost::unordered_multiset<T, H2, P2, A>&& source);
412
- #endif
462
+ template <typename H2, typename P2>
463
+ void merge(boost::unordered_multiset<T, H2, P2, A>&& source);
413
464
  #endif
414
465
 
415
- // observers
466
+ // observers
416
467
 
417
- hasher hash_function() const;
418
- key_equal key_eq() const;
468
+ hasher hash_function() const;
469
+ key_equal key_eq() const;
419
470
 
420
- // lookup
471
+ // lookup
421
472
 
422
- const_iterator find(const key_type&) const;
473
+ const_iterator find(const key_type&) const;
423
474
 
424
- template <class CompatibleKey, class CompatibleHash,
475
+ template <class CompatibleKey, class CompatibleHash,
425
476
  class CompatiblePredicate>
426
- const_iterator find(CompatibleKey const&, CompatibleHash const&,
477
+ const_iterator find(CompatibleKey const&, CompatibleHash const&,
427
478
  CompatiblePredicate const&) const;
428
479
 
429
- size_type count(const key_type&) const;
480
+ size_type count(const key_type&) const;
430
481
 
431
- std::pair<const_iterator, const_iterator> equal_range(
482
+ std::pair<const_iterator, const_iterator> equal_range(
432
483
  const key_type&) const;
433
484
 
434
- // bucket interface
485
+ // bucket interface
435
486
 
436
- size_type bucket_count() const BOOST_NOEXCEPT
437
- {
487
+ size_type bucket_count() const BOOST_NOEXCEPT
488
+ {
438
489
  return table_.bucket_count_;
439
- }
490
+ }
440
491
 
441
- size_type max_bucket_count() const BOOST_NOEXCEPT
442
- {
492
+ size_type max_bucket_count() const BOOST_NOEXCEPT
493
+ {
443
494
  return table_.max_bucket_count();
444
- }
495
+ }
445
496
 
446
- size_type bucket_size(size_type) const;
497
+ size_type bucket_size(size_type) const;
447
498
 
448
- size_type bucket(const key_type& k) const
449
- {
499
+ size_type bucket(const key_type& k) const
500
+ {
450
501
  return table_.hash_to_bucket(table_.hash(k));
451
- }
502
+ }
452
503
 
453
- local_iterator begin(size_type n)
454
- {
504
+ local_iterator begin(size_type n)
505
+ {
455
506
  return local_iterator(table_.begin(n), n, table_.bucket_count_);
456
- }
507
+ }
457
508
 
458
- const_local_iterator begin(size_type n) const
459
- {
509
+ const_local_iterator begin(size_type n) const
510
+ {
460
511
  return const_local_iterator(table_.begin(n), n, table_.bucket_count_);
461
- }
512
+ }
462
513
 
463
- local_iterator end(size_type) { return local_iterator(); }
514
+ local_iterator end(size_type) { return local_iterator(); }
464
515
 
465
- const_local_iterator end(size_type) const { return const_local_iterator(); }
516
+ const_local_iterator end(size_type) const
517
+ {
518
+ return const_local_iterator();
519
+ }
466
520
 
467
- const_local_iterator cbegin(size_type n) const
468
- {
521
+ const_local_iterator cbegin(size_type n) const
522
+ {
469
523
  return const_local_iterator(table_.begin(n), n, table_.bucket_count_);
470
- }
524
+ }
471
525
 
472
- const_local_iterator cend(size_type) const
473
- {
526
+ const_local_iterator cend(size_type) const
527
+ {
474
528
  return const_local_iterator();
475
- }
476
-
477
- // hash policy
529
+ }
478
530
 
479
- float max_load_factor() const BOOST_NOEXCEPT { return table_.mlf_; }
531
+ // hash policy
480
532
 
481
- float load_factor() const BOOST_NOEXCEPT;
482
- void max_load_factor(float) BOOST_NOEXCEPT;
483
- void rehash(size_type);
484
- void reserve(size_type);
533
+ float load_factor() const BOOST_NOEXCEPT;
534
+ float max_load_factor() const BOOST_NOEXCEPT { return table_.mlf_; }
535
+ void max_load_factor(float) BOOST_NOEXCEPT;
536
+ void rehash(size_type);
537
+ void reserve(size_type);
485
538
 
486
539
  #if !BOOST_WORKAROUND(__BORLANDC__, < 0x0582)
487
- friend bool operator==
540
+ friend bool operator==
488
541
  <T, H, P, A>(unordered_set const&, unordered_set const&);
489
- friend bool operator!=
542
+ friend bool operator!=
490
543
  <T, H, P, A>(unordered_set const&, unordered_set const&);
491
544
  #endif
492
- }; // class template unordered_set
545
+ }; // class template unordered_set
546
+
547
+ #if BOOST_UNORDERED_TEMPLATE_DEDUCTION_GUIDES
548
+
549
+ template <class InputIterator,
550
+ class Hash =
551
+ boost::hash<typename std::iterator_traits<InputIterator>::value_type>,
552
+ class Pred =
553
+ std::equal_to<typename std::iterator_traits<InputIterator>::value_type>,
554
+ class Allocator = std::allocator<
555
+ typename std::iterator_traits<InputIterator>::value_type> >
556
+ unordered_set(InputIterator, InputIterator,
557
+ std::size_t = boost::unordered::detail::default_bucket_count,
558
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
559
+ ->unordered_set<typename std::iterator_traits<InputIterator>::value_type,
560
+ Hash, Pred, Allocator>;
561
+
562
+ template <class T, class Hash = boost::hash<T>,
563
+ class Pred = std::equal_to<T>, class Allocator = std::allocator<T> >
564
+ unordered_set(std::initializer_list<T>,
565
+ std::size_t = boost::unordered::detail::default_bucket_count,
566
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
567
+ ->unordered_set<T, Hash, Pred, Allocator>;
568
+
569
+ template <class InputIterator, class Allocator>
570
+ unordered_set(InputIterator, InputIterator, std::size_t, Allocator)
571
+ ->unordered_set<typename std::iterator_traits<InputIterator>::value_type,
572
+ boost::hash<typename std::iterator_traits<InputIterator>::value_type>,
573
+ std::equal_to<typename std::iterator_traits<InputIterator>::value_type>,
574
+ Allocator>;
575
+
576
+ template <class InputIterator, class Hash, class Allocator>
577
+ unordered_set(InputIterator, InputIterator, std::size_t, Hash, Allocator)
578
+ ->unordered_set<typename std::iterator_traits<InputIterator>::value_type,
579
+ Hash,
580
+ std::equal_to<typename std::iterator_traits<InputIterator>::value_type>,
581
+ Allocator>;
582
+
583
+ template <class T, class Allocator>
584
+ unordered_set(std::initializer_list<T>, std::size_t, Allocator)
585
+ ->unordered_set<T, boost::hash<T>, std::equal_to<T>, Allocator>;
586
+
587
+ template <class T, class Hash, class Allocator>
588
+ unordered_set(std::initializer_list<T>, std::size_t, Hash, Allocator)
589
+ ->unordered_set<T, Hash, std::equal_to<T>, Allocator>;
590
+
591
+ #endif
493
592
 
494
- template <class T, class H, class P, class A> class unordered_multiset
495
- {
593
+ template <class T, class H, class P, class A> class unordered_multiset
594
+ {
496
595
  #if defined(BOOST_UNORDERED_USE_MOVE)
497
- BOOST_COPYABLE_AND_MOVABLE(unordered_multiset)
596
+ BOOST_COPYABLE_AND_MOVABLE(unordered_multiset)
498
597
  #endif
499
- template <typename, typename, typename, typename>
500
- friend class unordered_set;
598
+ template <typename, typename, typename, typename>
599
+ friend class unordered_set;
501
600
 
502
- public:
503
- typedef T key_type;
504
- typedef T value_type;
505
- typedef H hasher;
506
- typedef P key_equal;
507
- typedef A allocator_type;
601
+ public:
602
+ typedef T key_type;
603
+ typedef T value_type;
604
+ typedef H hasher;
605
+ typedef P key_equal;
606
+ typedef A allocator_type;
508
607
 
509
- private:
510
- typedef boost::unordered::detail::multiset<A, T, H, P> types;
511
- typedef typename types::value_allocator_traits value_allocator_traits;
512
- typedef typename types::table table;
608
+ private:
609
+ typedef boost::unordered::detail::set<A, T, H, P> types;
610
+ typedef typename types::value_allocator_traits value_allocator_traits;
611
+ typedef typename types::table table;
612
+ typedef typename table::node_pointer node_pointer;
613
+ typedef typename table::link_pointer link_pointer;
513
614
 
514
- public:
515
- typedef typename value_allocator_traits::pointer pointer;
516
- typedef typename value_allocator_traits::const_pointer const_pointer;
615
+ public:
616
+ typedef typename value_allocator_traits::pointer pointer;
617
+ typedef typename value_allocator_traits::const_pointer const_pointer;
517
618
 
518
- typedef value_type& reference;
519
- typedef value_type const& const_reference;
619
+ typedef value_type& reference;
620
+ typedef value_type const& const_reference;
520
621
 
521
- typedef std::size_t size_type;
522
- typedef std::ptrdiff_t difference_type;
622
+ typedef std::size_t size_type;
623
+ typedef std::ptrdiff_t difference_type;
523
624
 
524
- typedef typename table::cl_iterator const_local_iterator;
525
- typedef typename table::l_iterator local_iterator;
526
- typedef typename table::c_iterator const_iterator;
527
- typedef typename table::iterator iterator;
528
- typedef typename types::node_type node_type;
625
+ typedef typename table::iterator iterator;
626
+ typedef typename table::c_iterator const_iterator;
627
+ typedef typename table::l_iterator local_iterator;
628
+ typedef typename table::cl_iterator const_local_iterator;
629
+ typedef typename types::node_type node_type;
529
630
 
530
- private:
531
- table table_;
631
+ private:
632
+ table table_;
532
633
 
533
- public:
534
- // constructors
634
+ public:
635
+ // constructors
535
636
 
536
- unordered_multiset();
637
+ unordered_multiset();
537
638
 
538
- explicit unordered_multiset(size_type, const hasher& = hasher(),
639
+ explicit unordered_multiset(size_type, const hasher& = hasher(),
539
640
  const key_equal& = key_equal(),
540
641
  const allocator_type& = allocator_type());
541
642
 
542
- explicit unordered_multiset(size_type, const allocator_type&);
543
-
544
- explicit unordered_multiset(
545
- size_type, const hasher&, const allocator_type&);
643
+ template <class InputIt>
644
+ unordered_multiset(InputIt, InputIt,
645
+ size_type = boost::unordered::detail::default_bucket_count,
646
+ const hasher& = hasher(), const key_equal& = key_equal(),
647
+ const allocator_type& = allocator_type());
546
648
 
547
- explicit unordered_multiset(allocator_type const&);
649
+ unordered_multiset(unordered_multiset const&);
548
650
 
549
- template <class InputIt> unordered_multiset(InputIt, InputIt);
651
+ #if defined(BOOST_UNORDERED_USE_MOVE) || \
652
+ !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
653
+ unordered_multiset(BOOST_RV_REF(unordered_multiset) other)
654
+ BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
655
+ : table_(other.table_, boost::unordered::detail::move_tag())
656
+ {
657
+ // The move is done in table_
658
+ }
659
+ #endif
550
660
 
551
- template <class InputIt>
552
- unordered_multiset(InputIt, InputIt, size_type, const hasher& = hasher(),
553
- const key_equal& = key_equal());
661
+ explicit unordered_multiset(allocator_type const&);
554
662
 
555
- template <class InputIt>
556
- unordered_multiset(InputIt, InputIt, size_type, const hasher&,
557
- const key_equal&, const allocator_type&);
663
+ unordered_multiset(unordered_multiset const&, allocator_type const&);
558
664
 
559
- template <class InputIt>
560
- unordered_multiset(
561
- InputIt, InputIt, size_type, const hasher&, const allocator_type&);
665
+ unordered_multiset(
666
+ BOOST_RV_REF(unordered_multiset), allocator_type const&);
562
667
 
563
- template <class InputIt>
564
- unordered_multiset(InputIt, InputIt, size_type, const allocator_type&);
668
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
669
+ unordered_multiset(std::initializer_list<value_type>,
670
+ size_type = boost::unordered::detail::default_bucket_count,
671
+ const hasher& = hasher(), const key_equal& l = key_equal(),
672
+ const allocator_type& = allocator_type());
673
+ #endif
565
674
 
566
- // copy/move constructors
675
+ explicit unordered_multiset(size_type, const allocator_type&);
567
676
 
568
- unordered_multiset(unordered_multiset const&);
677
+ explicit unordered_multiset(
678
+ size_type, const hasher&, const allocator_type&);
569
679
 
570
- unordered_multiset(unordered_multiset const&, allocator_type const&);
571
- unordered_multiset(BOOST_RV_REF(unordered_multiset), allocator_type const&);
680
+ template <class InputIt>
681
+ unordered_multiset(InputIt, InputIt, size_type, const allocator_type&);
572
682
 
573
- #if defined(BOOST_UNORDERED_USE_MOVE)
574
- unordered_multiset(BOOST_RV_REF(unordered_multiset) other)
575
- BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
576
- : table_(other.table_, boost::unordered::detail::move_tag())
577
- {
578
- }
579
- #elif !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
580
- unordered_multiset(unordered_multiset&& other)
581
- BOOST_NOEXCEPT_IF(table::nothrow_move_constructible)
582
- : table_(other.table_, boost::unordered::detail::move_tag())
583
- {
584
- }
585
- #endif
683
+ template <class InputIt>
684
+ unordered_multiset(
685
+ InputIt, InputIt, size_type, const hasher&, const allocator_type&);
586
686
 
587
687
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
588
- unordered_multiset(std::initializer_list<value_type>,
589
- size_type = boost::unordered::detail::default_bucket_count,
590
- const hasher& = hasher(), const key_equal& l = key_equal(),
591
- const allocator_type& = allocator_type());
592
- unordered_multiset(std::initializer_list<value_type>, size_type,
593
- const hasher&, const allocator_type&);
594
- unordered_multiset(
688
+ unordered_multiset(
595
689
  std::initializer_list<value_type>, size_type, const allocator_type&);
690
+
691
+ unordered_multiset(std::initializer_list<value_type>, size_type,
692
+ const hasher&, const allocator_type&);
596
693
  #endif
597
694
 
598
- // Destructor
695
+ // Destructor
599
696
 
600
- ~unordered_multiset() BOOST_NOEXCEPT;
697
+ ~unordered_multiset() BOOST_NOEXCEPT;
601
698
 
602
699
  // Assign
603
700
 
604
701
  #if defined(BOOST_UNORDERED_USE_MOVE)
605
- unordered_multiset& operator=(BOOST_COPY_ASSIGN_REF(unordered_multiset) x)
606
- {
607
- table_.assign(x.table_);
702
+ unordered_multiset& operator=(BOOST_COPY_ASSIGN_REF(unordered_multiset) x)
703
+ {
704
+ table_.assign(x.table_, boost::unordered::detail::false_type());
608
705
  return *this;
609
- }
610
-
611
- unordered_multiset& operator=(BOOST_RV_REF(unordered_multiset) x)
612
- {
613
- table_.move_assign(x.table_);
706
+ }
707
+
708
+ unordered_multiset& operator=(BOOST_RV_REF(unordered_multiset) x)
709
+ BOOST_NOEXCEPT_IF(value_allocator_traits::is_always_equal::value&&
710
+ boost::is_nothrow_move_assignable<H>::value&&
711
+ boost::is_nothrow_move_assignable<P>::value)
712
+ {
713
+ table_.move_assign(x.table_, boost::unordered::detail::false_type());
614
714
  return *this;
615
- }
715
+ }
616
716
  #else
617
- unordered_multiset& operator=(unordered_multiset const& x)
618
- {
619
- table_.assign(x.table_);
717
+ unordered_multiset& operator=(unordered_multiset const& x)
718
+ {
719
+ table_.assign(x.table_, boost::unordered::detail::false_type());
620
720
  return *this;
621
- }
721
+ }
622
722
 
623
723
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
624
- unordered_multiset& operator=(unordered_multiset&& x)
625
- {
626
- table_.move_assign(x.table_);
724
+ unordered_multiset& operator=(unordered_multiset&& x)
725
+ BOOST_NOEXCEPT_IF(value_allocator_traits::is_always_equal::value&&
726
+ boost::is_nothrow_move_assignable<H>::value&&
727
+ boost::is_nothrow_move_assignable<P>::value)
728
+ {
729
+ table_.move_assign(x.table_, boost::unordered::detail::false_type());
627
730
  return *this;
628
- }
731
+ }
629
732
  #endif
630
733
  #endif
631
734
 
632
735
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
633
- unordered_multiset& operator=(std::initializer_list<value_type>);
736
+ unordered_multiset& operator=(std::initializer_list<value_type>);
634
737
  #endif
635
738
 
636
- allocator_type get_allocator() const BOOST_NOEXCEPT
637
- {
739
+ allocator_type get_allocator() const BOOST_NOEXCEPT
740
+ {
638
741
  return table_.node_alloc();
639
- }
640
-
641
- // size and capacity
642
-
643
- bool empty() const BOOST_NOEXCEPT { return table_.size_ == 0; }
742
+ }
644
743
 
645
- size_type size() const BOOST_NOEXCEPT { return table_.size_; }
744
+ // iterators
646
745
 
647
- size_type max_size() const BOOST_NOEXCEPT;
746
+ iterator begin() BOOST_NOEXCEPT { return iterator(table_.begin()); }
648
747
 
649
- // iterators
650
-
651
- iterator begin() BOOST_NOEXCEPT { return iterator(table_.begin()); }
652
-
653
- const_iterator begin() const BOOST_NOEXCEPT
654
- {
748
+ const_iterator begin() const BOOST_NOEXCEPT
749
+ {
655
750
  return const_iterator(table_.begin());
656
- }
751
+ }
657
752
 
658
- iterator end() BOOST_NOEXCEPT { return iterator(); }
753
+ iterator end() BOOST_NOEXCEPT { return iterator(); }
659
754
 
660
- const_iterator end() const BOOST_NOEXCEPT { return const_iterator(); }
755
+ const_iterator end() const BOOST_NOEXCEPT { return const_iterator(); }
661
756
 
662
- const_iterator cbegin() const BOOST_NOEXCEPT
663
- {
757
+ const_iterator cbegin() const BOOST_NOEXCEPT
758
+ {
664
759
  return const_iterator(table_.begin());
665
- }
760
+ }
666
761
 
667
- const_iterator cend() const BOOST_NOEXCEPT { return const_iterator(); }
762
+ const_iterator cend() const BOOST_NOEXCEPT { return const_iterator(); }
668
763
 
669
- // extract
764
+ // size and capacity
670
765
 
671
- node_type extract(const_iterator position)
672
- {
673
- return node_type(
674
- table_.extract_by_iterator(position), table_.node_alloc());
675
- }
766
+ bool empty() const BOOST_NOEXCEPT { return table_.size_ == 0; }
676
767
 
677
- node_type extract(const key_type& k)
678
- {
679
- return node_type(table_.extract_by_key(k), table_.node_alloc());
680
- }
768
+ size_type size() const BOOST_NOEXCEPT { return table_.size_; }
769
+
770
+ size_type max_size() const BOOST_NOEXCEPT;
681
771
 
682
772
  // emplace
683
773
 
684
774
  #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
685
- template <class... Args> iterator emplace(BOOST_FWD_REF(Args)... args)
686
- {
687
- return table_.emplace(boost::forward<Args>(args)...);
688
- }
689
775
 
690
- template <class... Args>
691
- iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(Args)... args)
692
- {
693
- return table_.emplace_hint(hint, boost::forward<Args>(args)...);
694
- }
776
+ template <class... Args> iterator emplace(BOOST_FWD_REF(Args)... args)
777
+ {
778
+ return iterator(table_.emplace_equiv(
779
+ boost::unordered::detail::func::construct_node_from_args(
780
+ table_.node_alloc(), boost::forward<Args>(args)...)));
781
+ }
782
+
695
783
  #else
696
784
 
697
- #if !BOOST_WORKAROUND(__SUNPRO_CC, BOOST_TESTED_AT(0x5100))
785
+ #if !BOOST_UNORDERED_SUN_WORKAROUNDS1
698
786
 
699
- // 0 argument emplace requires special treatment in case
700
- // the container is instantiated with a value type that
701
- // doesn't have a default constructor.
787
+ // 0 argument emplace requires special treatment in case
788
+ // the container is instantiated with a value type that
789
+ // doesn't have a default constructor.
702
790
 
703
- iterator emplace(boost::unordered::detail::empty_emplace =
791
+ iterator emplace(boost::unordered::detail::empty_emplace =
704
792
  boost::unordered::detail::empty_emplace(),
705
793
  value_type v = value_type())
706
- {
794
+ {
707
795
  return this->emplace(boost::move(v));
708
- }
796
+ }
709
797
 
710
- iterator emplace_hint(const_iterator hint,
711
- boost::unordered::detail::empty_emplace =
712
- boost::unordered::detail::empty_emplace(),
713
- value_type v = value_type())
714
- {
715
- return this->emplace_hint(hint, boost::move(v));
716
- }
798
+ #endif
799
+
800
+ template <typename A0> iterator emplace(BOOST_FWD_REF(A0) a0)
801
+ {
802
+ return iterator(table_.emplace_equiv(
803
+ boost::unordered::detail::func::construct_node_from_args(
804
+ table_.node_alloc(), boost::unordered::detail::create_emplace_args(
805
+ boost::forward<A0>(a0)))));
806
+ }
807
+
808
+ template <typename A0, typename A1>
809
+ iterator emplace(BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1)
810
+ {
811
+ return iterator(table_.emplace_equiv(
812
+ boost::unordered::detail::func::construct_node_from_args(
813
+ table_.node_alloc(),
814
+ boost::unordered::detail::create_emplace_args(
815
+ boost::forward<A0>(a0), boost::forward<A1>(a1)))));
816
+ }
817
+
818
+ template <typename A0, typename A1, typename A2>
819
+ iterator emplace(
820
+ BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
821
+ {
822
+ return iterator(table_.emplace_equiv(
823
+ boost::unordered::detail::func::construct_node_from_args(
824
+ table_.node_alloc(),
825
+ boost::unordered::detail::create_emplace_args(
826
+ boost::forward<A0>(a0), boost::forward<A1>(a1),
827
+ boost::forward<A2>(a2)))));
828
+ }
717
829
 
718
830
  #endif
719
831
 
720
- template <typename A0> iterator emplace(BOOST_FWD_REF(A0) a0)
721
- {
722
- return table_.emplace(boost::unordered::detail::create_emplace_args(
723
- boost::forward<A0>(a0)));
724
- }
832
+ #if !defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
725
833
 
726
- template <typename A0>
727
- iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(A0) a0)
728
- {
729
- return table_.emplace_hint(
730
- hint, boost::unordered::detail::create_emplace_args(
731
- boost::forward<A0>(a0)));
732
- }
834
+ template <class... Args>
835
+ iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(Args)... args)
836
+ {
837
+ return iterator(table_.emplace_hint_equiv(
838
+ hint, boost::unordered::detail::func::construct_node_from_args(
839
+ table_.node_alloc(), boost::forward<Args>(args)...)));
840
+ }
733
841
 
734
- template <typename A0, typename A1>
735
- iterator emplace(BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1)
736
- {
737
- return table_.emplace(boost::unordered::detail::create_emplace_args(
738
- boost::forward<A0>(a0), boost::forward<A1>(a1)));
739
- }
842
+ #else
740
843
 
741
- template <typename A0, typename A1>
742
- iterator emplace_hint(
743
- const_iterator hint, BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1)
744
- {
745
- return table_.emplace_hint(
746
- hint, boost::unordered::detail::create_emplace_args(
747
- boost::forward<A0>(a0), boost::forward<A1>(a1)));
748
- }
844
+ #if !BOOST_UNORDERED_SUN_WORKAROUNDS1
749
845
 
750
- template <typename A0, typename A1, typename A2>
751
- iterator emplace(
752
- BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
753
- {
754
- return table_.emplace(boost::unordered::detail::create_emplace_args(
755
- boost::forward<A0>(a0), boost::forward<A1>(a1),
756
- boost::forward<A2>(a2)));
757
- }
846
+ iterator emplace_hint(const_iterator hint,
847
+ boost::unordered::detail::empty_emplace =
848
+ boost::unordered::detail::empty_emplace(),
849
+ value_type v = value_type())
850
+ {
851
+ return this->emplace_hint(hint, boost::move(v));
852
+ }
853
+
854
+ #endif
758
855
 
759
- template <typename A0, typename A1, typename A2>
760
- iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(A0) a0,
856
+ template <typename A0>
857
+ iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(A0) a0)
858
+ {
859
+ return iterator(table_.emplace_hint_equiv(hint,
860
+ boost::unordered::detail::func::construct_node_from_args(
861
+ table_.node_alloc(), boost::unordered::detail::create_emplace_args(
862
+ boost::forward<A0>(a0)))));
863
+ }
864
+
865
+ template <typename A0, typename A1>
866
+ iterator emplace_hint(
867
+ const_iterator hint, BOOST_FWD_REF(A0) a0, BOOST_FWD_REF(A1) a1)
868
+ {
869
+ return iterator(table_.emplace_hint_equiv(
870
+ hint, boost::unordered::detail::func::construct_node_from_args(
871
+ table_.node_alloc(),
872
+ boost::unordered::detail::create_emplace_args(
873
+ boost::forward<A0>(a0), boost::forward<A1>(a1)))));
874
+ }
875
+
876
+ template <typename A0, typename A1, typename A2>
877
+ iterator emplace_hint(const_iterator hint, BOOST_FWD_REF(A0) a0,
761
878
  BOOST_FWD_REF(A1) a1, BOOST_FWD_REF(A2) a2)
762
- {
763
- return table_.emplace_hint(
764
- hint, boost::unordered::detail::create_emplace_args(
765
- boost::forward<A0>(a0), boost::forward<A1>(a1),
766
- boost::forward<A2>(a2)));
767
- }
879
+ {
880
+ return iterator(table_.emplace_hint_equiv(
881
+ hint, boost::unordered::detail::func::construct_node_from_args(
882
+ table_.node_alloc(),
883
+ boost::unordered::detail::create_emplace_args(
884
+ boost::forward<A0>(a0), boost::forward<A1>(a1),
885
+ boost::forward<A2>(a2)))));
886
+ }
887
+
888
+ #endif
889
+
890
+ #if defined(BOOST_NO_CXX11_VARIADIC_TEMPLATES)
768
891
 
769
892
  #define BOOST_UNORDERED_EMPLACE(z, n, _) \
770
- template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
771
- iterator emplace(BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, a)) \
772
- { \
773
- return table_.emplace(boost::unordered::detail::create_emplace_args( \
774
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_CALL_FORWARD, a))); \
775
- } \
893
+ template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
894
+ iterator emplace(BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, a)) \
895
+ { \
896
+ return iterator(table_.emplace_equiv( \
897
+ boost::unordered::detail::func::construct_node_from_args( \
898
+ table_.node_alloc(), \
899
+ boost::unordered::detail::create_emplace_args( \
900
+ BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_CALL_FORWARD, a))))); \
901
+ } \
776
902
  \
777
- template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
778
- iterator emplace_hint(const_iterator hint, \
779
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, a)) \
780
- { \
781
- return table_.emplace_hint( \
782
- hint, boost::unordered::detail::create_emplace_args( \
783
- BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_CALL_FORWARD, a))); \
784
- }
785
-
786
- BOOST_PP_REPEAT_FROM_TO(
787
- 4, BOOST_UNORDERED_EMPLACE_LIMIT, BOOST_UNORDERED_EMPLACE, _)
903
+ template <BOOST_PP_ENUM_PARAMS_Z(z, n, typename A)> \
904
+ iterator emplace_hint( \
905
+ const_iterator hint, BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_FWD_PARAM, a)) \
906
+ { \
907
+ return iterator(table_.emplace_hint_equiv( \
908
+ hint, boost::unordered::detail::func::construct_node_from_args( \
909
+ table_.node_alloc(), \
910
+ boost::unordered::detail::create_emplace_args( \
911
+ BOOST_PP_ENUM_##z(n, BOOST_UNORDERED_CALL_FORWARD, a))))); \
912
+ }
913
+
914
+ BOOST_UNORDERED_EMPLACE(1, 4, _)
915
+ BOOST_UNORDERED_EMPLACE(1, 5, _)
916
+ BOOST_UNORDERED_EMPLACE(1, 6, _)
917
+ BOOST_UNORDERED_EMPLACE(1, 7, _)
918
+ BOOST_UNORDERED_EMPLACE(1, 8, _)
919
+ BOOST_UNORDERED_EMPLACE(1, 9, _)
920
+ BOOST_PP_REPEAT_FROM_TO(10, BOOST_PP_INC(BOOST_UNORDERED_EMPLACE_LIMIT),
921
+ BOOST_UNORDERED_EMPLACE, _)
788
922
 
789
923
  #undef BOOST_UNORDERED_EMPLACE
790
924
 
791
925
  #endif
792
926
 
793
- iterator insert(value_type const& x) { return this->emplace(x); }
927
+ iterator insert(value_type const& x) { return this->emplace(x); }
794
928
 
795
- iterator insert(BOOST_UNORDERED_RV_REF(value_type) x)
796
- {
929
+ iterator insert(BOOST_UNORDERED_RV_REF(value_type) x)
930
+ {
797
931
  return this->emplace(boost::move(x));
798
- }
932
+ }
799
933
 
800
- iterator insert(const_iterator hint, value_type const& x)
801
- {
934
+ iterator insert(const_iterator hint, value_type const& x)
935
+ {
802
936
  return this->emplace_hint(hint, x);
803
- }
937
+ }
804
938
 
805
- iterator insert(const_iterator hint, BOOST_UNORDERED_RV_REF(value_type) x)
806
- {
939
+ iterator insert(const_iterator hint, BOOST_UNORDERED_RV_REF(value_type) x)
940
+ {
807
941
  return this->emplace_hint(hint, boost::move(x));
808
- }
942
+ }
809
943
 
810
- template <class InputIt> void insert(InputIt, InputIt);
944
+ template <class InputIt> void insert(InputIt, InputIt);
811
945
 
812
946
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
813
- void insert(std::initializer_list<value_type>);
947
+ void insert(std::initializer_list<value_type>);
814
948
  #endif
815
949
 
816
- iterator insert(BOOST_RV_REF(node_type) np)
817
- {
818
- return table_.move_insert_node_type(np);
819
- }
820
-
821
- iterator insert(const_iterator hint, BOOST_RV_REF(node_type) np)
822
- {
823
- return table_.move_insert_node_type_with_hint(hint, np);
824
- }
950
+ // extract
825
951
 
826
- #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
827
- private:
828
- // Note: Use r-value node_type to insert.
829
- iterator insert(node_type&);
830
- iterator insert(const_iterator, node_type& np);
952
+ node_type extract(const_iterator position)
953
+ {
954
+ return node_type(
955
+ table_.extract_by_iterator_equiv(position), table_.node_alloc());
956
+ }
831
957
 
832
- public:
958
+ node_type extract(const key_type& k)
959
+ {
960
+ return node_type(table_.extract_by_key(k), table_.node_alloc());
961
+ }
962
+
963
+ iterator insert(BOOST_RV_REF(node_type) np)
964
+ {
965
+ return table_.move_insert_node_type_equiv(np);
966
+ }
967
+
968
+ iterator insert(const_iterator hint, BOOST_RV_REF(node_type) np)
969
+ {
970
+ return table_.move_insert_node_type_with_hint_equiv(hint, np);
971
+ }
972
+
973
+ #if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || \
974
+ (BOOST_COMP_GNUC && BOOST_COMP_GNUC < BOOST_VERSION_NUMBER(4, 6, 0))
975
+ private:
976
+ // Note: Use r-value node_type to insert.
977
+ iterator insert(node_type&);
978
+ iterator insert(const_iterator, node_type& np);
979
+
980
+ public:
833
981
  #endif
834
982
 
835
- iterator erase(const_iterator);
836
- size_type erase(const key_type&);
837
- iterator erase(const_iterator, const_iterator);
838
- void quick_erase(const_iterator it) { erase(it); }
839
- void erase_return_void(const_iterator it) { erase(it); }
983
+ iterator erase(const_iterator);
984
+ size_type erase(const key_type&);
985
+ iterator erase(const_iterator, const_iterator);
986
+ BOOST_UNORDERED_DEPRECATED("Use erase instead")
987
+ void quick_erase(const_iterator it) { erase(it); }
988
+ BOOST_UNORDERED_DEPRECATED("Use erase instead")
989
+ void erase_return_void(const_iterator it) { erase(it); }
840
990
 
841
- void clear();
842
- void swap(unordered_multiset&);
991
+ void swap(unordered_multiset&)
992
+ BOOST_NOEXCEPT_IF(value_allocator_traits::is_always_equal::value&&
993
+ boost::is_nothrow_swappable<H>::value&&
994
+ boost::is_nothrow_swappable<P>::value);
995
+ void clear() BOOST_NOEXCEPT { table_.clear_impl(); }
843
996
 
844
- template <typename H2, typename P2>
845
- void merge(boost::unordered_multiset<T, H2, P2, A>& source);
997
+ template <typename H2, typename P2>
998
+ void merge(boost::unordered_multiset<T, H2, P2, A>& source);
846
999
 
847
1000
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
848
- template <typename H2, typename P2>
849
- void merge(boost::unordered_multiset<T, H2, P2, A>&& source);
1001
+ template <typename H2, typename P2>
1002
+ void merge(boost::unordered_multiset<T, H2, P2, A>&& source);
850
1003
  #endif
851
1004
 
852
- #if BOOST_UNORDERED_INTEROPERABLE_NODES
853
- template <typename H2, typename P2>
854
- void merge(boost::unordered_set<T, H2, P2, A>& source);
1005
+ template <typename H2, typename P2>
1006
+ void merge(boost::unordered_set<T, H2, P2, A>& source);
855
1007
 
856
1008
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
857
- template <typename H2, typename P2>
858
- void merge(boost::unordered_set<T, H2, P2, A>&& source);
859
- #endif
1009
+ template <typename H2, typename P2>
1010
+ void merge(boost::unordered_set<T, H2, P2, A>&& source);
860
1011
  #endif
861
1012
 
862
- // observers
1013
+ // observers
863
1014
 
864
- hasher hash_function() const;
865
- key_equal key_eq() const;
1015
+ hasher hash_function() const;
1016
+ key_equal key_eq() const;
866
1017
 
867
- // lookup
1018
+ // lookup
868
1019
 
869
- const_iterator find(const key_type&) const;
1020
+ const_iterator find(const key_type&) const;
870
1021
 
871
- template <class CompatibleKey, class CompatibleHash,
1022
+ template <class CompatibleKey, class CompatibleHash,
872
1023
  class CompatiblePredicate>
873
- const_iterator find(CompatibleKey const&, CompatibleHash const&,
1024
+ const_iterator find(CompatibleKey const&, CompatibleHash const&,
874
1025
  CompatiblePredicate const&) const;
875
1026
 
876
- size_type count(const key_type&) const;
1027
+ size_type count(const key_type&) const;
877
1028
 
878
- std::pair<const_iterator, const_iterator> equal_range(
1029
+ std::pair<const_iterator, const_iterator> equal_range(
879
1030
  const key_type&) const;
880
1031
 
881
- // bucket interface
1032
+ // bucket interface
882
1033
 
883
- size_type bucket_count() const BOOST_NOEXCEPT
884
- {
1034
+ size_type bucket_count() const BOOST_NOEXCEPT
1035
+ {
885
1036
  return table_.bucket_count_;
1037
+ }
1038
+
1039
+ size_type max_bucket_count() const BOOST_NOEXCEPT
1040
+ {
1041
+ return table_.max_bucket_count();
1042
+ }
1043
+
1044
+ size_type bucket_size(size_type) const;
1045
+
1046
+ size_type bucket(const key_type& k) const
1047
+ {
1048
+ return table_.hash_to_bucket(table_.hash(k));
1049
+ }
1050
+
1051
+ local_iterator begin(size_type n)
1052
+ {
1053
+ return local_iterator(table_.begin(n), n, table_.bucket_count_);
1054
+ }
1055
+
1056
+ const_local_iterator begin(size_type n) const
1057
+ {
1058
+ return const_local_iterator(table_.begin(n), n, table_.bucket_count_);
1059
+ }
1060
+
1061
+ local_iterator end(size_type) { return local_iterator(); }
1062
+
1063
+ const_local_iterator end(size_type) const
1064
+ {
1065
+ return const_local_iterator();
1066
+ }
1067
+
1068
+ const_local_iterator cbegin(size_type n) const
1069
+ {
1070
+ return const_local_iterator(table_.begin(n), n, table_.bucket_count_);
1071
+ }
1072
+
1073
+ const_local_iterator cend(size_type) const
1074
+ {
1075
+ return const_local_iterator();
1076
+ }
1077
+
1078
+ // hash policy
1079
+
1080
+ float load_factor() const BOOST_NOEXCEPT;
1081
+ float max_load_factor() const BOOST_NOEXCEPT { return table_.mlf_; }
1082
+ void max_load_factor(float) BOOST_NOEXCEPT;
1083
+ void rehash(size_type);
1084
+ void reserve(size_type);
1085
+
1086
+ #if !BOOST_WORKAROUND(__BORLANDC__, < 0x0582)
1087
+ friend bool operator==
1088
+ <T, H, P, A>(unordered_multiset const&, unordered_multiset const&);
1089
+ friend bool operator!=
1090
+ <T, H, P, A>(unordered_multiset const&, unordered_multiset const&);
1091
+ #endif
1092
+ }; // class template unordered_multiset
1093
+
1094
+ #if BOOST_UNORDERED_TEMPLATE_DEDUCTION_GUIDES
1095
+
1096
+ template <class InputIterator,
1097
+ class Hash =
1098
+ boost::hash<typename std::iterator_traits<InputIterator>::value_type>,
1099
+ class Pred =
1100
+ std::equal_to<typename std::iterator_traits<InputIterator>::value_type>,
1101
+ class Allocator = std::allocator<
1102
+ typename std::iterator_traits<InputIterator>::value_type> >
1103
+ unordered_multiset(InputIterator, InputIterator,
1104
+ std::size_t = boost::unordered::detail::default_bucket_count,
1105
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
1106
+ ->unordered_multiset<
1107
+ typename std::iterator_traits<InputIterator>::value_type, Hash, Pred,
1108
+ Allocator>;
1109
+
1110
+ template <class T, class Hash = boost::hash<T>,
1111
+ class Pred = std::equal_to<T>, class Allocator = std::allocator<T> >
1112
+ unordered_multiset(std::initializer_list<T>,
1113
+ std::size_t = boost::unordered::detail::default_bucket_count,
1114
+ Hash = Hash(), Pred = Pred(), Allocator = Allocator())
1115
+ ->unordered_multiset<T, Hash, Pred, Allocator>;
1116
+
1117
+ template <class InputIterator, class Allocator>
1118
+ unordered_multiset(InputIterator, InputIterator, std::size_t, Allocator)
1119
+ ->unordered_multiset<
1120
+ typename std::iterator_traits<InputIterator>::value_type,
1121
+ boost::hash<typename std::iterator_traits<InputIterator>::value_type>,
1122
+ std::equal_to<typename std::iterator_traits<InputIterator>::value_type>,
1123
+ Allocator>;
1124
+
1125
+ template <class InputIterator, class Hash, class Allocator>
1126
+ unordered_multiset(
1127
+ InputIterator, InputIterator, std::size_t, Hash, Allocator)
1128
+ ->unordered_multiset<
1129
+ typename std::iterator_traits<InputIterator>::value_type, Hash,
1130
+ std::equal_to<typename std::iterator_traits<InputIterator>::value_type>,
1131
+ Allocator>;
1132
+
1133
+ template <class T, class Allocator>
1134
+ unordered_multiset(std::initializer_list<T>, std::size_t, Allocator)
1135
+ ->unordered_multiset<T, boost::hash<T>, std::equal_to<T>, Allocator>;
1136
+
1137
+ template <class T, class Hash, class Allocator>
1138
+ unordered_multiset(std::initializer_list<T>, std::size_t, Hash, Allocator)
1139
+ ->unordered_multiset<T, Hash, std::equal_to<T>, Allocator>;
1140
+
1141
+ #endif
1142
+
1143
+ ////////////////////////////////////////////////////////////////////////////
1144
+ template <class T, class H, class P, class A>
1145
+ unordered_set<T, H, P, A>::unordered_set()
1146
+ : table_(boost::unordered::detail::default_bucket_count, hasher(),
1147
+ key_equal(), allocator_type())
1148
+ {
886
1149
  }
887
1150
 
888
- size_type max_bucket_count() const BOOST_NOEXCEPT
1151
+ template <class T, class H, class P, class A>
1152
+ unordered_set<T, H, P, A>::unordered_set(size_type n, const hasher& hf,
1153
+ const key_equal& eql, const allocator_type& a)
1154
+ : table_(n, hf, eql, a)
889
1155
  {
890
- return table_.max_bucket_count();
891
1156
  }
892
1157
 
893
- size_type bucket_size(size_type) const;
1158
+ template <class T, class H, class P, class A>
1159
+ template <class InputIt>
1160
+ unordered_set<T, H, P, A>::unordered_set(InputIt f, InputIt l, size_type n,
1161
+ const hasher& hf, const key_equal& eql, const allocator_type& a)
1162
+ : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql, a)
1163
+ {
1164
+ this->insert(f, l);
1165
+ }
894
1166
 
895
- size_type bucket(const key_type& k) const
1167
+ template <class T, class H, class P, class A>
1168
+ unordered_set<T, H, P, A>::unordered_set(unordered_set const& other)
1169
+ : table_(other.table_,
1170
+ unordered_set::value_allocator_traits::
1171
+ select_on_container_copy_construction(other.get_allocator()))
896
1172
  {
897
- return table_.hash_to_bucket(table_.hash(k));
1173
+ if (other.table_.size_) {
1174
+ table_.copy_buckets(
1175
+ other.table_, boost::unordered::detail::true_type());
1176
+ }
898
1177
  }
899
1178
 
900
- local_iterator begin(size_type n)
1179
+ template <class T, class H, class P, class A>
1180
+ unordered_set<T, H, P, A>::unordered_set(allocator_type const& a)
1181
+ : table_(boost::unordered::detail::default_bucket_count, hasher(),
1182
+ key_equal(), a)
901
1183
  {
902
- return local_iterator(table_.begin(n), n, table_.bucket_count_);
903
1184
  }
904
1185
 
905
- const_local_iterator begin(size_type n) const
1186
+ template <class T, class H, class P, class A>
1187
+ unordered_set<T, H, P, A>::unordered_set(
1188
+ unordered_set const& other, allocator_type const& a)
1189
+ : table_(other.table_, a)
906
1190
  {
907
- return const_local_iterator(table_.begin(n), n, table_.bucket_count_);
1191
+ if (other.table_.size_) {
1192
+ table_.copy_buckets(
1193
+ other.table_, boost::unordered::detail::true_type());
1194
+ }
908
1195
  }
909
1196
 
910
- local_iterator end(size_type) { return local_iterator(); }
1197
+ template <class T, class H, class P, class A>
1198
+ unordered_set<T, H, P, A>::unordered_set(
1199
+ BOOST_RV_REF(unordered_set) other, allocator_type const& a)
1200
+ : table_(other.table_, a, boost::unordered::detail::move_tag())
1201
+ {
1202
+ table_.move_construct_buckets(other.table_);
1203
+ }
911
1204
 
912
- const_local_iterator end(size_type) const { return const_local_iterator(); }
1205
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
913
1206
 
914
- const_local_iterator cbegin(size_type n) const
1207
+ template <class T, class H, class P, class A>
1208
+ unordered_set<T, H, P, A>::unordered_set(
1209
+ std::initializer_list<value_type> list, size_type n, const hasher& hf,
1210
+ const key_equal& eql, const allocator_type& a)
1211
+ : table_(
1212
+ boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1213
+ hf, eql, a)
1214
+ {
1215
+ this->insert(list.begin(), list.end());
1216
+ }
1217
+
1218
+ #endif
1219
+
1220
+ template <class T, class H, class P, class A>
1221
+ unordered_set<T, H, P, A>::unordered_set(
1222
+ size_type n, const allocator_type& a)
1223
+ : table_(n, hasher(), key_equal(), a)
915
1224
  {
916
- return const_local_iterator(table_.begin(n), n, table_.bucket_count_);
917
1225
  }
918
1226
 
919
- const_local_iterator cend(size_type) const
1227
+ template <class T, class H, class P, class A>
1228
+ unordered_set<T, H, P, A>::unordered_set(
1229
+ size_type n, const hasher& hf, const allocator_type& a)
1230
+ : table_(n, hf, key_equal(), a)
920
1231
  {
921
- return const_local_iterator();
922
1232
  }
923
1233
 
924
- // hash policy
1234
+ template <class T, class H, class P, class A>
1235
+ template <class InputIt>
1236
+ unordered_set<T, H, P, A>::unordered_set(
1237
+ InputIt f, InputIt l, size_type n, const allocator_type& a)
1238
+ : table_(boost::unordered::detail::initial_size(f, l, n), hasher(),
1239
+ key_equal(), a)
1240
+ {
1241
+ this->insert(f, l);
1242
+ }
1243
+
1244
+ template <class T, class H, class P, class A>
1245
+ template <class InputIt>
1246
+ unordered_set<T, H, P, A>::unordered_set(InputIt f, InputIt l, size_type n,
1247
+ const hasher& hf, const allocator_type& a)
1248
+ : table_(
1249
+ boost::unordered::detail::initial_size(f, l, n), hf, key_equal(), a)
1250
+ {
1251
+ this->insert(f, l);
1252
+ }
925
1253
 
926
- float max_load_factor() const BOOST_NOEXCEPT { return table_.mlf_; }
1254
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
927
1255
 
928
- float load_factor() const BOOST_NOEXCEPT;
929
- void max_load_factor(float) BOOST_NOEXCEPT;
930
- void rehash(size_type);
931
- void reserve(size_type);
1256
+ template <class T, class H, class P, class A>
1257
+ unordered_set<T, H, P, A>::unordered_set(
1258
+ std::initializer_list<value_type> list, size_type n,
1259
+ const allocator_type& a)
1260
+ : table_(
1261
+ boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1262
+ hasher(), key_equal(), a)
1263
+ {
1264
+ this->insert(list.begin(), list.end());
1265
+ }
1266
+
1267
+ template <class T, class H, class P, class A>
1268
+ unordered_set<T, H, P, A>::unordered_set(
1269
+ std::initializer_list<value_type> list, size_type n, const hasher& hf,
1270
+ const allocator_type& a)
1271
+ : table_(
1272
+ boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1273
+ hf, key_equal(), a)
1274
+ {
1275
+ this->insert(list.begin(), list.end());
1276
+ }
932
1277
 
933
- #if !BOOST_WORKAROUND(__BORLANDC__, < 0x0582)
934
- friend bool operator==
935
- <T, H, P, A>(unordered_multiset const&, unordered_multiset const&);
936
- friend bool operator!=
937
- <T, H, P, A>(unordered_multiset const&, unordered_multiset const&);
938
1278
  #endif
939
- }; // class template unordered_multiset
940
-
941
- ////////////////////////////////////////////////////////////////////////////////
942
-
943
- template <class T, class H, class P, class A>
944
- unordered_set<T, H, P, A>::unordered_set()
945
- : table_(boost::unordered::detail::default_bucket_count, hasher(),
946
- key_equal(), allocator_type())
947
- {
948
- }
949
-
950
- template <class T, class H, class P, class A>
951
- unordered_set<T, H, P, A>::unordered_set(size_type n, const hasher& hf,
952
- const key_equal& eql, const allocator_type& a)
953
- : table_(n, hf, eql, a)
954
- {
955
- }
956
-
957
- template <class T, class H, class P, class A>
958
- unordered_set<T, H, P, A>::unordered_set(size_type n, const allocator_type& a)
959
- : table_(n, hasher(), key_equal(), a)
960
- {
961
- }
962
-
963
- template <class T, class H, class P, class A>
964
- unordered_set<T, H, P, A>::unordered_set(
965
- size_type n, const hasher& hf, const allocator_type& a)
966
- : table_(n, hf, key_equal(), a)
967
- {
968
- }
969
-
970
- template <class T, class H, class P, class A>
971
- unordered_set<T, H, P, A>::unordered_set(allocator_type const& a)
972
- : table_(boost::unordered::detail::default_bucket_count, hasher(),
973
- key_equal(), a)
974
- {
975
- }
976
-
977
- template <class T, class H, class P, class A>
978
- unordered_set<T, H, P, A>::unordered_set(
979
- unordered_set const& other, allocator_type const& a)
980
- : table_(other.table_, a)
981
- {
982
- }
983
-
984
- template <class T, class H, class P, class A>
985
- template <class InputIt>
986
- unordered_set<T, H, P, A>::unordered_set(InputIt f, InputIt l)
987
- : table_(boost::unordered::detail::initial_size(f, l), hasher(),
988
- key_equal(), allocator_type())
989
- {
990
- table_.insert_range(f, l);
991
- }
992
-
993
- template <class T, class H, class P, class A>
994
- template <class InputIt>
995
- unordered_set<T, H, P, A>::unordered_set(
996
- InputIt f, InputIt l, size_type n, const hasher& hf, const key_equal& eql)
997
- : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql,
998
- allocator_type())
999
- {
1000
- table_.insert_range(f, l);
1001
- }
1002
-
1003
- template <class T, class H, class P, class A>
1004
- template <class InputIt>
1005
- unordered_set<T, H, P, A>::unordered_set(InputIt f, InputIt l, size_type n,
1006
- const hasher& hf, const key_equal& eql, const allocator_type& a)
1007
- : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql, a)
1008
- {
1009
- table_.insert_range(f, l);
1010
- }
1011
-
1012
- template <class T, class H, class P, class A>
1013
- template <class InputIt>
1014
- unordered_set<T, H, P, A>::unordered_set(InputIt f, InputIt l, size_type n,
1015
- const hasher& hf, const allocator_type& a)
1016
- : table_(
1017
- boost::unordered::detail::initial_size(f, l, n), hf, key_equal(), a)
1018
- {
1019
- table_.insert_range(f, l);
1020
- }
1021
-
1022
- template <class T, class H, class P, class A>
1023
- template <class InputIt>
1024
- unordered_set<T, H, P, A>::unordered_set(
1025
- InputIt f, InputIt l, size_type n, const allocator_type& a)
1026
- : table_(boost::unordered::detail::initial_size(f, l, n), hasher(),
1027
- key_equal(), a)
1028
- {
1029
- table_.insert_range(f, l);
1030
- }
1031
-
1032
- template <class T, class H, class P, class A>
1033
- unordered_set<T, H, P, A>::~unordered_set() BOOST_NOEXCEPT
1034
- {
1035
- }
1036
-
1037
- template <class T, class H, class P, class A>
1038
- unordered_set<T, H, P, A>::unordered_set(unordered_set const& other)
1039
- : table_(other.table_)
1040
- {
1041
- }
1042
-
1043
- template <class T, class H, class P, class A>
1044
- unordered_set<T, H, P, A>::unordered_set(
1045
- BOOST_RV_REF(unordered_set) other, allocator_type const& a)
1046
- : table_(other.table_, a, boost::unordered::detail::move_tag())
1047
- {
1048
- }
1279
+
1280
+ template <class T, class H, class P, class A>
1281
+ unordered_set<T, H, P, A>::~unordered_set() BOOST_NOEXCEPT
1282
+ {
1283
+ }
1049
1284
 
1050
1285
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1051
1286
 
1052
- template <class T, class H, class P, class A>
1053
- unordered_set<T, H, P, A>::unordered_set(std::initializer_list<value_type> list,
1054
- size_type n, const hasher& hf, const key_equal& eql,
1055
- const allocator_type& a)
1056
- : table_(
1057
- boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1058
- hf, eql, a)
1059
- {
1060
- table_.insert_range(list.begin(), list.end());
1061
- }
1062
-
1063
- template <class T, class H, class P, class A>
1064
- unordered_set<T, H, P, A>::unordered_set(std::initializer_list<value_type> list,
1065
- size_type n, const hasher& hf, const allocator_type& a)
1066
- : table_(
1067
- boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1068
- hf, key_equal(), a)
1069
- {
1070
- table_.insert_range(list.begin(), list.end());
1071
- }
1072
-
1073
- template <class T, class H, class P, class A>
1074
- unordered_set<T, H, P, A>::unordered_set(std::initializer_list<value_type> list,
1075
- size_type n, const allocator_type& a)
1076
- : table_(
1077
- boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1078
- hasher(), key_equal(), a)
1079
- {
1080
- table_.insert_range(list.begin(), list.end());
1081
- }
1082
-
1083
- template <class T, class H, class P, class A>
1084
- unordered_set<T, H, P, A>& unordered_set<T, H, P, A>::operator=(
1085
- std::initializer_list<value_type> list)
1086
- {
1087
- table_.clear();
1088
- table_.insert_range(list.begin(), list.end());
1089
- return *this;
1090
- }
1287
+ template <class T, class H, class P, class A>
1288
+ unordered_set<T, H, P, A>& unordered_set<T, H, P, A>::operator=(
1289
+ std::initializer_list<value_type> list)
1290
+ {
1291
+ this->clear();
1292
+ this->insert(list.begin(), list.end());
1293
+ return *this;
1294
+ }
1091
1295
 
1092
1296
  #endif
1093
1297
 
1094
- // size and capacity
1298
+ // size and capacity
1095
1299
 
1096
- template <class T, class H, class P, class A>
1097
- std::size_t unordered_set<T, H, P, A>::max_size() const BOOST_NOEXCEPT
1098
- {
1099
- return table_.max_size();
1100
- }
1300
+ template <class T, class H, class P, class A>
1301
+ std::size_t unordered_set<T, H, P, A>::max_size() const BOOST_NOEXCEPT
1302
+ {
1303
+ using namespace std;
1101
1304
 
1102
- // modifiers
1305
+ // size < mlf_ * count
1306
+ return boost::unordered::detail::double_to_size(
1307
+ ceil(static_cast<double>(table_.mlf_) *
1308
+ static_cast<double>(table_.max_bucket_count()))) -
1309
+ 1;
1310
+ }
1311
+
1312
+ // modifiers
1103
1313
 
1104
- template <class T, class H, class P, class A>
1105
- template <class InputIt>
1106
- void unordered_set<T, H, P, A>::insert(InputIt first, InputIt last)
1107
- {
1108
- table_.insert_range(first, last);
1109
- }
1314
+ template <class T, class H, class P, class A>
1315
+ template <class InputIt>
1316
+ void unordered_set<T, H, P, A>::insert(InputIt first, InputIt last)
1317
+ {
1318
+ if (first != last) {
1319
+ table_.insert_range_unique(
1320
+ table::extractor::extract(*first), first, last);
1321
+ }
1322
+ }
1110
1323
 
1111
1324
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1112
- template <class T, class H, class P, class A>
1113
- void unordered_set<T, H, P, A>::insert(std::initializer_list<value_type> list)
1114
- {
1115
- table_.insert_range(list.begin(), list.end());
1116
- }
1325
+ template <class T, class H, class P, class A>
1326
+ void unordered_set<T, H, P, A>::insert(
1327
+ std::initializer_list<value_type> list)
1328
+ {
1329
+ this->insert(list.begin(), list.end());
1330
+ }
1117
1331
  #endif
1118
1332
 
1119
- template <class T, class H, class P, class A>
1120
- typename unordered_set<T, H, P, A>::iterator unordered_set<T, H, P, A>::erase(
1121
- const_iterator position)
1122
- {
1123
- return table_.erase(position);
1124
- }
1125
-
1126
- template <class T, class H, class P, class A>
1127
- typename unordered_set<T, H, P, A>::size_type unordered_set<T, H, P, A>::erase(
1128
- const key_type& k)
1129
- {
1130
- return table_.erase_key(k);
1131
- }
1132
-
1133
- template <class T, class H, class P, class A>
1134
- typename unordered_set<T, H, P, A>::iterator unordered_set<T, H, P, A>::erase(
1135
- const_iterator first, const_iterator last)
1136
- {
1137
- return table_.erase_range(first, last);
1138
- }
1139
-
1140
- template <class T, class H, class P, class A>
1141
- void unordered_set<T, H, P, A>::clear()
1142
- {
1143
- table_.clear();
1144
- }
1145
-
1146
- template <class T, class H, class P, class A>
1147
- void unordered_set<T, H, P, A>::swap(unordered_set& other)
1148
- {
1149
- table_.swap(other.table_);
1150
- }
1151
-
1152
- // observers
1153
-
1154
- template <class T, class H, class P, class A>
1155
- typename unordered_set<T, H, P, A>::hasher
1156
- unordered_set<T, H, P, A>::hash_function() const
1157
- {
1158
- return table_.hash_function();
1159
- }
1160
-
1161
- template <class T, class H, class P, class A>
1162
- typename unordered_set<T, H, P, A>::key_equal
1163
- unordered_set<T, H, P, A>::key_eq() const
1164
- {
1165
- return table_.key_eq();
1166
- }
1167
-
1168
- template <class T, class H, class P, class A>
1169
- template <typename H2, typename P2>
1170
- void unordered_set<T, H, P, A>::merge(
1171
- boost::unordered_set<T, H2, P2, A>& source)
1172
- {
1173
- table_.merge_impl(source.table_);
1174
- }
1333
+ template <class T, class H, class P, class A>
1334
+ typename unordered_set<T, H, P, A>::iterator
1335
+ unordered_set<T, H, P, A>::erase(const_iterator position)
1336
+ {
1337
+ node_pointer node = table::get_node(position);
1338
+ BOOST_ASSERT(node);
1339
+ node_pointer next = table::next_node(node);
1340
+ table_.erase_nodes_unique(node, next);
1341
+ return iterator(next);
1342
+ }
1343
+
1344
+ template <class T, class H, class P, class A>
1345
+ typename unordered_set<T, H, P, A>::size_type
1346
+ unordered_set<T, H, P, A>::erase(const key_type& k)
1347
+ {
1348
+ return table_.erase_key_unique(k);
1349
+ }
1350
+
1351
+ template <class T, class H, class P, class A>
1352
+ typename unordered_set<T, H, P, A>::iterator
1353
+ unordered_set<T, H, P, A>::erase(const_iterator first, const_iterator last)
1354
+ {
1355
+ node_pointer last_node = table::get_node(last);
1356
+ if (first == last)
1357
+ return iterator(last_node);
1358
+ table_.erase_nodes_unique(table::get_node(first), last_node);
1359
+ return iterator(last_node);
1360
+ }
1361
+
1362
+ template <class T, class H, class P, class A>
1363
+ void unordered_set<T, H, P, A>::swap(unordered_set& other)
1364
+ BOOST_NOEXCEPT_IF(value_allocator_traits::is_always_equal::value&&
1365
+ boost::is_nothrow_swappable<H>::value&&
1366
+ boost::is_nothrow_swappable<P>::value)
1367
+ {
1368
+ table_.swap(other.table_);
1369
+ }
1370
+
1371
+ // observers
1372
+
1373
+ template <class T, class H, class P, class A>
1374
+ typename unordered_set<T, H, P, A>::hasher
1375
+ unordered_set<T, H, P, A>::hash_function() const
1376
+ {
1377
+ return table_.hash_function();
1378
+ }
1379
+
1380
+ template <class T, class H, class P, class A>
1381
+ typename unordered_set<T, H, P, A>::key_equal
1382
+ unordered_set<T, H, P, A>::key_eq() const
1383
+ {
1384
+ return table_.key_eq();
1385
+ }
1386
+
1387
+ template <class T, class H, class P, class A>
1388
+ template <typename H2, typename P2>
1389
+ void unordered_set<T, H, P, A>::merge(
1390
+ boost::unordered_set<T, H2, P2, A>& source)
1391
+ {
1392
+ table_.merge_unique(source.table_);
1393
+ }
1175
1394
 
1176
1395
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
1177
- template <class T, class H, class P, class A>
1178
- template <typename H2, typename P2>
1179
- void unordered_set<T, H, P, A>::merge(
1180
- boost::unordered_set<T, H2, P2, A>&& source)
1181
- {
1182
- table_.merge_impl(source.table_);
1183
- }
1396
+ template <class T, class H, class P, class A>
1397
+ template <typename H2, typename P2>
1398
+ void unordered_set<T, H, P, A>::merge(
1399
+ boost::unordered_set<T, H2, P2, A>&& source)
1400
+ {
1401
+ table_.merge_unique(source.table_);
1402
+ }
1184
1403
  #endif
1185
1404
 
1186
- #if BOOST_UNORDERED_INTEROPERABLE_NODES
1187
- template <class T, class H, class P, class A>
1188
- template <typename H2, typename P2>
1189
- void unordered_set<T, H, P, A>::merge(
1190
- boost::unordered_multiset<T, H2, P2, A>& source)
1191
- {
1192
- table_.merge_impl(source.table_);
1193
- }
1405
+ template <class T, class H, class P, class A>
1406
+ template <typename H2, typename P2>
1407
+ void unordered_set<T, H, P, A>::merge(
1408
+ boost::unordered_multiset<T, H2, P2, A>& source)
1409
+ {
1410
+ table_.merge_unique(source.table_);
1411
+ }
1194
1412
 
1195
1413
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
1196
- template <class T, class H, class P, class A>
1197
- template <typename H2, typename P2>
1198
- void unordered_set<T, H, P, A>::merge(
1199
- boost::unordered_multiset<T, H2, P2, A>&& source)
1200
- {
1201
- table_.merge_impl(source.table_);
1202
- }
1203
- #endif
1414
+ template <class T, class H, class P, class A>
1415
+ template <typename H2, typename P2>
1416
+ void unordered_set<T, H, P, A>::merge(
1417
+ boost::unordered_multiset<T, H2, P2, A>&& source)
1418
+ {
1419
+ table_.merge_unique(source.table_);
1420
+ }
1204
1421
  #endif
1205
1422
 
1206
- // lookup
1207
-
1208
- template <class T, class H, class P, class A>
1209
- typename unordered_set<T, H, P, A>::const_iterator
1210
- unordered_set<T, H, P, A>::find(const key_type& k) const
1211
- {
1212
- return const_iterator(table_.find_node(k));
1213
- }
1214
-
1215
- template <class T, class H, class P, class A>
1216
- template <class CompatibleKey, class CompatibleHash, class CompatiblePredicate>
1217
- typename unordered_set<T, H, P, A>::const_iterator
1218
- unordered_set<T, H, P, A>::find(CompatibleKey const& k,
1219
- CompatibleHash const& hash, CompatiblePredicate const& eq) const
1220
- {
1221
- return const_iterator(table_.generic_find_node(k, hash, eq));
1222
- }
1223
-
1224
- template <class T, class H, class P, class A>
1225
- typename unordered_set<T, H, P, A>::size_type unordered_set<T, H, P, A>::count(
1226
- const key_type& k) const
1227
- {
1228
- return table_.count(k);
1229
- }
1230
-
1231
- template <class T, class H, class P, class A>
1232
- std::pair<typename unordered_set<T, H, P, A>::const_iterator,
1233
- typename unordered_set<T, H, P, A>::const_iterator>
1234
- unordered_set<T, H, P, A>::equal_range(const key_type& k) const
1235
- {
1236
- return table_.equal_range(k);
1237
- }
1238
-
1239
- template <class T, class H, class P, class A>
1240
- typename unordered_set<T, H, P, A>::size_type
1241
- unordered_set<T, H, P, A>::bucket_size(size_type n) const
1242
- {
1243
- return table_.bucket_size(n);
1244
- }
1245
-
1246
- // hash policy
1247
-
1248
- template <class T, class H, class P, class A>
1249
- float unordered_set<T, H, P, A>::load_factor() const BOOST_NOEXCEPT
1250
- {
1251
- return table_.load_factor();
1252
- }
1253
-
1254
- template <class T, class H, class P, class A>
1255
- void unordered_set<T, H, P, A>::max_load_factor(float m) BOOST_NOEXCEPT
1256
- {
1257
- table_.max_load_factor(m);
1258
- }
1259
-
1260
- template <class T, class H, class P, class A>
1261
- void unordered_set<T, H, P, A>::rehash(size_type n)
1262
- {
1263
- table_.rehash(n);
1264
- }
1265
-
1266
- template <class T, class H, class P, class A>
1267
- void unordered_set<T, H, P, A>::reserve(size_type n)
1268
- {
1269
- table_.reserve(n);
1270
- }
1271
-
1272
- template <class T, class H, class P, class A>
1273
- inline bool operator==(
1274
- unordered_set<T, H, P, A> const& m1, unordered_set<T, H, P, A> const& m2)
1275
- {
1276
- #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1277
- struct dummy
1423
+ // lookup
1424
+
1425
+ template <class T, class H, class P, class A>
1426
+ typename unordered_set<T, H, P, A>::const_iterator
1427
+ unordered_set<T, H, P, A>::find(const key_type& k) const
1428
+ {
1429
+ return const_iterator(table_.find_node(k));
1430
+ }
1431
+
1432
+ template <class T, class H, class P, class A>
1433
+ template <class CompatibleKey, class CompatibleHash,
1434
+ class CompatiblePredicate>
1435
+ typename unordered_set<T, H, P, A>::const_iterator
1436
+ unordered_set<T, H, P, A>::find(CompatibleKey const& k,
1437
+ CompatibleHash const& hash, CompatiblePredicate const& eq) const
1438
+ {
1439
+ return const_iterator(
1440
+ table_.find_node_impl(table::policy::apply_hash(hash, k), k, eq));
1441
+ }
1442
+
1443
+ template <class T, class H, class P, class A>
1444
+ typename unordered_set<T, H, P, A>::size_type
1445
+ unordered_set<T, H, P, A>::count(const key_type& k) const
1446
+ {
1447
+ return table_.find_node(k) ? 1 : 0;
1448
+ }
1449
+
1450
+ template <class T, class H, class P, class A>
1451
+ std::pair<typename unordered_set<T, H, P, A>::const_iterator,
1452
+ typename unordered_set<T, H, P, A>::const_iterator>
1453
+ unordered_set<T, H, P, A>::equal_range(const key_type& k) const
1454
+ {
1455
+ node_pointer n = table_.find_node(k);
1456
+ return std::make_pair(
1457
+ const_iterator(n), const_iterator(n ? table::next_node(n) : n));
1458
+ }
1459
+
1460
+ template <class T, class H, class P, class A>
1461
+ typename unordered_set<T, H, P, A>::size_type
1462
+ unordered_set<T, H, P, A>::bucket_size(size_type n) const
1463
+ {
1464
+ return table_.bucket_size(n);
1465
+ }
1466
+
1467
+ // hash policy
1468
+
1469
+ template <class T, class H, class P, class A>
1470
+ float unordered_set<T, H, P, A>::load_factor() const BOOST_NOEXCEPT
1471
+ {
1472
+ BOOST_ASSERT(table_.bucket_count_ != 0);
1473
+ return static_cast<float>(table_.size_) /
1474
+ static_cast<float>(table_.bucket_count_);
1475
+ }
1476
+
1477
+ template <class T, class H, class P, class A>
1478
+ void unordered_set<T, H, P, A>::max_load_factor(float m) BOOST_NOEXCEPT
1479
+ {
1480
+ table_.max_load_factor(m);
1481
+ }
1482
+
1483
+ template <class T, class H, class P, class A>
1484
+ void unordered_set<T, H, P, A>::rehash(size_type n)
1485
+ {
1486
+ table_.rehash(n);
1487
+ }
1488
+
1489
+ template <class T, class H, class P, class A>
1490
+ void unordered_set<T, H, P, A>::reserve(size_type n)
1491
+ {
1492
+ table_.rehash(static_cast<std::size_t>(
1493
+ std::ceil(static_cast<double>(n) / table_.mlf_)));
1494
+ }
1495
+
1496
+ template <class T, class H, class P, class A>
1497
+ inline bool operator==(
1498
+ unordered_set<T, H, P, A> const& m1, unordered_set<T, H, P, A> const& m2)
1278
1499
  {
1500
+ #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1501
+ struct dummy
1502
+ {
1279
1503
  unordered_set<T, H, P, A> x;
1280
- };
1504
+ };
1281
1505
  #endif
1282
- return m1.table_.equals(m2.table_);
1283
- }
1506
+ return m1.table_.equals_unique(m2.table_);
1507
+ }
1284
1508
 
1285
- template <class T, class H, class P, class A>
1286
- inline bool operator!=(
1287
- unordered_set<T, H, P, A> const& m1, unordered_set<T, H, P, A> const& m2)
1288
- {
1289
- #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1290
- struct dummy
1509
+ template <class T, class H, class P, class A>
1510
+ inline bool operator!=(
1511
+ unordered_set<T, H, P, A> const& m1, unordered_set<T, H, P, A> const& m2)
1291
1512
  {
1513
+ #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1514
+ struct dummy
1515
+ {
1292
1516
  unordered_set<T, H, P, A> x;
1293
- };
1517
+ };
1294
1518
  #endif
1295
- return !m1.table_.equals(m2.table_);
1296
- }
1519
+ return !m1.table_.equals_unique(m2.table_);
1520
+ }
1297
1521
 
1298
- template <class T, class H, class P, class A>
1299
- inline void swap(unordered_set<T, H, P, A>& m1, unordered_set<T, H, P, A>& m2)
1300
- {
1301
- #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1302
- struct dummy
1522
+ template <class T, class H, class P, class A>
1523
+ inline void swap(
1524
+ unordered_set<T, H, P, A>& m1, unordered_set<T, H, P, A>& m2)
1525
+ BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(m1.swap(m2)))
1303
1526
  {
1527
+ #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1528
+ struct dummy
1529
+ {
1304
1530
  unordered_set<T, H, P, A> x;
1305
- };
1531
+ };
1532
+ #endif
1533
+ m1.swap(m2);
1534
+ }
1535
+
1536
+ ////////////////////////////////////////////////////////////////////////////
1537
+
1538
+ template <class T, class H, class P, class A>
1539
+ unordered_multiset<T, H, P, A>::unordered_multiset()
1540
+ : table_(boost::unordered::detail::default_bucket_count, hasher(),
1541
+ key_equal(), allocator_type())
1542
+ {
1543
+ }
1544
+
1545
+ template <class T, class H, class P, class A>
1546
+ unordered_multiset<T, H, P, A>::unordered_multiset(size_type n,
1547
+ const hasher& hf, const key_equal& eql, const allocator_type& a)
1548
+ : table_(n, hf, eql, a)
1549
+ {
1550
+ }
1551
+
1552
+ template <class T, class H, class P, class A>
1553
+ template <class InputIt>
1554
+ unordered_multiset<T, H, P, A>::unordered_multiset(InputIt f, InputIt l,
1555
+ size_type n, const hasher& hf, const key_equal& eql,
1556
+ const allocator_type& a)
1557
+ : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql, a)
1558
+ {
1559
+ this->insert(f, l);
1560
+ }
1561
+
1562
+ template <class T, class H, class P, class A>
1563
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1564
+ unordered_multiset const& other)
1565
+ : table_(other.table_,
1566
+ unordered_multiset::value_allocator_traits::
1567
+ select_on_container_copy_construction(other.get_allocator()))
1568
+ {
1569
+ if (other.table_.size_) {
1570
+ table_.copy_buckets(
1571
+ other.table_, boost::unordered::detail::false_type());
1572
+ }
1573
+ }
1574
+
1575
+ template <class T, class H, class P, class A>
1576
+ unordered_multiset<T, H, P, A>::unordered_multiset(allocator_type const& a)
1577
+ : table_(boost::unordered::detail::default_bucket_count, hasher(),
1578
+ key_equal(), a)
1579
+ {
1580
+ }
1581
+
1582
+ template <class T, class H, class P, class A>
1583
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1584
+ unordered_multiset const& other, allocator_type const& a)
1585
+ : table_(other.table_, a)
1586
+ {
1587
+ if (other.table_.size_) {
1588
+ table_.copy_buckets(
1589
+ other.table_, boost::unordered::detail::false_type());
1590
+ }
1591
+ }
1592
+
1593
+ template <class T, class H, class P, class A>
1594
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1595
+ BOOST_RV_REF(unordered_multiset) other, allocator_type const& a)
1596
+ : table_(other.table_, a, boost::unordered::detail::move_tag())
1597
+ {
1598
+ table_.move_construct_buckets(other.table_);
1599
+ }
1600
+
1601
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1602
+
1603
+ template <class T, class H, class P, class A>
1604
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1605
+ std::initializer_list<value_type> list, size_type n, const hasher& hf,
1606
+ const key_equal& eql, const allocator_type& a)
1607
+ : table_(
1608
+ boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1609
+ hf, eql, a)
1610
+ {
1611
+ this->insert(list.begin(), list.end());
1612
+ }
1613
+
1614
+ #endif
1615
+
1616
+ template <class T, class H, class P, class A>
1617
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1618
+ size_type n, const allocator_type& a)
1619
+ : table_(n, hasher(), key_equal(), a)
1620
+ {
1621
+ }
1622
+
1623
+ template <class T, class H, class P, class A>
1624
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1625
+ size_type n, const hasher& hf, const allocator_type& a)
1626
+ : table_(n, hf, key_equal(), a)
1627
+ {
1628
+ }
1629
+
1630
+ template <class T, class H, class P, class A>
1631
+ template <class InputIt>
1632
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1633
+ InputIt f, InputIt l, size_type n, const allocator_type& a)
1634
+ : table_(boost::unordered::detail::initial_size(f, l, n), hasher(),
1635
+ key_equal(), a)
1636
+ {
1637
+ this->insert(f, l);
1638
+ }
1639
+
1640
+ template <class T, class H, class P, class A>
1641
+ template <class InputIt>
1642
+ unordered_multiset<T, H, P, A>::unordered_multiset(InputIt f, InputIt l,
1643
+ size_type n, const hasher& hf, const allocator_type& a)
1644
+ : table_(
1645
+ boost::unordered::detail::initial_size(f, l, n), hf, key_equal(), a)
1646
+ {
1647
+ this->insert(f, l);
1648
+ }
1649
+
1650
+ #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1651
+
1652
+ template <class T, class H, class P, class A>
1653
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1654
+ std::initializer_list<value_type> list, size_type n,
1655
+ const allocator_type& a)
1656
+ : table_(
1657
+ boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1658
+ hasher(), key_equal(), a)
1659
+ {
1660
+ this->insert(list.begin(), list.end());
1661
+ }
1662
+
1663
+ template <class T, class H, class P, class A>
1664
+ unordered_multiset<T, H, P, A>::unordered_multiset(
1665
+ std::initializer_list<value_type> list, size_type n, const hasher& hf,
1666
+ const allocator_type& a)
1667
+ : table_(
1668
+ boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1669
+ hf, key_equal(), a)
1670
+ {
1671
+ this->insert(list.begin(), list.end());
1672
+ }
1673
+
1306
1674
  #endif
1307
- m1.swap(m2);
1308
- }
1309
-
1310
- ////////////////////////////////////////////////////////////////////////////////
1311
-
1312
- template <class T, class H, class P, class A>
1313
- unordered_multiset<T, H, P, A>::unordered_multiset()
1314
- : table_(boost::unordered::detail::default_bucket_count, hasher(),
1315
- key_equal(), allocator_type())
1316
- {
1317
- }
1318
-
1319
- template <class T, class H, class P, class A>
1320
- unordered_multiset<T, H, P, A>::unordered_multiset(size_type n,
1321
- const hasher& hf, const key_equal& eql, const allocator_type& a)
1322
- : table_(n, hf, eql, a)
1323
- {
1324
- }
1325
-
1326
- template <class T, class H, class P, class A>
1327
- unordered_multiset<T, H, P, A>::unordered_multiset(
1328
- size_type n, const allocator_type& a)
1329
- : table_(n, hasher(), key_equal(), a)
1330
- {
1331
- }
1332
-
1333
- template <class T, class H, class P, class A>
1334
- unordered_multiset<T, H, P, A>::unordered_multiset(
1335
- size_type n, const hasher& hf, const allocator_type& a)
1336
- : table_(n, hf, key_equal(), a)
1337
- {
1338
- }
1339
-
1340
- template <class T, class H, class P, class A>
1341
- unordered_multiset<T, H, P, A>::unordered_multiset(allocator_type const& a)
1342
- : table_(boost::unordered::detail::default_bucket_count, hasher(),
1343
- key_equal(), a)
1344
- {
1345
- }
1346
-
1347
- template <class T, class H, class P, class A>
1348
- unordered_multiset<T, H, P, A>::unordered_multiset(
1349
- unordered_multiset const& other, allocator_type const& a)
1350
- : table_(other.table_, a)
1351
- {
1352
- }
1353
-
1354
- template <class T, class H, class P, class A>
1355
- template <class InputIt>
1356
- unordered_multiset<T, H, P, A>::unordered_multiset(InputIt f, InputIt l)
1357
- : table_(boost::unordered::detail::initial_size(f, l), hasher(),
1358
- key_equal(), allocator_type())
1359
- {
1360
- table_.insert_range(f, l);
1361
- }
1362
-
1363
- template <class T, class H, class P, class A>
1364
- template <class InputIt>
1365
- unordered_multiset<T, H, P, A>::unordered_multiset(
1366
- InputIt f, InputIt l, size_type n, const hasher& hf, const key_equal& eql)
1367
- : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql,
1368
- allocator_type())
1369
- {
1370
- table_.insert_range(f, l);
1371
- }
1372
-
1373
- template <class T, class H, class P, class A>
1374
- template <class InputIt>
1375
- unordered_multiset<T, H, P, A>::unordered_multiset(InputIt f, InputIt l,
1376
- size_type n, const hasher& hf, const key_equal& eql,
1377
- const allocator_type& a)
1378
- : table_(boost::unordered::detail::initial_size(f, l, n), hf, eql, a)
1379
- {
1380
- table_.insert_range(f, l);
1381
- }
1382
-
1383
- template <class T, class H, class P, class A>
1384
- template <class InputIt>
1385
- unordered_multiset<T, H, P, A>::unordered_multiset(InputIt f, InputIt l,
1386
- size_type n, const hasher& hf, const allocator_type& a)
1387
- : table_(
1388
- boost::unordered::detail::initial_size(f, l, n), hf, key_equal(), a)
1389
- {
1390
- table_.insert_range(f, l);
1391
- }
1392
-
1393
- template <class T, class H, class P, class A>
1394
- template <class InputIt>
1395
- unordered_multiset<T, H, P, A>::unordered_multiset(
1396
- InputIt f, InputIt l, size_type n, const allocator_type& a)
1397
- : table_(boost::unordered::detail::initial_size(f, l, n), hasher(),
1398
- key_equal(), a)
1399
- {
1400
- table_.insert_range(f, l);
1401
- }
1402
-
1403
- template <class T, class H, class P, class A>
1404
- unordered_multiset<T, H, P, A>::~unordered_multiset() BOOST_NOEXCEPT
1405
- {
1406
- }
1407
-
1408
- template <class T, class H, class P, class A>
1409
- unordered_multiset<T, H, P, A>::unordered_multiset(
1410
- unordered_multiset const& other)
1411
- : table_(other.table_)
1412
- {
1413
- }
1414
-
1415
- template <class T, class H, class P, class A>
1416
- unordered_multiset<T, H, P, A>::unordered_multiset(
1417
- BOOST_RV_REF(unordered_multiset) other, allocator_type const& a)
1418
- : table_(other.table_, a, boost::unordered::detail::move_tag())
1419
- {
1420
- }
1675
+
1676
+ template <class T, class H, class P, class A>
1677
+ unordered_multiset<T, H, P, A>::~unordered_multiset() BOOST_NOEXCEPT
1678
+ {
1679
+ }
1421
1680
 
1422
1681
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1423
1682
 
1424
- template <class T, class H, class P, class A>
1425
- unordered_multiset<T, H, P, A>::unordered_multiset(
1426
- std::initializer_list<value_type> list, size_type n, const hasher& hf,
1427
- const key_equal& eql, const allocator_type& a)
1428
- : table_(
1429
- boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1430
- hf, eql, a)
1431
- {
1432
- table_.insert_range(list.begin(), list.end());
1433
- }
1434
-
1435
- template <class T, class H, class P, class A>
1436
- unordered_multiset<T, H, P, A>::unordered_multiset(
1437
- std::initializer_list<value_type> list, size_type n, const hasher& hf,
1438
- const allocator_type& a)
1439
- : table_(
1440
- boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1441
- hf, key_equal(), a)
1442
- {
1443
- table_.insert_range(list.begin(), list.end());
1444
- }
1445
-
1446
- template <class T, class H, class P, class A>
1447
- unordered_multiset<T, H, P, A>::unordered_multiset(
1448
- std::initializer_list<value_type> list, size_type n,
1449
- const allocator_type& a)
1450
- : table_(
1451
- boost::unordered::detail::initial_size(list.begin(), list.end(), n),
1452
- hasher(), key_equal(), a)
1453
- {
1454
- table_.insert_range(list.begin(), list.end());
1455
- }
1456
-
1457
- template <class T, class H, class P, class A>
1458
- unordered_multiset<T, H, P, A>& unordered_multiset<T, H, P, A>::operator=(
1459
- std::initializer_list<value_type> list)
1460
- {
1461
- table_.clear();
1462
- table_.insert_range(list.begin(), list.end());
1463
- return *this;
1464
- }
1683
+ template <class T, class H, class P, class A>
1684
+ unordered_multiset<T, H, P, A>& unordered_multiset<T, H, P, A>::operator=(
1685
+ std::initializer_list<value_type> list)
1686
+ {
1687
+ this->clear();
1688
+ this->insert(list.begin(), list.end());
1689
+ return *this;
1690
+ }
1465
1691
 
1466
1692
  #endif
1467
1693
 
1468
- // size and capacity
1694
+ // size and capacity
1469
1695
 
1470
- template <class T, class H, class P, class A>
1471
- std::size_t unordered_multiset<T, H, P, A>::max_size() const BOOST_NOEXCEPT
1472
- {
1473
- return table_.max_size();
1474
- }
1696
+ template <class T, class H, class P, class A>
1697
+ std::size_t unordered_multiset<T, H, P, A>::max_size() const BOOST_NOEXCEPT
1698
+ {
1699
+ using namespace std;
1475
1700
 
1476
- // modifiers
1701
+ // size < mlf_ * count
1702
+ return boost::unordered::detail::double_to_size(
1703
+ ceil(static_cast<double>(table_.mlf_) *
1704
+ static_cast<double>(table_.max_bucket_count()))) -
1705
+ 1;
1706
+ }
1477
1707
 
1478
- template <class T, class H, class P, class A>
1479
- template <class InputIt>
1480
- void unordered_multiset<T, H, P, A>::insert(InputIt first, InputIt last)
1481
- {
1482
- table_.insert_range(first, last);
1483
- }
1708
+ // modifiers
1709
+
1710
+ template <class T, class H, class P, class A>
1711
+ template <class InputIt>
1712
+ void unordered_multiset<T, H, P, A>::insert(InputIt first, InputIt last)
1713
+ {
1714
+ table_.insert_range_equiv(first, last);
1715
+ }
1484
1716
 
1485
1717
  #if !defined(BOOST_NO_CXX11_HDR_INITIALIZER_LIST)
1486
- template <class T, class H, class P, class A>
1487
- void unordered_multiset<T, H, P, A>::insert(
1488
- std::initializer_list<value_type> list)
1489
- {
1490
- table_.insert_range(list.begin(), list.end());
1491
- }
1718
+ template <class T, class H, class P, class A>
1719
+ void unordered_multiset<T, H, P, A>::insert(
1720
+ std::initializer_list<value_type> list)
1721
+ {
1722
+ this->insert(list.begin(), list.end());
1723
+ }
1492
1724
  #endif
1493
1725
 
1494
- template <class T, class H, class P, class A>
1495
- typename unordered_multiset<T, H, P, A>::iterator
1496
- unordered_multiset<T, H, P, A>::erase(const_iterator position)
1497
- {
1498
- return table_.erase(position);
1499
- }
1500
-
1501
- template <class T, class H, class P, class A>
1502
- typename unordered_multiset<T, H, P, A>::size_type
1503
- unordered_multiset<T, H, P, A>::erase(const key_type& k)
1504
- {
1505
- return table_.erase_key(k);
1506
- }
1507
-
1508
- template <class T, class H, class P, class A>
1509
- typename unordered_multiset<T, H, P, A>::iterator
1510
- unordered_multiset<T, H, P, A>::erase(const_iterator first, const_iterator last)
1511
- {
1512
- return table_.erase_range(first, last);
1513
- }
1514
-
1515
- template <class T, class H, class P, class A>
1516
- void unordered_multiset<T, H, P, A>::clear()
1517
- {
1518
- table_.clear();
1519
- }
1520
-
1521
- template <class T, class H, class P, class A>
1522
- void unordered_multiset<T, H, P, A>::swap(unordered_multiset& other)
1523
- {
1524
- table_.swap(other.table_);
1525
- }
1526
-
1527
- // observers
1528
-
1529
- template <class T, class H, class P, class A>
1530
- typename unordered_multiset<T, H, P, A>::hasher
1531
- unordered_multiset<T, H, P, A>::hash_function() const
1532
- {
1533
- return table_.hash_function();
1534
- }
1535
-
1536
- template <class T, class H, class P, class A>
1537
- typename unordered_multiset<T, H, P, A>::key_equal
1538
- unordered_multiset<T, H, P, A>::key_eq() const
1539
- {
1540
- return table_.key_eq();
1541
- }
1542
-
1543
- template <class T, class H, class P, class A>
1544
- template <typename H2, typename P2>
1545
- void unordered_multiset<T, H, P, A>::merge(
1546
- boost::unordered_multiset<T, H2, P2, A>& source)
1547
- {
1548
- while (!source.empty()) {
1726
+ template <class T, class H, class P, class A>
1727
+ typename unordered_multiset<T, H, P, A>::iterator
1728
+ unordered_multiset<T, H, P, A>::erase(const_iterator position)
1729
+ {
1730
+ node_pointer node = table::get_node(position);
1731
+ BOOST_ASSERT(node);
1732
+ node_pointer next = table::next_node(node);
1733
+ table_.erase_nodes_equiv(node, next);
1734
+ return iterator(next);
1735
+ }
1736
+
1737
+ template <class T, class H, class P, class A>
1738
+ typename unordered_multiset<T, H, P, A>::size_type
1739
+ unordered_multiset<T, H, P, A>::erase(const key_type& k)
1740
+ {
1741
+ return table_.erase_key_equiv(k);
1742
+ }
1743
+
1744
+ template <class T, class H, class P, class A>
1745
+ typename unordered_multiset<T, H, P, A>::iterator
1746
+ unordered_multiset<T, H, P, A>::erase(
1747
+ const_iterator first, const_iterator last)
1748
+ {
1749
+ node_pointer last_node = table::get_node(last);
1750
+ if (first == last)
1751
+ return iterator(last_node);
1752
+ table_.erase_nodes_equiv(table::get_node(first), last_node);
1753
+ return iterator(last_node);
1754
+ }
1755
+
1756
+ template <class T, class H, class P, class A>
1757
+ void unordered_multiset<T, H, P, A>::swap(unordered_multiset& other)
1758
+ BOOST_NOEXCEPT_IF(value_allocator_traits::is_always_equal::value&&
1759
+ boost::is_nothrow_swappable<H>::value&&
1760
+ boost::is_nothrow_swappable<P>::value)
1761
+ {
1762
+ table_.swap(other.table_);
1763
+ }
1764
+
1765
+ // observers
1766
+
1767
+ template <class T, class H, class P, class A>
1768
+ typename unordered_multiset<T, H, P, A>::hasher
1769
+ unordered_multiset<T, H, P, A>::hash_function() const
1770
+ {
1771
+ return table_.hash_function();
1772
+ }
1773
+
1774
+ template <class T, class H, class P, class A>
1775
+ typename unordered_multiset<T, H, P, A>::key_equal
1776
+ unordered_multiset<T, H, P, A>::key_eq() const
1777
+ {
1778
+ return table_.key_eq();
1779
+ }
1780
+
1781
+ template <class T, class H, class P, class A>
1782
+ template <typename H2, typename P2>
1783
+ void unordered_multiset<T, H, P, A>::merge(
1784
+ boost::unordered_multiset<T, H2, P2, A>& source)
1785
+ {
1786
+ while (!source.empty()) {
1549
1787
  insert(source.extract(source.begin()));
1788
+ }
1550
1789
  }
1551
- }
1552
1790
 
1553
1791
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
1554
- template <class T, class H, class P, class A>
1555
- template <typename H2, typename P2>
1556
- void unordered_multiset<T, H, P, A>::merge(
1557
- boost::unordered_multiset<T, H2, P2, A>&& source)
1558
- {
1559
- while (!source.empty()) {
1792
+ template <class T, class H, class P, class A>
1793
+ template <typename H2, typename P2>
1794
+ void unordered_multiset<T, H, P, A>::merge(
1795
+ boost::unordered_multiset<T, H2, P2, A>&& source)
1796
+ {
1797
+ while (!source.empty()) {
1560
1798
  insert(source.extract(source.begin()));
1799
+ }
1561
1800
  }
1562
- }
1563
1801
  #endif
1564
1802
 
1565
- #if BOOST_UNORDERED_INTEROPERABLE_NODES
1566
- template <class T, class H, class P, class A>
1567
- template <typename H2, typename P2>
1568
- void unordered_multiset<T, H, P, A>::merge(
1569
- boost::unordered_set<T, H2, P2, A>& source)
1570
- {
1571
- while (!source.empty()) {
1803
+ template <class T, class H, class P, class A>
1804
+ template <typename H2, typename P2>
1805
+ void unordered_multiset<T, H, P, A>::merge(
1806
+ boost::unordered_set<T, H2, P2, A>& source)
1807
+ {
1808
+ while (!source.empty()) {
1572
1809
  insert(source.extract(source.begin()));
1810
+ }
1573
1811
  }
1574
- }
1575
1812
 
1576
1813
  #if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
1577
- template <class T, class H, class P, class A>
1578
- template <typename H2, typename P2>
1579
- void unordered_multiset<T, H, P, A>::merge(
1580
- boost::unordered_set<T, H2, P2, A>&& source)
1581
- {
1582
- while (!source.empty()) {
1814
+ template <class T, class H, class P, class A>
1815
+ template <typename H2, typename P2>
1816
+ void unordered_multiset<T, H, P, A>::merge(
1817
+ boost::unordered_set<T, H2, P2, A>&& source)
1818
+ {
1819
+ while (!source.empty()) {
1583
1820
  insert(source.extract(source.begin()));
1821
+ }
1584
1822
  }
1585
- }
1586
- #endif
1587
1823
  #endif
1588
1824
 
1589
- // lookup
1590
-
1591
- template <class T, class H, class P, class A>
1592
- typename unordered_multiset<T, H, P, A>::const_iterator
1593
- unordered_multiset<T, H, P, A>::find(const key_type& k) const
1594
- {
1595
- return const_iterator(table_.find_node(k));
1596
- }
1597
-
1598
- template <class T, class H, class P, class A>
1599
- template <class CompatibleKey, class CompatibleHash, class CompatiblePredicate>
1600
- typename unordered_multiset<T, H, P, A>::const_iterator
1601
- unordered_multiset<T, H, P, A>::find(CompatibleKey const& k,
1602
- CompatibleHash const& hash, CompatiblePredicate const& eq) const
1603
- {
1604
- return const_iterator(table_.generic_find_node(k, hash, eq));
1605
- }
1606
-
1607
- template <class T, class H, class P, class A>
1608
- typename unordered_multiset<T, H, P, A>::size_type
1609
- unordered_multiset<T, H, P, A>::count(const key_type& k) const
1610
- {
1611
- return table_.count(k);
1612
- }
1613
-
1614
- template <class T, class H, class P, class A>
1615
- std::pair<typename unordered_multiset<T, H, P, A>::const_iterator,
1616
- typename unordered_multiset<T, H, P, A>::const_iterator>
1617
- unordered_multiset<T, H, P, A>::equal_range(const key_type& k) const
1618
- {
1619
- return table_.equal_range(k);
1620
- }
1621
-
1622
- template <class T, class H, class P, class A>
1623
- typename unordered_multiset<T, H, P, A>::size_type
1624
- unordered_multiset<T, H, P, A>::bucket_size(size_type n) const
1625
- {
1626
- return table_.bucket_size(n);
1627
- }
1628
-
1629
- // hash policy
1630
-
1631
- template <class T, class H, class P, class A>
1632
- float unordered_multiset<T, H, P, A>::load_factor() const BOOST_NOEXCEPT
1633
- {
1634
- return table_.load_factor();
1635
- }
1636
-
1637
- template <class T, class H, class P, class A>
1638
- void unordered_multiset<T, H, P, A>::max_load_factor(float m) BOOST_NOEXCEPT
1639
- {
1640
- table_.max_load_factor(m);
1641
- }
1642
-
1643
- template <class T, class H, class P, class A>
1644
- void unordered_multiset<T, H, P, A>::rehash(size_type n)
1645
- {
1646
- table_.rehash(n);
1647
- }
1648
-
1649
- template <class T, class H, class P, class A>
1650
- void unordered_multiset<T, H, P, A>::reserve(size_type n)
1651
- {
1652
- table_.reserve(n);
1653
- }
1654
-
1655
- template <class T, class H, class P, class A>
1656
- inline bool operator==(unordered_multiset<T, H, P, A> const& m1,
1657
- unordered_multiset<T, H, P, A> const& m2)
1658
- {
1659
- #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1660
- struct dummy
1825
+ // lookup
1826
+
1827
+ template <class T, class H, class P, class A>
1828
+ typename unordered_multiset<T, H, P, A>::const_iterator
1829
+ unordered_multiset<T, H, P, A>::find(const key_type& k) const
1661
1830
  {
1662
- unordered_multiset<T, H, P, A> x;
1663
- };
1664
- #endif
1665
- return m1.table_.equals(m2.table_);
1666
- }
1831
+ return const_iterator(table_.find_node(k));
1832
+ }
1667
1833
 
1668
- template <class T, class H, class P, class A>
1669
- inline bool operator!=(unordered_multiset<T, H, P, A> const& m1,
1670
- unordered_multiset<T, H, P, A> const& m2)
1671
- {
1672
- #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1673
- struct dummy
1834
+ template <class T, class H, class P, class A>
1835
+ template <class CompatibleKey, class CompatibleHash,
1836
+ class CompatiblePredicate>
1837
+ typename unordered_multiset<T, H, P, A>::const_iterator
1838
+ unordered_multiset<T, H, P, A>::find(CompatibleKey const& k,
1839
+ CompatibleHash const& hash, CompatiblePredicate const& eq) const
1674
1840
  {
1675
- unordered_multiset<T, H, P, A> x;
1676
- };
1677
- #endif
1678
- return !m1.table_.equals(m2.table_);
1679
- }
1841
+ return const_iterator(
1842
+ table_.find_node_impl(table::policy::apply_hash(hash, k), k, eq));
1843
+ }
1680
1844
 
1681
- template <class T, class H, class P, class A>
1682
- inline void swap(
1683
- unordered_multiset<T, H, P, A>& m1, unordered_multiset<T, H, P, A>& m2)
1684
- {
1685
- #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1686
- struct dummy
1845
+ template <class T, class H, class P, class A>
1846
+ typename unordered_multiset<T, H, P, A>::size_type
1847
+ unordered_multiset<T, H, P, A>::count(const key_type& k) const
1687
1848
  {
1688
- unordered_multiset<T, H, P, A> x;
1689
- };
1690
- #endif
1691
- m1.swap(m2);
1692
- }
1849
+ node_pointer n = table_.find_node(k);
1850
+ return n ? table_.group_count(n) : 0;
1851
+ }
1693
1852
 
1694
- template <typename N, typename T, typename A> class node_handle_set
1695
- {
1696
- BOOST_MOVABLE_BUT_NOT_COPYABLE(node_handle_set)
1853
+ template <class T, class H, class P, class A>
1854
+ std::pair<typename unordered_multiset<T, H, P, A>::const_iterator,
1855
+ typename unordered_multiset<T, H, P, A>::const_iterator>
1856
+ unordered_multiset<T, H, P, A>::equal_range(const key_type& k) const
1857
+ {
1858
+ node_pointer n = table_.find_node(k);
1859
+ return std::make_pair(
1860
+ const_iterator(n), const_iterator(n ? table_.next_group(n) : n));
1861
+ }
1697
1862
 
1698
- template <typename Types>
1699
- friend struct ::boost::unordered::detail::table_impl;
1700
- template <typename Types>
1701
- friend struct ::boost::unordered::detail::grouped_table_impl;
1863
+ template <class T, class H, class P, class A>
1864
+ typename unordered_multiset<T, H, P, A>::size_type
1865
+ unordered_multiset<T, H, P, A>::bucket_size(size_type n) const
1866
+ {
1867
+ return table_.bucket_size(n);
1868
+ }
1702
1869
 
1703
- typedef typename boost::unordered::detail::rebind_wrap<A, T>::type
1704
- value_allocator;
1705
- typedef boost::unordered::detail::allocator_traits<value_allocator>
1706
- value_allocator_traits;
1707
- typedef N node;
1708
- typedef typename boost::unordered::detail::rebind_wrap<A, node>::type
1709
- node_allocator;
1710
- typedef boost::unordered::detail::allocator_traits<node_allocator>
1711
- node_allocator_traits;
1712
- typedef typename node_allocator_traits::pointer node_pointer;
1870
+ // hash policy
1713
1871
 
1714
- public:
1715
- typedef T value_type;
1716
- typedef A allocator_type;
1872
+ template <class T, class H, class P, class A>
1873
+ float unordered_multiset<T, H, P, A>::load_factor() const BOOST_NOEXCEPT
1874
+ {
1875
+ BOOST_ASSERT(table_.bucket_count_ != 0);
1876
+ return static_cast<float>(table_.size_) /
1877
+ static_cast<float>(table_.bucket_count_);
1878
+ }
1717
1879
 
1718
- private:
1719
- node_pointer ptr_;
1720
- bool has_alloc_;
1721
- boost::unordered::detail::value_base<value_allocator> alloc_;
1880
+ template <class T, class H, class P, class A>
1881
+ void unordered_multiset<T, H, P, A>::max_load_factor(float m) BOOST_NOEXCEPT
1882
+ {
1883
+ table_.max_load_factor(m);
1884
+ }
1722
1885
 
1723
- public:
1724
- BOOST_CONSTEXPR node_handle_set() BOOST_NOEXCEPT : ptr_(), has_alloc_(false)
1886
+ template <class T, class H, class P, class A>
1887
+ void unordered_multiset<T, H, P, A>::rehash(size_type n)
1725
1888
  {
1889
+ table_.rehash(n);
1726
1890
  }
1727
1891
 
1728
- /*BOOST_CONSTEXPR */ node_handle_set(
1729
- node_pointer ptr, allocator_type const& a)
1730
- : ptr_(ptr), has_alloc_(false)
1892
+ template <class T, class H, class P, class A>
1893
+ void unordered_multiset<T, H, P, A>::reserve(size_type n)
1731
1894
  {
1732
- if (ptr_) {
1733
- new ((void*)&alloc_) value_allocator(a);
1734
- has_alloc_ = true;
1735
- }
1895
+ table_.rehash(static_cast<std::size_t>(
1896
+ std::ceil(static_cast<double>(n) / table_.mlf_)));
1736
1897
  }
1737
1898
 
1738
- ~node_handle_set()
1899
+ template <class T, class H, class P, class A>
1900
+ inline bool operator==(unordered_multiset<T, H, P, A> const& m1,
1901
+ unordered_multiset<T, H, P, A> const& m2)
1739
1902
  {
1740
- if (has_alloc_ && ptr_) {
1741
- node_allocator node_alloc(alloc_.value());
1742
- boost::unordered::detail::node_tmp<node_allocator> tmp(
1743
- ptr_, node_alloc);
1744
- }
1745
- if (has_alloc_) {
1746
- alloc_.value_ptr()->~value_allocator();
1747
- }
1903
+ #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1904
+ struct dummy
1905
+ {
1906
+ unordered_multiset<T, H, P, A> x;
1907
+ };
1908
+ #endif
1909
+ return m1.table_.equals_equiv(m2.table_);
1748
1910
  }
1749
1911
 
1750
- node_handle_set(BOOST_RV_REF(node_handle_set) n) BOOST_NOEXCEPT
1751
- : ptr_(n.ptr_),
1752
- has_alloc_(false)
1753
- {
1754
- if (n.has_alloc_) {
1755
- new ((void*)&alloc_) value_allocator(boost::move(n.alloc_.value()));
1756
- has_alloc_ = true;
1757
- n.ptr_ = node_pointer();
1758
- n.alloc_.value_ptr()->~value_allocator();
1759
- n.has_alloc_ = false;
1760
- }
1912
+ template <class T, class H, class P, class A>
1913
+ inline bool operator!=(unordered_multiset<T, H, P, A> const& m1,
1914
+ unordered_multiset<T, H, P, A> const& m2)
1915
+ {
1916
+ #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1917
+ struct dummy
1918
+ {
1919
+ unordered_multiset<T, H, P, A> x;
1920
+ };
1921
+ #endif
1922
+ return !m1.table_.equals_equiv(m2.table_);
1761
1923
  }
1762
1924
 
1763
- node_handle_set& operator=(BOOST_RV_REF(node_handle_set) n)
1925
+ template <class T, class H, class P, class A>
1926
+ inline void swap(
1927
+ unordered_multiset<T, H, P, A>& m1, unordered_multiset<T, H, P, A>& m2)
1928
+ BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(m1.swap(m2)))
1764
1929
  {
1765
- BOOST_ASSERT(!has_alloc_ ||
1766
- value_allocator_traits::
1767
- propagate_on_container_move_assignment::value ||
1768
- (n.has_alloc_ && alloc_.value() == n.alloc_.value()));
1930
+ #if BOOST_WORKAROUND(__CODEGEARC__, BOOST_TESTED_AT(0x0613))
1931
+ struct dummy
1932
+ {
1933
+ unordered_multiset<T, H, P, A> x;
1934
+ };
1935
+ #endif
1936
+ m1.swap(m2);
1937
+ }
1769
1938
 
1939
+ template <typename N, typename T, typename A> class node_handle_set
1940
+ {
1941
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(node_handle_set)
1942
+
1943
+ template <typename Types> friend struct ::boost::unordered::detail::table;
1944
+ template <class T2, class H2, class P2, class A2>
1945
+ friend class unordered_set;
1946
+ template <class T2, class H2, class P2, class A2>
1947
+ friend class unordered_multiset;
1948
+
1949
+ typedef typename boost::unordered::detail::rebind_wrap<A, T>::type
1950
+ value_allocator;
1951
+ typedef boost::unordered::detail::allocator_traits<value_allocator>
1952
+ value_allocator_traits;
1953
+ typedef N node;
1954
+ typedef typename boost::unordered::detail::rebind_wrap<A, node>::type
1955
+ node_allocator;
1956
+ typedef boost::unordered::detail::allocator_traits<node_allocator>
1957
+ node_allocator_traits;
1958
+ typedef typename node_allocator_traits::pointer node_pointer;
1959
+
1960
+ public:
1961
+ typedef T value_type;
1962
+ typedef A allocator_type;
1963
+
1964
+ private:
1965
+ node_pointer ptr_;
1966
+ bool has_alloc_;
1967
+ boost::unordered::detail::optional<value_allocator> alloc_;
1968
+
1969
+ node_handle_set(node_pointer ptr, allocator_type const& a)
1970
+ : ptr_(ptr), alloc_(a)
1971
+ {
1972
+ }
1973
+
1974
+ public:
1975
+ BOOST_CONSTEXPR node_handle_set() BOOST_NOEXCEPT : ptr_(),
1976
+ has_alloc_(false)
1977
+ {
1978
+ }
1979
+
1980
+ ~node_handle_set()
1981
+ {
1770
1982
  if (ptr_) {
1771
- node_allocator node_alloc(alloc_.value());
1772
- boost::unordered::detail::node_tmp<node_allocator> tmp(
1773
- ptr_, node_alloc);
1774
- ptr_ = node_pointer();
1983
+ node_allocator node_alloc(*alloc_);
1984
+ boost::unordered::detail::node_tmp<node_allocator> tmp(
1985
+ ptr_, node_alloc);
1775
1986
  }
1987
+ }
1776
1988
 
1777
- if (has_alloc_) {
1778
- alloc_.value_ptr()->~value_allocator();
1779
- has_alloc_ = false;
1780
- }
1989
+ node_handle_set(BOOST_RV_REF(node_handle_set) n) BOOST_NOEXCEPT
1990
+ : ptr_(n.ptr_),
1991
+ alloc_(boost::move(n.alloc_))
1992
+ {
1993
+ n.ptr_ = node_pointer();
1994
+ }
1995
+
1996
+ node_handle_set& operator=(BOOST_RV_REF(node_handle_set) n)
1997
+ {
1998
+ BOOST_ASSERT(!alloc_.has_value() ||
1999
+ value_allocator_traits::
2000
+ propagate_on_container_move_assignment::value ||
2001
+ (n.alloc_.has_value() && alloc_ == n.alloc_));
1781
2002
 
1782
- if (!has_alloc_ && n.has_alloc_) {
1783
- move_allocator(n);
2003
+ if (ptr_) {
2004
+ node_allocator node_alloc(*alloc_);
2005
+ boost::unordered::detail::node_tmp<node_allocator> tmp(
2006
+ ptr_, node_alloc);
2007
+ ptr_ = node_pointer();
1784
2008
  }
1785
2009
 
2010
+ if (!alloc_.has_value() ||
2011
+ value_allocator_traits::propagate_on_container_move_assignment::
2012
+ value) {
2013
+ alloc_ = boost::move(n.alloc_);
2014
+ }
1786
2015
  ptr_ = n.ptr_;
1787
2016
  n.ptr_ = node_pointer();
1788
2017
 
1789
2018
  return *this;
1790
- }
2019
+ }
1791
2020
 
1792
- value_type& value() const { return ptr_->value(); }
2021
+ value_type& value() const { return ptr_->value(); }
1793
2022
 
1794
- allocator_type get_allocator() const { return alloc_.value(); }
2023
+ allocator_type get_allocator() const { return *alloc_; }
1795
2024
 
1796
- BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
2025
+ BOOST_EXPLICIT_OPERATOR_BOOL_NOEXCEPT()
1797
2026
 
1798
- bool operator!() const BOOST_NOEXCEPT { return ptr_ ? 0 : 1; }
2027
+ bool operator!() const BOOST_NOEXCEPT { return ptr_ ? 0 : 1; }
1799
2028
 
1800
- bool empty() const BOOST_NOEXCEPT { return ptr_ ? 0 : 1; }
2029
+ bool empty() const BOOST_NOEXCEPT { return ptr_ ? 0 : 1; }
1801
2030
 
1802
- void swap(node_handle_set& n) BOOST_NOEXCEPT_IF(
1803
- value_allocator_traits::propagate_on_container_swap::value
1804
- /* || value_allocator_traits::is_always_equal::value */)
1805
- {
1806
- if (!has_alloc_) {
1807
- if (n.has_alloc_) {
1808
- move_allocator(n);
1809
- }
1810
- } else if (!n.has_alloc_) {
1811
- n.move_allocator(*this);
1812
- } else {
1813
- swap_impl(n, boost::unordered::detail::integral_constant<bool,
1814
- value_allocator_traits::
1815
- propagate_on_container_swap::value>());
2031
+ void swap(node_handle_set& n) BOOST_NOEXCEPT_IF(
2032
+ value_allocator_traits::propagate_on_container_swap::value ||
2033
+ value_allocator_traits::is_always_equal::value)
2034
+ {
2035
+ BOOST_ASSERT(
2036
+ !alloc_.has_value() || !n.alloc_.has_value() ||
2037
+ value_allocator_traits::propagate_on_container_swap::value ||
2038
+ alloc_ == n.alloc_);
2039
+ if (value_allocator_traits::propagate_on_container_swap::value ||
2040
+ !alloc_.has_value() || !n.alloc_.has_value()) {
2041
+ boost::swap(alloc_, n.alloc_);
1816
2042
  }
1817
2043
  boost::swap(ptr_, n.ptr_);
1818
- }
2044
+ }
2045
+ };
1819
2046
 
1820
- private:
1821
- void move_allocator(node_handle_set& n)
2047
+ template <typename N, typename T, typename A>
2048
+ void swap(node_handle_set<N, T, A>& x, node_handle_set<N, T, A>& y)
2049
+ BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(x.swap(y)))
1822
2050
  {
1823
- new ((void*)&alloc_) value_allocator(boost::move(n.alloc_.value()));
1824
- n.alloc_.value_ptr()->~value_allocator();
1825
- has_alloc_ = true;
1826
- n.has_alloc_ = false;
2051
+ x.swap(y);
1827
2052
  }
1828
2053
 
1829
- void swap_impl(node_handle_set&, boost::unordered::detail::false_type) {}
1830
-
1831
- void swap_impl(node_handle_set& n, boost::unordered::detail::true_type)
2054
+ template <typename N, typename T, typename A> struct insert_return_type_set
1832
2055
  {
1833
- boost::swap(alloc_, n.alloc_);
1834
- }
1835
- };
2056
+ private:
2057
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(insert_return_type_set)
1836
2058
 
1837
- template <typename N, typename T, typename A>
1838
- void swap(node_handle_set<N, T, A>& x, node_handle_set<N, T, A>& y)
1839
- BOOST_NOEXCEPT_IF(BOOST_NOEXCEPT_EXPR(x.swap(y)))
1840
- {
1841
- x.swap(y);
1842
- }
1843
-
1844
- template <typename N, typename T, typename A> struct insert_return_type_set
1845
- {
1846
- private:
1847
- BOOST_MOVABLE_BUT_NOT_COPYABLE(insert_return_type_set)
1848
-
1849
- typedef typename boost::unordered::detail::rebind_wrap<A, T>::type
2059
+ typedef typename boost::unordered::detail::rebind_wrap<A, T>::type
1850
2060
  value_allocator;
1851
- typedef N node_;
2061
+ typedef N node_;
1852
2062
 
1853
- public:
1854
- bool inserted;
1855
- boost::unordered::iterator_detail::c_iterator<node_> position;
1856
- boost::unordered::node_handle_set<N, T, A> node;
2063
+ public:
2064
+ bool inserted;
2065
+ boost::unordered::iterator_detail::c_iterator<node_> position;
2066
+ boost::unordered::node_handle_set<N, T, A> node;
1857
2067
 
1858
- insert_return_type_set() : inserted(false), position(), node() {}
2068
+ insert_return_type_set() : inserted(false), position(), node() {}
1859
2069
 
1860
- insert_return_type_set(BOOST_RV_REF(insert_return_type_set)
1861
- x) BOOST_NOEXCEPT : inserted(x.inserted),
1862
- position(x.position),
1863
- node(boost::move(x.node))
1864
- {
1865
- }
2070
+ insert_return_type_set(BOOST_RV_REF(insert_return_type_set)
2071
+ x) BOOST_NOEXCEPT : inserted(x.inserted),
2072
+ position(x.position),
2073
+ node(boost::move(x.node))
2074
+ {
2075
+ }
1866
2076
 
1867
- insert_return_type_set& operator=(BOOST_RV_REF(insert_return_type_set) x)
1868
- {
2077
+ insert_return_type_set& operator=(BOOST_RV_REF(insert_return_type_set) x)
2078
+ {
1869
2079
  inserted = x.inserted;
1870
2080
  position = x.position;
1871
2081
  node = boost::move(x.node);
1872
2082
  return *this;
2083
+ }
2084
+ };
2085
+
2086
+ template <typename N, typename T, typename A>
2087
+ void swap(
2088
+ insert_return_type_set<N, T, A>& x, insert_return_type_set<N, T, A>& y)
2089
+ {
2090
+ boost::swap(x.node, y.node);
2091
+ boost::swap(x.inserted, y.inserted);
2092
+ boost::swap(x.position, y.position);
1873
2093
  }
1874
- };
1875
-
1876
- template <typename N, typename T, typename A>
1877
- void swap(
1878
- insert_return_type_set<N, T, A>& x, insert_return_type_set<N, T, A>& y)
1879
- {
1880
- boost::swap(x.node, y.node);
1881
- boost::swap(x.inserted, y.inserted);
1882
- boost::swap(x.position, y.position);
1883
- }
1884
- } // namespace unordered
2094
+ } // namespace unordered
1885
2095
  } // namespace boost
1886
2096
 
1887
2097
  #if defined(BOOST_MSVC)