passenger 6.0.16 → 6.0.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (290) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +46 -2
  3. data/CONTRIBUTORS +2 -0
  4. data/build/integration_tests.rb +6 -6
  5. data/build/ruby_tests.rb +1 -1
  6. data/build/test_basics.rb +0 -1
  7. data/src/agent/Core/Config.h +1 -1
  8. data/src/agent/Core/Controller/Config.h +1 -1
  9. data/src/agent/Core/SpawningKit/PipeWatcher.h +18 -3
  10. data/src/agent/Watchdog/Config.h +1 -1
  11. data/src/cxx_supportlib/Constants.h +1 -1
  12. data/src/cxx_supportlib/vendor-modified/boost/align/aligned_alloc.hpp +1 -1
  13. data/src/cxx_supportlib/vendor-modified/boost/array.hpp +1 -1
  14. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_executor.hpp +344 -0
  15. data/src/cxx_supportlib/vendor-modified/boost/asio/any_completion_handler.hpp +686 -0
  16. data/src/cxx_supportlib/vendor-modified/boost/asio/any_io_executor.hpp +56 -0
  17. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_allocator.hpp +81 -25
  18. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_cancellation_slot.hpp +68 -8
  19. data/src/cxx_supportlib/vendor-modified/boost/asio/associated_executor.hpp +46 -11
  20. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_datagram_socket.hpp +4 -4
  21. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_deadline_timer.hpp +2 -2
  22. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_file.hpp +1 -1
  23. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_random_access_file.hpp +2 -2
  24. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_raw_socket.hpp +4 -4
  25. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_readable_pipe.hpp +2 -2
  26. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_seq_packet_socket.hpp +2 -2
  27. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_serial_port.hpp +3 -3
  28. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_signal_set.hpp +2 -2
  29. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket.hpp +3 -3
  30. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_socket_acceptor.hpp +4 -4
  31. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_file.hpp +2 -2
  32. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_stream_socket.hpp +2 -2
  33. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_waitable_timer.hpp +2 -2
  34. data/src/cxx_supportlib/vendor-modified/boost/asio/basic_writable_pipe.hpp +2 -2
  35. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_allocator.hpp +13 -3
  36. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_cancellation_slot.hpp +14 -3
  37. data/src/cxx_supportlib/vendor-modified/boost/asio/bind_executor.hpp +13 -3
  38. data/src/cxx_supportlib/vendor-modified/boost/asio/compose.hpp +30 -305
  39. data/src/cxx_supportlib/vendor-modified/boost/asio/consign.hpp +90 -0
  40. data/src/cxx_supportlib/vendor-modified/boost/asio/defer.hpp +17 -18
  41. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/bind_handler.hpp +98 -24
  42. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/composed_work.hpp +330 -0
  43. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/config.hpp +81 -15
  44. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_alloc_helpers.hpp +4 -4
  45. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/handler_work.hpp +19 -11
  46. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/descriptor_ops.ipp +37 -0
  47. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/handler_tracking.ipp +3 -1
  48. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/select_reactor.ipp +1 -1
  49. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/socket_ops.ipp +10 -2
  50. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/impl/strand_executor_service.hpp +14 -1
  51. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/memory.hpp +18 -0
  52. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/utility.hpp +1 -2
  53. data/src/cxx_supportlib/vendor-modified/boost/asio/detail/work_dispatcher.hpp +7 -3
  54. data/src/cxx_supportlib/vendor-modified/boost/asio/dispatch.hpp +4 -14
  55. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/allocator.hpp +22 -3
  56. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/any_executor.hpp +447 -142
  57. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking.hpp +57 -8
  58. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/blocking_adaptation.hpp +51 -6
  59. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_execute.hpp +5 -0
  60. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/bulk_guarantee.hpp +41 -4
  61. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/connect.hpp +5 -0
  62. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context.hpp +13 -2
  63. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/context_as.hpp +13 -2
  64. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/detail/as_operation.hpp +4 -0
  65. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/execute.hpp +9 -2
  66. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/executor.hpp +11 -1
  67. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/mapping.hpp +52 -8
  68. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/occupancy.hpp +13 -2
  69. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/operation_state.hpp +5 -0
  70. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/outstanding_work.hpp +39 -6
  71. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/receiver.hpp +5 -0
  72. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/relationship.hpp +39 -6
  73. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/schedule.hpp +5 -0
  74. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/scheduler.hpp +5 -0
  75. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/sender.hpp +5 -0
  76. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_done.hpp +5 -0
  77. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_error.hpp +5 -0
  78. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/set_value.hpp +5 -0
  79. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/start.hpp +5 -0
  80. data/src/cxx_supportlib/vendor-modified/boost/asio/execution/submit.hpp +5 -0
  81. data/src/cxx_supportlib/vendor-modified/boost/asio/executor_work_guard.hpp +6 -9
  82. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_channel.hpp +3 -3
  83. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/basic_concurrent_channel.hpp +3 -3
  84. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/channel_traits.hpp +70 -0
  85. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/co_composed.hpp +146 -0
  86. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/coro.hpp +35 -5
  87. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_handler.hpp +13 -3
  88. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_operation.hpp +7 -0
  89. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/channel_service.hpp +180 -0
  90. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_completion_handler.hpp +171 -0
  91. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/coro_promise_allocator.hpp +89 -66
  92. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/partial_promise.hpp +66 -45
  93. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/as_single.hpp +13 -3
  94. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/co_composed.hpp +1134 -0
  95. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/coro.hpp +130 -106
  96. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/parallel_group.hpp +377 -3
  97. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/promise.hpp +168 -29
  98. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_coro.hpp +149 -203
  99. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/impl/use_promise.hpp +68 -0
  100. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/parallel_group.hpp +256 -0
  101. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/promise.hpp +76 -80
  102. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_coro.hpp +40 -14
  103. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/use_promise.hpp +113 -0
  104. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_completion_executor.ipp +132 -0
  105. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/any_io_executor.ipp +12 -0
  106. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/append.hpp +12 -3
  107. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/as_tuple.hpp +12 -3
  108. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_read_stream.hpp +25 -6
  109. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/buffered_write_stream.hpp +25 -6
  110. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/co_spawn.hpp +34 -45
  111. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/connect.hpp +28 -6
  112. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/consign.hpp +204 -0
  113. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/defer.hpp +33 -1
  114. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/deferred.hpp +13 -3
  115. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/dispatch.hpp +21 -9
  116. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/handler_alloc_hook.ipp +1 -1
  117. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/post.hpp +33 -1
  118. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/prepend.hpp +12 -3
  119. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read.hpp +40 -9
  120. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_at.hpp +27 -6
  121. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/read_until.hpp +104 -24
  122. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/redirect_error.hpp +12 -3
  123. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/spawn.hpp +70 -15
  124. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/src.hpp +1 -0
  125. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/use_future.hpp +25 -0
  126. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write.hpp +38 -30
  127. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/write_at.hpp +27 -6
  128. data/src/cxx_supportlib/vendor-modified/boost/asio/io_context.hpp +0 -13
  129. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v4.ipp +3 -1
  130. data/src/cxx_supportlib/vendor-modified/boost/asio/ip/impl/network_v6.ipp +3 -1
  131. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_descriptor.hpp +2 -2
  132. data/src/cxx_supportlib/vendor-modified/boost/asio/posix/basic_stream_descriptor.hpp +2 -2
  133. data/src/cxx_supportlib/vendor-modified/boost/asio/post.hpp +17 -18
  134. data/src/cxx_supportlib/vendor-modified/boost/asio/spawn.hpp +3 -1
  135. data/src/cxx_supportlib/vendor-modified/boost/asio/ssl/detail/io.hpp +13 -3
  136. data/src/cxx_supportlib/vendor-modified/boost/asio/strand.hpp +11 -7
  137. data/src/cxx_supportlib/vendor-modified/boost/asio/system_executor.hpp +0 -13
  138. data/src/cxx_supportlib/vendor-modified/boost/asio/thread_pool.hpp +23 -18
  139. data/src/cxx_supportlib/vendor-modified/boost/asio/version.hpp +1 -1
  140. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_object_handle.hpp +2 -2
  141. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_overlapped_handle.hpp +1 -1
  142. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_random_access_handle.hpp +2 -2
  143. data/src/cxx_supportlib/vendor-modified/boost/asio/windows/basic_stream_handle.hpp +2 -2
  144. data/src/cxx_supportlib/vendor-modified/boost/asio.hpp +4 -0
  145. data/src/cxx_supportlib/vendor-modified/boost/bind/bind.hpp +1 -1
  146. data/src/cxx_supportlib/vendor-modified/boost/chrono/config.hpp +1 -0
  147. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/inlined/mac/chrono.hpp +4 -4
  148. data/src/cxx_supportlib/vendor-modified/boost/chrono/detail/scan_keyword.hpp +4 -2
  149. data/src/cxx_supportlib/vendor-modified/boost/chrono/duration.hpp +2 -2
  150. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_io.hpp +3 -3
  151. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_put.hpp +5 -5
  152. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/duration_units.hpp +2 -2
  153. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/time_point_io.hpp +2 -2
  154. data/src/cxx_supportlib/vendor-modified/boost/chrono/io/utility/ios_base_state_ptr.hpp +7 -7
  155. data/src/cxx_supportlib/vendor-modified/boost/chrono/time_point.hpp +1 -1
  156. data/src/cxx_supportlib/vendor-modified/boost/circular_buffer/details.hpp +5 -1
  157. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang.hpp +10 -3
  158. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/clang_version.hpp +9 -3
  159. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/gcc.hpp +9 -3
  160. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/sunpro_cc.hpp +6 -0
  161. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/visualc.hpp +8 -0
  162. data/src/cxx_supportlib/vendor-modified/boost/config/compiler/xlcpp.hpp +4 -0
  163. data/src/cxx_supportlib/vendor-modified/boost/config/detail/suffix.hpp +33 -0
  164. data/src/cxx_supportlib/vendor-modified/boost/config/header_deprecated.hpp +1 -1
  165. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libcpp.hpp +9 -0
  166. data/src/cxx_supportlib/vendor-modified/boost/config/stdlib/libstdcpp3.hpp +4 -2
  167. data/src/cxx_supportlib/vendor-modified/boost/container/allocator.hpp +1 -1
  168. data/src/cxx_supportlib/vendor-modified/boost/container/container_fwd.hpp +29 -0
  169. data/src/cxx_supportlib/vendor-modified/boost/container/deque.hpp +13 -13
  170. data/src/cxx_supportlib/vendor-modified/boost/container/detail/advanced_insert_int.hpp +80 -95
  171. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_begin.hpp +10 -0
  172. data/src/cxx_supportlib/vendor-modified/boost/container/detail/config_end.hpp +3 -0
  173. data/src/cxx_supportlib/vendor-modified/boost/container/detail/copy_move_algo.hpp +738 -34
  174. data/src/cxx_supportlib/vendor-modified/boost/container/detail/destroyers.hpp +38 -10
  175. data/src/cxx_supportlib/vendor-modified/boost/container/detail/flat_tree.hpp +1 -0
  176. data/src/cxx_supportlib/vendor-modified/boost/container/detail/iterator.hpp +2 -0
  177. data/src/cxx_supportlib/vendor-modified/boost/container/detail/workaround.hpp +3 -4
  178. data/src/cxx_supportlib/vendor-modified/boost/container/devector.hpp +1150 -1213
  179. data/src/cxx_supportlib/vendor-modified/boost/container/node_allocator.hpp +1 -1
  180. data/src/cxx_supportlib/vendor-modified/boost/container/options.hpp +104 -12
  181. data/src/cxx_supportlib/vendor-modified/boost/container/stable_vector.hpp +1 -0
  182. data/src/cxx_supportlib/vendor-modified/boost/container/string.hpp +11 -1
  183. data/src/cxx_supportlib/vendor-modified/boost/container/vector.hpp +31 -331
  184. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_mix.hpp +113 -0
  185. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_range.hpp +173 -0
  186. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_tuple.hpp +133 -0
  187. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash.hpp +461 -566
  188. data/src/cxx_supportlib/vendor-modified/boost/container_hash/hash_fwd.hpp +24 -24
  189. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_contiguous_range.hpp +91 -0
  190. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_described_class.hpp +38 -0
  191. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_range.hpp +73 -0
  192. data/src/cxx_supportlib/vendor-modified/boost/container_hash/is_unordered_range.hpp +39 -0
  193. data/src/cxx_supportlib/vendor-modified/boost/core/bit.hpp +32 -4
  194. data/src/cxx_supportlib/vendor-modified/boost/core/detail/string_view.hpp +16 -0
  195. data/src/cxx_supportlib/vendor-modified/boost/core/empty_value.hpp +16 -16
  196. data/src/cxx_supportlib/vendor-modified/boost/core/fclose_deleter.hpp +46 -0
  197. data/src/cxx_supportlib/vendor-modified/boost/date_time/date.hpp +1 -1
  198. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters.hpp +3 -3
  199. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/formatters_limited.hpp +3 -3
  200. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/greg_date.hpp +12 -13
  201. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian/parsers.hpp +2 -2
  202. data/src/cxx_supportlib/vendor-modified/boost/date_time/gregorian_calendar.ipp +2 -2
  203. data/src/cxx_supportlib/vendor-modified/boost/date_time/iso_format.hpp +13 -13
  204. data/src/cxx_supportlib/vendor-modified/boost/date_time/local_time/local_date_time.hpp +2 -2
  205. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters.hpp +4 -4
  206. data/src/cxx_supportlib/vendor-modified/boost/date_time/posix_time/time_formatters_limited.hpp +2 -2
  207. data/src/cxx_supportlib/vendor-modified/boost/date_time/special_values_parser.hpp +1 -1
  208. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_facet.hpp +1 -1
  209. data/src/cxx_supportlib/vendor-modified/boost/date_time/time_parsing.hpp +2 -2
  210. data/src/cxx_supportlib/vendor-modified/boost/describe/bases.hpp +50 -0
  211. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/config.hpp +40 -0
  212. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/cx_streq.hpp +30 -0
  213. data/src/cxx_supportlib/vendor-modified/boost/describe/detail/void_t.hpp +32 -0
  214. data/src/cxx_supportlib/vendor-modified/boost/describe/members.hpp +159 -0
  215. data/src/cxx_supportlib/vendor-modified/boost/describe/modifiers.hpp +33 -0
  216. data/src/cxx_supportlib/vendor-modified/boost/intrusive/avltree_algorithms.hpp +9 -9
  217. data/src/cxx_supportlib/vendor-modified/boost/intrusive/bstree_algorithms.hpp +45 -45
  218. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/any_node_and_algorithms.hpp +8 -8
  219. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/bstree_algorithms_base.hpp +37 -38
  220. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/iterator.hpp +16 -0
  221. data/src/cxx_supportlib/vendor-modified/boost/intrusive/detail/workaround.hpp +1 -1
  222. data/src/cxx_supportlib/vendor-modified/boost/intrusive/hashtable.hpp +145 -90
  223. data/src/cxx_supportlib/vendor-modified/boost/intrusive/pack_options.hpp +2 -0
  224. data/src/cxx_supportlib/vendor-modified/boost/intrusive/rbtree_algorithms.hpp +7 -7
  225. data/src/cxx_supportlib/vendor-modified/boost/intrusive/sgtree_algorithms.hpp +5 -5
  226. data/src/cxx_supportlib/vendor-modified/boost/intrusive/splaytree_algorithms.hpp +11 -9
  227. data/src/cxx_supportlib/vendor-modified/boost/intrusive/treap_algorithms.hpp +7 -7
  228. data/src/cxx_supportlib/vendor-modified/boost/iterator/iterator_facade.hpp +106 -25
  229. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_lexical_streams.hpp +1 -1
  230. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/converter_numeric.hpp +8 -5
  231. data/src/cxx_supportlib/vendor-modified/boost/lexical_cast/detail/lcast_unsigned_converters.hpp +1 -1
  232. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/adaptive_sort_merge.hpp +4 -2
  233. data/src/cxx_supportlib/vendor-modified/boost/move/algo/detail/pdqsort.hpp +2 -1
  234. data/src/cxx_supportlib/vendor-modified/boost/move/detail/type_traits.hpp +8 -4
  235. data/src/cxx_supportlib/vendor-modified/boost/mp11/bind.hpp +111 -0
  236. data/src/cxx_supportlib/vendor-modified/boost/mp11/version.hpp +1 -1
  237. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/int_float_mixture.hpp +5 -5
  238. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/sign_mixture.hpp +5 -5
  239. data/src/cxx_supportlib/vendor-modified/boost/numeric/conversion/detail/udt_builtin_mixture.hpp +5 -5
  240. data/src/cxx_supportlib/vendor-modified/boost/preprocessor/variadic/has_opt.hpp +6 -2
  241. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/detail/spinlock_gcc_atomic.hpp +11 -2
  242. data/src/cxx_supportlib/vendor-modified/boost/smart_ptr/intrusive_ptr.hpp +1 -1
  243. data/src/cxx_supportlib/vendor-modified/boost/system/detail/config.hpp +7 -1
  244. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category.hpp +2 -2
  245. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_category_impl.hpp +10 -1
  246. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_code.hpp +38 -43
  247. data/src/cxx_supportlib/vendor-modified/boost/system/detail/error_condition.hpp +52 -0
  248. data/src/cxx_supportlib/vendor-modified/boost/throw_exception.hpp +1 -1
  249. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_function_ptr_helper.hpp +27 -27
  250. data/src/cxx_supportlib/vendor-modified/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +27 -27
  251. data/src/cxx_supportlib/vendor-modified/boost/type_traits/intrinsics.hpp +22 -8
  252. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/fca.hpp +37 -7
  253. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/foa.hpp +1921 -0
  254. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/implementation.hpp +66 -82
  255. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/prime_fmod.hpp +6 -0
  256. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/type_traits.hpp +109 -0
  257. data/src/cxx_supportlib/vendor-modified/boost/unordered/detail/xmx.hpp +75 -0
  258. data/src/cxx_supportlib/vendor-modified/boost/unordered/hash_traits.hpp +45 -0
  259. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map.hpp +732 -0
  260. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_map_fwd.hpp +49 -0
  261. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set.hpp +586 -0
  262. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_flat_set_fwd.hpp +49 -0
  263. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_map.hpp +166 -66
  264. data/src/cxx_supportlib/vendor-modified/boost/unordered/unordered_set.hpp +145 -28
  265. data/src/cxx_supportlib/vendor-modified/boost/version.hpp +2 -2
  266. data/src/cxx_supportlib/vendor-modified/websocketpp/websocketpp/common/md5.hpp +1 -1
  267. data/src/ruby_native_extension/extconf.rb +1 -1
  268. data/src/ruby_supportlib/phusion_passenger/native_support.rb +4 -2
  269. data/src/ruby_supportlib/phusion_passenger/platform_info/operating_system.rb +1 -1
  270. data/src/ruby_supportlib/phusion_passenger/public_api.rb +3 -0
  271. data/src/ruby_supportlib/phusion_passenger/utils.rb +1 -0
  272. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  273. metadata +36 -19
  274. data/src/cxx_supportlib/vendor-modified/boost/align/align.hpp +0 -19
  275. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of.hpp +0 -54
  276. data/src/cxx_supportlib/vendor-modified/boost/align/alignment_of_forward.hpp +0 -20
  277. data/src/cxx_supportlib/vendor-modified/boost/align/detail/align_cxx11.hpp +0 -21
  278. data/src/cxx_supportlib/vendor-modified/boost/align/detail/aligned_alloc.hpp +0 -52
  279. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of.hpp +0 -31
  280. data/src/cxx_supportlib/vendor-modified/boost/align/detail/alignment_of_cxx11.hpp +0 -23
  281. data/src/cxx_supportlib/vendor-modified/boost/align/detail/element_type.hpp +0 -91
  282. data/src/cxx_supportlib/vendor-modified/boost/align/detail/integral_constant.hpp +0 -53
  283. data/src/cxx_supportlib/vendor-modified/boost/align/detail/min_size.hpp +0 -26
  284. data/src/cxx_supportlib/vendor-modified/boost/asio/experimental/detail/completion_handler_erasure.hpp +0 -196
  285. data/src/cxx_supportlib/vendor-modified/boost/asio/impl/compose.hpp +0 -709
  286. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/float_functions.hpp +0 -336
  287. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/hash_float.hpp +0 -271
  288. data/src/cxx_supportlib/vendor-modified/boost/container_hash/detail/limits.hpp +0 -62
  289. data/src/cxx_supportlib/vendor-modified/boost/container_hash/extensions.hpp +0 -361
  290. data/src/cxx_supportlib/vendor-modified/boost/detail/container_fwd.hpp +0 -157
