passenger 5.3.3 → 5.3.4

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