@@ -74,18 +74,8 @@ namespace gregorian {
74
74
  {}
75
75
  //! Constructor for infinities, not a date, max and min date
76
76
  BOOST_CXX14_CONSTEXPR explicit date(special_values sv):
77
- date_time::date<date, gregorian_calendar, date_duration>(date_rep_type::from_special(sv))
78
- {
79
- if (sv == min_date_time)
80
- {
81
- *this = date(1400, 1, 1);
82
- }
83
- if (sv == max_date_time)
84
- {
85
- *this = date(9999, 12, 31);
86
- }
87
-
88
- }
77
+ date_time::date<date, gregorian_calendar, date_duration>(from_special_adjusted(sv))
78
+ {}
89
79
  //!Return the Julian Day number for the date.
90
80
  BOOST_CXX14_CONSTEXPR date_int_type julian_day() const
91
81
  {
@@ -105,7 +95,7 @@ namespace gregorian {
105
95
  ymd_type ymd = year_month_day();
106
96
  return gregorian_calendar::modjulian_day_number(ymd);
107
97
  }
108
- //!Return the iso 8601 week number 1..53
98
+ //!Return the ISO 8601 week number 1..53
109
99
  BOOST_CXX14_CONSTEXPR int week_number() const
110
100
  {
111
101
  ymd_type ymd = year_month_day();
@@ -129,6 +119,15 @@ namespace gregorian {
129
119
 
130
120
  private:
131
121
 
122
+ BOOST_CXX14_CONSTEXPR date_rep_type from_special_adjusted(special_values sv)
123
+ {
124
+ switch (sv)
125
+ {
126
+ case min_date_time: return gregorian_calendar::day_number(ymd_type(1400, 1, 1));
127
+ case max_date_time: return gregorian_calendar::day_number(ymd_type(9999, 12, 31));
128
+ default: return date_rep_type::from_special(sv);
129
+ }
130
+ }
132
131
  };
133
132
 
134
133
  inline BOOST_CXX14_CONSTEXPR
@@ -64,12 +64,12 @@ namespace gregorian {
64
64
  return date_time::parse_date<date>(s, date_time::ymd_order_dmy);
65
65
  }
66
66
 
67
- //! From iso type date string where with order year-month-day eg: 20020125
67
+ //! From ISO 8601 type date string where with order year-month-day eg: 20020125
68
68
  inline date from_undelimited_string(const std::string& s) {
69
69
  return date_time::parse_undelimited_date<date>(s);
70
70
  }
71
71
 
72
- //! From iso type date string where with order year-month-day eg: 20020125
72
+ //! From ISO 8601 type date string where with order year-month-day eg: 20020125
73
73
  inline date date_from_iso_string(const std::string& s) {
74
74
  return date_time::parse_undelimited_date<date>(s);
75
75
  }
@@ -25,8 +25,8 @@ namespace date_time {
25
25
  return d;
26
26
  }
27
27
 
28
- //!Return the iso week number for the date
29
- /*!Implements the rules associated with the iso 8601 week number.
28
+ //!Return the ISO 8601 week number for the date
29
+ /*!Implements the rules associated with the ISO 8601 week number.
30
30
  Basically the rule is that Week 1 of the year is the week that contains
31
31
  January 4th or the week that contains the first Thursday in January.
32
32
  Reference for this algorithm is the Calendar FAQ by Claus Tondering, April 2000.
@@ -14,11 +14,11 @@
14
14
  namespace boost {
15
15
  namespace date_time {
16
16
 
17
- //! Class to provide common iso formatting spec
17
+ //! Class to provide common ISO 8601 formatting spec
18
18
  template<class charT>
19
19
  class iso_format_base {
20
20
  public:
21
- //! Describe month format -- its an integer in iso format
21
+ //! Describe month format -- its an integer in ISO 8601 format
22
22
  static month_format_spec month_format()
23
23
  {
24
24
  return month_as_integer;
@@ -40,17 +40,17 @@ public:
40
40
  return "-infinity";
41
41
  }
42
42
 
43
- //! ISO char for a year -- used in durations
43
+ //! ISO 8601 char for a year -- used in durations
44
44
  static charT year_sep_char()
45
45
  {
46
46
  return 'Y';
47
47
  }
48
- //! ISO char for a month
48
+ //! ISO 8601 char for a month
49
49
  static charT month_sep_char()
50
50
  {
51
51
  return '-';
52
52
  }
53
- //! ISO char for a day
53
+ //! ISO 8601 char for a day
54
54
  static charT day_sep_char()
55
55
  {
56
56
  return '-';
@@ -70,7 +70,7 @@ public:
70
70
  {
71
71
  return ':';
72
72
  }
73
- //! ISO char for a period
73
+ //! ISO 8601 char for a period
74
74
  static charT period_start_char()
75
75
  {
76
76
  return 'P';
@@ -143,11 +143,11 @@ public:
143
143
 
144
144
  #ifndef BOOST_NO_STD_WSTRING
145
145
 
146
- //! Class to provide common iso formatting spec
146
+ //! Class to provide common ISO 8601 formatting spec
147
147
  template<>
148
148
  class iso_format_base<wchar_t> {
149
149
  public:
150
- //! Describe month format -- its an integer in iso format
150
+ //! Describe month format -- its an integer in ISO 8601 format
151
151
  static month_format_spec month_format()
152
152
  {
153
153
  return month_as_integer;
@@ -169,17 +169,17 @@ public:
169
169
  return L"-infinity";
170
170
  }
171
171
 
172
- //! ISO char for a year -- used in durations
172
+ //! ISO 8601 char for a year -- used in durations
173
173
  static wchar_t year_sep_char()
174
174
  {
175
175
  return 'Y';
176
176
  }
177
- //! ISO char for a month
177
+ //! ISO 8601 char for a month
178
178
  static wchar_t month_sep_char()
179
179
  {
180
180
  return '-';
181
181
  }
182
- //! ISO char for a day
182
+ //! ISO 8601 char for a day
183
183
  static wchar_t day_sep_char()
184
184
  {
185
185
  return '-';
@@ -199,7 +199,7 @@ public:
199
199
  {
200
200
  return ':';
201
201
  }
202
- //! ISO char for a period
202
+ //! ISO 8601 char for a period
203
203
  static wchar_t period_start_char()
204
204
  {
205
205
  return 'P';
@@ -272,7 +272,7 @@ public:
272
272
 
273
273
  #endif // BOOST_NO_STD_WSTRING
274
274
 
275
- //! Format description for iso normal YYYYMMDD
275
+ //! Format description for ISO 8601 normal YYYYMMDD
276
276
  template<class charT>
277
277
  class iso_format : public iso_format_base<charT> {
278
278
  public:
@@ -315,7 +315,7 @@ namespace local_time {
315
315
 
316
316
  //! Returns name of associated time zone or "Coordinated Universal Time".
317
317
  /*! Optional bool parameter will return time zone as an offset
318
- * (ie "+07:00" extended iso format). Empty string is returned for
318
+ * (ie "+07:00" extended ISO 8601 format). Empty string is returned for
319
319
  * classes that do not use a time_zone */
320
320
  std::string zone_name(bool as_offset=false) const
321
321
  {
@@ -349,7 +349,7 @@ namespace local_time {
349
349
  }
350
350
  //! Returns abbreviation of associated time zone or "UTC".
351
351
  /*! Optional bool parameter will return time zone as an offset
352
- * (ie "+0700" iso format). Empty string is returned for classes
352
+ * (ie "+0700" ISO 8601 format). Empty string is returned for classes
353
353
  * that do not use a time_zone */
354
354
  std::string zone_abbrev(bool as_offset=false) const
355
355
  {
@@ -157,7 +157,7 @@ namespace posix_time {
157
157
  }// else
158
158
  return ss.str();
159
159
  }
160
- //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456
160
+ //! Time duration in ISO 8601 format -hhmmss.fffffff. Example: 10:09:03.0123456
161
161
  /*!\ingroup time_format
162
162
  */
163
163
  inline std::string to_iso_string(time_duration td){
@@ -215,7 +215,7 @@ namespace posix_time {
215
215
  return ts;
216
216
  }
217
217
  }
218
- //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator
218
+ //! Convert ISO 8601 short form YYYYMMDDTHHMMSS where T is the date-time separator
219
219
  /*!\ingroup time_format
220
220
  */
221
221
  inline std::string to_iso_string(ptime t){
@@ -251,7 +251,7 @@ namespace posix_time {
251
251
  inline std::wstring to_simple_wstring(time_duration td) {
252
252
  return to_simple_string_type<wchar_t>(td);
253
253
  }
254
- //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456
254
+ //! Time duration in ISO 8601 format -hhmmss.fffffff. Example: 10:09:03.0123456
255
255
  /*!\ingroup time_format
256
256
  */
257
257
  inline std::wstring to_iso_wstring(time_duration td){
@@ -266,7 +266,7 @@ namespace posix_time {
266
266
  inline std::wstring to_simple_wstring(time_period tp){
267
267
  return to_simple_string_type<wchar_t>(tp);
268
268
  }
269
- //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator
269
+ //! Convert ISO 8601 short form YYYYMMDDTHHMMSS where T is the date-time separator
270
270
  /*!\ingroup time_format
271
271
  */
272
272
  inline std::wstring to_iso_wstring(ptime t){
@@ -82,7 +82,7 @@ namespace posix_time {
82
82
  return ss.str();
83
83
  }
84
84
 
85
- //! Time duration in iso format -hhmmss,fffffff Example: 10:09:03,0123456
85
+ //! Time duration in ISO 8601 format -hhmmss.fffffff. Example: 10:09:03.0123456
86
86
  /*!\ingroup time_format
87
87
  */
88
88
  inline
@@ -173,7 +173,7 @@ namespace posix_time {
173
173
  return std::string("[" + d1 + "/" + d2 +"]");
174
174
  }
175
175
 
176
- //! Convert iso short form YYYYMMDDTHHMMSS where T is the date-time separator
176
+ //! Convert ISO 8601 short form YYYYMMDDTHHMMSS where T is the date-time separator
177
177
  /*!\ingroup time_format
178
178
  */
179
179
  inline
@@ -97,7 +97,7 @@ namespace boost { namespace date_time {
97
97
  //! match() should be called and return value checked.
98
98
  //! \param[in] str the string to check
99
99
  //! \returns false if it is definitely not a special value
100
- static bool likely(const string_type& str)
100
+ static bool should_call_match(const string_type& str)
101
101
  {
102
102
  if (!str.empty()) {
103
103
  switch (str[0]) {
@@ -481,7 +481,7 @@ namespace date_time {
481
481
  boost::algorithm::replace_all(format, unrestricted_hours_format, hours_str);
482
482
  }
483
483
  // We still have to process restricted hours format specifier. In order to
484
- // support parseability of durations in ISO format (%H%M%S), we'll have to
484
+ // support parseability of durations in ISO 8601 format (%H%M%S), we'll have to
485
485
  // restrict the stringified hours length to 2 characters.
486
486
  if (format.find(hours_format) != string_type::npos) {
487
487
  if (hours_str.empty())
@@ -183,7 +183,7 @@ namespace date_time {
183
183
 
184
184
  }
185
185
 
186
- //! Parse time duration part of an iso time of form: [-]hhmmss[.fff...] (eg: 120259.123 is 12 hours, 2 min, 59 seconds, 123000 microseconds)
186
+ //! Parse time duration part of an ISO 8601 time of form: [-]hhmmss[.fff...] (eg: 120259.123 is 12 hours, 2 min, 59 seconds, 123000 microseconds)
187
187
  template<class time_duration>
188
188
  inline
189
189
  time_duration
@@ -309,7 +309,7 @@ namespace date_time {
309
309
  // then from_iso_string should be able to read a special value string
310
310
  // the special_values_parser is expensive to set up and not thread-safe
311
311
  // so it cannot be static, so we need to be careful about when we use it
312
- if (svp_type::likely(s)) {
312
+ if (svp_type::should_call_match(s)) {
313
313
  typedef typename svp_type::stringstream_type ss_type;
314
314
  typedef typename svp_type::stream_itr_type itr_type;
315
315
  typedef typename svp_type::match_results mr_type;
@@ -0,0 +1,50 @@
1
+ #ifndef BOOST_DESCRIBE_BASES_HPP_INCLUDED
2
+ #define BOOST_DESCRIBE_BASES_HPP_INCLUDED
3
+
4
+ // Copyright 2020, 2021 Peter Dimov
5
+ // Distributed under the Boost Software License, Version 1.0.
6
+ // https://www.boost.org/LICENSE_1_0.txt
7
+
8
+ #include <boost/describe/modifiers.hpp>
9
+ #include <boost/describe/detail/void_t.hpp>
10
+ #include <boost/describe/detail/config.hpp>
11
+
12
+ #if defined(BOOST_DESCRIBE_CXX11)
13
+
14
+ #include <boost/mp11/algorithm.hpp>
15
+ #include <type_traits>
16
+
17
+ namespace boost
18
+ {
19
+ namespace describe
20
+ {
21
+ namespace detail
22
+ {
23
+
24
+ template<class T> using _describe_bases = decltype( boost_base_descriptor_fn( static_cast<T**>(0) ) );
25
+
26
+ template<unsigned M> struct base_filter
27
+ {
28
+ template<class T> using fn = mp11::mp_bool< ( M & mod_any_access & T::modifiers ) != 0 >;
29
+ };
30
+
31
+ template<class T, class En = void> struct has_describe_bases: std::false_type
32
+ {
33
+ };
34
+
35
+ template<class T> struct has_describe_bases<T, void_t<_describe_bases<T>>>: std::true_type
36
+ {
37
+ };
38
+
39
+ } // namespace detail
40
+
41
+ template<class T, unsigned M> using describe_bases = mp11::mp_copy_if_q<detail::_describe_bases<T>, detail::base_filter<M>>;
42
+
43
+ template<class T> using has_describe_bases = detail::has_describe_bases<T>;
44
+
45
+ } // namespace describe
46
+ } // namespace boost
47
+
48
+ #endif // !defined(BOOST_DESCRIBE_CXX11)
49
+
50
+ #endif // #ifndef BOOST_DESCRIBE_BASES_HPP_INCLUDED
@@ -0,0 +1,40 @@
1
+ #ifndef BOOST_DESCRIBE_DETAIL_CONFIG_HPP_INCLUDED
2
+ #define BOOST_DESCRIBE_DETAIL_CONFIG_HPP_INCLUDED
3
+
4
+ // Copyright 2021 Peter Dimov
5
+ // Distributed under the Boost Software License, Version 1.0.
6
+ // https://www.boost.org/LICENSE_1_0.txt
7
+
8
+ #if __cplusplus >= 201402L
9
+
10
+ # define BOOST_DESCRIBE_CXX14
11
+ # define BOOST_DESCRIBE_CXX11
12
+
13
+ #elif defined(_MSC_VER) && _MSC_VER >= 1900
14
+
15
+ # define BOOST_DESCRIBE_CXX14
16
+ # define BOOST_DESCRIBE_CXX11
17
+
18
+ #elif __cplusplus >= 201103L
19
+
20
+ # define BOOST_DESCRIBE_CXX11
21
+
22
+ # if defined(__GNUC__) && __GNUC__ == 4 && __GNUC_MINOR__ == 7
23
+ # undef BOOST_DESCRIBE_CXX11
24
+ # endif
25
+
26
+ #endif
27
+
28
+ #if defined(BOOST_DESCRIBE_CXX11)
29
+ # define BOOST_DESCRIBE_CONSTEXPR_OR_CONST constexpr
30
+ #else
31
+ # define BOOST_DESCRIBE_CONSTEXPR_OR_CONST const
32
+ #endif
33
+
34
+ #if defined(__clang__)
35
+ # define BOOST_DESCRIBE_MAYBE_UNUSED __attribute__((unused))
36
+ #else
37
+ # define BOOST_DESCRIBE_MAYBE_UNUSED
38
+ #endif
39
+
40
+ #endif // #ifndef BOOST_DESCRIBE_DETAIL_CONFIG_HPP_INCLUDED
@@ -0,0 +1,30 @@
1
+ #ifndef BOOST_DESCRIBE_DETAIL_CX_STREQ_HPP_INCLUDED
2
+ #define BOOST_DESCRIBE_DETAIL_CX_STREQ_HPP_INCLUDED
3
+
4
+ // Copyright 2021 Peter Dimov
5
+ // Distributed under the Boost Software License, Version 1.0.
6
+ // https://www.boost.org/LICENSE_1_0.txt
7
+
8
+ #include <boost/describe/detail/config.hpp>
9
+
10
+ #if defined(BOOST_DESCRIBE_CXX11)
11
+
12
+ namespace boost
13
+ {
14
+ namespace describe
15
+ {
16
+ namespace detail
17
+ {
18
+
19
+ constexpr bool cx_streq( char const * s1, char const * s2 )
20
+ {
21
+ return s1[0] == s2[0] && ( s1[0] == 0 || cx_streq( s1 + 1, s2 + 1 ) );
22
+ }
23
+
24
+ } // namespace detail
25
+ } // namespace describe
26
+ } // namespace boost
27
+
28
+ #endif // defined(BOOST_DESCRIBE_CXX11)
29
+
30
+ #endif // #ifndef BOOST_DESCRIBE_DETAIL_CX_STREQ_HPP_INCLUDED
@@ -0,0 +1,32 @@
1
+ #ifndef BOOST_DESCRIBE_DETAIL_VOID_T_HPP_INCLUDED
2
+ #define BOOST_DESCRIBE_DETAIL_VOID_T_HPP_INCLUDED
3
+
4
+ // Copyright 2021 Peter Dimov
5
+ // Distributed under the Boost Software License, Version 1.0.
6
+ // https://www.boost.org/LICENSE_1_0.txt
7
+
8
+ #include <boost/describe/detail/config.hpp>
9
+
10
+ #if defined(BOOST_DESCRIBE_CXX11)
11
+
12
+ namespace boost
13
+ {
14
+ namespace describe
15
+ {
16
+ namespace detail
17
+ {
18
+
19
+ template<class...> struct make_void
20
+ {
21
+ using type = void;
22
+ };
23
+
24
+ template<class... T> using void_t = typename make_void<T...>::type;
25
+
26
+ } // namespace detail
27
+ } // namespace describe
28
+ } // namespace boost
29
+
30
+ #endif // defined(BOOST_DESCRIBE_CXX11)
31
+
32
+ #endif // #ifndef BOOST_DESCRIBE_DETAIL_VOID_T_HPP_INCLUDED
@@ -0,0 +1,159 @@
1
+ #ifndef BOOST_DESCRIBE_DATA_MEMBERS_HPP_INCLUDED
2
+ #define BOOST_DESCRIBE_DATA_MEMBERS_HPP_INCLUDED
3
+
4
+ // Copyright 2020 Peter Dimov
5
+ // Distributed under the Boost Software License, Version 1.0.
6
+ // https://www.boost.org/LICENSE_1_0.txt
7
+
8
+ #include <boost/describe/modifiers.hpp>
9
+ #include <boost/describe/bases.hpp>
10
+ #include <boost/describe/detail/void_t.hpp>
11
+ #include <boost/describe/detail/cx_streq.hpp>
12
+ #include <boost/describe/detail/config.hpp>
13
+
14
+ #if defined(BOOST_DESCRIBE_CXX11)
15
+
16
+ #include <boost/mp11/algorithm.hpp>
17
+ #include <boost/mp11/utility.hpp>
18
+ #include <boost/mp11/integral.hpp>
19
+ #include <boost/mp11/list.hpp>
20
+ #include <boost/mp11/bind.hpp>
21
+ #include <type_traits>
22
+
23
+ namespace boost
24
+ {
25
+ namespace describe
26
+ {
27
+ namespace detail
28
+ {
29
+
30
+ // _describe_members<T>
31
+
32
+ template<class T> using _describe_public_members = decltype( boost_public_member_descriptor_fn( static_cast<T**>(0) ) );
33
+ template<class T> using _describe_protected_members = decltype( boost_protected_member_descriptor_fn( static_cast<T**>(0) ) );
34
+ template<class T> using _describe_private_members = decltype( boost_private_member_descriptor_fn( static_cast<T**>(0) ) );
35
+
36
+ template<class T> using _describe_members = mp11::mp_append<_describe_public_members<T>, _describe_protected_members<T>, _describe_private_members<T>>;
37
+
38
+ // describe_inherited_members<T>
39
+
40
+ // T: type
41
+ // V: list of virtual bases visited so far
42
+ template<class T, class V> struct describe_inherited_members_impl;
43
+ template<class T, class V> using describe_inherited_members = typename describe_inherited_members_impl<T, V>::type;
44
+
45
+ // L: list of base class descriptors
46
+ // T: derived type
47
+ // V: list of virtual bases visited so far
48
+ template<class L, class T, class V> struct describe_inherited_members2_impl;
49
+ template<class L, class T, class V> using describe_inherited_members2 = typename describe_inherited_members2_impl<L, T, V>::type;
50
+
51
+ template<class T, class V> struct describe_inherited_members_impl
52
+ {
53
+ using R1 = describe_inherited_members2<describe_bases<T, mod_any_access>, T, V>;
54
+ using R2 = _describe_members<T>;
55
+
56
+ using type = mp11::mp_append<R1, R2>;
57
+ };
58
+
59
+ template<template<class...> class L, class T, class V> struct describe_inherited_members2_impl<L<>, T, V>
60
+ {
61
+ using type = L<>;
62
+ };
63
+
64
+ template<class D1, class D2> using name_matches = mp11::mp_bool< cx_streq( D1::name, D2::name ) >;
65
+
66
+ template<class D, class L> using name_is_hidden = mp11::mp_any_of_q<L, mp11::mp_bind_front<name_matches, D>>;
67
+
68
+ constexpr unsigned cx_max( unsigned m1, unsigned m2 )
69
+ {
70
+ return m1 > m2? m1: m2;
71
+ }
72
+
73
+ template<class T, unsigned Bm> struct update_modifiers
74
+ {
75
+ template<class D> struct fn
76
+ {
77
+ using L = _describe_members<T>;
78
+ static constexpr unsigned hidden = name_is_hidden<D, L>::value? mod_hidden: 0;
79
+
80
+ static constexpr unsigned mods = D::modifiers;
81
+ static constexpr unsigned access = cx_max( mods & mod_any_access, Bm & mod_any_access );
82
+
83
+ static constexpr decltype(D::pointer) pointer = D::pointer;
84
+ static constexpr decltype(D::name) name = D::name;
85
+ static constexpr unsigned modifiers = ( mods & ~mod_any_access ) | access | mod_inherited | hidden;
86
+ };
87
+ };
88
+
89
+ template<class T, unsigned Bm> template<class D> constexpr decltype(D::pointer) update_modifiers<T, Bm>::fn<D>::pointer;
90
+ template<class T, unsigned Bm> template<class D> constexpr decltype(D::name) update_modifiers<T, Bm>::fn<D>::name;
91
+ template<class T, unsigned Bm> template<class D> constexpr unsigned update_modifiers<T, Bm>::fn<D>::modifiers;
92
+
93
+ template<class D> struct gather_virtual_bases_impl;
94
+ template<class D> using gather_virtual_bases = typename gather_virtual_bases_impl<D>::type;
95
+
96
+ template<class D> struct gather_virtual_bases_impl
97
+ {
98
+ using B = typename D::type;
99
+ static constexpr unsigned M = D::modifiers;
100
+
101
+ using R1 = mp11::mp_transform<gather_virtual_bases, describe_bases<B, mod_any_access>>;
102
+ using R2 = mp11::mp_apply<mp11::mp_append, R1>;
103
+
104
+ using type = mp11::mp_if_c<(M & mod_virtual) != 0, mp11::mp_push_front<R2, B>, R2>;
105
+ };
106
+
107
+ template<template<class...> class L, class D1, class... D, class T, class V> struct describe_inherited_members2_impl<L<D1, D...>, T, V>
108
+ {
109
+ using B = typename D1::type;
110
+ static constexpr unsigned M = D1::modifiers;
111
+
112
+ using R1 = mp11::mp_if_c<(M & mod_virtual) && mp11::mp_contains<V, B>::value, L<>, describe_inherited_members<B, V>>;
113
+
114
+ using R2 = mp11::mp_transform_q<update_modifiers<T, M>, R1>;
115
+
116
+ using V2 = mp11::mp_append<V, gather_virtual_bases<D1>>;
117
+ using R3 = describe_inherited_members2<L<D...>, T, V2>;
118
+
119
+ using type = mp11::mp_append<R2, R3>;
120
+ };
121
+
122
+ // describe_members<T, M>
123
+
124
+ template<class T, unsigned M> using describe_members = mp11::mp_eval_if_c<(M & mod_inherited) == 0, _describe_members<T>, describe_inherited_members, T, mp11::mp_list<>>;
125
+
126
+ // member_filter
127
+
128
+ template<unsigned M> struct member_filter
129
+ {
130
+ template<class T> using fn = mp11::mp_bool<
131
+ (M & mod_any_access & T::modifiers) != 0 &&
132
+ ( (M & mod_any_member) != 0 || (M & mod_static) == (T::modifiers & mod_static) ) &&
133
+ ( (M & mod_any_member) != 0 || (M & mod_function) == (T::modifiers & mod_function) ) &&
134
+ (M & mod_hidden) >= (T::modifiers & mod_hidden)
135
+ >;
136
+ };
137
+
138
+ // has_describe_members
139
+
140
+ template<class T, class En = void> struct has_describe_members: std::false_type
141
+ {
142
+ };
143
+
144
+ template<class T> struct has_describe_members<T, void_t<_describe_members<T>>>: std::true_type
145
+ {
146
+ };
147
+
148
+ } // namespace detail
149
+
150
+ template<class T, unsigned M> using describe_members = mp11::mp_copy_if_q<detail::describe_members<T, M>, detail::member_filter<M>>;
151
+
152
+ template<class T> using has_describe_members = detail::has_describe_members<T>;
153
+
154
+ } // namespace describe
155
+ } // namespace boost
156
+
157
+ #endif // !defined(BOOST_DESCRIBE_CXX11)
158
+
159
+ #endif // #ifndef BOOST_DESCRIBE_DATA_MEMBERS_HPP_INCLUDED
@@ -0,0 +1,33 @@
1
+ #ifndef BOOST_DESCRIBE_MODIFIERS_HPP_INCLUDED
2
+ #define BOOST_DESCRIBE_MODIFIERS_HPP_INCLUDED
3
+
4
+ // Copyright 2020 Peter Dimov
5
+ // Distributed under the Boost Software License, Version 1.0.
6
+ // https://www.boost.org/LICENSE_1_0.txt
7
+
8
+ #include <boost/describe/detail/config.hpp>
9
+
10
+ namespace boost
11
+ {
12
+ namespace describe
13
+ {
14
+
15
+ enum modifiers
16
+ {
17
+ mod_public = 1,
18
+ mod_protected = 2,
19
+ mod_private = 4,
20
+ mod_virtual = 8,
21
+ mod_static = 16,
22
+ mod_function = 32,
23
+ mod_any_member = 64,
24
+ mod_inherited = 128,
25
+ mod_hidden = 256
26
+ };
27
+
28
+ BOOST_DESCRIBE_CONSTEXPR_OR_CONST modifiers mod_any_access = static_cast<modifiers>( mod_public | mod_protected | mod_private );
29
+
30
+ } // namespace describe
31
+ } // namespace boost
32
+
33
+ #endif // #ifndef BOOST_DESCRIBE_MODIFIERS_HPP_INCLUDED