cuda-cccl 0.3.3__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of cuda-cccl might be problematic. Click here for more details.

Files changed (1968) hide show
  1. cuda/cccl/__init__.py +27 -0
  2. cuda/cccl/_cuda_version_utils.py +24 -0
  3. cuda/cccl/cooperative/__init__.py +9 -0
  4. cuda/cccl/cooperative/experimental/__init__.py +24 -0
  5. cuda/cccl/headers/__init__.py +7 -0
  6. cuda/cccl/headers/include/__init__.py +1 -0
  7. cuda/cccl/headers/include/cub/agent/agent_adjacent_difference.cuh +259 -0
  8. cuda/cccl/headers/include/cub/agent/agent_batch_memcpy.cuh +1182 -0
  9. cuda/cccl/headers/include/cub/agent/agent_for.cuh +81 -0
  10. cuda/cccl/headers/include/cub/agent/agent_histogram.cuh +709 -0
  11. cuda/cccl/headers/include/cub/agent/agent_merge.cuh +234 -0
  12. cuda/cccl/headers/include/cub/agent/agent_merge_sort.cuh +748 -0
  13. cuda/cccl/headers/include/cub/agent/agent_radix_sort_downsweep.cuh +786 -0
  14. cuda/cccl/headers/include/cub/agent/agent_radix_sort_histogram.cuh +286 -0
  15. cuda/cccl/headers/include/cub/agent/agent_radix_sort_onesweep.cuh +703 -0
  16. cuda/cccl/headers/include/cub/agent/agent_radix_sort_upsweep.cuh +555 -0
  17. cuda/cccl/headers/include/cub/agent/agent_reduce.cuh +619 -0
  18. cuda/cccl/headers/include/cub/agent/agent_reduce_by_key.cuh +806 -0
  19. cuda/cccl/headers/include/cub/agent/agent_rle.cuh +1124 -0
  20. cuda/cccl/headers/include/cub/agent/agent_scan.cuh +589 -0
  21. cuda/cccl/headers/include/cub/agent/agent_scan_by_key.cuh +474 -0
  22. cuda/cccl/headers/include/cub/agent/agent_segmented_radix_sort.cuh +289 -0
  23. cuda/cccl/headers/include/cub/agent/agent_select_if.cuh +1117 -0
  24. cuda/cccl/headers/include/cub/agent/agent_sub_warp_merge_sort.cuh +346 -0
  25. cuda/cccl/headers/include/cub/agent/agent_three_way_partition.cuh +606 -0
  26. cuda/cccl/headers/include/cub/agent/agent_topk.cuh +764 -0
  27. cuda/cccl/headers/include/cub/agent/agent_unique_by_key.cuh +631 -0
  28. cuda/cccl/headers/include/cub/agent/single_pass_scan_operators.cuh +1424 -0
  29. cuda/cccl/headers/include/cub/block/block_adjacent_difference.cuh +963 -0
  30. cuda/cccl/headers/include/cub/block/block_discontinuity.cuh +1227 -0
  31. cuda/cccl/headers/include/cub/block/block_exchange.cuh +1313 -0
  32. cuda/cccl/headers/include/cub/block/block_histogram.cuh +424 -0
  33. cuda/cccl/headers/include/cub/block/block_load.cuh +1264 -0
  34. cuda/cccl/headers/include/cub/block/block_load_to_shared.cuh +432 -0
  35. cuda/cccl/headers/include/cub/block/block_merge_sort.cuh +800 -0
  36. cuda/cccl/headers/include/cub/block/block_radix_rank.cuh +1225 -0
  37. cuda/cccl/headers/include/cub/block/block_radix_sort.cuh +2196 -0
  38. cuda/cccl/headers/include/cub/block/block_raking_layout.cuh +150 -0
  39. cuda/cccl/headers/include/cub/block/block_reduce.cuh +667 -0
  40. cuda/cccl/headers/include/cub/block/block_run_length_decode.cuh +434 -0
  41. cuda/cccl/headers/include/cub/block/block_scan.cuh +2315 -0
  42. cuda/cccl/headers/include/cub/block/block_shuffle.cuh +346 -0
  43. cuda/cccl/headers/include/cub/block/block_store.cuh +1247 -0
  44. cuda/cccl/headers/include/cub/block/radix_rank_sort_operations.cuh +624 -0
  45. cuda/cccl/headers/include/cub/block/specializations/block_histogram_atomic.cuh +86 -0
  46. cuda/cccl/headers/include/cub/block/specializations/block_histogram_sort.cuh +240 -0
  47. cuda/cccl/headers/include/cub/block/specializations/block_reduce_raking.cuh +252 -0
  48. cuda/cccl/headers/include/cub/block/specializations/block_reduce_raking_commutative_only.cuh +238 -0
  49. cuda/cccl/headers/include/cub/block/specializations/block_reduce_warp_reductions.cuh +281 -0
  50. cuda/cccl/headers/include/cub/block/specializations/block_scan_raking.cuh +790 -0
  51. cuda/cccl/headers/include/cub/block/specializations/block_scan_warp_scans.cuh +538 -0
  52. cuda/cccl/headers/include/cub/config.cuh +53 -0
  53. cuda/cccl/headers/include/cub/cub.cuh +120 -0
  54. cuda/cccl/headers/include/cub/detail/array_utils.cuh +78 -0
  55. cuda/cccl/headers/include/cub/detail/choose_offset.cuh +161 -0
  56. cuda/cccl/headers/include/cub/detail/detect_cuda_runtime.cuh +74 -0
  57. cuda/cccl/headers/include/cub/detail/device_double_buffer.cuh +96 -0
  58. cuda/cccl/headers/include/cub/detail/device_memory_resource.cuh +62 -0
  59. cuda/cccl/headers/include/cub/detail/fast_modulo_division.cuh +253 -0
  60. cuda/cccl/headers/include/cub/detail/integer_utils.cuh +88 -0
  61. cuda/cccl/headers/include/cub/detail/launcher/cuda_driver.cuh +142 -0
  62. cuda/cccl/headers/include/cub/detail/launcher/cuda_runtime.cuh +100 -0
  63. cuda/cccl/headers/include/cub/detail/mdspan_utils.cuh +114 -0
  64. cuda/cccl/headers/include/cub/detail/ptx-json/README.md +71 -0
  65. cuda/cccl/headers/include/cub/detail/ptx-json/array.h +68 -0
  66. cuda/cccl/headers/include/cub/detail/ptx-json/json.h +62 -0
  67. cuda/cccl/headers/include/cub/detail/ptx-json/object.h +100 -0
  68. cuda/cccl/headers/include/cub/detail/ptx-json/string.h +53 -0
  69. cuda/cccl/headers/include/cub/detail/ptx-json/value.h +95 -0
  70. cuda/cccl/headers/include/cub/detail/ptx-json-parser.h +63 -0
  71. cuda/cccl/headers/include/cub/detail/rfa.cuh +731 -0
  72. cuda/cccl/headers/include/cub/detail/strong_load.cuh +189 -0
  73. cuda/cccl/headers/include/cub/detail/strong_store.cuh +220 -0
  74. cuda/cccl/headers/include/cub/detail/temporary_storage.cuh +384 -0
  75. cuda/cccl/headers/include/cub/detail/type_traits.cuh +187 -0
  76. cuda/cccl/headers/include/cub/detail/uninitialized_copy.cuh +73 -0
  77. cuda/cccl/headers/include/cub/detail/unsafe_bitcast.cuh +56 -0
  78. cuda/cccl/headers/include/cub/device/device_adjacent_difference.cuh +596 -0
  79. cuda/cccl/headers/include/cub/device/device_copy.cuh +276 -0
  80. cuda/cccl/headers/include/cub/device/device_for.cuh +1063 -0
  81. cuda/cccl/headers/include/cub/device/device_histogram.cuh +1509 -0
  82. cuda/cccl/headers/include/cub/device/device_memcpy.cuh +195 -0
  83. cuda/cccl/headers/include/cub/device/device_merge.cuh +203 -0
  84. cuda/cccl/headers/include/cub/device/device_merge_sort.cuh +979 -0
  85. cuda/cccl/headers/include/cub/device/device_partition.cuh +668 -0
  86. cuda/cccl/headers/include/cub/device/device_radix_sort.cuh +3437 -0
  87. cuda/cccl/headers/include/cub/device/device_reduce.cuh +2518 -0
  88. cuda/cccl/headers/include/cub/device/device_run_length_encode.cuh +370 -0
  89. cuda/cccl/headers/include/cub/device/device_scan.cuh +2212 -0
  90. cuda/cccl/headers/include/cub/device/device_segmented_radix_sort.cuh +1496 -0
  91. cuda/cccl/headers/include/cub/device/device_segmented_reduce.cuh +1430 -0
  92. cuda/cccl/headers/include/cub/device/device_segmented_sort.cuh +2811 -0
  93. cuda/cccl/headers/include/cub/device/device_select.cuh +1228 -0
  94. cuda/cccl/headers/include/cub/device/device_topk.cuh +511 -0
  95. cuda/cccl/headers/include/cub/device/device_transform.cuh +668 -0
  96. cuda/cccl/headers/include/cub/device/dispatch/dispatch_adjacent_difference.cuh +315 -0
  97. cuda/cccl/headers/include/cub/device/dispatch/dispatch_batch_memcpy.cuh +719 -0
  98. cuda/cccl/headers/include/cub/device/dispatch/dispatch_common.cuh +43 -0
  99. cuda/cccl/headers/include/cub/device/dispatch/dispatch_copy_mdspan.cuh +79 -0
  100. cuda/cccl/headers/include/cub/device/dispatch/dispatch_for.cuh +198 -0
  101. cuda/cccl/headers/include/cub/device/dispatch/dispatch_histogram.cuh +1046 -0
  102. cuda/cccl/headers/include/cub/device/dispatch/dispatch_merge.cuh +303 -0
  103. cuda/cccl/headers/include/cub/device/dispatch/dispatch_merge_sort.cuh +473 -0
  104. cuda/cccl/headers/include/cub/device/dispatch/dispatch_radix_sort.cuh +1744 -0
  105. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce.cuh +1310 -0
  106. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_by_key.cuh +655 -0
  107. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_deterministic.cuh +531 -0
  108. cuda/cccl/headers/include/cub/device/dispatch/dispatch_reduce_nondeterministic.cuh +313 -0
  109. cuda/cccl/headers/include/cub/device/dispatch/dispatch_rle.cuh +615 -0
  110. cuda/cccl/headers/include/cub/device/dispatch/dispatch_scan.cuh +517 -0
  111. cuda/cccl/headers/include/cub/device/dispatch/dispatch_scan_by_key.cuh +602 -0
  112. cuda/cccl/headers/include/cub/device/dispatch/dispatch_segmented_sort.cuh +975 -0
  113. cuda/cccl/headers/include/cub/device/dispatch/dispatch_select_if.cuh +842 -0
  114. cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce.cuh +341 -0
  115. cuda/cccl/headers/include/cub/device/dispatch/dispatch_streaming_reduce_by_key.cuh +440 -0
  116. cuda/cccl/headers/include/cub/device/dispatch/dispatch_three_way_partition.cuh +389 -0
  117. cuda/cccl/headers/include/cub/device/dispatch/dispatch_topk.cuh +627 -0
  118. cuda/cccl/headers/include/cub/device/dispatch/dispatch_transform.cuh +569 -0
  119. cuda/cccl/headers/include/cub/device/dispatch/dispatch_unique_by_key.cuh +545 -0
  120. cuda/cccl/headers/include/cub/device/dispatch/kernels/for_each.cuh +261 -0
  121. cuda/cccl/headers/include/cub/device/dispatch/kernels/histogram.cuh +505 -0
  122. cuda/cccl/headers/include/cub/device/dispatch/kernels/merge_sort.cuh +334 -0
  123. cuda/cccl/headers/include/cub/device/dispatch/kernels/radix_sort.cuh +803 -0
  124. cuda/cccl/headers/include/cub/device/dispatch/kernels/reduce.cuh +583 -0
  125. cuda/cccl/headers/include/cub/device/dispatch/kernels/scan.cuh +189 -0
  126. cuda/cccl/headers/include/cub/device/dispatch/kernels/segmented_reduce.cuh +321 -0
  127. cuda/cccl/headers/include/cub/device/dispatch/kernels/segmented_sort.cuh +522 -0
  128. cuda/cccl/headers/include/cub/device/dispatch/kernels/three_way_partition.cuh +201 -0
  129. cuda/cccl/headers/include/cub/device/dispatch/kernels/transform.cuh +1028 -0
  130. cuda/cccl/headers/include/cub/device/dispatch/kernels/unique_by_key.cuh +176 -0
  131. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_adjacent_difference.cuh +67 -0
  132. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_batch_memcpy.cuh +118 -0
  133. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_for.cuh +60 -0
  134. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_histogram.cuh +275 -0
  135. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_merge.cuh +76 -0
  136. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_merge_sort.cuh +126 -0
  137. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_radix_sort.cuh +1065 -0
  138. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_reduce.cuh +493 -0
  139. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_reduce_by_key.cuh +942 -0
  140. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_run_length_encode.cuh +673 -0
  141. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_scan.cuh +618 -0
  142. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_scan_by_key.cuh +1010 -0
  143. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_segmented_sort.cuh +398 -0
  144. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_select_if.cuh +1588 -0
  145. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_three_way_partition.cuh +440 -0
  146. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_topk.cuh +85 -0
  147. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_transform.cuh +481 -0
  148. cuda/cccl/headers/include/cub/device/dispatch/tuning/tuning_unique_by_key.cuh +884 -0
  149. cuda/cccl/headers/include/cub/grid/grid_even_share.cuh +227 -0
  150. cuda/cccl/headers/include/cub/grid/grid_mapping.cuh +106 -0
  151. cuda/cccl/headers/include/cub/grid/grid_queue.cuh +202 -0
  152. cuda/cccl/headers/include/cub/iterator/arg_index_input_iterator.cuh +254 -0
  153. cuda/cccl/headers/include/cub/iterator/cache_modified_input_iterator.cuh +259 -0
  154. cuda/cccl/headers/include/cub/iterator/cache_modified_output_iterator.cuh +250 -0
  155. cuda/cccl/headers/include/cub/iterator/tex_obj_input_iterator.cuh +320 -0
  156. cuda/cccl/headers/include/cub/thread/thread_load.cuh +349 -0
  157. cuda/cccl/headers/include/cub/thread/thread_operators.cuh +688 -0
  158. cuda/cccl/headers/include/cub/thread/thread_reduce.cuh +548 -0
  159. cuda/cccl/headers/include/cub/thread/thread_scan.cuh +498 -0
  160. cuda/cccl/headers/include/cub/thread/thread_search.cuh +199 -0
  161. cuda/cccl/headers/include/cub/thread/thread_simd.cuh +458 -0
  162. cuda/cccl/headers/include/cub/thread/thread_sort.cuh +102 -0
  163. cuda/cccl/headers/include/cub/thread/thread_store.cuh +365 -0
  164. cuda/cccl/headers/include/cub/util_allocator.cuh +921 -0
  165. cuda/cccl/headers/include/cub/util_arch.cuh +167 -0
  166. cuda/cccl/headers/include/cub/util_cpp_dialect.cuh +95 -0
  167. cuda/cccl/headers/include/cub/util_debug.cuh +207 -0
  168. cuda/cccl/headers/include/cub/util_device.cuh +800 -0
  169. cuda/cccl/headers/include/cub/util_macro.cuh +97 -0
  170. cuda/cccl/headers/include/cub/util_math.cuh +118 -0
  171. cuda/cccl/headers/include/cub/util_namespace.cuh +176 -0
  172. cuda/cccl/headers/include/cub/util_policy_wrapper_t.cuh +55 -0
  173. cuda/cccl/headers/include/cub/util_ptx.cuh +513 -0
  174. cuda/cccl/headers/include/cub/util_temporary_storage.cuh +122 -0
  175. cuda/cccl/headers/include/cub/util_type.cuh +1120 -0
  176. cuda/cccl/headers/include/cub/util_vsmem.cuh +253 -0
  177. cuda/cccl/headers/include/cub/version.cuh +89 -0
  178. cuda/cccl/headers/include/cub/warp/specializations/warp_exchange_shfl.cuh +329 -0
  179. cuda/cccl/headers/include/cub/warp/specializations/warp_exchange_smem.cuh +177 -0
  180. cuda/cccl/headers/include/cub/warp/specializations/warp_reduce_shfl.cuh +737 -0
  181. cuda/cccl/headers/include/cub/warp/specializations/warp_reduce_smem.cuh +408 -0
  182. cuda/cccl/headers/include/cub/warp/specializations/warp_scan_shfl.cuh +952 -0
  183. cuda/cccl/headers/include/cub/warp/specializations/warp_scan_smem.cuh +715 -0
  184. cuda/cccl/headers/include/cub/warp/warp_exchange.cuh +405 -0
  185. cuda/cccl/headers/include/cub/warp/warp_load.cuh +614 -0
  186. cuda/cccl/headers/include/cub/warp/warp_merge_sort.cuh +169 -0
  187. cuda/cccl/headers/include/cub/warp/warp_reduce.cuh +829 -0
  188. cuda/cccl/headers/include/cub/warp/warp_scan.cuh +1890 -0
  189. cuda/cccl/headers/include/cub/warp/warp_store.cuh +521 -0
  190. cuda/cccl/headers/include/cub/warp/warp_utils.cuh +61 -0
  191. cuda/cccl/headers/include/cuda/__algorithm/common.h +68 -0
  192. cuda/cccl/headers/include/cuda/__algorithm/copy.h +196 -0
  193. cuda/cccl/headers/include/cuda/__algorithm/fill.h +107 -0
  194. cuda/cccl/headers/include/cuda/__annotated_ptr/access_property.h +165 -0
  195. cuda/cccl/headers/include/cuda/__annotated_ptr/access_property_encoding.h +172 -0
  196. cuda/cccl/headers/include/cuda/__annotated_ptr/annotated_ptr.h +217 -0
  197. cuda/cccl/headers/include/cuda/__annotated_ptr/annotated_ptr_base.h +100 -0
  198. cuda/cccl/headers/include/cuda/__annotated_ptr/apply_access_property.h +83 -0
  199. cuda/cccl/headers/include/cuda/__annotated_ptr/associate_access_property.h +128 -0
  200. cuda/cccl/headers/include/cuda/__annotated_ptr/createpolicy.h +210 -0
  201. cuda/cccl/headers/include/cuda/__atomic/atomic.h +145 -0
  202. cuda/cccl/headers/include/cuda/__barrier/async_contract_fulfillment.h +39 -0
  203. cuda/cccl/headers/include/cuda/__barrier/barrier.h +65 -0
  204. cuda/cccl/headers/include/cuda/__barrier/barrier_arrive_tx.h +102 -0
  205. cuda/cccl/headers/include/cuda/__barrier/barrier_block_scope.h +487 -0
  206. cuda/cccl/headers/include/cuda/__barrier/barrier_expect_tx.h +74 -0
  207. cuda/cccl/headers/include/cuda/__barrier/barrier_native_handle.h +45 -0
  208. cuda/cccl/headers/include/cuda/__barrier/barrier_thread_scope.h +60 -0
  209. cuda/cccl/headers/include/cuda/__bit/bit_reverse.h +171 -0
  210. cuda/cccl/headers/include/cuda/__bit/bitfield.h +122 -0
  211. cuda/cccl/headers/include/cuda/__bit/bitmask.h +90 -0
  212. cuda/cccl/headers/include/cuda/__cccl_config +37 -0
  213. cuda/cccl/headers/include/cuda/__cmath/ceil_div.h +124 -0
  214. cuda/cccl/headers/include/cuda/__cmath/fast_modulo_division.h +178 -0
  215. cuda/cccl/headers/include/cuda/__cmath/ilog.h +195 -0
  216. cuda/cccl/headers/include/cuda/__cmath/ipow.h +107 -0
  217. cuda/cccl/headers/include/cuda/__cmath/isqrt.h +80 -0
  218. cuda/cccl/headers/include/cuda/__cmath/mul_hi.h +146 -0
  219. cuda/cccl/headers/include/cuda/__cmath/neg.h +47 -0
  220. cuda/cccl/headers/include/cuda/__cmath/pow2.h +74 -0
  221. cuda/cccl/headers/include/cuda/__cmath/round_down.h +102 -0
  222. cuda/cccl/headers/include/cuda/__cmath/round_up.h +104 -0
  223. cuda/cccl/headers/include/cuda/__cmath/uabs.h +57 -0
  224. cuda/cccl/headers/include/cuda/__complex/complex.h +238 -0
  225. cuda/cccl/headers/include/cuda/__complex/get_real_imag.h +89 -0
  226. cuda/cccl/headers/include/cuda/__complex/traits.h +64 -0
  227. cuda/cccl/headers/include/cuda/__complex_ +28 -0
  228. cuda/cccl/headers/include/cuda/__device/all_devices.h +140 -0
  229. cuda/cccl/headers/include/cuda/__device/arch_id.h +176 -0
  230. cuda/cccl/headers/include/cuda/__device/arch_traits.h +537 -0
  231. cuda/cccl/headers/include/cuda/__device/attributes.h +772 -0
  232. cuda/cccl/headers/include/cuda/__device/compute_capability.h +171 -0
  233. cuda/cccl/headers/include/cuda/__device/device_ref.h +156 -0
  234. cuda/cccl/headers/include/cuda/__device/physical_device.h +172 -0
  235. cuda/cccl/headers/include/cuda/__driver/driver_api.h +835 -0
  236. cuda/cccl/headers/include/cuda/__event/event.h +171 -0
  237. cuda/cccl/headers/include/cuda/__event/event_ref.h +157 -0
  238. cuda/cccl/headers/include/cuda/__event/timed_event.h +120 -0
  239. cuda/cccl/headers/include/cuda/__execution/determinism.h +91 -0
  240. cuda/cccl/headers/include/cuda/__execution/output_ordering.h +89 -0
  241. cuda/cccl/headers/include/cuda/__execution/require.h +75 -0
  242. cuda/cccl/headers/include/cuda/__execution/tune.h +70 -0
  243. cuda/cccl/headers/include/cuda/__functional/address_stability.h +131 -0
  244. cuda/cccl/headers/include/cuda/__functional/for_each_canceled.h +321 -0
  245. cuda/cccl/headers/include/cuda/__functional/maximum.h +58 -0
  246. cuda/cccl/headers/include/cuda/__functional/minimum.h +58 -0
  247. cuda/cccl/headers/include/cuda/__functional/proclaim_return_type.h +108 -0
  248. cuda/cccl/headers/include/cuda/__fwd/barrier.h +38 -0
  249. cuda/cccl/headers/include/cuda/__fwd/barrier_native_handle.h +42 -0
  250. cuda/cccl/headers/include/cuda/__fwd/complex.h +48 -0
  251. cuda/cccl/headers/include/cuda/__fwd/devices.h +44 -0
  252. cuda/cccl/headers/include/cuda/__fwd/get_stream.h +38 -0
  253. cuda/cccl/headers/include/cuda/__fwd/pipeline.h +37 -0
  254. cuda/cccl/headers/include/cuda/__fwd/zip_iterator.h +58 -0
  255. cuda/cccl/headers/include/cuda/__iterator/constant_iterator.h +315 -0
  256. cuda/cccl/headers/include/cuda/__iterator/counting_iterator.h +483 -0
  257. cuda/cccl/headers/include/cuda/__iterator/discard_iterator.h +324 -0
  258. cuda/cccl/headers/include/cuda/__iterator/permutation_iterator.h +456 -0
  259. cuda/cccl/headers/include/cuda/__iterator/shuffle_iterator.h +334 -0
  260. cuda/cccl/headers/include/cuda/__iterator/strided_iterator.h +418 -0
  261. cuda/cccl/headers/include/cuda/__iterator/tabulate_output_iterator.h +367 -0
  262. cuda/cccl/headers/include/cuda/__iterator/transform_input_output_iterator.h +528 -0
  263. cuda/cccl/headers/include/cuda/__iterator/transform_iterator.h +527 -0
  264. cuda/cccl/headers/include/cuda/__iterator/transform_output_iterator.h +486 -0
  265. cuda/cccl/headers/include/cuda/__iterator/zip_common.h +148 -0
  266. cuda/cccl/headers/include/cuda/__iterator/zip_function.h +112 -0
  267. cuda/cccl/headers/include/cuda/__iterator/zip_iterator.h +557 -0
  268. cuda/cccl/headers/include/cuda/__iterator/zip_transform_iterator.h +592 -0
  269. cuda/cccl/headers/include/cuda/__latch/latch.h +44 -0
  270. cuda/cccl/headers/include/cuda/__mdspan/host_device_accessor.h +533 -0
  271. cuda/cccl/headers/include/cuda/__mdspan/host_device_mdspan.h +238 -0
  272. cuda/cccl/headers/include/cuda/__mdspan/restrict_accessor.h +152 -0
  273. cuda/cccl/headers/include/cuda/__mdspan/restrict_mdspan.h +117 -0
  274. cuda/cccl/headers/include/cuda/__memcpy_async/check_preconditions.h +79 -0
  275. cuda/cccl/headers/include/cuda/__memcpy_async/completion_mechanism.h +47 -0
  276. cuda/cccl/headers/include/cuda/__memcpy_async/cp_async_bulk_shared_global.h +60 -0
  277. cuda/cccl/headers/include/cuda/__memcpy_async/cp_async_fallback.h +72 -0
  278. cuda/cccl/headers/include/cuda/__memcpy_async/cp_async_shared_global.h +148 -0
  279. cuda/cccl/headers/include/cuda/__memcpy_async/dispatch_memcpy_async.h +165 -0
  280. cuda/cccl/headers/include/cuda/__memcpy_async/is_local_smem_barrier.h +53 -0
  281. cuda/cccl/headers/include/cuda/__memcpy_async/memcpy_async.h +179 -0
  282. cuda/cccl/headers/include/cuda/__memcpy_async/memcpy_async_barrier.h +99 -0
  283. cuda/cccl/headers/include/cuda/__memcpy_async/memcpy_async_tx.h +104 -0
  284. cuda/cccl/headers/include/cuda/__memcpy_async/memcpy_completion.h +170 -0
  285. cuda/cccl/headers/include/cuda/__memcpy_async/try_get_barrier_handle.h +59 -0
  286. cuda/cccl/headers/include/cuda/__memory/address_space.h +227 -0
  287. cuda/cccl/headers/include/cuda/__memory/align_down.h +56 -0
  288. cuda/cccl/headers/include/cuda/__memory/align_up.h +56 -0
  289. cuda/cccl/headers/include/cuda/__memory/aligned_size.h +61 -0
  290. cuda/cccl/headers/include/cuda/__memory/check_address.h +111 -0
  291. cuda/cccl/headers/include/cuda/__memory/discard_memory.h +64 -0
  292. cuda/cccl/headers/include/cuda/__memory/get_device_address.h +58 -0
  293. cuda/cccl/headers/include/cuda/__memory/is_aligned.h +47 -0
  294. cuda/cccl/headers/include/cuda/__memory/ptr_in_range.h +93 -0
  295. cuda/cccl/headers/include/cuda/__memory/ptr_rebind.h +75 -0
  296. cuda/cccl/headers/include/cuda/__memory_resource/get_memory_resource.h +82 -0
  297. cuda/cccl/headers/include/cuda/__memory_resource/get_property.h +153 -0
  298. cuda/cccl/headers/include/cuda/__memory_resource/properties.h +113 -0
  299. cuda/cccl/headers/include/cuda/__memory_resource/resource.h +125 -0
  300. cuda/cccl/headers/include/cuda/__memory_resource/resource_ref.h +652 -0
  301. cuda/cccl/headers/include/cuda/__numeric/add_overflow.h +306 -0
  302. cuda/cccl/headers/include/cuda/__numeric/narrow.h +108 -0
  303. cuda/cccl/headers/include/cuda/__numeric/overflow_cast.h +59 -0
  304. cuda/cccl/headers/include/cuda/__numeric/overflow_result.h +43 -0
  305. cuda/cccl/headers/include/cuda/__nvtx/nvtx.h +120 -0
  306. cuda/cccl/headers/include/cuda/__nvtx/nvtx3.h +2983 -0
  307. cuda/cccl/headers/include/cuda/__ptx/instructions/barrier_cluster.h +43 -0
  308. cuda/cccl/headers/include/cuda/__ptx/instructions/bfind.h +41 -0
  309. cuda/cccl/headers/include/cuda/__ptx/instructions/bmsk.h +41 -0
  310. cuda/cccl/headers/include/cuda/__ptx/instructions/clusterlaunchcontrol.h +41 -0
  311. cuda/cccl/headers/include/cuda/__ptx/instructions/cp_async_bulk.h +44 -0
  312. cuda/cccl/headers/include/cuda/__ptx/instructions/cp_async_bulk_commit_group.h +43 -0
  313. cuda/cccl/headers/include/cuda/__ptx/instructions/cp_async_bulk_tensor.h +45 -0
  314. cuda/cccl/headers/include/cuda/__ptx/instructions/cp_async_bulk_wait_group.h +43 -0
  315. cuda/cccl/headers/include/cuda/__ptx/instructions/cp_async_mbarrier_arrive.h +42 -0
  316. cuda/cccl/headers/include/cuda/__ptx/instructions/cp_reduce_async_bulk.h +60 -0
  317. cuda/cccl/headers/include/cuda/__ptx/instructions/cp_reduce_async_bulk_tensor.h +43 -0
  318. cuda/cccl/headers/include/cuda/__ptx/instructions/elect_sync.h +41 -0
  319. cuda/cccl/headers/include/cuda/__ptx/instructions/exit.h +41 -0
  320. cuda/cccl/headers/include/cuda/__ptx/instructions/fence.h +49 -0
  321. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/barrier_cluster.h +115 -0
  322. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/bfind.h +190 -0
  323. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/bmsk.h +54 -0
  324. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/clusterlaunchcontrol.h +242 -0
  325. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_bulk.h +197 -0
  326. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_bulk_commit_group.h +25 -0
  327. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_bulk_multicast.h +54 -0
  328. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_bulk_tensor.h +997 -0
  329. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_bulk_tensor_gather_scatter.h +318 -0
  330. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_bulk_tensor_multicast.h +671 -0
  331. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_bulk_wait_group.h +46 -0
  332. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_mbarrier_arrive.h +26 -0
  333. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_async_mbarrier_arrive_noinc.h +26 -0
  334. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_reduce_async_bulk.h +1470 -0
  335. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_reduce_async_bulk_bf16.h +132 -0
  336. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_reduce_async_bulk_f16.h +132 -0
  337. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/cp_reduce_async_bulk_tensor.h +601 -0
  338. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/elect_sync.h +36 -0
  339. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/exit.h +25 -0
  340. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/fence.h +208 -0
  341. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/fence_mbarrier_init.h +31 -0
  342. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/fence_proxy_alias.h +25 -0
  343. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/fence_proxy_async.h +58 -0
  344. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/fence_proxy_async_generic_sync_restrict.h +64 -0
  345. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/fence_proxy_tensormap_generic.h +102 -0
  346. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/fence_sync_restrict.h +64 -0
  347. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/get_sreg.h +949 -0
  348. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/getctarank.h +32 -0
  349. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/ld.h +5542 -0
  350. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_arrive.h +399 -0
  351. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_arrive_expect_tx.h +184 -0
  352. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_arrive_no_complete.h +34 -0
  353. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_expect_tx.h +102 -0
  354. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_init.h +27 -0
  355. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_test_wait.h +143 -0
  356. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_test_wait_parity.h +144 -0
  357. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_try_wait.h +286 -0
  358. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/mbarrier_try_wait_parity.h +290 -0
  359. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/multimem_ld_reduce.h +2202 -0
  360. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/multimem_red.h +1362 -0
  361. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/multimem_st.h +236 -0
  362. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/prmt.h +230 -0
  363. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/red_async.h +460 -0
  364. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/shl.h +96 -0
  365. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/shr.h +168 -0
  366. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/st.h +1490 -0
  367. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/st_async.h +123 -0
  368. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/st_bulk.h +31 -0
  369. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_alloc.h +132 -0
  370. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_commit.h +99 -0
  371. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_cp.h +765 -0
  372. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_fence.h +58 -0
  373. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_ld.h +4927 -0
  374. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_mma.h +4291 -0
  375. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_mma_ws.h +7110 -0
  376. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_shift.h +42 -0
  377. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_st.h +5063 -0
  378. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tcgen05_wait.h +56 -0
  379. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tensormap_cp_fenceproxy.h +71 -0
  380. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/tensormap_replace.h +1030 -0
  381. cuda/cccl/headers/include/cuda/__ptx/instructions/generated/trap.h +25 -0
  382. cuda/cccl/headers/include/cuda/__ptx/instructions/get_sreg.h +43 -0
  383. cuda/cccl/headers/include/cuda/__ptx/instructions/getctarank.h +43 -0
  384. cuda/cccl/headers/include/cuda/__ptx/instructions/ld.h +41 -0
  385. cuda/cccl/headers/include/cuda/__ptx/instructions/mbarrier_arrive.h +45 -0
  386. cuda/cccl/headers/include/cuda/__ptx/instructions/mbarrier_expect_tx.h +41 -0
  387. cuda/cccl/headers/include/cuda/__ptx/instructions/mbarrier_init.h +43 -0
  388. cuda/cccl/headers/include/cuda/__ptx/instructions/mbarrier_wait.h +46 -0
  389. cuda/cccl/headers/include/cuda/__ptx/instructions/multimem_ld_reduce.h +41 -0
  390. cuda/cccl/headers/include/cuda/__ptx/instructions/multimem_red.h +41 -0
  391. cuda/cccl/headers/include/cuda/__ptx/instructions/multimem_st.h +41 -0
  392. cuda/cccl/headers/include/cuda/__ptx/instructions/prmt.h +41 -0
  393. cuda/cccl/headers/include/cuda/__ptx/instructions/red_async.h +43 -0
  394. cuda/cccl/headers/include/cuda/__ptx/instructions/shfl_sync.h +244 -0
  395. cuda/cccl/headers/include/cuda/__ptx/instructions/shl.h +41 -0
  396. cuda/cccl/headers/include/cuda/__ptx/instructions/shr.h +41 -0
  397. cuda/cccl/headers/include/cuda/__ptx/instructions/st.h +41 -0
  398. cuda/cccl/headers/include/cuda/__ptx/instructions/st_async.h +43 -0
  399. cuda/cccl/headers/include/cuda/__ptx/instructions/st_bulk.h +41 -0
  400. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_alloc.h +41 -0
  401. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_commit.h +41 -0
  402. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_cp.h +41 -0
  403. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_fence.h +41 -0
  404. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_ld.h +41 -0
  405. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_mma.h +41 -0
  406. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_mma_ws.h +41 -0
  407. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_shift.h +41 -0
  408. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_st.h +41 -0
  409. cuda/cccl/headers/include/cuda/__ptx/instructions/tcgen05_wait.h +41 -0
  410. cuda/cccl/headers/include/cuda/__ptx/instructions/tensormap_cp_fenceproxy.h +43 -0
  411. cuda/cccl/headers/include/cuda/__ptx/instructions/tensormap_replace.h +43 -0
  412. cuda/cccl/headers/include/cuda/__ptx/instructions/trap.h +41 -0
  413. cuda/cccl/headers/include/cuda/__ptx/pragmas/enable_smem_spilling.h +47 -0
  414. cuda/cccl/headers/include/cuda/__ptx/ptx_dot_variants.h +230 -0
  415. cuda/cccl/headers/include/cuda/__ptx/ptx_helper_functions.h +176 -0
  416. cuda/cccl/headers/include/cuda/__random/feistel_bijection.h +105 -0
  417. cuda/cccl/headers/include/cuda/__random/random_bijection.h +88 -0
  418. cuda/cccl/headers/include/cuda/__runtime/ensure_current_context.h +99 -0
  419. cuda/cccl/headers/include/cuda/__runtime/types.h +41 -0
  420. cuda/cccl/headers/include/cuda/__semaphore/counting_semaphore.h +53 -0
  421. cuda/cccl/headers/include/cuda/__stream/get_stream.h +110 -0
  422. cuda/cccl/headers/include/cuda/__stream/stream.h +141 -0
  423. cuda/cccl/headers/include/cuda/__stream/stream_ref.h +303 -0
  424. cuda/cccl/headers/include/cuda/__type_traits/is_floating_point.h +47 -0
  425. cuda/cccl/headers/include/cuda/__type_traits/is_specialization_of.h +37 -0
  426. cuda/cccl/headers/include/cuda/__utility/__basic_any/access.h +88 -0
  427. cuda/cccl/headers/include/cuda/__utility/__basic_any/any_cast.h +83 -0
  428. cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_base.h +148 -0
  429. cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_from.h +96 -0
  430. cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_fwd.h +128 -0
  431. cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_ptr.h +304 -0
  432. cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_ref.h +337 -0
  433. cuda/cccl/headers/include/cuda/__utility/__basic_any/basic_any_value.h +590 -0
  434. cuda/cccl/headers/include/cuda/__utility/__basic_any/conversions.h +169 -0
  435. cuda/cccl/headers/include/cuda/__utility/__basic_any/dynamic_any_cast.h +107 -0
  436. cuda/cccl/headers/include/cuda/__utility/__basic_any/interfaces.h +359 -0
  437. cuda/cccl/headers/include/cuda/__utility/__basic_any/iset.h +142 -0
  438. cuda/cccl/headers/include/cuda/__utility/__basic_any/overrides.h +64 -0
  439. cuda/cccl/headers/include/cuda/__utility/__basic_any/rtti.h +257 -0
  440. cuda/cccl/headers/include/cuda/__utility/__basic_any/semiregular.h +322 -0
  441. cuda/cccl/headers/include/cuda/__utility/__basic_any/storage.h +79 -0
  442. cuda/cccl/headers/include/cuda/__utility/__basic_any/tagged_ptr.h +58 -0
  443. cuda/cccl/headers/include/cuda/__utility/__basic_any/virtcall.h +162 -0
  444. cuda/cccl/headers/include/cuda/__utility/__basic_any/virtual_functions.h +184 -0
  445. cuda/cccl/headers/include/cuda/__utility/__basic_any/virtual_ptrs.h +80 -0
  446. cuda/cccl/headers/include/cuda/__utility/__basic_any/virtual_tables.h +155 -0
  447. cuda/cccl/headers/include/cuda/__utility/basic_any.h +507 -0
  448. cuda/cccl/headers/include/cuda/__utility/immovable.h +50 -0
  449. cuda/cccl/headers/include/cuda/__utility/in_range.h +65 -0
  450. cuda/cccl/headers/include/cuda/__utility/inherit.h +36 -0
  451. cuda/cccl/headers/include/cuda/__utility/no_init.h +29 -0
  452. cuda/cccl/headers/include/cuda/__utility/static_for.h +79 -0
  453. cuda/cccl/headers/include/cuda/__warp/lane_mask.h +326 -0
  454. cuda/cccl/headers/include/cuda/__warp/warp_match_all.h +65 -0
  455. cuda/cccl/headers/include/cuda/__warp/warp_shuffle.h +251 -0
  456. cuda/cccl/headers/include/cuda/access_property +26 -0
  457. cuda/cccl/headers/include/cuda/algorithm +27 -0
  458. cuda/cccl/headers/include/cuda/annotated_ptr +29 -0
  459. cuda/cccl/headers/include/cuda/atomic +27 -0
  460. cuda/cccl/headers/include/cuda/barrier +267 -0
  461. cuda/cccl/headers/include/cuda/bit +29 -0
  462. cuda/cccl/headers/include/cuda/cmath +37 -0
  463. cuda/cccl/headers/include/cuda/devices +33 -0
  464. cuda/cccl/headers/include/cuda/discard_memory +32 -0
  465. cuda/cccl/headers/include/cuda/functional +32 -0
  466. cuda/cccl/headers/include/cuda/iterator +39 -0
  467. cuda/cccl/headers/include/cuda/latch +27 -0
  468. cuda/cccl/headers/include/cuda/mdspan +28 -0
  469. cuda/cccl/headers/include/cuda/memory +35 -0
  470. cuda/cccl/headers/include/cuda/memory_resource +35 -0
  471. cuda/cccl/headers/include/cuda/numeric +29 -0
  472. cuda/cccl/headers/include/cuda/pipeline +579 -0
  473. cuda/cccl/headers/include/cuda/ptx +129 -0
  474. cuda/cccl/headers/include/cuda/semaphore +31 -0
  475. cuda/cccl/headers/include/cuda/std/__algorithm/adjacent_find.h +59 -0
  476. cuda/cccl/headers/include/cuda/std/__algorithm/all_of.h +45 -0
  477. cuda/cccl/headers/include/cuda/std/__algorithm/any_of.h +45 -0
  478. cuda/cccl/headers/include/cuda/std/__algorithm/binary_search.h +53 -0
  479. cuda/cccl/headers/include/cuda/std/__algorithm/clamp.h +48 -0
  480. cuda/cccl/headers/include/cuda/std/__algorithm/comp.h +58 -0
  481. cuda/cccl/headers/include/cuda/std/__algorithm/comp_ref_type.h +85 -0
  482. cuda/cccl/headers/include/cuda/std/__algorithm/copy.h +142 -0
  483. cuda/cccl/headers/include/cuda/std/__algorithm/copy_backward.h +80 -0
  484. cuda/cccl/headers/include/cuda/std/__algorithm/copy_if.h +47 -0
  485. cuda/cccl/headers/include/cuda/std/__algorithm/copy_n.h +73 -0
  486. cuda/cccl/headers/include/cuda/std/__algorithm/count.h +49 -0
  487. cuda/cccl/headers/include/cuda/std/__algorithm/count_if.h +49 -0
  488. cuda/cccl/headers/include/cuda/std/__algorithm/equal.h +128 -0
  489. cuda/cccl/headers/include/cuda/std/__algorithm/equal_range.h +101 -0
  490. cuda/cccl/headers/include/cuda/std/__algorithm/fill.h +58 -0
  491. cuda/cccl/headers/include/cuda/std/__algorithm/fill_n.h +51 -0
  492. cuda/cccl/headers/include/cuda/std/__algorithm/find.h +62 -0
  493. cuda/cccl/headers/include/cuda/std/__algorithm/find_end.h +225 -0
  494. cuda/cccl/headers/include/cuda/std/__algorithm/find_first_of.h +73 -0
  495. cuda/cccl/headers/include/cuda/std/__algorithm/find_if.h +46 -0
  496. cuda/cccl/headers/include/cuda/std/__algorithm/find_if_not.h +46 -0
  497. cuda/cccl/headers/include/cuda/std/__algorithm/for_each.h +42 -0
  498. cuda/cccl/headers/include/cuda/std/__algorithm/for_each_n.h +48 -0
  499. cuda/cccl/headers/include/cuda/std/__algorithm/generate.h +41 -0
  500. cuda/cccl/headers/include/cuda/std/__algorithm/generate_n.h +46 -0
  501. cuda/cccl/headers/include/cuda/std/__algorithm/half_positive.h +49 -0
  502. cuda/cccl/headers/include/cuda/std/__algorithm/in_fun_result.h +55 -0
  503. cuda/cccl/headers/include/cuda/std/__algorithm/includes.h +90 -0
  504. cuda/cccl/headers/include/cuda/std/__algorithm/is_heap.h +50 -0
  505. cuda/cccl/headers/include/cuda/std/__algorithm/is_heap_until.h +83 -0
  506. cuda/cccl/headers/include/cuda/std/__algorithm/is_partitioned.h +57 -0
  507. cuda/cccl/headers/include/cuda/std/__algorithm/is_permutation.h +252 -0
  508. cuda/cccl/headers/include/cuda/std/__algorithm/is_sorted.h +49 -0
  509. cuda/cccl/headers/include/cuda/std/__algorithm/is_sorted_until.h +68 -0
  510. cuda/cccl/headers/include/cuda/std/__algorithm/iter_swap.h +82 -0
  511. cuda/cccl/headers/include/cuda/std/__algorithm/iterator_operations.h +185 -0
  512. cuda/cccl/headers/include/cuda/std/__algorithm/lexicographical_compare.h +68 -0
  513. cuda/cccl/headers/include/cuda/std/__algorithm/lower_bound.h +82 -0
  514. cuda/cccl/headers/include/cuda/std/__algorithm/make_heap.h +70 -0
  515. cuda/cccl/headers/include/cuda/std/__algorithm/make_projected.h +88 -0
  516. cuda/cccl/headers/include/cuda/std/__algorithm/max.h +62 -0
  517. cuda/cccl/headers/include/cuda/std/__algorithm/max_element.h +67 -0
  518. cuda/cccl/headers/include/cuda/std/__algorithm/merge.h +89 -0
  519. cuda/cccl/headers/include/cuda/std/__algorithm/min.h +62 -0
  520. cuda/cccl/headers/include/cuda/std/__algorithm/min_element.h +87 -0
  521. cuda/cccl/headers/include/cuda/std/__algorithm/minmax.h +66 -0
  522. cuda/cccl/headers/include/cuda/std/__algorithm/minmax_element.h +139 -0
  523. cuda/cccl/headers/include/cuda/std/__algorithm/mismatch.h +83 -0
  524. cuda/cccl/headers/include/cuda/std/__algorithm/move.h +86 -0
  525. cuda/cccl/headers/include/cuda/std/__algorithm/move_backward.h +84 -0
  526. cuda/cccl/headers/include/cuda/std/__algorithm/next_permutation.h +88 -0
  527. cuda/cccl/headers/include/cuda/std/__algorithm/none_of.h +45 -0
  528. cuda/cccl/headers/include/cuda/std/__algorithm/partial_sort.h +102 -0
  529. cuda/cccl/headers/include/cuda/std/__algorithm/partial_sort_copy.h +122 -0
  530. cuda/cccl/headers/include/cuda/std/__algorithm/partition.h +120 -0
  531. cuda/cccl/headers/include/cuda/std/__algorithm/partition_copy.h +59 -0
  532. cuda/cccl/headers/include/cuda/std/__algorithm/partition_point.h +61 -0
  533. cuda/cccl/headers/include/cuda/std/__algorithm/pop_heap.h +93 -0
  534. cuda/cccl/headers/include/cuda/std/__algorithm/prev_permutation.h +88 -0
  535. cuda/cccl/headers/include/cuda/std/__algorithm/push_heap.h +100 -0
  536. cuda/cccl/headers/include/cuda/std/__algorithm/ranges_for_each.h +84 -0
  537. cuda/cccl/headers/include/cuda/std/__algorithm/ranges_for_each_n.h +68 -0
  538. cuda/cccl/headers/include/cuda/std/__algorithm/ranges_iterator_concept.h +65 -0
  539. cuda/cccl/headers/include/cuda/std/__algorithm/ranges_min.h +98 -0
  540. cuda/cccl/headers/include/cuda/std/__algorithm/ranges_min_element.h +68 -0
  541. cuda/cccl/headers/include/cuda/std/__algorithm/remove.h +55 -0
  542. cuda/cccl/headers/include/cuda/std/__algorithm/remove_copy.h +47 -0
  543. cuda/cccl/headers/include/cuda/std/__algorithm/remove_copy_if.h +47 -0
  544. cuda/cccl/headers/include/cuda/std/__algorithm/remove_if.h +56 -0
  545. cuda/cccl/headers/include/cuda/std/__algorithm/replace.h +45 -0
  546. cuda/cccl/headers/include/cuda/std/__algorithm/replace_copy.h +54 -0
  547. cuda/cccl/headers/include/cuda/std/__algorithm/replace_copy_if.h +50 -0
  548. cuda/cccl/headers/include/cuda/std/__algorithm/replace_if.h +45 -0
  549. cuda/cccl/headers/include/cuda/std/__algorithm/reverse.h +81 -0
  550. cuda/cccl/headers/include/cuda/std/__algorithm/reverse_copy.h +43 -0
  551. cuda/cccl/headers/include/cuda/std/__algorithm/rotate.h +261 -0
  552. cuda/cccl/headers/include/cuda/std/__algorithm/rotate_copy.h +40 -0
  553. cuda/cccl/headers/include/cuda/std/__algorithm/search.h +185 -0
  554. cuda/cccl/headers/include/cuda/std/__algorithm/search_n.h +163 -0
  555. cuda/cccl/headers/include/cuda/std/__algorithm/set_difference.h +95 -0
  556. cuda/cccl/headers/include/cuda/std/__algorithm/set_intersection.h +122 -0
  557. cuda/cccl/headers/include/cuda/std/__algorithm/set_symmetric_difference.h +134 -0
  558. cuda/cccl/headers/include/cuda/std/__algorithm/set_union.h +128 -0
  559. cuda/cccl/headers/include/cuda/std/__algorithm/shift_left.h +84 -0
  560. cuda/cccl/headers/include/cuda/std/__algorithm/shift_right.h +144 -0
  561. cuda/cccl/headers/include/cuda/std/__algorithm/sift_down.h +139 -0
  562. cuda/cccl/headers/include/cuda/std/__algorithm/sort_heap.h +70 -0
  563. cuda/cccl/headers/include/cuda/std/__algorithm/swap_ranges.h +78 -0
  564. cuda/cccl/headers/include/cuda/std/__algorithm/transform.h +59 -0
  565. cuda/cccl/headers/include/cuda/std/__algorithm/unique.h +76 -0
  566. cuda/cccl/headers/include/cuda/std/__algorithm/unique_copy.h +155 -0
  567. cuda/cccl/headers/include/cuda/std/__algorithm/unwrap_iter.h +95 -0
  568. cuda/cccl/headers/include/cuda/std/__algorithm/unwrap_range.h +126 -0
  569. cuda/cccl/headers/include/cuda/std/__algorithm/upper_bound.h +83 -0
  570. cuda/cccl/headers/include/cuda/std/__algorithm_ +26 -0
  571. cuda/cccl/headers/include/cuda/std/__atomic/api/common.h +192 -0
  572. cuda/cccl/headers/include/cuda/std/__atomic/api/owned.h +136 -0
  573. cuda/cccl/headers/include/cuda/std/__atomic/api/reference.h +118 -0
  574. cuda/cccl/headers/include/cuda/std/__atomic/functions/common.h +58 -0
  575. cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_local.h +208 -0
  576. cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_derived.h +401 -0
  577. cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_generated.h +3971 -0
  578. cuda/cccl/headers/include/cuda/std/__atomic/functions/cuda_ptx_generated_helper.h +177 -0
  579. cuda/cccl/headers/include/cuda/std/__atomic/functions/host.h +211 -0
  580. cuda/cccl/headers/include/cuda/std/__atomic/functions.h +33 -0
  581. cuda/cccl/headers/include/cuda/std/__atomic/order.h +159 -0
  582. cuda/cccl/headers/include/cuda/std/__atomic/platform/msvc_to_builtins.h +654 -0
  583. cuda/cccl/headers/include/cuda/std/__atomic/platform.h +93 -0
  584. cuda/cccl/headers/include/cuda/std/__atomic/scopes.h +105 -0
  585. cuda/cccl/headers/include/cuda/std/__atomic/types/base.h +249 -0
  586. cuda/cccl/headers/include/cuda/std/__atomic/types/common.h +104 -0
  587. cuda/cccl/headers/include/cuda/std/__atomic/types/locked.h +225 -0
  588. cuda/cccl/headers/include/cuda/std/__atomic/types/reference.h +72 -0
  589. cuda/cccl/headers/include/cuda/std/__atomic/types/small.h +228 -0
  590. cuda/cccl/headers/include/cuda/std/__atomic/types.h +52 -0
  591. cuda/cccl/headers/include/cuda/std/__atomic/wait/notify_wait.h +95 -0
  592. cuda/cccl/headers/include/cuda/std/__atomic/wait/polling.h +65 -0
  593. cuda/cccl/headers/include/cuda/std/__barrier/barrier.h +227 -0
  594. cuda/cccl/headers/include/cuda/std/__barrier/empty_completion.h +37 -0
  595. cuda/cccl/headers/include/cuda/std/__barrier/poll_tester.h +82 -0
  596. cuda/cccl/headers/include/cuda/std/__bit/bit_cast.h +76 -0
  597. cuda/cccl/headers/include/cuda/std/__bit/byteswap.h +185 -0
  598. cuda/cccl/headers/include/cuda/std/__bit/countl.h +174 -0
  599. cuda/cccl/headers/include/cuda/std/__bit/countr.h +185 -0
  600. cuda/cccl/headers/include/cuda/std/__bit/endian.h +39 -0
  601. cuda/cccl/headers/include/cuda/std/__bit/has_single_bit.h +43 -0
  602. cuda/cccl/headers/include/cuda/std/__bit/integral.h +126 -0
  603. cuda/cccl/headers/include/cuda/std/__bit/popcount.h +154 -0
  604. cuda/cccl/headers/include/cuda/std/__bit/reference.h +1272 -0
  605. cuda/cccl/headers/include/cuda/std/__bit/rotate.h +94 -0
  606. cuda/cccl/headers/include/cuda/std/__cccl/algorithm_wrapper.h +36 -0
  607. cuda/cccl/headers/include/cuda/std/__cccl/architecture.h +78 -0
  608. cuda/cccl/headers/include/cuda/std/__cccl/assert.h +161 -0
  609. cuda/cccl/headers/include/cuda/std/__cccl/attributes.h +206 -0
  610. cuda/cccl/headers/include/cuda/std/__cccl/builtin.h +673 -0
  611. cuda/cccl/headers/include/cuda/std/__cccl/compiler.h +217 -0
  612. cuda/cccl/headers/include/cuda/std/__cccl/cuda_capabilities.h +51 -0
  613. cuda/cccl/headers/include/cuda/std/__cccl/cuda_toolkit.h +56 -0
  614. cuda/cccl/headers/include/cuda/std/__cccl/deprecated.h +88 -0
  615. cuda/cccl/headers/include/cuda/std/__cccl/diagnostic.h +131 -0
  616. cuda/cccl/headers/include/cuda/std/__cccl/dialect.h +123 -0
  617. cuda/cccl/headers/include/cuda/std/__cccl/epilogue.h +344 -0
  618. cuda/cccl/headers/include/cuda/std/__cccl/exceptions.h +91 -0
  619. cuda/cccl/headers/include/cuda/std/__cccl/execution_space.h +74 -0
  620. cuda/cccl/headers/include/cuda/std/__cccl/extended_data_types.h +160 -0
  621. cuda/cccl/headers/include/cuda/std/__cccl/host_std_lib.h +52 -0
  622. cuda/cccl/headers/include/cuda/std/__cccl/is_non_narrowing_convertible.h +73 -0
  623. cuda/cccl/headers/include/cuda/std/__cccl/memory_wrapper.h +36 -0
  624. cuda/cccl/headers/include/cuda/std/__cccl/numeric_wrapper.h +36 -0
  625. cuda/cccl/headers/include/cuda/std/__cccl/os.h +54 -0
  626. cuda/cccl/headers/include/cuda/std/__cccl/preprocessor.h +1286 -0
  627. cuda/cccl/headers/include/cuda/std/__cccl/prologue.h +281 -0
  628. cuda/cccl/headers/include/cuda/std/__cccl/ptx_isa.h +253 -0
  629. cuda/cccl/headers/include/cuda/std/__cccl/rtti.h +72 -0
  630. cuda/cccl/headers/include/cuda/std/__cccl/sequence_access.h +87 -0
  631. cuda/cccl/headers/include/cuda/std/__cccl/system_header.h +38 -0
  632. cuda/cccl/headers/include/cuda/std/__cccl/unreachable.h +31 -0
  633. cuda/cccl/headers/include/cuda/std/__cccl/version.h +26 -0
  634. cuda/cccl/headers/include/cuda/std/__cccl/visibility.h +171 -0
  635. cuda/cccl/headers/include/cuda/std/__charconv/chars_format.h +81 -0
  636. cuda/cccl/headers/include/cuda/std/__charconv/from_chars.h +154 -0
  637. cuda/cccl/headers/include/cuda/std/__charconv/from_chars_result.h +56 -0
  638. cuda/cccl/headers/include/cuda/std/__charconv/to_chars.h +148 -0
  639. cuda/cccl/headers/include/cuda/std/__charconv/to_chars_result.h +56 -0
  640. cuda/cccl/headers/include/cuda/std/__charconv_ +31 -0
  641. cuda/cccl/headers/include/cuda/std/__chrono/calendar.h +54 -0
  642. cuda/cccl/headers/include/cuda/std/__chrono/day.h +162 -0
  643. cuda/cccl/headers/include/cuda/std/__chrono/duration.h +503 -0
  644. cuda/cccl/headers/include/cuda/std/__chrono/file_clock.h +55 -0
  645. cuda/cccl/headers/include/cuda/std/__chrono/high_resolution_clock.h +46 -0
  646. cuda/cccl/headers/include/cuda/std/__chrono/month.h +187 -0
  647. cuda/cccl/headers/include/cuda/std/__chrono/steady_clock.h +60 -0
  648. cuda/cccl/headers/include/cuda/std/__chrono/system_clock.h +80 -0
  649. cuda/cccl/headers/include/cuda/std/__chrono/time_point.h +259 -0
  650. cuda/cccl/headers/include/cuda/std/__chrono/year.h +186 -0
  651. cuda/cccl/headers/include/cuda/std/__cmath/abs.h +127 -0
  652. cuda/cccl/headers/include/cuda/std/__cmath/copysign.h +88 -0
  653. cuda/cccl/headers/include/cuda/std/__cmath/error_functions.h +200 -0
  654. cuda/cccl/headers/include/cuda/std/__cmath/exponential_functions.h +784 -0
  655. cuda/cccl/headers/include/cuda/std/__cmath/fdim.h +118 -0
  656. cuda/cccl/headers/include/cuda/std/__cmath/fma.h +125 -0
  657. cuda/cccl/headers/include/cuda/std/__cmath/fpclassify.h +231 -0
  658. cuda/cccl/headers/include/cuda/std/__cmath/gamma.h +205 -0
  659. cuda/cccl/headers/include/cuda/std/__cmath/hyperbolic_functions.h +286 -0
  660. cuda/cccl/headers/include/cuda/std/__cmath/hypot.h +221 -0
  661. cuda/cccl/headers/include/cuda/std/__cmath/inverse_hyperbolic_functions.h +286 -0
  662. cuda/cccl/headers/include/cuda/std/__cmath/inverse_trigonometric_functions.h +371 -0
  663. cuda/cccl/headers/include/cuda/std/__cmath/isfinite.h +167 -0
  664. cuda/cccl/headers/include/cuda/std/__cmath/isinf.h +205 -0
  665. cuda/cccl/headers/include/cuda/std/__cmath/isnan.h +186 -0
  666. cuda/cccl/headers/include/cuda/std/__cmath/isnormal.h +138 -0
  667. cuda/cccl/headers/include/cuda/std/__cmath/lerp.h +101 -0
  668. cuda/cccl/headers/include/cuda/std/__cmath/logarithms.h +534 -0
  669. cuda/cccl/headers/include/cuda/std/__cmath/min_max.h +287 -0
  670. cuda/cccl/headers/include/cuda/std/__cmath/modulo.h +208 -0
  671. cuda/cccl/headers/include/cuda/std/__cmath/nan.h +54 -0
  672. cuda/cccl/headers/include/cuda/std/__cmath/remainder.h +206 -0
  673. cuda/cccl/headers/include/cuda/std/__cmath/roots.h +199 -0
  674. cuda/cccl/headers/include/cuda/std/__cmath/rounding_functions.h +984 -0
  675. cuda/cccl/headers/include/cuda/std/__cmath/signbit.h +56 -0
  676. cuda/cccl/headers/include/cuda/std/__cmath/traits.h +238 -0
  677. cuda/cccl/headers/include/cuda/std/__cmath/trigonometric_functions.h +328 -0
  678. cuda/cccl/headers/include/cuda/std/__complex/arg.h +84 -0
  679. cuda/cccl/headers/include/cuda/std/__complex/complex.h +669 -0
  680. cuda/cccl/headers/include/cuda/std/__complex/exponential_functions.h +411 -0
  681. cuda/cccl/headers/include/cuda/std/__complex/hyperbolic_functions.h +117 -0
  682. cuda/cccl/headers/include/cuda/std/__complex/inverse_hyperbolic_functions.h +216 -0
  683. cuda/cccl/headers/include/cuda/std/__complex/inverse_trigonometric_functions.h +131 -0
  684. cuda/cccl/headers/include/cuda/std/__complex/literals.h +86 -0
  685. cuda/cccl/headers/include/cuda/std/__complex/logarithms.h +303 -0
  686. cuda/cccl/headers/include/cuda/std/__complex/math.h +159 -0
  687. cuda/cccl/headers/include/cuda/std/__complex/nvbf16.h +323 -0
  688. cuda/cccl/headers/include/cuda/std/__complex/nvfp16.h +322 -0
  689. cuda/cccl/headers/include/cuda/std/__complex/roots.h +214 -0
  690. cuda/cccl/headers/include/cuda/std/__complex/trigonometric_functions.h +61 -0
  691. cuda/cccl/headers/include/cuda/std/__complex/tuple.h +107 -0
  692. cuda/cccl/headers/include/cuda/std/__complex/vector_support.h +130 -0
  693. cuda/cccl/headers/include/cuda/std/__concepts/arithmetic.h +56 -0
  694. cuda/cccl/headers/include/cuda/std/__concepts/assignable.h +64 -0
  695. cuda/cccl/headers/include/cuda/std/__concepts/boolean_testable.h +63 -0
  696. cuda/cccl/headers/include/cuda/std/__concepts/class_or_enum.h +45 -0
  697. cuda/cccl/headers/include/cuda/std/__concepts/common_reference_with.h +69 -0
  698. cuda/cccl/headers/include/cuda/std/__concepts/common_with.h +82 -0
  699. cuda/cccl/headers/include/cuda/std/__concepts/concept_macros.h +341 -0
  700. cuda/cccl/headers/include/cuda/std/__concepts/constructible.h +174 -0
  701. cuda/cccl/headers/include/cuda/std/__concepts/convertible_to.h +70 -0
  702. cuda/cccl/headers/include/cuda/std/__concepts/copyable.h +60 -0
  703. cuda/cccl/headers/include/cuda/std/__concepts/derived_from.h +56 -0
  704. cuda/cccl/headers/include/cuda/std/__concepts/destructible.h +76 -0
  705. cuda/cccl/headers/include/cuda/std/__concepts/different_from.h +38 -0
  706. cuda/cccl/headers/include/cuda/std/__concepts/equality_comparable.h +100 -0
  707. cuda/cccl/headers/include/cuda/std/__concepts/invocable.h +80 -0
  708. cuda/cccl/headers/include/cuda/std/__concepts/movable.h +58 -0
  709. cuda/cccl/headers/include/cuda/std/__concepts/predicate.h +54 -0
  710. cuda/cccl/headers/include/cuda/std/__concepts/regular.h +54 -0
  711. cuda/cccl/headers/include/cuda/std/__concepts/relation.h +77 -0
  712. cuda/cccl/headers/include/cuda/std/__concepts/same_as.h +39 -0
  713. cuda/cccl/headers/include/cuda/std/__concepts/semiregular.h +54 -0
  714. cuda/cccl/headers/include/cuda/std/__concepts/swappable.h +206 -0
  715. cuda/cccl/headers/include/cuda/std/__concepts/totally_ordered.h +101 -0
  716. cuda/cccl/headers/include/cuda/std/__cstddef/byte.h +113 -0
  717. cuda/cccl/headers/include/cuda/std/__cstddef/types.h +52 -0
  718. cuda/cccl/headers/include/cuda/std/__cstdlib/abs.h +57 -0
  719. cuda/cccl/headers/include/cuda/std/__cstdlib/aligned_alloc.h +66 -0
  720. cuda/cccl/headers/include/cuda/std/__cstdlib/div.h +96 -0
  721. cuda/cccl/headers/include/cuda/std/__cstdlib/malloc.h +70 -0
  722. cuda/cccl/headers/include/cuda/std/__cstring/memcpy.h +61 -0
  723. cuda/cccl/headers/include/cuda/std/__cstring/memset.h +46 -0
  724. cuda/cccl/headers/include/cuda/std/__cuda/api_wrapper.h +62 -0
  725. cuda/cccl/headers/include/cuda/std/__exception/cuda_error.h +139 -0
  726. cuda/cccl/headers/include/cuda/std/__exception/terminate.h +73 -0
  727. cuda/cccl/headers/include/cuda/std/__execution/env.h +455 -0
  728. cuda/cccl/headers/include/cuda/std/__execution/policy.h +88 -0
  729. cuda/cccl/headers/include/cuda/std/__expected/bad_expected_access.h +127 -0
  730. cuda/cccl/headers/include/cuda/std/__expected/expected.h +1941 -0
  731. cuda/cccl/headers/include/cuda/std/__expected/expected_base.h +1050 -0
  732. cuda/cccl/headers/include/cuda/std/__expected/unexpect.h +37 -0
  733. cuda/cccl/headers/include/cuda/std/__expected/unexpected.h +165 -0
  734. cuda/cccl/headers/include/cuda/std/__floating_point/arithmetic.h +56 -0
  735. cuda/cccl/headers/include/cuda/std/__floating_point/cast.h +812 -0
  736. cuda/cccl/headers/include/cuda/std/__floating_point/cccl_fp.h +125 -0
  737. cuda/cccl/headers/include/cuda/std/__floating_point/common_type.h +48 -0
  738. cuda/cccl/headers/include/cuda/std/__floating_point/constants.h +376 -0
  739. cuda/cccl/headers/include/cuda/std/__floating_point/conversion_rank_order.h +124 -0
  740. cuda/cccl/headers/include/cuda/std/__floating_point/cuda_fp_types.h +116 -0
  741. cuda/cccl/headers/include/cuda/std/__floating_point/decompose.h +69 -0
  742. cuda/cccl/headers/include/cuda/std/__floating_point/format.h +162 -0
  743. cuda/cccl/headers/include/cuda/std/__floating_point/fp.h +40 -0
  744. cuda/cccl/headers/include/cuda/std/__floating_point/mask.h +78 -0
  745. cuda/cccl/headers/include/cuda/std/__floating_point/native_type.h +81 -0
  746. cuda/cccl/headers/include/cuda/std/__floating_point/overflow_handler.h +139 -0
  747. cuda/cccl/headers/include/cuda/std/__floating_point/properties.h +229 -0
  748. cuda/cccl/headers/include/cuda/std/__floating_point/storage.h +248 -0
  749. cuda/cccl/headers/include/cuda/std/__floating_point/traits.h +172 -0
  750. cuda/cccl/headers/include/cuda/std/__format/buffer.h +48 -0
  751. cuda/cccl/headers/include/cuda/std/__format/concepts.h +69 -0
  752. cuda/cccl/headers/include/cuda/std/__format/format_arg.h +282 -0
  753. cuda/cccl/headers/include/cuda/std/__format/format_arg_store.h +279 -0
  754. cuda/cccl/headers/include/cuda/std/__format/format_args.h +122 -0
  755. cuda/cccl/headers/include/cuda/std/__format/format_context.h +92 -0
  756. cuda/cccl/headers/include/cuda/std/__format/format_error.h +76 -0
  757. cuda/cccl/headers/include/cuda/std/__format/format_integral.h +237 -0
  758. cuda/cccl/headers/include/cuda/std/__format/format_parse_context.h +124 -0
  759. cuda/cccl/headers/include/cuda/std/__format/format_spec_parser.h +1230 -0
  760. cuda/cccl/headers/include/cuda/std/__format/formatter.h +59 -0
  761. cuda/cccl/headers/include/cuda/std/__format/formatters/bool.h +101 -0
  762. cuda/cccl/headers/include/cuda/std/__format/formatters/char.h +124 -0
  763. cuda/cccl/headers/include/cuda/std/__format/formatters/fp.h +101 -0
  764. cuda/cccl/headers/include/cuda/std/__format/formatters/int.h +174 -0
  765. cuda/cccl/headers/include/cuda/std/__format/formatters/ptr.h +104 -0
  766. cuda/cccl/headers/include/cuda/std/__format/formatters/str.h +178 -0
  767. cuda/cccl/headers/include/cuda/std/__format/output_utils.h +272 -0
  768. cuda/cccl/headers/include/cuda/std/__format/parse_arg_id.h +138 -0
  769. cuda/cccl/headers/include/cuda/std/__format_ +45 -0
  770. cuda/cccl/headers/include/cuda/std/__functional/binary_function.h +63 -0
  771. cuda/cccl/headers/include/cuda/std/__functional/binary_negate.h +65 -0
  772. cuda/cccl/headers/include/cuda/std/__functional/bind.h +334 -0
  773. cuda/cccl/headers/include/cuda/std/__functional/bind_back.h +80 -0
  774. cuda/cccl/headers/include/cuda/std/__functional/bind_front.h +73 -0
  775. cuda/cccl/headers/include/cuda/std/__functional/binder1st.h +74 -0
  776. cuda/cccl/headers/include/cuda/std/__functional/binder2nd.h +74 -0
  777. cuda/cccl/headers/include/cuda/std/__functional/compose.h +68 -0
  778. cuda/cccl/headers/include/cuda/std/__functional/default_searcher.h +75 -0
  779. cuda/cccl/headers/include/cuda/std/__functional/function.h +1275 -0
  780. cuda/cccl/headers/include/cuda/std/__functional/hash.h +649 -0
  781. cuda/cccl/headers/include/cuda/std/__functional/identity.h +57 -0
  782. cuda/cccl/headers/include/cuda/std/__functional/invoke.h +296 -0
  783. cuda/cccl/headers/include/cuda/std/__functional/is_transparent.h +41 -0
  784. cuda/cccl/headers/include/cuda/std/__functional/mem_fn.h +66 -0
  785. cuda/cccl/headers/include/cuda/std/__functional/mem_fun_ref.h +211 -0
  786. cuda/cccl/headers/include/cuda/std/__functional/not_fn.h +120 -0
  787. cuda/cccl/headers/include/cuda/std/__functional/operations.h +534 -0
  788. cuda/cccl/headers/include/cuda/std/__functional/perfect_forward.h +128 -0
  789. cuda/cccl/headers/include/cuda/std/__functional/pointer_to_binary_function.h +64 -0
  790. cuda/cccl/headers/include/cuda/std/__functional/pointer_to_unary_function.h +63 -0
  791. cuda/cccl/headers/include/cuda/std/__functional/ranges_operations.h +113 -0
  792. cuda/cccl/headers/include/cuda/std/__functional/reference_wrapper.h +113 -0
  793. cuda/cccl/headers/include/cuda/std/__functional/unary_function.h +62 -0
  794. cuda/cccl/headers/include/cuda/std/__functional/unary_negate.h +65 -0
  795. cuda/cccl/headers/include/cuda/std/__functional/unwrap_ref.h +56 -0
  796. cuda/cccl/headers/include/cuda/std/__functional/weak_result_type.h +262 -0
  797. cuda/cccl/headers/include/cuda/std/__fwd/allocator.h +53 -0
  798. cuda/cccl/headers/include/cuda/std/__fwd/array.h +42 -0
  799. cuda/cccl/headers/include/cuda/std/__fwd/char_traits.h +74 -0
  800. cuda/cccl/headers/include/cuda/std/__fwd/complex.h +75 -0
  801. cuda/cccl/headers/include/cuda/std/__fwd/expected.h +46 -0
  802. cuda/cccl/headers/include/cuda/std/__fwd/format.h +84 -0
  803. cuda/cccl/headers/include/cuda/std/__fwd/fp.h +37 -0
  804. cuda/cccl/headers/include/cuda/std/__fwd/get.h +123 -0
  805. cuda/cccl/headers/include/cuda/std/__fwd/hash.h +34 -0
  806. cuda/cccl/headers/include/cuda/std/__fwd/iterator.h +43 -0
  807. cuda/cccl/headers/include/cuda/std/__fwd/mdspan.h +122 -0
  808. cuda/cccl/headers/include/cuda/std/__fwd/memory_resource.h +37 -0
  809. cuda/cccl/headers/include/cuda/std/__fwd/optional.h +39 -0
  810. cuda/cccl/headers/include/cuda/std/__fwd/pair.h +47 -0
  811. cuda/cccl/headers/include/cuda/std/__fwd/reference_wrapper.h +34 -0
  812. cuda/cccl/headers/include/cuda/std/__fwd/span.h +45 -0
  813. cuda/cccl/headers/include/cuda/std/__fwd/string.h +112 -0
  814. cuda/cccl/headers/include/cuda/std/__fwd/string_view.h +91 -0
  815. cuda/cccl/headers/include/cuda/std/__fwd/subrange.h +55 -0
  816. cuda/cccl/headers/include/cuda/std/__fwd/tuple.h +34 -0
  817. cuda/cccl/headers/include/cuda/std/__fwd/unexpected.h +40 -0
  818. cuda/cccl/headers/include/cuda/std/__internal/cpp_dialect.h +44 -0
  819. cuda/cccl/headers/include/cuda/std/__internal/features.h +72 -0
  820. cuda/cccl/headers/include/cuda/std/__internal/namespaces.h +143 -0
  821. cuda/cccl/headers/include/cuda/std/__iterator/access.h +128 -0
  822. cuda/cccl/headers/include/cuda/std/__iterator/advance.h +228 -0
  823. cuda/cccl/headers/include/cuda/std/__iterator/back_insert_iterator.h +163 -0
  824. cuda/cccl/headers/include/cuda/std/__iterator/bounded_iter.h +253 -0
  825. cuda/cccl/headers/include/cuda/std/__iterator/concepts.h +645 -0
  826. cuda/cccl/headers/include/cuda/std/__iterator/counted_iterator.h +464 -0
  827. cuda/cccl/headers/include/cuda/std/__iterator/data.h +61 -0
  828. cuda/cccl/headers/include/cuda/std/__iterator/default_sentinel.h +36 -0
  829. cuda/cccl/headers/include/cuda/std/__iterator/distance.h +126 -0
  830. cuda/cccl/headers/include/cuda/std/__iterator/empty.h +53 -0
  831. cuda/cccl/headers/include/cuda/std/__iterator/erase_if_container.h +53 -0
  832. cuda/cccl/headers/include/cuda/std/__iterator/front_insert_iterator.h +99 -0
  833. cuda/cccl/headers/include/cuda/std/__iterator/incrementable_traits.h +143 -0
  834. cuda/cccl/headers/include/cuda/std/__iterator/indirectly_comparable.h +55 -0
  835. cuda/cccl/headers/include/cuda/std/__iterator/insert_iterator.h +107 -0
  836. cuda/cccl/headers/include/cuda/std/__iterator/istream_iterator.h +146 -0
  837. cuda/cccl/headers/include/cuda/std/__iterator/istreambuf_iterator.h +161 -0
  838. cuda/cccl/headers/include/cuda/std/__iterator/iter_move.h +161 -0
  839. cuda/cccl/headers/include/cuda/std/__iterator/iter_swap.h +163 -0
  840. cuda/cccl/headers/include/cuda/std/__iterator/iterator.h +44 -0
  841. cuda/cccl/headers/include/cuda/std/__iterator/iterator_traits.h +847 -0
  842. cuda/cccl/headers/include/cuda/std/__iterator/mergeable.h +72 -0
  843. cuda/cccl/headers/include/cuda/std/__iterator/move_iterator.h +432 -0
  844. cuda/cccl/headers/include/cuda/std/__iterator/move_sentinel.h +73 -0
  845. cuda/cccl/headers/include/cuda/std/__iterator/next.h +101 -0
  846. cuda/cccl/headers/include/cuda/std/__iterator/ostream_iterator.h +95 -0
  847. cuda/cccl/headers/include/cuda/std/__iterator/ostreambuf_iterator.h +100 -0
  848. cuda/cccl/headers/include/cuda/std/__iterator/permutable.h +54 -0
  849. cuda/cccl/headers/include/cuda/std/__iterator/prev.h +90 -0
  850. cuda/cccl/headers/include/cuda/std/__iterator/projected.h +61 -0
  851. cuda/cccl/headers/include/cuda/std/__iterator/readable_traits.h +156 -0
  852. cuda/cccl/headers/include/cuda/std/__iterator/reverse_access.h +142 -0
  853. cuda/cccl/headers/include/cuda/std/__iterator/reverse_iterator.h +371 -0
  854. cuda/cccl/headers/include/cuda/std/__iterator/size.h +69 -0
  855. cuda/cccl/headers/include/cuda/std/__iterator/sortable.h +55 -0
  856. cuda/cccl/headers/include/cuda/std/__iterator/unreachable_sentinel.h +84 -0
  857. cuda/cccl/headers/include/cuda/std/__iterator/wrap_iter.h +245 -0
  858. cuda/cccl/headers/include/cuda/std/__latch/latch.h +88 -0
  859. cuda/cccl/headers/include/cuda/std/__limits/numeric_limits.h +617 -0
  860. cuda/cccl/headers/include/cuda/std/__limits/numeric_limits_ext.h +753 -0
  861. cuda/cccl/headers/include/cuda/std/__linalg/conj_if_needed.h +78 -0
  862. cuda/cccl/headers/include/cuda/std/__linalg/conjugate_transposed.h +54 -0
  863. cuda/cccl/headers/include/cuda/std/__linalg/conjugated.h +139 -0
  864. cuda/cccl/headers/include/cuda/std/__linalg/scaled.h +132 -0
  865. cuda/cccl/headers/include/cuda/std/__linalg/transposed.h +321 -0
  866. cuda/cccl/headers/include/cuda/std/__mdspan/aligned_accessor.h +97 -0
  867. cuda/cccl/headers/include/cuda/std/__mdspan/concepts.h +139 -0
  868. cuda/cccl/headers/include/cuda/std/__mdspan/default_accessor.h +73 -0
  869. cuda/cccl/headers/include/cuda/std/__mdspan/empty_base.h +352 -0
  870. cuda/cccl/headers/include/cuda/std/__mdspan/extents.h +759 -0
  871. cuda/cccl/headers/include/cuda/std/__mdspan/layout_left.h +314 -0
  872. cuda/cccl/headers/include/cuda/std/__mdspan/layout_right.h +307 -0
  873. cuda/cccl/headers/include/cuda/std/__mdspan/layout_stride.h +605 -0
  874. cuda/cccl/headers/include/cuda/std/__mdspan/mdspan.h +512 -0
  875. cuda/cccl/headers/include/cuda/std/__mdspan/submdspan_extents.h +193 -0
  876. cuda/cccl/headers/include/cuda/std/__mdspan/submdspan_helper.h +189 -0
  877. cuda/cccl/headers/include/cuda/std/__mdspan/submdspan_mapping.h +344 -0
  878. cuda/cccl/headers/include/cuda/std/__memory/addressof.h +67 -0
  879. cuda/cccl/headers/include/cuda/std/__memory/align.h +67 -0
  880. cuda/cccl/headers/include/cuda/std/__memory/allocate_at_least.h +81 -0
  881. cuda/cccl/headers/include/cuda/std/__memory/allocation_guard.h +100 -0
  882. cuda/cccl/headers/include/cuda/std/__memory/allocator.h +320 -0
  883. cuda/cccl/headers/include/cuda/std/__memory/allocator_arg_t.h +84 -0
  884. cuda/cccl/headers/include/cuda/std/__memory/allocator_destructor.h +59 -0
  885. cuda/cccl/headers/include/cuda/std/__memory/allocator_traits.h +525 -0
  886. cuda/cccl/headers/include/cuda/std/__memory/assume_aligned.h +60 -0
  887. cuda/cccl/headers/include/cuda/std/__memory/builtin_new_allocator.h +87 -0
  888. cuda/cccl/headers/include/cuda/std/__memory/compressed_pair.h +225 -0
  889. cuda/cccl/headers/include/cuda/std/__memory/construct_at.h +246 -0
  890. cuda/cccl/headers/include/cuda/std/__memory/destruct_n.h +91 -0
  891. cuda/cccl/headers/include/cuda/std/__memory/is_sufficiently_aligned.h +46 -0
  892. cuda/cccl/headers/include/cuda/std/__memory/pointer_traits.h +246 -0
  893. cuda/cccl/headers/include/cuda/std/__memory/runtime_assume_aligned.h +62 -0
  894. cuda/cccl/headers/include/cuda/std/__memory/temporary_buffer.h +92 -0
  895. cuda/cccl/headers/include/cuda/std/__memory/uninitialized_algorithms.h +678 -0
  896. cuda/cccl/headers/include/cuda/std/__memory/unique_ptr.h +765 -0
  897. cuda/cccl/headers/include/cuda/std/__memory/uses_allocator.h +54 -0
  898. cuda/cccl/headers/include/cuda/std/__memory/voidify.h +41 -0
  899. cuda/cccl/headers/include/cuda/std/__memory_ +34 -0
  900. cuda/cccl/headers/include/cuda/std/__new/allocate.h +126 -0
  901. cuda/cccl/headers/include/cuda/std/__new/bad_alloc.h +57 -0
  902. cuda/cccl/headers/include/cuda/std/__new/launder.h +53 -0
  903. cuda/cccl/headers/include/cuda/std/__new_ +29 -0
  904. cuda/cccl/headers/include/cuda/std/__numeric/accumulate.h +56 -0
  905. cuda/cccl/headers/include/cuda/std/__numeric/adjacent_difference.h +72 -0
  906. cuda/cccl/headers/include/cuda/std/__numeric/exclusive_scan.h +66 -0
  907. cuda/cccl/headers/include/cuda/std/__numeric/gcd_lcm.h +78 -0
  908. cuda/cccl/headers/include/cuda/std/__numeric/inclusive_scan.h +73 -0
  909. cuda/cccl/headers/include/cuda/std/__numeric/inner_product.h +62 -0
  910. cuda/cccl/headers/include/cuda/std/__numeric/iota.h +42 -0
  911. cuda/cccl/headers/include/cuda/std/__numeric/midpoint.h +97 -0
  912. cuda/cccl/headers/include/cuda/std/__numeric/partial_sum.h +69 -0
  913. cuda/cccl/headers/include/cuda/std/__numeric/reduce.h +60 -0
  914. cuda/cccl/headers/include/cuda/std/__numeric/transform_exclusive_scan.h +51 -0
  915. cuda/cccl/headers/include/cuda/std/__numeric/transform_inclusive_scan.h +65 -0
  916. cuda/cccl/headers/include/cuda/std/__numeric/transform_reduce.h +72 -0
  917. cuda/cccl/headers/include/cuda/std/__optional/bad_optional_access.h +74 -0
  918. cuda/cccl/headers/include/cuda/std/__optional/hash.h +53 -0
  919. cuda/cccl/headers/include/cuda/std/__optional/make_optional.h +61 -0
  920. cuda/cccl/headers/include/cuda/std/__optional/nullopt.h +43 -0
  921. cuda/cccl/headers/include/cuda/std/__optional/optional.h +859 -0
  922. cuda/cccl/headers/include/cuda/std/__optional/optional_base.h +433 -0
  923. cuda/cccl/headers/include/cuda/std/__optional/optional_ref.h +324 -0
  924. cuda/cccl/headers/include/cuda/std/__random/generate_canonical.h +56 -0
  925. cuda/cccl/headers/include/cuda/std/__random/is_seed_sequence.h +39 -0
  926. cuda/cccl/headers/include/cuda/std/__random/is_valid.h +106 -0
  927. cuda/cccl/headers/include/cuda/std/__random/linear_congruential_engine.h +398 -0
  928. cuda/cccl/headers/include/cuda/std/__random/uniform_int_distribution.h +335 -0
  929. cuda/cccl/headers/include/cuda/std/__random/uniform_real_distribution.h +183 -0
  930. cuda/cccl/headers/include/cuda/std/__random_ +29 -0
  931. cuda/cccl/headers/include/cuda/std/__ranges/access.h +303 -0
  932. cuda/cccl/headers/include/cuda/std/__ranges/all.h +98 -0
  933. cuda/cccl/headers/include/cuda/std/__ranges/compressed_movable_box.h +892 -0
  934. cuda/cccl/headers/include/cuda/std/__ranges/concepts.h +302 -0
  935. cuda/cccl/headers/include/cuda/std/__ranges/counted.h +90 -0
  936. cuda/cccl/headers/include/cuda/std/__ranges/dangling.h +54 -0
  937. cuda/cccl/headers/include/cuda/std/__ranges/data.h +136 -0
  938. cuda/cccl/headers/include/cuda/std/__ranges/empty.h +109 -0
  939. cuda/cccl/headers/include/cuda/std/__ranges/empty_view.h +77 -0
  940. cuda/cccl/headers/include/cuda/std/__ranges/enable_borrowed_range.h +41 -0
  941. cuda/cccl/headers/include/cuda/std/__ranges/enable_view.h +78 -0
  942. cuda/cccl/headers/include/cuda/std/__ranges/from_range.h +36 -0
  943. cuda/cccl/headers/include/cuda/std/__ranges/iota_view.h +266 -0
  944. cuda/cccl/headers/include/cuda/std/__ranges/movable_box.h +410 -0
  945. cuda/cccl/headers/include/cuda/std/__ranges/owning_view.h +162 -0
  946. cuda/cccl/headers/include/cuda/std/__ranges/range_adaptor.h +110 -0
  947. cuda/cccl/headers/include/cuda/std/__ranges/rbegin.h +175 -0
  948. cuda/cccl/headers/include/cuda/std/__ranges/ref_view.h +121 -0
  949. cuda/cccl/headers/include/cuda/std/__ranges/rend.h +182 -0
  950. cuda/cccl/headers/include/cuda/std/__ranges/repeat_view.h +345 -0
  951. cuda/cccl/headers/include/cuda/std/__ranges/single_view.h +155 -0
  952. cuda/cccl/headers/include/cuda/std/__ranges/size.h +201 -0
  953. cuda/cccl/headers/include/cuda/std/__ranges/subrange.h +513 -0
  954. cuda/cccl/headers/include/cuda/std/__ranges/take_view.h +476 -0
  955. cuda/cccl/headers/include/cuda/std/__ranges/take_while_view.h +259 -0
  956. cuda/cccl/headers/include/cuda/std/__ranges/transform_view.h +522 -0
  957. cuda/cccl/headers/include/cuda/std/__ranges/unwrap_end.h +53 -0
  958. cuda/cccl/headers/include/cuda/std/__ranges/view_interface.h +183 -0
  959. cuda/cccl/headers/include/cuda/std/__ranges/views.h +38 -0
  960. cuda/cccl/headers/include/cuda/std/__semaphore/atomic_semaphore.h +234 -0
  961. cuda/cccl/headers/include/cuda/std/__semaphore/counting_semaphore.h +51 -0
  962. cuda/cccl/headers/include/cuda/std/__string/char_traits.h +191 -0
  963. cuda/cccl/headers/include/cuda/std/__string/constexpr_c_functions.h +581 -0
  964. cuda/cccl/headers/include/cuda/std/__string/helper_functions.h +296 -0
  965. cuda/cccl/headers/include/cuda/std/__string/string_view.h +244 -0
  966. cuda/cccl/headers/include/cuda/std/__string_ +29 -0
  967. cuda/cccl/headers/include/cuda/std/__system_error/errc.h +51 -0
  968. cuda/cccl/headers/include/cuda/std/__system_error_ +26 -0
  969. cuda/cccl/headers/include/cuda/std/__thread/threading_support.h +106 -0
  970. cuda/cccl/headers/include/cuda/std/__thread/threading_support_cuda.h +47 -0
  971. cuda/cccl/headers/include/cuda/std/__thread/threading_support_external.h +41 -0
  972. cuda/cccl/headers/include/cuda/std/__thread/threading_support_pthread.h +143 -0
  973. cuda/cccl/headers/include/cuda/std/__thread/threading_support_win32.h +87 -0
  974. cuda/cccl/headers/include/cuda/std/__tuple_dir/ignore.h +51 -0
  975. cuda/cccl/headers/include/cuda/std/__tuple_dir/make_tuple_types.h +120 -0
  976. cuda/cccl/headers/include/cuda/std/__tuple_dir/sfinae_helpers.h +260 -0
  977. cuda/cccl/headers/include/cuda/std/__tuple_dir/structured_bindings.h +212 -0
  978. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_element.h +70 -0
  979. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_indices.h +44 -0
  980. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_like.h +84 -0
  981. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_like_ext.h +68 -0
  982. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_size.h +79 -0
  983. cuda/cccl/headers/include/cuda/std/__tuple_dir/tuple_types.h +35 -0
  984. cuda/cccl/headers/include/cuda/std/__tuple_dir/vector_types.h +290 -0
  985. cuda/cccl/headers/include/cuda/std/__type_traits/add_const.h +40 -0
  986. cuda/cccl/headers/include/cuda/std/__type_traits/add_cv.h +40 -0
  987. cuda/cccl/headers/include/cuda/std/__type_traits/add_lvalue_reference.h +62 -0
  988. cuda/cccl/headers/include/cuda/std/__type_traits/add_pointer.h +65 -0
  989. cuda/cccl/headers/include/cuda/std/__type_traits/add_rvalue_reference.h +62 -0
  990. cuda/cccl/headers/include/cuda/std/__type_traits/add_volatile.h +40 -0
  991. cuda/cccl/headers/include/cuda/std/__type_traits/aligned_storage.h +149 -0
  992. cuda/cccl/headers/include/cuda/std/__type_traits/aligned_union.h +62 -0
  993. cuda/cccl/headers/include/cuda/std/__type_traits/alignment_of.h +41 -0
  994. cuda/cccl/headers/include/cuda/std/__type_traits/always_false.h +35 -0
  995. cuda/cccl/headers/include/cuda/std/__type_traits/can_extract_key.h +68 -0
  996. cuda/cccl/headers/include/cuda/std/__type_traits/common_reference.h +262 -0
  997. cuda/cccl/headers/include/cuda/std/__type_traits/common_type.h +173 -0
  998. cuda/cccl/headers/include/cuda/std/__type_traits/conditional.h +65 -0
  999. cuda/cccl/headers/include/cuda/std/__type_traits/conjunction.h +67 -0
  1000. cuda/cccl/headers/include/cuda/std/__type_traits/copy_cv.h +50 -0
  1001. cuda/cccl/headers/include/cuda/std/__type_traits/copy_cvref.h +148 -0
  1002. cuda/cccl/headers/include/cuda/std/__type_traits/decay.h +83 -0
  1003. cuda/cccl/headers/include/cuda/std/__type_traits/dependent_type.h +35 -0
  1004. cuda/cccl/headers/include/cuda/std/__type_traits/disjunction.h +77 -0
  1005. cuda/cccl/headers/include/cuda/std/__type_traits/enable_if.h +43 -0
  1006. cuda/cccl/headers/include/cuda/std/__type_traits/extent.h +68 -0
  1007. cuda/cccl/headers/include/cuda/std/__type_traits/fold.h +47 -0
  1008. cuda/cccl/headers/include/cuda/std/__type_traits/has_unique_object_representation.h +46 -0
  1009. cuda/cccl/headers/include/cuda/std/__type_traits/has_virtual_destructor.h +42 -0
  1010. cuda/cccl/headers/include/cuda/std/__type_traits/integral_constant.h +62 -0
  1011. cuda/cccl/headers/include/cuda/std/__type_traits/is_abstract.h +42 -0
  1012. cuda/cccl/headers/include/cuda/std/__type_traits/is_aggregate.h +42 -0
  1013. cuda/cccl/headers/include/cuda/std/__type_traits/is_allocator.h +46 -0
  1014. cuda/cccl/headers/include/cuda/std/__type_traits/is_arithmetic.h +42 -0
  1015. cuda/cccl/headers/include/cuda/std/__type_traits/is_array.h +62 -0
  1016. cuda/cccl/headers/include/cuda/std/__type_traits/is_assignable.h +78 -0
  1017. cuda/cccl/headers/include/cuda/std/__type_traits/is_base_of.h +42 -0
  1018. cuda/cccl/headers/include/cuda/std/__type_traits/is_bounded_array.h +44 -0
  1019. cuda/cccl/headers/include/cuda/std/__type_traits/is_callable.h +60 -0
  1020. cuda/cccl/headers/include/cuda/std/__type_traits/is_char_like_type.h +38 -0
  1021. cuda/cccl/headers/include/cuda/std/__type_traits/is_class.h +42 -0
  1022. cuda/cccl/headers/include/cuda/std/__type_traits/is_compound.h +58 -0
  1023. cuda/cccl/headers/include/cuda/std/__type_traits/is_const.h +56 -0
  1024. cuda/cccl/headers/include/cuda/std/__type_traits/is_constant_evaluated.h +51 -0
  1025. cuda/cccl/headers/include/cuda/std/__type_traits/is_constructible.h +174 -0
  1026. cuda/cccl/headers/include/cuda/std/__type_traits/is_convertible.h +211 -0
  1027. cuda/cccl/headers/include/cuda/std/__type_traits/is_copy_assignable.h +43 -0
  1028. cuda/cccl/headers/include/cuda/std/__type_traits/is_copy_constructible.h +43 -0
  1029. cuda/cccl/headers/include/cuda/std/__type_traits/is_core_convertible.h +47 -0
  1030. cuda/cccl/headers/include/cuda/std/__type_traits/is_corresponding_member.h +42 -0
  1031. cuda/cccl/headers/include/cuda/std/__type_traits/is_default_constructible.h +40 -0
  1032. cuda/cccl/headers/include/cuda/std/__type_traits/is_destructible.h +115 -0
  1033. cuda/cccl/headers/include/cuda/std/__type_traits/is_empty.h +42 -0
  1034. cuda/cccl/headers/include/cuda/std/__type_traits/is_enum.h +42 -0
  1035. cuda/cccl/headers/include/cuda/std/__type_traits/is_execution_policy.h +81 -0
  1036. cuda/cccl/headers/include/cuda/std/__type_traits/is_extended_arithmetic.h +38 -0
  1037. cuda/cccl/headers/include/cuda/std/__type_traits/is_extended_floating_point.h +79 -0
  1038. cuda/cccl/headers/include/cuda/std/__type_traits/is_final.h +42 -0
  1039. cuda/cccl/headers/include/cuda/std/__type_traits/is_floating_point.h +53 -0
  1040. cuda/cccl/headers/include/cuda/std/__type_traits/is_function.h +61 -0
  1041. cuda/cccl/headers/include/cuda/std/__type_traits/is_fundamental.h +56 -0
  1042. cuda/cccl/headers/include/cuda/std/__type_traits/is_implicitly_default_constructible.h +57 -0
  1043. cuda/cccl/headers/include/cuda/std/__type_traits/is_integer.h +45 -0
  1044. cuda/cccl/headers/include/cuda/std/__type_traits/is_integral.h +123 -0
  1045. cuda/cccl/headers/include/cuda/std/__type_traits/is_layout_compatible.h +45 -0
  1046. cuda/cccl/headers/include/cuda/std/__type_traits/is_literal_type.h +42 -0
  1047. cuda/cccl/headers/include/cuda/std/__type_traits/is_member_function_pointer.h +79 -0
  1048. cuda/cccl/headers/include/cuda/std/__type_traits/is_member_object_pointer.h +57 -0
  1049. cuda/cccl/headers/include/cuda/std/__type_traits/is_member_pointer.h +57 -0
  1050. cuda/cccl/headers/include/cuda/std/__type_traits/is_move_assignable.h +43 -0
  1051. cuda/cccl/headers/include/cuda/std/__type_traits/is_move_constructible.h +42 -0
  1052. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_assignable.h +70 -0
  1053. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_constructible.h +84 -0
  1054. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_convertible.h +59 -0
  1055. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_copy_assignable.h +60 -0
  1056. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_copy_constructible.h +43 -0
  1057. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_default_constructible.h +54 -0
  1058. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_destructible.h +82 -0
  1059. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_move_assignable.h +60 -0
  1060. cuda/cccl/headers/include/cuda/std/__type_traits/is_nothrow_move_constructible.h +42 -0
  1061. cuda/cccl/headers/include/cuda/std/__type_traits/is_null_pointer.h +43 -0
  1062. cuda/cccl/headers/include/cuda/std/__type_traits/is_object.h +57 -0
  1063. cuda/cccl/headers/include/cuda/std/__type_traits/is_one_of.h +37 -0
  1064. cuda/cccl/headers/include/cuda/std/__type_traits/is_pod.h +42 -0
  1065. cuda/cccl/headers/include/cuda/std/__type_traits/is_pointer.h +60 -0
  1066. cuda/cccl/headers/include/cuda/std/__type_traits/is_pointer_interconvertible_base_of.h +84 -0
  1067. cuda/cccl/headers/include/cuda/std/__type_traits/is_pointer_interconvertible_with_class.h +42 -0
  1068. cuda/cccl/headers/include/cuda/std/__type_traits/is_polymorphic.h +42 -0
  1069. cuda/cccl/headers/include/cuda/std/__type_traits/is_primary_template.h +121 -0
  1070. cuda/cccl/headers/include/cuda/std/__type_traits/is_reference.h +95 -0
  1071. cuda/cccl/headers/include/cuda/std/__type_traits/is_reference_wrapper.h +50 -0
  1072. cuda/cccl/headers/include/cuda/std/__type_traits/is_referenceable.h +55 -0
  1073. cuda/cccl/headers/include/cuda/std/__type_traits/is_same.h +88 -0
  1074. cuda/cccl/headers/include/cuda/std/__type_traits/is_scalar.h +60 -0
  1075. cuda/cccl/headers/include/cuda/std/__type_traits/is_scoped_enum.h +49 -0
  1076. cuda/cccl/headers/include/cuda/std/__type_traits/is_signed.h +65 -0
  1077. cuda/cccl/headers/include/cuda/std/__type_traits/is_signed_integer.h +59 -0
  1078. cuda/cccl/headers/include/cuda/std/__type_traits/is_standard_layout.h +42 -0
  1079. cuda/cccl/headers/include/cuda/std/__type_traits/is_swappable.h +202 -0
  1080. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivial.h +42 -0
  1081. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_assignable.h +43 -0
  1082. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_constructible.h +43 -0
  1083. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_copy_assignable.h +46 -0
  1084. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_copy_constructible.h +45 -0
  1085. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_copyable.h +42 -0
  1086. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_default_constructible.h +42 -0
  1087. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_destructible.h +58 -0
  1088. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_move_assignable.h +45 -0
  1089. cuda/cccl/headers/include/cuda/std/__type_traits/is_trivially_move_constructible.h +44 -0
  1090. cuda/cccl/headers/include/cuda/std/__type_traits/is_unbounded_array.h +43 -0
  1091. cuda/cccl/headers/include/cuda/std/__type_traits/is_union.h +42 -0
  1092. cuda/cccl/headers/include/cuda/std/__type_traits/is_unsigned.h +66 -0
  1093. cuda/cccl/headers/include/cuda/std/__type_traits/is_unsigned_integer.h +59 -0
  1094. cuda/cccl/headers/include/cuda/std/__type_traits/is_valid_expansion.h +41 -0
  1095. cuda/cccl/headers/include/cuda/std/__type_traits/is_void.h +55 -0
  1096. cuda/cccl/headers/include/cuda/std/__type_traits/is_volatile.h +56 -0
  1097. cuda/cccl/headers/include/cuda/std/__type_traits/lazy.h +35 -0
  1098. cuda/cccl/headers/include/cuda/std/__type_traits/make_const_lvalue_ref.h +36 -0
  1099. cuda/cccl/headers/include/cuda/std/__type_traits/make_nbit_int.h +107 -0
  1100. cuda/cccl/headers/include/cuda/std/__type_traits/make_signed.h +140 -0
  1101. cuda/cccl/headers/include/cuda/std/__type_traits/make_unsigned.h +151 -0
  1102. cuda/cccl/headers/include/cuda/std/__type_traits/maybe_const.h +36 -0
  1103. cuda/cccl/headers/include/cuda/std/__type_traits/nat.h +39 -0
  1104. cuda/cccl/headers/include/cuda/std/__type_traits/negation.h +44 -0
  1105. cuda/cccl/headers/include/cuda/std/__type_traits/num_bits.h +122 -0
  1106. cuda/cccl/headers/include/cuda/std/__type_traits/promote.h +163 -0
  1107. cuda/cccl/headers/include/cuda/std/__type_traits/rank.h +60 -0
  1108. cuda/cccl/headers/include/cuda/std/__type_traits/reference_constructs_from_temporary.h +57 -0
  1109. cuda/cccl/headers/include/cuda/std/__type_traits/reference_converts_from_temporary.h +56 -0
  1110. cuda/cccl/headers/include/cuda/std/__type_traits/remove_all_extents.h +66 -0
  1111. cuda/cccl/headers/include/cuda/std/__type_traits/remove_const.h +59 -0
  1112. cuda/cccl/headers/include/cuda/std/__type_traits/remove_const_ref.h +37 -0
  1113. cuda/cccl/headers/include/cuda/std/__type_traits/remove_cv.h +57 -0
  1114. cuda/cccl/headers/include/cuda/std/__type_traits/remove_cvref.h +57 -0
  1115. cuda/cccl/headers/include/cuda/std/__type_traits/remove_extent.h +65 -0
  1116. cuda/cccl/headers/include/cuda/std/__type_traits/remove_pointer.h +73 -0
  1117. cuda/cccl/headers/include/cuda/std/__type_traits/remove_reference.h +72 -0
  1118. cuda/cccl/headers/include/cuda/std/__type_traits/remove_volatile.h +58 -0
  1119. cuda/cccl/headers/include/cuda/std/__type_traits/result_of.h +47 -0
  1120. cuda/cccl/headers/include/cuda/std/__type_traits/type_identity.h +40 -0
  1121. cuda/cccl/headers/include/cuda/std/__type_traits/type_list.h +1067 -0
  1122. cuda/cccl/headers/include/cuda/std/__type_traits/type_set.h +131 -0
  1123. cuda/cccl/headers/include/cuda/std/__type_traits/underlying_type.h +52 -0
  1124. cuda/cccl/headers/include/cuda/std/__type_traits/void_t.h +34 -0
  1125. cuda/cccl/headers/include/cuda/std/__utility/as_const.h +52 -0
  1126. cuda/cccl/headers/include/cuda/std/__utility/auto_cast.h +34 -0
  1127. cuda/cccl/headers/include/cuda/std/__utility/cmp.h +116 -0
  1128. cuda/cccl/headers/include/cuda/std/__utility/convert_to_integral.h +101 -0
  1129. cuda/cccl/headers/include/cuda/std/__utility/declval.h +76 -0
  1130. cuda/cccl/headers/include/cuda/std/__utility/exception_guard.h +161 -0
  1131. cuda/cccl/headers/include/cuda/std/__utility/exchange.h +46 -0
  1132. cuda/cccl/headers/include/cuda/std/__utility/forward.h +59 -0
  1133. cuda/cccl/headers/include/cuda/std/__utility/forward_like.h +55 -0
  1134. cuda/cccl/headers/include/cuda/std/__utility/in_place.h +86 -0
  1135. cuda/cccl/headers/include/cuda/std/__utility/integer_sequence.h +251 -0
  1136. cuda/cccl/headers/include/cuda/std/__utility/monostate.h +99 -0
  1137. cuda/cccl/headers/include/cuda/std/__utility/move.h +74 -0
  1138. cuda/cccl/headers/include/cuda/std/__utility/pair.h +791 -0
  1139. cuda/cccl/headers/include/cuda/std/__utility/piecewise_construct.h +37 -0
  1140. cuda/cccl/headers/include/cuda/std/__utility/pod_tuple.h +527 -0
  1141. cuda/cccl/headers/include/cuda/std/__utility/priority_tag.h +40 -0
  1142. cuda/cccl/headers/include/cuda/std/__utility/rel_ops.h +63 -0
  1143. cuda/cccl/headers/include/cuda/std/__utility/swap.h +64 -0
  1144. cuda/cccl/headers/include/cuda/std/__utility/to_underlying.h +40 -0
  1145. cuda/cccl/headers/include/cuda/std/__utility/typeid.h +421 -0
  1146. cuda/cccl/headers/include/cuda/std/__utility/undefined.h +34 -0
  1147. cuda/cccl/headers/include/cuda/std/__utility/unreachable.h +37 -0
  1148. cuda/cccl/headers/include/cuda/std/array +518 -0
  1149. cuda/cccl/headers/include/cuda/std/atomic +810 -0
  1150. cuda/cccl/headers/include/cuda/std/barrier +42 -0
  1151. cuda/cccl/headers/include/cuda/std/bit +35 -0
  1152. cuda/cccl/headers/include/cuda/std/bitset +994 -0
  1153. cuda/cccl/headers/include/cuda/std/cassert +28 -0
  1154. cuda/cccl/headers/include/cuda/std/ccomplex +15 -0
  1155. cuda/cccl/headers/include/cuda/std/cfloat +59 -0
  1156. cuda/cccl/headers/include/cuda/std/chrono +26 -0
  1157. cuda/cccl/headers/include/cuda/std/climits +61 -0
  1158. cuda/cccl/headers/include/cuda/std/cmath +87 -0
  1159. cuda/cccl/headers/include/cuda/std/complex +50 -0
  1160. cuda/cccl/headers/include/cuda/std/concepts +48 -0
  1161. cuda/cccl/headers/include/cuda/std/cstddef +28 -0
  1162. cuda/cccl/headers/include/cuda/std/cstdint +178 -0
  1163. cuda/cccl/headers/include/cuda/std/cstdlib +30 -0
  1164. cuda/cccl/headers/include/cuda/std/cstring +110 -0
  1165. cuda/cccl/headers/include/cuda/std/ctime +154 -0
  1166. cuda/cccl/headers/include/cuda/std/detail/__config +45 -0
  1167. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/__config +207 -0
  1168. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/algorithm +1721 -0
  1169. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/chrono +2509 -0
  1170. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/iosfwd +128 -0
  1171. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/stdexcept +120 -0
  1172. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/tuple +1365 -0
  1173. cuda/cccl/headers/include/cuda/std/detail/libcxx/include/variant +2144 -0
  1174. cuda/cccl/headers/include/cuda/std/execution +29 -0
  1175. cuda/cccl/headers/include/cuda/std/expected +30 -0
  1176. cuda/cccl/headers/include/cuda/std/functional +56 -0
  1177. cuda/cccl/headers/include/cuda/std/initializer_list +44 -0
  1178. cuda/cccl/headers/include/cuda/std/inplace_vector +2170 -0
  1179. cuda/cccl/headers/include/cuda/std/iterator +70 -0
  1180. cuda/cccl/headers/include/cuda/std/latch +34 -0
  1181. cuda/cccl/headers/include/cuda/std/limits +28 -0
  1182. cuda/cccl/headers/include/cuda/std/linalg +30 -0
  1183. cuda/cccl/headers/include/cuda/std/mdspan +38 -0
  1184. cuda/cccl/headers/include/cuda/std/memory +39 -0
  1185. cuda/cccl/headers/include/cuda/std/numbers +346 -0
  1186. cuda/cccl/headers/include/cuda/std/numeric +41 -0
  1187. cuda/cccl/headers/include/cuda/std/optional +31 -0
  1188. cuda/cccl/headers/include/cuda/std/ranges +69 -0
  1189. cuda/cccl/headers/include/cuda/std/ratio +416 -0
  1190. cuda/cccl/headers/include/cuda/std/semaphore +31 -0
  1191. cuda/cccl/headers/include/cuda/std/source_location +83 -0
  1192. cuda/cccl/headers/include/cuda/std/span +628 -0
  1193. cuda/cccl/headers/include/cuda/std/string_view +925 -0
  1194. cuda/cccl/headers/include/cuda/std/tuple +26 -0
  1195. cuda/cccl/headers/include/cuda/std/type_traits +177 -0
  1196. cuda/cccl/headers/include/cuda/std/utility +70 -0
  1197. cuda/cccl/headers/include/cuda/std/variant +25 -0
  1198. cuda/cccl/headers/include/cuda/std/version +240 -0
  1199. cuda/cccl/headers/include/cuda/stream +31 -0
  1200. cuda/cccl/headers/include/cuda/stream_ref +59 -0
  1201. cuda/cccl/headers/include/cuda/type_traits +27 -0
  1202. cuda/cccl/headers/include/cuda/utility +28 -0
  1203. cuda/cccl/headers/include/cuda/version +16 -0
  1204. cuda/cccl/headers/include/cuda/warp +28 -0
  1205. cuda/cccl/headers/include/cuda/work_stealing +26 -0
  1206. cuda/cccl/headers/include/nv/detail/__preprocessor +169 -0
  1207. cuda/cccl/headers/include/nv/detail/__target_macros +718 -0
  1208. cuda/cccl/headers/include/nv/target +240 -0
  1209. cuda/cccl/headers/include/thrust/addressof.h +22 -0
  1210. cuda/cccl/headers/include/thrust/adjacent_difference.h +254 -0
  1211. cuda/cccl/headers/include/thrust/advance.h +57 -0
  1212. cuda/cccl/headers/include/thrust/allocate_unique.h +299 -0
  1213. cuda/cccl/headers/include/thrust/binary_search.h +1910 -0
  1214. cuda/cccl/headers/include/thrust/complex.h +858 -0
  1215. cuda/cccl/headers/include/thrust/copy.h +506 -0
  1216. cuda/cccl/headers/include/thrust/count.h +245 -0
  1217. cuda/cccl/headers/include/thrust/detail/adjacent_difference.inl +95 -0
  1218. cuda/cccl/headers/include/thrust/detail/alignment.h +81 -0
  1219. cuda/cccl/headers/include/thrust/detail/allocator/allocator_traits.h +626 -0
  1220. cuda/cccl/headers/include/thrust/detail/allocator/copy_construct_range.h +192 -0
  1221. cuda/cccl/headers/include/thrust/detail/allocator/destroy_range.h +96 -0
  1222. cuda/cccl/headers/include/thrust/detail/allocator/fill_construct_range.h +81 -0
  1223. cuda/cccl/headers/include/thrust/detail/allocator/malloc_allocator.h +78 -0
  1224. cuda/cccl/headers/include/thrust/detail/allocator/no_throw_allocator.h +76 -0
  1225. cuda/cccl/headers/include/thrust/detail/allocator/tagged_allocator.h +115 -0
  1226. cuda/cccl/headers/include/thrust/detail/allocator/temporary_allocator.h +116 -0
  1227. cuda/cccl/headers/include/thrust/detail/allocator/value_initialize_range.h +77 -0
  1228. cuda/cccl/headers/include/thrust/detail/allocator_aware_execution_policy.h +99 -0
  1229. cuda/cccl/headers/include/thrust/detail/binary_search.inl +525 -0
  1230. cuda/cccl/headers/include/thrust/detail/caching_allocator.h +47 -0
  1231. cuda/cccl/headers/include/thrust/detail/complex/arithmetic.h +255 -0
  1232. cuda/cccl/headers/include/thrust/detail/complex/c99math.h +64 -0
  1233. cuda/cccl/headers/include/thrust/detail/complex/catrig.h +875 -0
  1234. cuda/cccl/headers/include/thrust/detail/complex/catrigf.h +589 -0
  1235. cuda/cccl/headers/include/thrust/detail/complex/ccosh.h +233 -0
  1236. cuda/cccl/headers/include/thrust/detail/complex/ccoshf.h +161 -0
  1237. cuda/cccl/headers/include/thrust/detail/complex/cexp.h +195 -0
  1238. cuda/cccl/headers/include/thrust/detail/complex/cexpf.h +173 -0
  1239. cuda/cccl/headers/include/thrust/detail/complex/clog.h +223 -0
  1240. cuda/cccl/headers/include/thrust/detail/complex/clogf.h +210 -0
  1241. cuda/cccl/headers/include/thrust/detail/complex/complex.inl +263 -0
  1242. cuda/cccl/headers/include/thrust/detail/complex/cpow.h +50 -0
  1243. cuda/cccl/headers/include/thrust/detail/complex/cproj.h +81 -0
  1244. cuda/cccl/headers/include/thrust/detail/complex/csinh.h +228 -0
  1245. cuda/cccl/headers/include/thrust/detail/complex/csinhf.h +168 -0
  1246. cuda/cccl/headers/include/thrust/detail/complex/csqrt.h +178 -0
  1247. cuda/cccl/headers/include/thrust/detail/complex/csqrtf.h +174 -0
  1248. cuda/cccl/headers/include/thrust/detail/complex/ctanh.h +208 -0
  1249. cuda/cccl/headers/include/thrust/detail/complex/ctanhf.h +133 -0
  1250. cuda/cccl/headers/include/thrust/detail/complex/math_private.h +138 -0
  1251. cuda/cccl/headers/include/thrust/detail/complex/stream.h +73 -0
  1252. cuda/cccl/headers/include/thrust/detail/config/compiler.h +38 -0
  1253. cuda/cccl/headers/include/thrust/detail/config/config.h +43 -0
  1254. cuda/cccl/headers/include/thrust/detail/config/cpp_dialect.h +78 -0
  1255. cuda/cccl/headers/include/thrust/detail/config/device_system.h +55 -0
  1256. cuda/cccl/headers/include/thrust/detail/config/host_system.h +48 -0
  1257. cuda/cccl/headers/include/thrust/detail/config/memory_resource.h +41 -0
  1258. cuda/cccl/headers/include/thrust/detail/config/namespace.h +162 -0
  1259. cuda/cccl/headers/include/thrust/detail/config/simple_defines.h +48 -0
  1260. cuda/cccl/headers/include/thrust/detail/config.h +36 -0
  1261. cuda/cccl/headers/include/thrust/detail/contiguous_storage.h +228 -0
  1262. cuda/cccl/headers/include/thrust/detail/contiguous_storage.inl +273 -0
  1263. cuda/cccl/headers/include/thrust/detail/copy.h +72 -0
  1264. cuda/cccl/headers/include/thrust/detail/copy.inl +129 -0
  1265. cuda/cccl/headers/include/thrust/detail/copy_if.h +62 -0
  1266. cuda/cccl/headers/include/thrust/detail/copy_if.inl +102 -0
  1267. cuda/cccl/headers/include/thrust/detail/count.h +55 -0
  1268. cuda/cccl/headers/include/thrust/detail/count.inl +89 -0
  1269. cuda/cccl/headers/include/thrust/detail/device_ptr.inl +48 -0
  1270. cuda/cccl/headers/include/thrust/detail/equal.inl +93 -0
  1271. cuda/cccl/headers/include/thrust/detail/event_error.h +160 -0
  1272. cuda/cccl/headers/include/thrust/detail/execute_with_allocator.h +81 -0
  1273. cuda/cccl/headers/include/thrust/detail/execute_with_allocator_fwd.h +61 -0
  1274. cuda/cccl/headers/include/thrust/detail/execution_policy.h +120 -0
  1275. cuda/cccl/headers/include/thrust/detail/extrema.inl +184 -0
  1276. cuda/cccl/headers/include/thrust/detail/fill.inl +86 -0
  1277. cuda/cccl/headers/include/thrust/detail/find.inl +113 -0
  1278. cuda/cccl/headers/include/thrust/detail/for_each.inl +84 -0
  1279. cuda/cccl/headers/include/thrust/detail/function.h +49 -0
  1280. cuda/cccl/headers/include/thrust/detail/functional/actor.h +214 -0
  1281. cuda/cccl/headers/include/thrust/detail/functional/operators.h +386 -0
  1282. cuda/cccl/headers/include/thrust/detail/gather.inl +173 -0
  1283. cuda/cccl/headers/include/thrust/detail/generate.inl +86 -0
  1284. cuda/cccl/headers/include/thrust/detail/get_iterator_value.h +62 -0
  1285. cuda/cccl/headers/include/thrust/detail/inner_product.inl +118 -0
  1286. cuda/cccl/headers/include/thrust/detail/internal_functional.h +328 -0
  1287. cuda/cccl/headers/include/thrust/detail/logical.inl +113 -0
  1288. cuda/cccl/headers/include/thrust/detail/malloc_and_free.h +77 -0
  1289. cuda/cccl/headers/include/thrust/detail/malloc_and_free_fwd.h +45 -0
  1290. cuda/cccl/headers/include/thrust/detail/memory_algorithms.h +209 -0
  1291. cuda/cccl/headers/include/thrust/detail/merge.inl +276 -0
  1292. cuda/cccl/headers/include/thrust/detail/mismatch.inl +94 -0
  1293. cuda/cccl/headers/include/thrust/detail/overlapped_copy.h +124 -0
  1294. cuda/cccl/headers/include/thrust/detail/partition.inl +378 -0
  1295. cuda/cccl/headers/include/thrust/detail/pointer.h +309 -0
  1296. cuda/cccl/headers/include/thrust/detail/preprocessor.h +652 -0
  1297. cuda/cccl/headers/include/thrust/detail/random_bijection.h +177 -0
  1298. cuda/cccl/headers/include/thrust/detail/range/head_flags.h +116 -0
  1299. cuda/cccl/headers/include/thrust/detail/range/tail_flags.h +130 -0
  1300. cuda/cccl/headers/include/thrust/detail/raw_pointer_cast.h +52 -0
  1301. cuda/cccl/headers/include/thrust/detail/raw_reference_cast.h +192 -0
  1302. cuda/cccl/headers/include/thrust/detail/reduce.inl +377 -0
  1303. cuda/cccl/headers/include/thrust/detail/reference.h +494 -0
  1304. cuda/cccl/headers/include/thrust/detail/reference_forward_declaration.h +35 -0
  1305. cuda/cccl/headers/include/thrust/detail/remove.inl +213 -0
  1306. cuda/cccl/headers/include/thrust/detail/replace.inl +231 -0
  1307. cuda/cccl/headers/include/thrust/detail/reverse.inl +88 -0
  1308. cuda/cccl/headers/include/thrust/detail/scan.inl +518 -0
  1309. cuda/cccl/headers/include/thrust/detail/scatter.inl +157 -0
  1310. cuda/cccl/headers/include/thrust/detail/seq.h +66 -0
  1311. cuda/cccl/headers/include/thrust/detail/sequence.inl +109 -0
  1312. cuda/cccl/headers/include/thrust/detail/set_operations.inl +981 -0
  1313. cuda/cccl/headers/include/thrust/detail/shuffle.inl +86 -0
  1314. cuda/cccl/headers/include/thrust/detail/sort.inl +373 -0
  1315. cuda/cccl/headers/include/thrust/detail/static_assert.h +58 -0
  1316. cuda/cccl/headers/include/thrust/detail/static_map.h +167 -0
  1317. cuda/cccl/headers/include/thrust/detail/swap_ranges.inl +65 -0
  1318. cuda/cccl/headers/include/thrust/detail/tabulate.inl +62 -0
  1319. cuda/cccl/headers/include/thrust/detail/temporary_array.h +153 -0
  1320. cuda/cccl/headers/include/thrust/detail/temporary_array.inl +120 -0
  1321. cuda/cccl/headers/include/thrust/detail/temporary_buffer.h +81 -0
  1322. cuda/cccl/headers/include/thrust/detail/transform_reduce.inl +69 -0
  1323. cuda/cccl/headers/include/thrust/detail/transform_scan.inl +161 -0
  1324. cuda/cccl/headers/include/thrust/detail/trivial_sequence.h +130 -0
  1325. cuda/cccl/headers/include/thrust/detail/tuple_meta_transform.h +61 -0
  1326. cuda/cccl/headers/include/thrust/detail/type_deduction.h +62 -0
  1327. cuda/cccl/headers/include/thrust/detail/type_traits/has_member_function.h +47 -0
  1328. cuda/cccl/headers/include/thrust/detail/type_traits/has_nested_type.h +43 -0
  1329. cuda/cccl/headers/include/thrust/detail/type_traits/is_call_possible.h +167 -0
  1330. cuda/cccl/headers/include/thrust/detail/type_traits/is_commutative.h +69 -0
  1331. cuda/cccl/headers/include/thrust/detail/type_traits/is_metafunction_defined.h +39 -0
  1332. cuda/cccl/headers/include/thrust/detail/type_traits/is_thrust_pointer.h +59 -0
  1333. cuda/cccl/headers/include/thrust/detail/type_traits/iterator/is_output_iterator.h +46 -0
  1334. cuda/cccl/headers/include/thrust/detail/type_traits/minimum_type.h +89 -0
  1335. cuda/cccl/headers/include/thrust/detail/type_traits/pointer_traits.h +332 -0
  1336. cuda/cccl/headers/include/thrust/detail/type_traits.h +136 -0
  1337. cuda/cccl/headers/include/thrust/detail/uninitialized_copy.inl +90 -0
  1338. cuda/cccl/headers/include/thrust/detail/uninitialized_fill.inl +86 -0
  1339. cuda/cccl/headers/include/thrust/detail/unique.inl +373 -0
  1340. cuda/cccl/headers/include/thrust/detail/use_default.h +34 -0
  1341. cuda/cccl/headers/include/thrust/detail/vector_base.h +613 -0
  1342. cuda/cccl/headers/include/thrust/detail/vector_base.inl +1210 -0
  1343. cuda/cccl/headers/include/thrust/device_allocator.h +134 -0
  1344. cuda/cccl/headers/include/thrust/device_delete.h +74 -0
  1345. cuda/cccl/headers/include/thrust/device_free.h +85 -0
  1346. cuda/cccl/headers/include/thrust/device_make_unique.h +56 -0
  1347. cuda/cccl/headers/include/thrust/device_malloc.h +84 -0
  1348. cuda/cccl/headers/include/thrust/device_malloc_allocator.h +190 -0
  1349. cuda/cccl/headers/include/thrust/device_new.h +112 -0
  1350. cuda/cccl/headers/include/thrust/device_new_allocator.h +179 -0
  1351. cuda/cccl/headers/include/thrust/device_ptr.h +196 -0
  1352. cuda/cccl/headers/include/thrust/device_reference.h +983 -0
  1353. cuda/cccl/headers/include/thrust/device_vector.h +576 -0
  1354. cuda/cccl/headers/include/thrust/distance.h +43 -0
  1355. cuda/cccl/headers/include/thrust/equal.h +247 -0
  1356. cuda/cccl/headers/include/thrust/execution_policy.h +251 -0
  1357. cuda/cccl/headers/include/thrust/extrema.h +657 -0
  1358. cuda/cccl/headers/include/thrust/fill.h +200 -0
  1359. cuda/cccl/headers/include/thrust/find.h +382 -0
  1360. cuda/cccl/headers/include/thrust/for_each.h +261 -0
  1361. cuda/cccl/headers/include/thrust/functional.h +395 -0
  1362. cuda/cccl/headers/include/thrust/gather.h +464 -0
  1363. cuda/cccl/headers/include/thrust/generate.h +193 -0
  1364. cuda/cccl/headers/include/thrust/host_vector.h +576 -0
  1365. cuda/cccl/headers/include/thrust/inner_product.h +264 -0
  1366. cuda/cccl/headers/include/thrust/iterator/constant_iterator.h +221 -0
  1367. cuda/cccl/headers/include/thrust/iterator/counting_iterator.h +335 -0
  1368. cuda/cccl/headers/include/thrust/iterator/detail/any_assign.h +48 -0
  1369. cuda/cccl/headers/include/thrust/iterator/detail/any_system_tag.h +43 -0
  1370. cuda/cccl/headers/include/thrust/iterator/detail/device_system_tag.h +38 -0
  1371. cuda/cccl/headers/include/thrust/iterator/detail/host_system_tag.h +38 -0
  1372. cuda/cccl/headers/include/thrust/iterator/detail/iterator_adaptor_base.h +81 -0
  1373. cuda/cccl/headers/include/thrust/iterator/detail/iterator_category_to_system.h +60 -0
  1374. cuda/cccl/headers/include/thrust/iterator/detail/iterator_category_to_traversal.h +65 -0
  1375. cuda/cccl/headers/include/thrust/iterator/detail/iterator_category_with_system_and_traversal.h +57 -0
  1376. cuda/cccl/headers/include/thrust/iterator/detail/iterator_facade_category.h +182 -0
  1377. cuda/cccl/headers/include/thrust/iterator/detail/minimum_system.h +58 -0
  1378. cuda/cccl/headers/include/thrust/iterator/detail/normal_iterator.h +69 -0
  1379. cuda/cccl/headers/include/thrust/iterator/detail/retag.h +104 -0
  1380. cuda/cccl/headers/include/thrust/iterator/detail/tagged_iterator.h +81 -0
  1381. cuda/cccl/headers/include/thrust/iterator/detail/tuple_of_iterator_references.h +174 -0
  1382. cuda/cccl/headers/include/thrust/iterator/discard_iterator.h +163 -0
  1383. cuda/cccl/headers/include/thrust/iterator/iterator_adaptor.h +251 -0
  1384. cuda/cccl/headers/include/thrust/iterator/iterator_categories.h +211 -0
  1385. cuda/cccl/headers/include/thrust/iterator/iterator_facade.h +659 -0
  1386. cuda/cccl/headers/include/thrust/iterator/iterator_traits.h +334 -0
  1387. cuda/cccl/headers/include/thrust/iterator/iterator_traversal_tags.h +64 -0
  1388. cuda/cccl/headers/include/thrust/iterator/offset_iterator.h +194 -0
  1389. cuda/cccl/headers/include/thrust/iterator/permutation_iterator.h +204 -0
  1390. cuda/cccl/headers/include/thrust/iterator/retag.h +72 -0
  1391. cuda/cccl/headers/include/thrust/iterator/reverse_iterator.h +51 -0
  1392. cuda/cccl/headers/include/thrust/iterator/shuffle_iterator.h +185 -0
  1393. cuda/cccl/headers/include/thrust/iterator/strided_iterator.h +152 -0
  1394. cuda/cccl/headers/include/thrust/iterator/tabulate_output_iterator.h +152 -0
  1395. cuda/cccl/headers/include/thrust/iterator/transform_input_output_iterator.h +226 -0
  1396. cuda/cccl/headers/include/thrust/iterator/transform_iterator.h +351 -0
  1397. cuda/cccl/headers/include/thrust/iterator/transform_output_iterator.h +190 -0
  1398. cuda/cccl/headers/include/thrust/iterator/zip_iterator.h +359 -0
  1399. cuda/cccl/headers/include/thrust/logical.h +290 -0
  1400. cuda/cccl/headers/include/thrust/memory.h +299 -0
  1401. cuda/cccl/headers/include/thrust/merge.h +725 -0
  1402. cuda/cccl/headers/include/thrust/mismatch.h +261 -0
  1403. cuda/cccl/headers/include/thrust/mr/allocator.h +229 -0
  1404. cuda/cccl/headers/include/thrust/mr/device_memory_resource.h +41 -0
  1405. cuda/cccl/headers/include/thrust/mr/disjoint_pool.h +528 -0
  1406. cuda/cccl/headers/include/thrust/mr/disjoint_sync_pool.h +118 -0
  1407. cuda/cccl/headers/include/thrust/mr/disjoint_tls_pool.h +67 -0
  1408. cuda/cccl/headers/include/thrust/mr/fancy_pointer_resource.h +67 -0
  1409. cuda/cccl/headers/include/thrust/mr/host_memory_resource.h +38 -0
  1410. cuda/cccl/headers/include/thrust/mr/memory_resource.h +217 -0
  1411. cuda/cccl/headers/include/thrust/mr/new.h +100 -0
  1412. cuda/cccl/headers/include/thrust/mr/polymorphic_adaptor.h +63 -0
  1413. cuda/cccl/headers/include/thrust/mr/pool.h +528 -0
  1414. cuda/cccl/headers/include/thrust/mr/pool_options.h +174 -0
  1415. cuda/cccl/headers/include/thrust/mr/sync_pool.h +114 -0
  1416. cuda/cccl/headers/include/thrust/mr/tls_pool.h +64 -0
  1417. cuda/cccl/headers/include/thrust/mr/universal_memory_resource.h +29 -0
  1418. cuda/cccl/headers/include/thrust/mr/validator.h +56 -0
  1419. cuda/cccl/headers/include/thrust/pair.h +99 -0
  1420. cuda/cccl/headers/include/thrust/partition.h +1391 -0
  1421. cuda/cccl/headers/include/thrust/per_device_resource.h +98 -0
  1422. cuda/cccl/headers/include/thrust/random/detail/discard_block_engine.inl +184 -0
  1423. cuda/cccl/headers/include/thrust/random/detail/linear_congruential_engine.inl +155 -0
  1424. cuda/cccl/headers/include/thrust/random/detail/linear_congruential_engine_discard.h +104 -0
  1425. cuda/cccl/headers/include/thrust/random/detail/linear_feedback_shift_engine.inl +151 -0
  1426. cuda/cccl/headers/include/thrust/random/detail/linear_feedback_shift_engine_wordmask.h +53 -0
  1427. cuda/cccl/headers/include/thrust/random/detail/mod.h +101 -0
  1428. cuda/cccl/headers/include/thrust/random/detail/normal_distribution.inl +187 -0
  1429. cuda/cccl/headers/include/thrust/random/detail/normal_distribution_base.h +160 -0
  1430. cuda/cccl/headers/include/thrust/random/detail/random_core_access.h +63 -0
  1431. cuda/cccl/headers/include/thrust/random/detail/subtract_with_carry_engine.inl +201 -0
  1432. cuda/cccl/headers/include/thrust/random/detail/uniform_int_distribution.inl +198 -0
  1433. cuda/cccl/headers/include/thrust/random/detail/uniform_real_distribution.inl +200 -0
  1434. cuda/cccl/headers/include/thrust/random/detail/xor_combine_engine.inl +183 -0
  1435. cuda/cccl/headers/include/thrust/random/detail/xor_combine_engine_max.h +187 -0
  1436. cuda/cccl/headers/include/thrust/random/discard_block_engine.h +240 -0
  1437. cuda/cccl/headers/include/thrust/random/linear_congruential_engine.h +289 -0
  1438. cuda/cccl/headers/include/thrust/random/linear_feedback_shift_engine.h +217 -0
  1439. cuda/cccl/headers/include/thrust/random/normal_distribution.h +257 -0
  1440. cuda/cccl/headers/include/thrust/random/subtract_with_carry_engine.h +247 -0
  1441. cuda/cccl/headers/include/thrust/random/uniform_int_distribution.h +261 -0
  1442. cuda/cccl/headers/include/thrust/random/uniform_real_distribution.h +258 -0
  1443. cuda/cccl/headers/include/thrust/random/xor_combine_engine.h +255 -0
  1444. cuda/cccl/headers/include/thrust/random.h +120 -0
  1445. cuda/cccl/headers/include/thrust/reduce.h +1113 -0
  1446. cuda/cccl/headers/include/thrust/remove.h +768 -0
  1447. cuda/cccl/headers/include/thrust/replace.h +826 -0
  1448. cuda/cccl/headers/include/thrust/reverse.h +215 -0
  1449. cuda/cccl/headers/include/thrust/scan.h +1671 -0
  1450. cuda/cccl/headers/include/thrust/scatter.h +446 -0
  1451. cuda/cccl/headers/include/thrust/sequence.h +277 -0
  1452. cuda/cccl/headers/include/thrust/set_operations.h +3026 -0
  1453. cuda/cccl/headers/include/thrust/shuffle.h +182 -0
  1454. cuda/cccl/headers/include/thrust/sort.h +1320 -0
  1455. cuda/cccl/headers/include/thrust/swap.h +147 -0
  1456. cuda/cccl/headers/include/thrust/system/cpp/detail/adjacent_difference.h +30 -0
  1457. cuda/cccl/headers/include/thrust/system/cpp/detail/assign_value.h +30 -0
  1458. cuda/cccl/headers/include/thrust/system/cpp/detail/binary_search.h +32 -0
  1459. cuda/cccl/headers/include/thrust/system/cpp/detail/copy.h +30 -0
  1460. cuda/cccl/headers/include/thrust/system/cpp/detail/copy_if.h +30 -0
  1461. cuda/cccl/headers/include/thrust/system/cpp/detail/count.h +29 -0
  1462. cuda/cccl/headers/include/thrust/system/cpp/detail/equal.h +29 -0
  1463. cuda/cccl/headers/include/thrust/system/cpp/detail/execution_policy.h +109 -0
  1464. cuda/cccl/headers/include/thrust/system/cpp/detail/extrema.h +30 -0
  1465. cuda/cccl/headers/include/thrust/system/cpp/detail/fill.h +29 -0
  1466. cuda/cccl/headers/include/thrust/system/cpp/detail/find.h +30 -0
  1467. cuda/cccl/headers/include/thrust/system/cpp/detail/for_each.h +30 -0
  1468. cuda/cccl/headers/include/thrust/system/cpp/detail/gather.h +29 -0
  1469. cuda/cccl/headers/include/thrust/system/cpp/detail/generate.h +29 -0
  1470. cuda/cccl/headers/include/thrust/system/cpp/detail/get_value.h +30 -0
  1471. cuda/cccl/headers/include/thrust/system/cpp/detail/inner_product.h +29 -0
  1472. cuda/cccl/headers/include/thrust/system/cpp/detail/iter_swap.h +30 -0
  1473. cuda/cccl/headers/include/thrust/system/cpp/detail/logical.h +29 -0
  1474. cuda/cccl/headers/include/thrust/system/cpp/detail/malloc_and_free.h +30 -0
  1475. cuda/cccl/headers/include/thrust/system/cpp/detail/memory.inl +60 -0
  1476. cuda/cccl/headers/include/thrust/system/cpp/detail/merge.h +30 -0
  1477. cuda/cccl/headers/include/thrust/system/cpp/detail/mismatch.h +29 -0
  1478. cuda/cccl/headers/include/thrust/system/cpp/detail/partition.h +30 -0
  1479. cuda/cccl/headers/include/thrust/system/cpp/detail/per_device_resource.h +29 -0
  1480. cuda/cccl/headers/include/thrust/system/cpp/detail/reduce.h +30 -0
  1481. cuda/cccl/headers/include/thrust/system/cpp/detail/reduce_by_key.h +30 -0
  1482. cuda/cccl/headers/include/thrust/system/cpp/detail/remove.h +30 -0
  1483. cuda/cccl/headers/include/thrust/system/cpp/detail/replace.h +29 -0
  1484. cuda/cccl/headers/include/thrust/system/cpp/detail/reverse.h +29 -0
  1485. cuda/cccl/headers/include/thrust/system/cpp/detail/scan.h +30 -0
  1486. cuda/cccl/headers/include/thrust/system/cpp/detail/scan_by_key.h +30 -0
  1487. cuda/cccl/headers/include/thrust/system/cpp/detail/scatter.h +29 -0
  1488. cuda/cccl/headers/include/thrust/system/cpp/detail/sequence.h +29 -0
  1489. cuda/cccl/headers/include/thrust/system/cpp/detail/set_operations.h +30 -0
  1490. cuda/cccl/headers/include/thrust/system/cpp/detail/sort.h +30 -0
  1491. cuda/cccl/headers/include/thrust/system/cpp/detail/swap_ranges.h +29 -0
  1492. cuda/cccl/headers/include/thrust/system/cpp/detail/tabulate.h +29 -0
  1493. cuda/cccl/headers/include/thrust/system/cpp/detail/temporary_buffer.h +29 -0
  1494. cuda/cccl/headers/include/thrust/system/cpp/detail/transform.h +29 -0
  1495. cuda/cccl/headers/include/thrust/system/cpp/detail/transform_reduce.h +29 -0
  1496. cuda/cccl/headers/include/thrust/system/cpp/detail/transform_scan.h +29 -0
  1497. cuda/cccl/headers/include/thrust/system/cpp/detail/uninitialized_copy.h +29 -0
  1498. cuda/cccl/headers/include/thrust/system/cpp/detail/uninitialized_fill.h +29 -0
  1499. cuda/cccl/headers/include/thrust/system/cpp/detail/unique.h +30 -0
  1500. cuda/cccl/headers/include/thrust/system/cpp/detail/unique_by_key.h +30 -0
  1501. cuda/cccl/headers/include/thrust/system/cpp/execution_policy.h +63 -0
  1502. cuda/cccl/headers/include/thrust/system/cpp/memory.h +106 -0
  1503. cuda/cccl/headers/include/thrust/system/cpp/memory_resource.h +72 -0
  1504. cuda/cccl/headers/include/thrust/system/cpp/pointer.h +120 -0
  1505. cuda/cccl/headers/include/thrust/system/cpp/vector.h +96 -0
  1506. cuda/cccl/headers/include/thrust/system/cuda/config.h +126 -0
  1507. cuda/cccl/headers/include/thrust/system/cuda/detail/adjacent_difference.h +219 -0
  1508. cuda/cccl/headers/include/thrust/system/cuda/detail/assign_value.h +124 -0
  1509. cuda/cccl/headers/include/thrust/system/cuda/detail/binary_search.h +29 -0
  1510. cuda/cccl/headers/include/thrust/system/cuda/detail/cdp_dispatch.h +72 -0
  1511. cuda/cccl/headers/include/thrust/system/cuda/detail/copy.h +273 -0
  1512. cuda/cccl/headers/include/thrust/system/cuda/detail/copy_if.h +255 -0
  1513. cuda/cccl/headers/include/thrust/system/cuda/detail/core/agent_launcher.h +289 -0
  1514. cuda/cccl/headers/include/thrust/system/cuda/detail/core/triple_chevron_launch.h +191 -0
  1515. cuda/cccl/headers/include/thrust/system/cuda/detail/core/util.h +593 -0
  1516. cuda/cccl/headers/include/thrust/system/cuda/detail/count.h +75 -0
  1517. cuda/cccl/headers/include/thrust/system/cuda/detail/cross_system.h +243 -0
  1518. cuda/cccl/headers/include/thrust/system/cuda/detail/dispatch.h +233 -0
  1519. cuda/cccl/headers/include/thrust/system/cuda/detail/equal.h +64 -0
  1520. cuda/cccl/headers/include/thrust/system/cuda/detail/error.inl +96 -0
  1521. cuda/cccl/headers/include/thrust/system/cuda/detail/execution_policy.h +264 -0
  1522. cuda/cccl/headers/include/thrust/system/cuda/detail/extrema.h +476 -0
  1523. cuda/cccl/headers/include/thrust/system/cuda/detail/fill.h +100 -0
  1524. cuda/cccl/headers/include/thrust/system/cuda/detail/find.h +170 -0
  1525. cuda/cccl/headers/include/thrust/system/cuda/detail/for_each.h +83 -0
  1526. cuda/cccl/headers/include/thrust/system/cuda/detail/gather.h +91 -0
  1527. cuda/cccl/headers/include/thrust/system/cuda/detail/generate.h +60 -0
  1528. cuda/cccl/headers/include/thrust/system/cuda/detail/get_value.h +65 -0
  1529. cuda/cccl/headers/include/thrust/system/cuda/detail/inner_product.h +75 -0
  1530. cuda/cccl/headers/include/thrust/system/cuda/detail/iter_swap.h +80 -0
  1531. cuda/cccl/headers/include/thrust/system/cuda/detail/logical.h +29 -0
  1532. cuda/cccl/headers/include/thrust/system/cuda/detail/make_unsigned_special.h +61 -0
  1533. cuda/cccl/headers/include/thrust/system/cuda/detail/malloc_and_free.h +121 -0
  1534. cuda/cccl/headers/include/thrust/system/cuda/detail/memory.inl +57 -0
  1535. cuda/cccl/headers/include/thrust/system/cuda/detail/merge.h +228 -0
  1536. cuda/cccl/headers/include/thrust/system/cuda/detail/mismatch.h +223 -0
  1537. cuda/cccl/headers/include/thrust/system/cuda/detail/parallel_for.h +81 -0
  1538. cuda/cccl/headers/include/thrust/system/cuda/detail/partition.h +405 -0
  1539. cuda/cccl/headers/include/thrust/system/cuda/detail/per_device_resource.h +72 -0
  1540. cuda/cccl/headers/include/thrust/system/cuda/detail/reduce.h +785 -0
  1541. cuda/cccl/headers/include/thrust/system/cuda/detail/reduce_by_key.h +1001 -0
  1542. cuda/cccl/headers/include/thrust/system/cuda/detail/remove.h +107 -0
  1543. cuda/cccl/headers/include/thrust/system/cuda/detail/replace.h +122 -0
  1544. cuda/cccl/headers/include/thrust/system/cuda/detail/reverse.h +87 -0
  1545. cuda/cccl/headers/include/thrust/system/cuda/detail/scan.h +341 -0
  1546. cuda/cccl/headers/include/thrust/system/cuda/detail/scan_by_key.h +414 -0
  1547. cuda/cccl/headers/include/thrust/system/cuda/detail/scatter.h +91 -0
  1548. cuda/cccl/headers/include/thrust/system/cuda/detail/sequence.h +29 -0
  1549. cuda/cccl/headers/include/thrust/system/cuda/detail/set_operations.h +1734 -0
  1550. cuda/cccl/headers/include/thrust/system/cuda/detail/sort.h +469 -0
  1551. cuda/cccl/headers/include/thrust/system/cuda/detail/swap_ranges.h +98 -0
  1552. cuda/cccl/headers/include/thrust/system/cuda/detail/tabulate.h +61 -0
  1553. cuda/cccl/headers/include/thrust/system/cuda/detail/temporary_buffer.h +132 -0
  1554. cuda/cccl/headers/include/thrust/system/cuda/detail/terminate.h +53 -0
  1555. cuda/cccl/headers/include/thrust/system/cuda/detail/transform.h +429 -0
  1556. cuda/cccl/headers/include/thrust/system/cuda/detail/transform_reduce.h +143 -0
  1557. cuda/cccl/headers/include/thrust/system/cuda/detail/transform_scan.h +119 -0
  1558. cuda/cccl/headers/include/thrust/system/cuda/detail/uninitialized_copy.h +117 -0
  1559. cuda/cccl/headers/include/thrust/system/cuda/detail/uninitialized_fill.h +105 -0
  1560. cuda/cccl/headers/include/thrust/system/cuda/detail/unique.h +289 -0
  1561. cuda/cccl/headers/include/thrust/system/cuda/detail/unique_by_key.h +310 -0
  1562. cuda/cccl/headers/include/thrust/system/cuda/detail/util.h +253 -0
  1563. cuda/cccl/headers/include/thrust/system/cuda/error.h +168 -0
  1564. cuda/cccl/headers/include/thrust/system/cuda/execution_policy.h +15 -0
  1565. cuda/cccl/headers/include/thrust/system/cuda/memory.h +122 -0
  1566. cuda/cccl/headers/include/thrust/system/cuda/memory_resource.h +122 -0
  1567. cuda/cccl/headers/include/thrust/system/cuda/pointer.h +160 -0
  1568. cuda/cccl/headers/include/thrust/system/cuda/vector.h +108 -0
  1569. cuda/cccl/headers/include/thrust/system/detail/adl/adjacent_difference.h +51 -0
  1570. cuda/cccl/headers/include/thrust/system/detail/adl/assign_value.h +51 -0
  1571. cuda/cccl/headers/include/thrust/system/detail/adl/binary_search.h +51 -0
  1572. cuda/cccl/headers/include/thrust/system/detail/adl/copy.h +51 -0
  1573. cuda/cccl/headers/include/thrust/system/detail/adl/copy_if.h +52 -0
  1574. cuda/cccl/headers/include/thrust/system/detail/adl/count.h +51 -0
  1575. cuda/cccl/headers/include/thrust/system/detail/adl/equal.h +51 -0
  1576. cuda/cccl/headers/include/thrust/system/detail/adl/extrema.h +51 -0
  1577. cuda/cccl/headers/include/thrust/system/detail/adl/fill.h +51 -0
  1578. cuda/cccl/headers/include/thrust/system/detail/adl/find.h +51 -0
  1579. cuda/cccl/headers/include/thrust/system/detail/adl/for_each.h +51 -0
  1580. cuda/cccl/headers/include/thrust/system/detail/adl/gather.h +51 -0
  1581. cuda/cccl/headers/include/thrust/system/detail/adl/generate.h +51 -0
  1582. cuda/cccl/headers/include/thrust/system/detail/adl/get_value.h +51 -0
  1583. cuda/cccl/headers/include/thrust/system/detail/adl/inner_product.h +51 -0
  1584. cuda/cccl/headers/include/thrust/system/detail/adl/iter_swap.h +51 -0
  1585. cuda/cccl/headers/include/thrust/system/detail/adl/logical.h +51 -0
  1586. cuda/cccl/headers/include/thrust/system/detail/adl/malloc_and_free.h +51 -0
  1587. cuda/cccl/headers/include/thrust/system/detail/adl/merge.h +51 -0
  1588. cuda/cccl/headers/include/thrust/system/detail/adl/mismatch.h +51 -0
  1589. cuda/cccl/headers/include/thrust/system/detail/adl/partition.h +51 -0
  1590. cuda/cccl/headers/include/thrust/system/detail/adl/per_device_resource.h +51 -0
  1591. cuda/cccl/headers/include/thrust/system/detail/adl/reduce.h +51 -0
  1592. cuda/cccl/headers/include/thrust/system/detail/adl/reduce_by_key.h +51 -0
  1593. cuda/cccl/headers/include/thrust/system/detail/adl/remove.h +51 -0
  1594. cuda/cccl/headers/include/thrust/system/detail/adl/replace.h +51 -0
  1595. cuda/cccl/headers/include/thrust/system/detail/adl/reverse.h +51 -0
  1596. cuda/cccl/headers/include/thrust/system/detail/adl/scan.h +51 -0
  1597. cuda/cccl/headers/include/thrust/system/detail/adl/scan_by_key.h +51 -0
  1598. cuda/cccl/headers/include/thrust/system/detail/adl/scatter.h +51 -0
  1599. cuda/cccl/headers/include/thrust/system/detail/adl/sequence.h +51 -0
  1600. cuda/cccl/headers/include/thrust/system/detail/adl/set_operations.h +51 -0
  1601. cuda/cccl/headers/include/thrust/system/detail/adl/sort.h +51 -0
  1602. cuda/cccl/headers/include/thrust/system/detail/adl/swap_ranges.h +51 -0
  1603. cuda/cccl/headers/include/thrust/system/detail/adl/tabulate.h +51 -0
  1604. cuda/cccl/headers/include/thrust/system/detail/adl/temporary_buffer.h +51 -0
  1605. cuda/cccl/headers/include/thrust/system/detail/adl/transform.h +51 -0
  1606. cuda/cccl/headers/include/thrust/system/detail/adl/transform_reduce.h +51 -0
  1607. cuda/cccl/headers/include/thrust/system/detail/adl/transform_scan.h +51 -0
  1608. cuda/cccl/headers/include/thrust/system/detail/adl/uninitialized_copy.h +51 -0
  1609. cuda/cccl/headers/include/thrust/system/detail/adl/uninitialized_fill.h +51 -0
  1610. cuda/cccl/headers/include/thrust/system/detail/adl/unique.h +51 -0
  1611. cuda/cccl/headers/include/thrust/system/detail/adl/unique_by_key.h +51 -0
  1612. cuda/cccl/headers/include/thrust/system/detail/bad_alloc.h +61 -0
  1613. cuda/cccl/headers/include/thrust/system/detail/errno.h +120 -0
  1614. cuda/cccl/headers/include/thrust/system/detail/error_category.inl +302 -0
  1615. cuda/cccl/headers/include/thrust/system/detail/error_code.inl +173 -0
  1616. cuda/cccl/headers/include/thrust/system/detail/error_condition.inl +121 -0
  1617. cuda/cccl/headers/include/thrust/system/detail/generic/adjacent_difference.h +53 -0
  1618. cuda/cccl/headers/include/thrust/system/detail/generic/adjacent_difference.inl +79 -0
  1619. cuda/cccl/headers/include/thrust/system/detail/generic/binary_search.h +161 -0
  1620. cuda/cccl/headers/include/thrust/system/detail/generic/binary_search.inl +384 -0
  1621. cuda/cccl/headers/include/thrust/system/detail/generic/copy.h +45 -0
  1622. cuda/cccl/headers/include/thrust/system/detail/generic/copy.inl +64 -0
  1623. cuda/cccl/headers/include/thrust/system/detail/generic/copy_if.h +58 -0
  1624. cuda/cccl/headers/include/thrust/system/detail/generic/copy_if.inl +146 -0
  1625. cuda/cccl/headers/include/thrust/system/detail/generic/count.h +48 -0
  1626. cuda/cccl/headers/include/thrust/system/detail/generic/count.inl +84 -0
  1627. cuda/cccl/headers/include/thrust/system/detail/generic/equal.h +49 -0
  1628. cuda/cccl/headers/include/thrust/system/detail/generic/equal.inl +60 -0
  1629. cuda/cccl/headers/include/thrust/system/detail/generic/extrema.h +66 -0
  1630. cuda/cccl/headers/include/thrust/system/detail/generic/extrema.inl +252 -0
  1631. cuda/cccl/headers/include/thrust/system/detail/generic/fill.h +54 -0
  1632. cuda/cccl/headers/include/thrust/system/detail/generic/find.h +49 -0
  1633. cuda/cccl/headers/include/thrust/system/detail/generic/find.inl +137 -0
  1634. cuda/cccl/headers/include/thrust/system/detail/generic/for_each.h +58 -0
  1635. cuda/cccl/headers/include/thrust/system/detail/generic/gather.h +73 -0
  1636. cuda/cccl/headers/include/thrust/system/detail/generic/gather.inl +96 -0
  1637. cuda/cccl/headers/include/thrust/system/detail/generic/generate.h +45 -0
  1638. cuda/cccl/headers/include/thrust/system/detail/generic/generate.inl +63 -0
  1639. cuda/cccl/headers/include/thrust/system/detail/generic/inner_product.h +60 -0
  1640. cuda/cccl/headers/include/thrust/system/detail/generic/inner_product.inl +72 -0
  1641. cuda/cccl/headers/include/thrust/system/detail/generic/logical.h +59 -0
  1642. cuda/cccl/headers/include/thrust/system/detail/generic/memory.h +64 -0
  1643. cuda/cccl/headers/include/thrust/system/detail/generic/memory.inl +86 -0
  1644. cuda/cccl/headers/include/thrust/system/detail/generic/merge.h +99 -0
  1645. cuda/cccl/headers/include/thrust/system/detail/generic/merge.inl +148 -0
  1646. cuda/cccl/headers/include/thrust/system/detail/generic/mismatch.h +49 -0
  1647. cuda/cccl/headers/include/thrust/system/detail/generic/mismatch.inl +68 -0
  1648. cuda/cccl/headers/include/thrust/system/detail/generic/partition.h +129 -0
  1649. cuda/cccl/headers/include/thrust/system/detail/generic/partition.inl +207 -0
  1650. cuda/cccl/headers/include/thrust/system/detail/generic/per_device_resource.h +43 -0
  1651. cuda/cccl/headers/include/thrust/system/detail/generic/reduce.h +71 -0
  1652. cuda/cccl/headers/include/thrust/system/detail/generic/reduce.inl +100 -0
  1653. cuda/cccl/headers/include/thrust/system/detail/generic/reduce_by_key.h +83 -0
  1654. cuda/cccl/headers/include/thrust/system/detail/generic/reduce_by_key.inl +186 -0
  1655. cuda/cccl/headers/include/thrust/system/detail/generic/remove.h +86 -0
  1656. cuda/cccl/headers/include/thrust/system/detail/generic/remove.inl +121 -0
  1657. cuda/cccl/headers/include/thrust/system/detail/generic/replace.h +95 -0
  1658. cuda/cccl/headers/include/thrust/system/detail/generic/replace.inl +175 -0
  1659. cuda/cccl/headers/include/thrust/system/detail/generic/reverse.h +48 -0
  1660. cuda/cccl/headers/include/thrust/system/detail/generic/reverse.inl +67 -0
  1661. cuda/cccl/headers/include/thrust/system/detail/generic/scalar/binary_search.h +63 -0
  1662. cuda/cccl/headers/include/thrust/system/detail/generic/scalar/binary_search.inl +126 -0
  1663. cuda/cccl/headers/include/thrust/system/detail/generic/scan.h +72 -0
  1664. cuda/cccl/headers/include/thrust/system/detail/generic/scan.inl +85 -0
  1665. cuda/cccl/headers/include/thrust/system/detail/generic/scan_by_key.h +126 -0
  1666. cuda/cccl/headers/include/thrust/system/detail/generic/scan_by_key.inl +232 -0
  1667. cuda/cccl/headers/include/thrust/system/detail/generic/scatter.h +73 -0
  1668. cuda/cccl/headers/include/thrust/system/detail/generic/scatter.inl +85 -0
  1669. cuda/cccl/headers/include/thrust/system/detail/generic/select_system.h +104 -0
  1670. cuda/cccl/headers/include/thrust/system/detail/generic/sequence.h +70 -0
  1671. cuda/cccl/headers/include/thrust/system/detail/generic/set_operations.h +282 -0
  1672. cuda/cccl/headers/include/thrust/system/detail/generic/set_operations.inl +476 -0
  1673. cuda/cccl/headers/include/thrust/system/detail/generic/shuffle.h +54 -0
  1674. cuda/cccl/headers/include/thrust/system/detail/generic/shuffle.inl +125 -0
  1675. cuda/cccl/headers/include/thrust/system/detail/generic/sort.h +113 -0
  1676. cuda/cccl/headers/include/thrust/system/detail/generic/sort.inl +175 -0
  1677. cuda/cccl/headers/include/thrust/system/detail/generic/swap_ranges.h +44 -0
  1678. cuda/cccl/headers/include/thrust/system/detail/generic/swap_ranges.inl +76 -0
  1679. cuda/cccl/headers/include/thrust/system/detail/generic/tabulate.h +41 -0
  1680. cuda/cccl/headers/include/thrust/system/detail/generic/tabulate.inl +54 -0
  1681. cuda/cccl/headers/include/thrust/system/detail/generic/tag.h +47 -0
  1682. cuda/cccl/headers/include/thrust/system/detail/generic/temporary_buffer.h +54 -0
  1683. cuda/cccl/headers/include/thrust/system/detail/generic/temporary_buffer.inl +82 -0
  1684. cuda/cccl/headers/include/thrust/system/detail/generic/transform.h +395 -0
  1685. cuda/cccl/headers/include/thrust/system/detail/generic/transform_reduce.h +50 -0
  1686. cuda/cccl/headers/include/thrust/system/detail/generic/transform_reduce.inl +56 -0
  1687. cuda/cccl/headers/include/thrust/system/detail/generic/transform_scan.h +80 -0
  1688. cuda/cccl/headers/include/thrust/system/detail/generic/transform_scan.inl +113 -0
  1689. cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_copy.h +45 -0
  1690. cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_copy.inl +166 -0
  1691. cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_fill.h +45 -0
  1692. cuda/cccl/headers/include/thrust/system/detail/generic/uninitialized_fill.inl +115 -0
  1693. cuda/cccl/headers/include/thrust/system/detail/generic/unique.h +71 -0
  1694. cuda/cccl/headers/include/thrust/system/detail/generic/unique.inl +113 -0
  1695. cuda/cccl/headers/include/thrust/system/detail/generic/unique_by_key.h +81 -0
  1696. cuda/cccl/headers/include/thrust/system/detail/generic/unique_by_key.inl +126 -0
  1697. cuda/cccl/headers/include/thrust/system/detail/internal/decompose.h +117 -0
  1698. cuda/cccl/headers/include/thrust/system/detail/sequential/adjacent_difference.h +70 -0
  1699. cuda/cccl/headers/include/thrust/system/detail/sequential/assign_value.h +42 -0
  1700. cuda/cccl/headers/include/thrust/system/detail/sequential/binary_search.h +136 -0
  1701. cuda/cccl/headers/include/thrust/system/detail/sequential/copy.h +49 -0
  1702. cuda/cccl/headers/include/thrust/system/detail/sequential/copy.inl +119 -0
  1703. cuda/cccl/headers/include/thrust/system/detail/sequential/copy_backward.h +49 -0
  1704. cuda/cccl/headers/include/thrust/system/detail/sequential/copy_if.h +71 -0
  1705. cuda/cccl/headers/include/thrust/system/detail/sequential/count.h +29 -0
  1706. cuda/cccl/headers/include/thrust/system/detail/sequential/equal.h +29 -0
  1707. cuda/cccl/headers/include/thrust/system/detail/sequential/execution_policy.h +52 -0
  1708. cuda/cccl/headers/include/thrust/system/detail/sequential/extrema.h +110 -0
  1709. cuda/cccl/headers/include/thrust/system/detail/sequential/fill.h +29 -0
  1710. cuda/cccl/headers/include/thrust/system/detail/sequential/find.h +62 -0
  1711. cuda/cccl/headers/include/thrust/system/detail/sequential/for_each.h +74 -0
  1712. cuda/cccl/headers/include/thrust/system/detail/sequential/gather.h +29 -0
  1713. cuda/cccl/headers/include/thrust/system/detail/sequential/general_copy.h +123 -0
  1714. cuda/cccl/headers/include/thrust/system/detail/sequential/generate.h +29 -0
  1715. cuda/cccl/headers/include/thrust/system/detail/sequential/get_value.h +43 -0
  1716. cuda/cccl/headers/include/thrust/system/detail/sequential/inner_product.h +29 -0
  1717. cuda/cccl/headers/include/thrust/system/detail/sequential/insertion_sort.h +141 -0
  1718. cuda/cccl/headers/include/thrust/system/detail/sequential/iter_swap.h +45 -0
  1719. cuda/cccl/headers/include/thrust/system/detail/sequential/logical.h +29 -0
  1720. cuda/cccl/headers/include/thrust/system/detail/sequential/malloc_and_free.h +50 -0
  1721. cuda/cccl/headers/include/thrust/system/detail/sequential/merge.h +75 -0
  1722. cuda/cccl/headers/include/thrust/system/detail/sequential/merge.inl +145 -0
  1723. cuda/cccl/headers/include/thrust/system/detail/sequential/mismatch.h +29 -0
  1724. cuda/cccl/headers/include/thrust/system/detail/sequential/partition.h +301 -0
  1725. cuda/cccl/headers/include/thrust/system/detail/sequential/per_device_resource.h +29 -0
  1726. cuda/cccl/headers/include/thrust/system/detail/sequential/reduce.h +64 -0
  1727. cuda/cccl/headers/include/thrust/system/detail/sequential/reduce_by_key.h +98 -0
  1728. cuda/cccl/headers/include/thrust/system/detail/sequential/remove.h +179 -0
  1729. cuda/cccl/headers/include/thrust/system/detail/sequential/replace.h +29 -0
  1730. cuda/cccl/headers/include/thrust/system/detail/sequential/reverse.h +29 -0
  1731. cuda/cccl/headers/include/thrust/system/detail/sequential/scan.h +154 -0
  1732. cuda/cccl/headers/include/thrust/system/detail/sequential/scan_by_key.h +145 -0
  1733. cuda/cccl/headers/include/thrust/system/detail/sequential/scatter.h +29 -0
  1734. cuda/cccl/headers/include/thrust/system/detail/sequential/sequence.h +29 -0
  1735. cuda/cccl/headers/include/thrust/system/detail/sequential/set_operations.h +206 -0
  1736. cuda/cccl/headers/include/thrust/system/detail/sequential/sort.h +59 -0
  1737. cuda/cccl/headers/include/thrust/system/detail/sequential/sort.inl +116 -0
  1738. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_merge_sort.h +55 -0
  1739. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_merge_sort.inl +356 -0
  1740. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_primitive_sort.h +48 -0
  1741. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_primitive_sort.inl +124 -0
  1742. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_radix_sort.h +48 -0
  1743. cuda/cccl/headers/include/thrust/system/detail/sequential/stable_radix_sort.inl +586 -0
  1744. cuda/cccl/headers/include/thrust/system/detail/sequential/swap_ranges.h +29 -0
  1745. cuda/cccl/headers/include/thrust/system/detail/sequential/tabulate.h +29 -0
  1746. cuda/cccl/headers/include/thrust/system/detail/sequential/temporary_buffer.h +29 -0
  1747. cuda/cccl/headers/include/thrust/system/detail/sequential/transform.h +29 -0
  1748. cuda/cccl/headers/include/thrust/system/detail/sequential/transform_reduce.h +29 -0
  1749. cuda/cccl/headers/include/thrust/system/detail/sequential/transform_scan.h +29 -0
  1750. cuda/cccl/headers/include/thrust/system/detail/sequential/trivial_copy.h +58 -0
  1751. cuda/cccl/headers/include/thrust/system/detail/sequential/uninitialized_copy.h +29 -0
  1752. cuda/cccl/headers/include/thrust/system/detail/sequential/uninitialized_fill.h +29 -0
  1753. cuda/cccl/headers/include/thrust/system/detail/sequential/unique.h +115 -0
  1754. cuda/cccl/headers/include/thrust/system/detail/sequential/unique_by_key.h +106 -0
  1755. cuda/cccl/headers/include/thrust/system/detail/system_error.inl +108 -0
  1756. cuda/cccl/headers/include/thrust/system/error_code.h +512 -0
  1757. cuda/cccl/headers/include/thrust/system/omp/detail/adjacent_difference.h +54 -0
  1758. cuda/cccl/headers/include/thrust/system/omp/detail/assign_value.h +30 -0
  1759. cuda/cccl/headers/include/thrust/system/omp/detail/binary_search.h +77 -0
  1760. cuda/cccl/headers/include/thrust/system/omp/detail/copy.h +50 -0
  1761. cuda/cccl/headers/include/thrust/system/omp/detail/copy.inl +74 -0
  1762. cuda/cccl/headers/include/thrust/system/omp/detail/copy_if.h +56 -0
  1763. cuda/cccl/headers/include/thrust/system/omp/detail/copy_if.inl +59 -0
  1764. cuda/cccl/headers/include/thrust/system/omp/detail/count.h +30 -0
  1765. cuda/cccl/headers/include/thrust/system/omp/detail/default_decomposition.h +50 -0
  1766. cuda/cccl/headers/include/thrust/system/omp/detail/default_decomposition.inl +65 -0
  1767. cuda/cccl/headers/include/thrust/system/omp/detail/equal.h +30 -0
  1768. cuda/cccl/headers/include/thrust/system/omp/detail/execution_policy.h +127 -0
  1769. cuda/cccl/headers/include/thrust/system/omp/detail/extrema.h +66 -0
  1770. cuda/cccl/headers/include/thrust/system/omp/detail/fill.h +30 -0
  1771. cuda/cccl/headers/include/thrust/system/omp/detail/find.h +53 -0
  1772. cuda/cccl/headers/include/thrust/system/omp/detail/for_each.h +56 -0
  1773. cuda/cccl/headers/include/thrust/system/omp/detail/for_each.inl +87 -0
  1774. cuda/cccl/headers/include/thrust/system/omp/detail/gather.h +30 -0
  1775. cuda/cccl/headers/include/thrust/system/omp/detail/generate.h +30 -0
  1776. cuda/cccl/headers/include/thrust/system/omp/detail/get_value.h +30 -0
  1777. cuda/cccl/headers/include/thrust/system/omp/detail/inner_product.h +30 -0
  1778. cuda/cccl/headers/include/thrust/system/omp/detail/iter_swap.h +30 -0
  1779. cuda/cccl/headers/include/thrust/system/omp/detail/logical.h +30 -0
  1780. cuda/cccl/headers/include/thrust/system/omp/detail/malloc_and_free.h +30 -0
  1781. cuda/cccl/headers/include/thrust/system/omp/detail/memory.inl +93 -0
  1782. cuda/cccl/headers/include/thrust/system/omp/detail/merge.h +30 -0
  1783. cuda/cccl/headers/include/thrust/system/omp/detail/mismatch.h +30 -0
  1784. cuda/cccl/headers/include/thrust/system/omp/detail/partition.h +88 -0
  1785. cuda/cccl/headers/include/thrust/system/omp/detail/partition.inl +102 -0
  1786. cuda/cccl/headers/include/thrust/system/omp/detail/per_device_resource.h +29 -0
  1787. cuda/cccl/headers/include/thrust/system/omp/detail/pragma_omp.h +54 -0
  1788. cuda/cccl/headers/include/thrust/system/omp/detail/reduce.h +54 -0
  1789. cuda/cccl/headers/include/thrust/system/omp/detail/reduce.inl +78 -0
  1790. cuda/cccl/headers/include/thrust/system/omp/detail/reduce_by_key.h +64 -0
  1791. cuda/cccl/headers/include/thrust/system/omp/detail/reduce_by_key.inl +65 -0
  1792. cuda/cccl/headers/include/thrust/system/omp/detail/reduce_intervals.h +59 -0
  1793. cuda/cccl/headers/include/thrust/system/omp/detail/reduce_intervals.inl +103 -0
  1794. cuda/cccl/headers/include/thrust/system/omp/detail/remove.h +72 -0
  1795. cuda/cccl/headers/include/thrust/system/omp/detail/remove.inl +87 -0
  1796. cuda/cccl/headers/include/thrust/system/omp/detail/replace.h +30 -0
  1797. cuda/cccl/headers/include/thrust/system/omp/detail/reverse.h +30 -0
  1798. cuda/cccl/headers/include/thrust/system/omp/detail/scan.h +73 -0
  1799. cuda/cccl/headers/include/thrust/system/omp/detail/scan.inl +172 -0
  1800. cuda/cccl/headers/include/thrust/system/omp/detail/scan_by_key.h +36 -0
  1801. cuda/cccl/headers/include/thrust/system/omp/detail/scatter.h +30 -0
  1802. cuda/cccl/headers/include/thrust/system/omp/detail/sequence.h +30 -0
  1803. cuda/cccl/headers/include/thrust/system/omp/detail/set_operations.h +30 -0
  1804. cuda/cccl/headers/include/thrust/system/omp/detail/sort.h +60 -0
  1805. cuda/cccl/headers/include/thrust/system/omp/detail/sort.inl +265 -0
  1806. cuda/cccl/headers/include/thrust/system/omp/detail/swap_ranges.h +30 -0
  1807. cuda/cccl/headers/include/thrust/system/omp/detail/tabulate.h +30 -0
  1808. cuda/cccl/headers/include/thrust/system/omp/detail/temporary_buffer.h +29 -0
  1809. cuda/cccl/headers/include/thrust/system/omp/detail/transform.h +30 -0
  1810. cuda/cccl/headers/include/thrust/system/omp/detail/transform_reduce.h +30 -0
  1811. cuda/cccl/headers/include/thrust/system/omp/detail/transform_scan.h +30 -0
  1812. cuda/cccl/headers/include/thrust/system/omp/detail/uninitialized_copy.h +30 -0
  1813. cuda/cccl/headers/include/thrust/system/omp/detail/uninitialized_fill.h +30 -0
  1814. cuda/cccl/headers/include/thrust/system/omp/detail/unique.h +60 -0
  1815. cuda/cccl/headers/include/thrust/system/omp/detail/unique.inl +71 -0
  1816. cuda/cccl/headers/include/thrust/system/omp/detail/unique_by_key.h +67 -0
  1817. cuda/cccl/headers/include/thrust/system/omp/detail/unique_by_key.inl +75 -0
  1818. cuda/cccl/headers/include/thrust/system/omp/execution_policy.h +62 -0
  1819. cuda/cccl/headers/include/thrust/system/omp/memory.h +111 -0
  1820. cuda/cccl/headers/include/thrust/system/omp/memory_resource.h +75 -0
  1821. cuda/cccl/headers/include/thrust/system/omp/pointer.h +124 -0
  1822. cuda/cccl/headers/include/thrust/system/omp/vector.h +99 -0
  1823. cuda/cccl/headers/include/thrust/system/system_error.h +185 -0
  1824. cuda/cccl/headers/include/thrust/system/tbb/detail/adjacent_difference.h +54 -0
  1825. cuda/cccl/headers/include/thrust/system/tbb/detail/assign_value.h +30 -0
  1826. cuda/cccl/headers/include/thrust/system/tbb/detail/binary_search.h +30 -0
  1827. cuda/cccl/headers/include/thrust/system/tbb/detail/copy.h +50 -0
  1828. cuda/cccl/headers/include/thrust/system/tbb/detail/copy.inl +73 -0
  1829. cuda/cccl/headers/include/thrust/system/tbb/detail/copy_if.h +47 -0
  1830. cuda/cccl/headers/include/thrust/system/tbb/detail/copy_if.inl +136 -0
  1831. cuda/cccl/headers/include/thrust/system/tbb/detail/count.h +30 -0
  1832. cuda/cccl/headers/include/thrust/system/tbb/detail/equal.h +30 -0
  1833. cuda/cccl/headers/include/thrust/system/tbb/detail/execution_policy.h +109 -0
  1834. cuda/cccl/headers/include/thrust/system/tbb/detail/extrema.h +66 -0
  1835. cuda/cccl/headers/include/thrust/system/tbb/detail/fill.h +30 -0
  1836. cuda/cccl/headers/include/thrust/system/tbb/detail/find.h +49 -0
  1837. cuda/cccl/headers/include/thrust/system/tbb/detail/for_each.h +51 -0
  1838. cuda/cccl/headers/include/thrust/system/tbb/detail/for_each.inl +91 -0
  1839. cuda/cccl/headers/include/thrust/system/tbb/detail/gather.h +30 -0
  1840. cuda/cccl/headers/include/thrust/system/tbb/detail/generate.h +30 -0
  1841. cuda/cccl/headers/include/thrust/system/tbb/detail/get_value.h +30 -0
  1842. cuda/cccl/headers/include/thrust/system/tbb/detail/inner_product.h +30 -0
  1843. cuda/cccl/headers/include/thrust/system/tbb/detail/iter_swap.h +30 -0
  1844. cuda/cccl/headers/include/thrust/system/tbb/detail/logical.h +30 -0
  1845. cuda/cccl/headers/include/thrust/system/tbb/detail/malloc_and_free.h +30 -0
  1846. cuda/cccl/headers/include/thrust/system/tbb/detail/memory.inl +94 -0
  1847. cuda/cccl/headers/include/thrust/system/tbb/detail/merge.h +77 -0
  1848. cuda/cccl/headers/include/thrust/system/tbb/detail/merge.inl +327 -0
  1849. cuda/cccl/headers/include/thrust/system/tbb/detail/mismatch.h +30 -0
  1850. cuda/cccl/headers/include/thrust/system/tbb/detail/partition.h +84 -0
  1851. cuda/cccl/headers/include/thrust/system/tbb/detail/partition.inl +98 -0
  1852. cuda/cccl/headers/include/thrust/system/tbb/detail/per_device_resource.h +29 -0
  1853. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce.h +54 -0
  1854. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce.inl +137 -0
  1855. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_by_key.h +61 -0
  1856. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_by_key.inl +400 -0
  1857. cuda/cccl/headers/include/thrust/system/tbb/detail/reduce_intervals.h +140 -0
  1858. cuda/cccl/headers/include/thrust/system/tbb/detail/remove.h +76 -0
  1859. cuda/cccl/headers/include/thrust/system/tbb/detail/remove.inl +87 -0
  1860. cuda/cccl/headers/include/thrust/system/tbb/detail/replace.h +30 -0
  1861. cuda/cccl/headers/include/thrust/system/tbb/detail/reverse.h +30 -0
  1862. cuda/cccl/headers/include/thrust/system/tbb/detail/scan.h +59 -0
  1863. cuda/cccl/headers/include/thrust/system/tbb/detail/scan.inl +312 -0
  1864. cuda/cccl/headers/include/thrust/system/tbb/detail/scan_by_key.h +33 -0
  1865. cuda/cccl/headers/include/thrust/system/tbb/detail/scatter.h +30 -0
  1866. cuda/cccl/headers/include/thrust/system/tbb/detail/sequence.h +30 -0
  1867. cuda/cccl/headers/include/thrust/system/tbb/detail/set_operations.h +30 -0
  1868. cuda/cccl/headers/include/thrust/system/tbb/detail/sort.h +60 -0
  1869. cuda/cccl/headers/include/thrust/system/tbb/detail/sort.inl +295 -0
  1870. cuda/cccl/headers/include/thrust/system/tbb/detail/swap_ranges.h +30 -0
  1871. cuda/cccl/headers/include/thrust/system/tbb/detail/tabulate.h +30 -0
  1872. cuda/cccl/headers/include/thrust/system/tbb/detail/temporary_buffer.h +29 -0
  1873. cuda/cccl/headers/include/thrust/system/tbb/detail/transform.h +30 -0
  1874. cuda/cccl/headers/include/thrust/system/tbb/detail/transform_reduce.h +30 -0
  1875. cuda/cccl/headers/include/thrust/system/tbb/detail/transform_scan.h +30 -0
  1876. cuda/cccl/headers/include/thrust/system/tbb/detail/uninitialized_copy.h +30 -0
  1877. cuda/cccl/headers/include/thrust/system/tbb/detail/uninitialized_fill.h +30 -0
  1878. cuda/cccl/headers/include/thrust/system/tbb/detail/unique.h +60 -0
  1879. cuda/cccl/headers/include/thrust/system/tbb/detail/unique.inl +71 -0
  1880. cuda/cccl/headers/include/thrust/system/tbb/detail/unique_by_key.h +67 -0
  1881. cuda/cccl/headers/include/thrust/system/tbb/detail/unique_by_key.inl +75 -0
  1882. cuda/cccl/headers/include/thrust/system/tbb/execution_policy.h +62 -0
  1883. cuda/cccl/headers/include/thrust/system/tbb/memory.h +111 -0
  1884. cuda/cccl/headers/include/thrust/system/tbb/memory_resource.h +75 -0
  1885. cuda/cccl/headers/include/thrust/system/tbb/pointer.h +124 -0
  1886. cuda/cccl/headers/include/thrust/system/tbb/vector.h +99 -0
  1887. cuda/cccl/headers/include/thrust/system_error.h +57 -0
  1888. cuda/cccl/headers/include/thrust/tabulate.h +125 -0
  1889. cuda/cccl/headers/include/thrust/transform.h +1045 -0
  1890. cuda/cccl/headers/include/thrust/transform_reduce.h +190 -0
  1891. cuda/cccl/headers/include/thrust/transform_scan.h +442 -0
  1892. cuda/cccl/headers/include/thrust/tuple.h +139 -0
  1893. cuda/cccl/headers/include/thrust/type_traits/integer_sequence.h +261 -0
  1894. cuda/cccl/headers/include/thrust/type_traits/is_contiguous_iterator.h +154 -0
  1895. cuda/cccl/headers/include/thrust/type_traits/is_execution_policy.h +65 -0
  1896. cuda/cccl/headers/include/thrust/type_traits/is_operator_less_or_greater_function_object.h +184 -0
  1897. cuda/cccl/headers/include/thrust/type_traits/is_operator_plus_function_object.h +116 -0
  1898. cuda/cccl/headers/include/thrust/type_traits/is_trivially_relocatable.h +336 -0
  1899. cuda/cccl/headers/include/thrust/type_traits/logical_metafunctions.h +42 -0
  1900. cuda/cccl/headers/include/thrust/type_traits/unwrap_contiguous_iterator.h +63 -0
  1901. cuda/cccl/headers/include/thrust/uninitialized_copy.h +300 -0
  1902. cuda/cccl/headers/include/thrust/uninitialized_fill.h +268 -0
  1903. cuda/cccl/headers/include/thrust/unique.h +1088 -0
  1904. cuda/cccl/headers/include/thrust/universal_allocator.h +93 -0
  1905. cuda/cccl/headers/include/thrust/universal_ptr.h +34 -0
  1906. cuda/cccl/headers/include/thrust/universal_vector.h +71 -0
  1907. cuda/cccl/headers/include/thrust/version.h +93 -0
  1908. cuda/cccl/headers/include/thrust/zip_function.h +176 -0
  1909. cuda/cccl/headers/include_paths.py +51 -0
  1910. cuda/cccl/parallel/__init__.py +9 -0
  1911. cuda/cccl/parallel/experimental/__init__.py +24 -0
  1912. cuda/cccl/py.typed +0 -0
  1913. cuda/compute/__init__.py +79 -0
  1914. cuda/compute/_bindings.py +79 -0
  1915. cuda/compute/_bindings.pyi +475 -0
  1916. cuda/compute/_bindings_impl.pyx +2273 -0
  1917. cuda/compute/_caching.py +71 -0
  1918. cuda/compute/_cccl_interop.py +422 -0
  1919. cuda/compute/_utils/__init__.py +0 -0
  1920. cuda/compute/_utils/protocols.py +132 -0
  1921. cuda/compute/_utils/temp_storage_buffer.py +86 -0
  1922. cuda/compute/algorithms/__init__.py +54 -0
  1923. cuda/compute/algorithms/_histogram.py +243 -0
  1924. cuda/compute/algorithms/_merge_sort.py +225 -0
  1925. cuda/compute/algorithms/_radix_sort.py +312 -0
  1926. cuda/compute/algorithms/_reduce.py +182 -0
  1927. cuda/compute/algorithms/_scan.py +331 -0
  1928. cuda/compute/algorithms/_segmented_reduce.py +257 -0
  1929. cuda/compute/algorithms/_three_way_partition.py +261 -0
  1930. cuda/compute/algorithms/_transform.py +329 -0
  1931. cuda/compute/algorithms/_unique_by_key.py +252 -0
  1932. cuda/compute/cccl/.gitkeep +0 -0
  1933. cuda/compute/cu12/_bindings_impl.cp313-win_amd64.pyd +0 -0
  1934. cuda/compute/cu12/cccl/cccl.c.parallel.dll +0 -0
  1935. cuda/compute/cu12/cccl/cccl.c.parallel.lib +0 -0
  1936. cuda/compute/cu13/_bindings_impl.cp313-win_amd64.pyd +0 -0
  1937. cuda/compute/cu13/cccl/cccl.c.parallel.dll +0 -0
  1938. cuda/compute/cu13/cccl/cccl.c.parallel.lib +0 -0
  1939. cuda/compute/iterators/__init__.py +21 -0
  1940. cuda/compute/iterators/_factories.py +219 -0
  1941. cuda/compute/iterators/_iterators.py +817 -0
  1942. cuda/compute/iterators/_zip_iterator.py +199 -0
  1943. cuda/compute/numba_utils.py +53 -0
  1944. cuda/compute/op.py +3 -0
  1945. cuda/compute/struct.py +272 -0
  1946. cuda/compute/typing.py +37 -0
  1947. cuda/coop/__init__.py +8 -0
  1948. cuda/coop/_caching.py +48 -0
  1949. cuda/coop/_common.py +275 -0
  1950. cuda/coop/_nvrtc.py +92 -0
  1951. cuda/coop/_scan_op.py +181 -0
  1952. cuda/coop/_types.py +937 -0
  1953. cuda/coop/_typing.py +107 -0
  1954. cuda/coop/block/__init__.py +39 -0
  1955. cuda/coop/block/_block_exchange.py +251 -0
  1956. cuda/coop/block/_block_load_store.py +215 -0
  1957. cuda/coop/block/_block_merge_sort.py +125 -0
  1958. cuda/coop/block/_block_radix_sort.py +214 -0
  1959. cuda/coop/block/_block_reduce.py +294 -0
  1960. cuda/coop/block/_block_scan.py +983 -0
  1961. cuda/coop/warp/__init__.py +9 -0
  1962. cuda/coop/warp/_warp_merge_sort.py +92 -0
  1963. cuda/coop/warp/_warp_reduce.py +153 -0
  1964. cuda/coop/warp/_warp_scan.py +78 -0
  1965. cuda_cccl-0.3.3.dist-info/METADATA +41 -0
  1966. cuda_cccl-0.3.3.dist-info/RECORD +1968 -0
  1967. cuda_cccl-0.3.3.dist-info/WHEEL +5 -0
  1968. cuda_cccl-0.3.3.dist-info/licenses/LICENSE +1 -0
@@ -0,0 +1,3026 @@
1
+ /*
2
+ * Copyright 2008-2013 NVIDIA Corporation
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ /*! \file set_operations.h
18
+ * \brief Set theoretic operations for sorted ranges
19
+ */
20
+
21
+ #pragma once
22
+
23
+ #include <thrust/detail/config.h>
24
+
25
+ #if defined(_CCCL_IMPLICIT_SYSTEM_HEADER_GCC)
26
+ # pragma GCC system_header
27
+ #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_CLANG)
28
+ # pragma clang system_header
29
+ #elif defined(_CCCL_IMPLICIT_SYSTEM_HEADER_MSVC)
30
+ # pragma system_header
31
+ #endif // no system header
32
+ #include <thrust/detail/execution_policy.h>
33
+ #include <thrust/pair.h>
34
+
35
+ THRUST_NAMESPACE_BEGIN
36
+
37
+ /*! \addtogroup set_operations Set Operations
38
+ * \ingroup algorithms
39
+ * \{
40
+ */
41
+
42
+ /*! \p set_difference constructs a sorted range that is the set difference of the sorted
43
+ * ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The return value is the
44
+ * end of the output range.
45
+ *
46
+ * In the simplest case, \p set_difference performs the "difference" operation from set
47
+ * theory: the output range contains a copy of every element that is contained in
48
+ * <tt>[first1, last1)</tt> and not contained in <tt>[first2, last2)</tt>. The general case
49
+ * is more complicated, because the input ranges may contain duplicate elements.
50
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements
51
+ * that are equivalent to each other and if <tt>[first2, last2)</tt> contains \c n
52
+ * elements that are equivalent to them, the last <tt>max(m-n,0)</tt> elements from
53
+ * <tt>[first1, last1)</tt> range shall be copied to the output range.
54
+ *
55
+ * This version of \p set_difference compares elements using \c operator<.
56
+ *
57
+ * The algorithm's execution is parallelized as determined by \p exec.
58
+ *
59
+ * \param exec The execution policy to use for parallelization.
60
+ * \param first1 The beginning of the first input range.
61
+ * \param last1 The end of the first input range.
62
+ * \param first2 The beginning of the second input range.
63
+ * \param last2 The end of the second input range.
64
+ * \param result The beginning of the output range.
65
+ * \return The end of the output range.
66
+ *
67
+ * \tparam DerivedPolicy The name of the derived execution policy.
68
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
69
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
70
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
71
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
72
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
73
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
74
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
75
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
76
+ * \p InputIterator2's \c value_type is a model of <a
77
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
78
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
79
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
80
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
81
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
82
+ * Iterator</a>.
83
+ *
84
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to
85
+ * <tt>operator<</tt>. \pre The resulting range shall not overlap with either input range.
86
+ *
87
+ * The following code snippet demonstrates how to use \p set_difference to compute the
88
+ * set difference of two sets of integers sorted in ascending order using the \p thrust::host execution
89
+ * policy for parallelization:
90
+ *
91
+ * \code
92
+ * #include <thrust/set_operations.h>
93
+ * #include <thrust/execution_policy.h>
94
+ * ...
95
+ * int A1[7] = {0, 1, 3, 4, 5, 6, 9};
96
+ * int A2[5] = {1, 3, 5, 7, 9};
97
+ *
98
+ * int result[3];
99
+ *
100
+ * int *result_end = thrust::set_difference(thrust::host, A1, A1 + 7, A2, A2 + 5, result);
101
+ * // result is now {0, 4, 6}
102
+ * \endcode
103
+ *
104
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_difference
105
+ * \see \p includes
106
+ * \see \p set_union
107
+ * \see \p set_intersection
108
+ * \see \p set_symmetric_difference
109
+ * \see \p sort
110
+ * \see \p is_sorted
111
+ */
112
+ template <typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename OutputIterator>
113
+ _CCCL_HOST_DEVICE OutputIterator set_difference(
114
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
115
+ InputIterator1 first1,
116
+ InputIterator1 last1,
117
+ InputIterator2 first2,
118
+ InputIterator2 last2,
119
+ OutputIterator result);
120
+
121
+ /*! \p set_difference constructs a sorted range that is the set difference of the sorted
122
+ * ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The return value is the
123
+ * end of the output range.
124
+ *
125
+ * In the simplest case, \p set_difference performs the "difference" operation from set
126
+ * theory: the output range contains a copy of every element that is contained in
127
+ * <tt>[first1, last1)</tt> and not contained in <tt>[first2, last2)</tt>. The general case
128
+ * is more complicated, because the input ranges may contain duplicate elements.
129
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements
130
+ * that are equivalent to each other and if <tt>[first2, last2)</tt> contains \c n
131
+ * elements that are equivalent to them, the last <tt>max(m-n,0)</tt> elements from
132
+ * <tt>[first1, last1)</tt> range shall be copied to the output range.
133
+ *
134
+ * This version of \p set_difference compares elements using \c operator<.
135
+ *
136
+ * \param first1 The beginning of the first input range.
137
+ * \param last1 The end of the first input range.
138
+ * \param first2 The beginning of the second input range.
139
+ * \param last2 The end of the second input range.
140
+ * \param result The beginning of the output range.
141
+ * \return The end of the output range.
142
+ *
143
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
144
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
145
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
146
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
147
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
148
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
149
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
150
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
151
+ * \p InputIterator2's \c value_type is a model of <a
152
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
153
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
154
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
155
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
156
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
157
+ * Iterator</a>.
158
+ *
159
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to
160
+ * <tt>operator<</tt>. \pre The resulting range shall not overlap with either input range.
161
+ *
162
+ * The following code snippet demonstrates how to use \p set_difference to compute the
163
+ * set difference of two sets of integers sorted in ascending order.
164
+ *
165
+ * \code
166
+ * #include <thrust/set_operations.h>
167
+ * ...
168
+ * int A1[7] = {0, 1, 3, 4, 5, 6, 9};
169
+ * int A2[5] = {1, 3, 5, 7, 9};
170
+ *
171
+ * int result[3];
172
+ *
173
+ * int *result_end = thrust::set_difference(A1, A1 + 7, A2, A2 + 5, result);
174
+ * // result is now {0, 4, 6}
175
+ * \endcode
176
+ *
177
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_difference
178
+ * \see \p includes
179
+ * \see \p set_union
180
+ * \see \p set_intersection
181
+ * \see \p set_symmetric_difference
182
+ * \see \p sort
183
+ * \see \p is_sorted
184
+ */
185
+ template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
186
+ OutputIterator set_difference(
187
+ InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);
188
+
189
+ /*! \p set_difference constructs a sorted range that is the set difference of the sorted
190
+ * ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The return value is the
191
+ * end of the output range.
192
+ *
193
+ * In the simplest case, \p set_difference performs the "difference" operation from set
194
+ * theory: the output range contains a copy of every element that is contained in
195
+ * <tt>[first1, last1)</tt> and not contained in <tt>[first2, last2)</tt>. The general case
196
+ * is more complicated, because the input ranges may contain duplicate elements.
197
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements
198
+ * that are equivalent to each other and if <tt>[first2, last2)</tt> contains \c n
199
+ * elements that are equivalent to them, the last <tt>max(m-n,0)</tt> elements from
200
+ * <tt>[first1, last1)</tt> range shall be copied to the output range.
201
+ *
202
+ * This version of \p set_difference compares elements using a function object \p comp.
203
+ *
204
+ * The algorithm's execution is parallelized as determined by \p exec.
205
+ *
206
+ * \param exec The execution policy to use for parallelization.
207
+ * \param first1 The beginning of the first input range.
208
+ * \param last1 The end of the first input range.
209
+ * \param first2 The beginning of the second input range.
210
+ * \param last2 The end of the second input range.
211
+ * \param result The beginning of the output range.
212
+ * \param comp Comparison operator.
213
+ * \return The end of the output range.
214
+ *
215
+ * \tparam DerivedPolicy The name of the derived execution policy.
216
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
217
+ * Iterator</a>, \p InputIterator1's \c value_type is convertible to \p StrictWeakCompare's first argument type. and
218
+ * \p InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
219
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
220
+ * \p InputIterator2's \c value_type is convertible to \p StrictWeakCompare's second argument type.
221
+ * and \p InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types.
222
+ * \tparam OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
223
+ * Iterator</a>. \tparam StrictWeakCompare is a model of <a
224
+ * href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak Ordering</a>.
225
+ *
226
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to \p comp.
227
+ * \pre The resulting range shall not overlap with either input range.
228
+ *
229
+ * The following code snippet demonstrates how to use \p set_difference to compute the
230
+ * set difference of two sets of integers sorted in descending order using the \p thrust::host execution
231
+ * policy for parallelization:
232
+ *
233
+ * \code
234
+ * #include <thrust/set_operations.h>
235
+ * #include <thrust/functional.h>
236
+ * #include <thrust/execution_policy.h>
237
+ * ...
238
+ * int A1[7] = {9, 6, 5, 4, 3, 1, 0};
239
+ * int A2[5] = {9, 7, 5, 3, 1};
240
+ *
241
+ * int result[3];
242
+ *
243
+ * int *result_end = thrust::set_difference(thrust::host, A1, A1 + 7, A2, A2 + 5, result, ::cuda::std::greater<int>());
244
+ * // result is now {6, 4, 0}
245
+ * \endcode
246
+ *
247
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_difference
248
+ * \see \p includes
249
+ * \see \p set_union
250
+ * \see \p set_intersection
251
+ * \see \p set_symmetric_difference
252
+ * \see \p sort
253
+ * \see \p is_sorted
254
+ */
255
+ template <typename DerivedPolicy,
256
+ typename InputIterator1,
257
+ typename InputIterator2,
258
+ typename OutputIterator,
259
+ typename StrictWeakCompare>
260
+ _CCCL_HOST_DEVICE OutputIterator set_difference(
261
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
262
+ InputIterator1 first1,
263
+ InputIterator1 last1,
264
+ InputIterator2 first2,
265
+ InputIterator2 last2,
266
+ OutputIterator result,
267
+ StrictWeakCompare comp);
268
+
269
+ /*! \p set_difference constructs a sorted range that is the set difference of the sorted
270
+ * ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The return value is the
271
+ * end of the output range.
272
+ *
273
+ * In the simplest case, \p set_difference performs the "difference" operation from set
274
+ * theory: the output range contains a copy of every element that is contained in
275
+ * <tt>[first1, last1)</tt> and not contained in <tt>[first2, last2)</tt>. The general case
276
+ * is more complicated, because the input ranges may contain duplicate elements.
277
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements
278
+ * that are equivalent to each other and if <tt>[first2, last2)</tt> contains \c n
279
+ * elements that are equivalent to them, the last <tt>max(m-n,0)</tt> elements from
280
+ * <tt>[first1, last1)</tt> range shall be copied to the output range.
281
+ *
282
+ * This version of \p set_difference compares elements using a function object \p comp.
283
+ *
284
+ * \param first1 The beginning of the first input range.
285
+ * \param last1 The end of the first input range.
286
+ * \param first2 The beginning of the second input range.
287
+ * \param last2 The end of the second input range.
288
+ * \param result The beginning of the output range.
289
+ * \param comp Comparison operator.
290
+ * \return The end of the output range.
291
+ *
292
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
293
+ * Iterator</a>, \p InputIterator1's \c value_type is convertible to \p StrictWeakCompare's first argument type. and
294
+ * \p InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
295
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
296
+ * \p InputIterator2's \c value_type is convertible to \p StrictWeakCompare's second argument type.
297
+ * and \p InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types.
298
+ * \tparam OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
299
+ * Iterator</a>. \tparam StrictWeakCompare is a model of <a
300
+ * href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak Ordering</a>.
301
+ *
302
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to \p comp.
303
+ * \pre The resulting range shall not overlap with either input range.
304
+ *
305
+ * The following code snippet demonstrates how to use \p set_difference to compute the
306
+ * set difference of two sets of integers sorted in descending order.
307
+ *
308
+ * \code
309
+ * #include <thrust/set_operations.h>
310
+ * #include <thrust/functional.h>
311
+ * ...
312
+ * int A1[7] = {9, 6, 5, 4, 3, 1, 0};
313
+ * int A2[5] = {9, 7, 5, 3, 1};
314
+ *
315
+ * int result[3];
316
+ *
317
+ * int *result_end = thrust::set_difference(A1, A1 + 7, A2, A2 + 5, result, ::cuda::std::greater<int>());
318
+ * // result is now {6, 4, 0}
319
+ * \endcode
320
+ *
321
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_difference
322
+ * \see \p includes
323
+ * \see \p set_union
324
+ * \see \p set_intersection
325
+ * \see \p set_symmetric_difference
326
+ * \see \p sort
327
+ * \see \p is_sorted
328
+ */
329
+ template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename StrictWeakCompare>
330
+ OutputIterator set_difference(
331
+ InputIterator1 first1,
332
+ InputIterator1 last1,
333
+ InputIterator2 first2,
334
+ InputIterator2 last2,
335
+ OutputIterator result,
336
+ StrictWeakCompare comp);
337
+
338
+ /*! \p set_intersection constructs a sorted range that is the
339
+ * intersection of sorted ranges <tt>[first1, last1)</tt> and
340
+ * <tt>[first2, last2)</tt>. The return value is the end of the
341
+ * output range.
342
+ *
343
+ * In the simplest case, \p set_intersection performs the
344
+ * "intersection" operation from set theory: the output range
345
+ * contains a copy of every element that is contained in both
346
+ * <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The
347
+ * general case is more complicated, because the input ranges may
348
+ * contain duplicate elements. The generalization is that if a value
349
+ * appears \c m times in <tt>[first1, last1)</tt> and \c n times in
350
+ * <tt>[first2, last2)</tt> (where \c m may be zero), then it
351
+ * appears <tt>min(m,n)</tt> times in the output range.
352
+ * \p set_intersection is stable, meaning that both elements are
353
+ * copied from the first range rather than the second, and that the
354
+ * relative order of elements in the output range is the same as in
355
+ * the first input range.
356
+ *
357
+ * This version of \p set_intersection compares objects using
358
+ * \c operator<.
359
+ *
360
+ * The algorithm's execution is parallelized as determined by \p exec.
361
+ *
362
+ * \param exec The execution policy to use for parallelization.
363
+ * \param first1 The beginning of the first input range.
364
+ * \param last1 The end of the first input range.
365
+ * \param first2 The beginning of the second input range.
366
+ * \param last2 The end of the second input range.
367
+ * \param result The beginning of the output range.
368
+ * \return The end of the output range.
369
+ *
370
+ * \tparam DerivedPolicy The name of the derived execution policy.
371
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
372
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
373
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
374
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
375
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
376
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
377
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
378
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
379
+ * \p InputIterator2's \c value_type is a model of <a
380
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
381
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
382
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
383
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
384
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
385
+ * Iterator</a>.
386
+ *
387
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to
388
+ * <tt>operator<</tt>. \pre The resulting range shall not overlap with either input range.
389
+ *
390
+ * The following code snippet demonstrates how to use \p set_intersection to compute the
391
+ * set intersection of two sets of integers sorted in ascending order using the \p thrust::host execution
392
+ * policy for parallelization:
393
+ *
394
+ * \code
395
+ * #include <thrust/set_operations.h>
396
+ * #include <thrust/execution_policy.h>
397
+ * ...
398
+ * int A1[6] = {1, 3, 5, 7, 9, 11};
399
+ * int A2[7] = {1, 1, 2, 3, 5, 8, 13};
400
+ *
401
+ * int result[7];
402
+ *
403
+ * int *result_end = thrust::set_intersection(thrust::host, A1, A1 + 6, A2, A2 + 7, result);
404
+ * // result is now {1, 3, 5}
405
+ * \endcode
406
+ *
407
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_intersection
408
+ * \see \p includes
409
+ * \see \p set_union
410
+ * \see \p set_intersection
411
+ * \see \p set_symmetric_difference
412
+ * \see \p sort
413
+ * \see \p is_sorted
414
+ */
415
+ template <typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename OutputIterator>
416
+ _CCCL_HOST_DEVICE OutputIterator set_intersection(
417
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
418
+ InputIterator1 first1,
419
+ InputIterator1 last1,
420
+ InputIterator2 first2,
421
+ InputIterator2 last2,
422
+ OutputIterator result);
423
+
424
+ /*! \p set_intersection constructs a sorted range that is the
425
+ * intersection of sorted ranges <tt>[first1, last1)</tt> and
426
+ * <tt>[first2, last2)</tt>. The return value is the end of the
427
+ * output range.
428
+ *
429
+ * In the simplest case, \p set_intersection performs the
430
+ * "intersection" operation from set theory: the output range
431
+ * contains a copy of every element that is contained in both
432
+ * <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The
433
+ * general case is more complicated, because the input ranges may
434
+ * contain duplicate elements. The generalization is that if a value
435
+ * appears \c m times in <tt>[first1, last1)</tt> and \c n times in
436
+ * <tt>[first2, last2)</tt> (where \c m may be zero), then it
437
+ * appears <tt>min(m,n)</tt> times in the output range.
438
+ * \p set_intersection is stable, meaning that both elements are
439
+ * copied from the first range rather than the second, and that the
440
+ * relative order of elements in the output range is the same as in
441
+ * the first input range.
442
+ *
443
+ * This version of \p set_intersection compares objects using
444
+ * \c operator<.
445
+ *
446
+ * \param first1 The beginning of the first input range.
447
+ * \param last1 The end of the first input range.
448
+ * \param first2 The beginning of the second input range.
449
+ * \param last2 The end of the second input range.
450
+ * \param result The beginning of the output range.
451
+ * \return The end of the output range.
452
+ *
453
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
454
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
455
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
456
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
457
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
458
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
459
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
460
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
461
+ * \p InputIterator2's \c value_type is a model of <a
462
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
463
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
464
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
465
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
466
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
467
+ * Iterator</a>.
468
+ *
469
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to
470
+ * <tt>operator<</tt>. \pre The resulting range shall not overlap with either input range.
471
+ *
472
+ * The following code snippet demonstrates how to use \p set_intersection to compute the
473
+ * set intersection of two sets of integers sorted in ascending order.
474
+ *
475
+ * \code
476
+ * #include <thrust/set_operations.h>
477
+ * ...
478
+ * int A1[6] = {1, 3, 5, 7, 9, 11};
479
+ * int A2[7] = {1, 1, 2, 3, 5, 8, 13};
480
+ *
481
+ * int result[7];
482
+ *
483
+ * int *result_end = thrust::set_intersection(A1, A1 + 6, A2, A2 + 7, result);
484
+ * // result is now {1, 3, 5}
485
+ * \endcode
486
+ *
487
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_intersection
488
+ * \see \p includes
489
+ * \see \p set_union
490
+ * \see \p set_intersection
491
+ * \see \p set_symmetric_difference
492
+ * \see \p sort
493
+ * \see \p is_sorted
494
+ */
495
+ template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
496
+ OutputIterator set_intersection(
497
+ InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);
498
+
499
+ /*! \p set_intersection constructs a sorted range that is the
500
+ * intersection of sorted ranges <tt>[first1, last1)</tt> and
501
+ * <tt>[first2, last2)</tt>. The return value is the end of the
502
+ * output range.
503
+ *
504
+ * In the simplest case, \p set_intersection performs the
505
+ * "intersection" operation from set theory: the output range
506
+ * contains a copy of every element that is contained in both
507
+ * <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The
508
+ * general case is more complicated, because the input ranges may
509
+ * contain duplicate elements. The generalization is that if a value
510
+ * appears \c m times in <tt>[first1, last1)</tt> and \c n times in
511
+ * <tt>[first2, last2)</tt> (where \c m may be zero), then it
512
+ * appears <tt>min(m,n)</tt> times in the output range.
513
+ * \p set_intersection is stable, meaning that both elements are
514
+ * copied from the first range rather than the second, and that the
515
+ * relative order of elements in the output range is the same as in
516
+ * the first input range.
517
+ *
518
+ * This version of \p set_intersection compares elements using a function object \p comp.
519
+ *
520
+ * The algorithm's execution is parallelized as determined by \p exec.
521
+ *
522
+ * \param exec The execution policy to use for parallelization.
523
+ * \param first1 The beginning of the first input range.
524
+ * \param last1 The end of the first input range.
525
+ * \param first2 The beginning of the second input range.
526
+ * \param last2 The end of the second input range.
527
+ * \param result The beginning of the output range.
528
+ * \param comp Comparison operator.
529
+ * \return The end of the output range.
530
+ *
531
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to \p comp.
532
+ * \pre The resulting range shall not overlap with either input range.
533
+ *
534
+ * \tparam DerivedPolicy The name of the derived execution policy.
535
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
536
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
537
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
538
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
539
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
540
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
541
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
542
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
543
+ * \p InputIterator2's \c value_type is a model of <a
544
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
545
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
546
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
547
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
548
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
549
+ * Iterator</a>.
550
+ *
551
+ * The following code snippet demonstrates how to use \p set_intersection to compute
552
+ * the set intersection of sets of integers sorted in descending order using the \p thrust::host execution
553
+ * policy for parallelization:
554
+ *
555
+ * \code
556
+ * #include <thrust/set_operations.h>
557
+ * #include <thrust/execution_policy.h>
558
+ * ...
559
+ * int A1[6] = {11, 9, 7, 5, 3, 1};
560
+ * int A2[7] = {13, 8, 5, 3, 2, 1, 1};
561
+ *
562
+ * int result[3];
563
+ *
564
+ * int *result_end = thrust::set_intersection(thrust::host, A1, A1 + 6, A2, A2 + 7, result,
565
+ * ::cuda::std::greater<int>());
566
+ * // result is now {5, 3, 1}
567
+ * \endcode
568
+ *
569
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_intersection
570
+ * \see \p includes
571
+ * \see \p set_union
572
+ * \see \p set_intersection
573
+ * \see \p set_symmetric_difference
574
+ * \see \p sort
575
+ * \see \p is_sorted
576
+ */
577
+ template <typename DerivedPolicy,
578
+ typename InputIterator1,
579
+ typename InputIterator2,
580
+ typename OutputIterator,
581
+ typename StrictWeakCompare>
582
+ _CCCL_HOST_DEVICE OutputIterator set_intersection(
583
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
584
+ InputIterator1 first1,
585
+ InputIterator1 last1,
586
+ InputIterator2 first2,
587
+ InputIterator2 last2,
588
+ OutputIterator result,
589
+ StrictWeakCompare comp);
590
+
591
+ /*! \p set_intersection constructs a sorted range that is the
592
+ * intersection of sorted ranges <tt>[first1, last1)</tt> and
593
+ * <tt>[first2, last2)</tt>. The return value is the end of the
594
+ * output range.
595
+ *
596
+ * In the simplest case, \p set_intersection performs the
597
+ * "intersection" operation from set theory: the output range
598
+ * contains a copy of every element that is contained in both
599
+ * <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The
600
+ * general case is more complicated, because the input ranges may
601
+ * contain duplicate elements. The generalization is that if a value
602
+ * appears \c m times in <tt>[first1, last1)</tt> and \c n times in
603
+ * <tt>[first2, last2)</tt> (where \c m may be zero), then it
604
+ * appears <tt>min(m,n)</tt> times in the output range.
605
+ * \p set_intersection is stable, meaning that both elements are
606
+ * copied from the first range rather than the second, and that the
607
+ * relative order of elements in the output range is the same as in
608
+ * the first input range.
609
+ *
610
+ * This version of \p set_intersection compares elements using a function object \p comp.
611
+ *
612
+ * \param first1 The beginning of the first input range.
613
+ * \param last1 The end of the first input range.
614
+ * \param first2 The beginning of the second input range.
615
+ * \param last2 The end of the second input range.
616
+ * \param result The beginning of the output range.
617
+ * \param comp Comparison operator.
618
+ * \return The end of the output range.
619
+ *
620
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to \p comp.
621
+ * \pre The resulting range shall not overlap with either input range.
622
+ *
623
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
624
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
625
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
626
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
627
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
628
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
629
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
630
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
631
+ * \p InputIterator2's \c value_type is a model of <a
632
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
633
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
634
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
635
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
636
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
637
+ * Iterator</a>.
638
+ *
639
+ * The following code snippet demonstrates how to use \p set_intersection to compute
640
+ * the set intersection of sets of integers sorted in descending order.
641
+ *
642
+ * \code
643
+ * #include <thrust/set_operations.h>
644
+ * ...
645
+ * int A1[6] = {11, 9, 7, 5, 3, 1};
646
+ * int A2[7] = {13, 8, 5, 3, 2, 1, 1};
647
+ *
648
+ * int result[3];
649
+ *
650
+ * int *result_end = thrust::set_intersection(A1, A1 + 6, A2, A2 + 7, result, ::cuda::std::greater<int>());
651
+ * // result is now {5, 3, 1}
652
+ * \endcode
653
+ *
654
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_intersection
655
+ * \see \p includes
656
+ * \see \p set_union
657
+ * \see \p set_intersection
658
+ * \see \p set_symmetric_difference
659
+ * \see \p sort
660
+ * \see \p is_sorted
661
+ */
662
+ template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename StrictWeakCompare>
663
+ OutputIterator set_intersection(
664
+ InputIterator1 first1,
665
+ InputIterator1 last1,
666
+ InputIterator2 first2,
667
+ InputIterator2 last2,
668
+ OutputIterator result,
669
+ StrictWeakCompare comp);
670
+
671
+ /*! \p set_symmetric_difference constructs a sorted range that is the set symmetric
672
+ * difference of the sorted ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>.
673
+ * The return value is the end of the output range.
674
+ *
675
+ * In the simplest case, \p set_symmetric_difference performs a set theoretic calculation:
676
+ * it constructs the union of the two sets A - B and B - A, where A and B are the two
677
+ * input ranges. That is, the output range contains a copy of every element that is
678
+ * contained in <tt>[first1, last1)</tt> but not <tt>[first2, last2)</tt>, and a copy of
679
+ * every element that is contained in <tt>[first2, last2)</tt> but not <tt>[first1, last1)</tt>.
680
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
681
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements that are
682
+ * equivalent to each other and <tt>[first2, last2)</tt> contains \c n elements that are
683
+ * equivalent to them, then <tt>|m - n|</tt> of those elements shall be copied to the output
684
+ * range: the last <tt>m - n</tt> elements from <tt>[first1, last1)</tt> if <tt>m > n</tt>, and
685
+ * the last <tt>n - m</tt> of these elements from <tt>[first2, last2)</tt> if <tt>m < n</tt>.
686
+ *
687
+ * This version of \p set_union compares elements using \c operator<.
688
+ *
689
+ * The algorithm's execution is parallelized as determined by \p exec.
690
+ *
691
+ * \param exec The execution policy to use for parallelization.
692
+ * \param first1 The beginning of the first input range.
693
+ * \param last1 The end of the first input range.
694
+ * \param first2 The beginning of the second input range.
695
+ * \param last2 The end of the second input range.
696
+ * \param result The beginning of the output range.
697
+ * \return The end of the output range.
698
+ *
699
+ * \tparam DerivedPolicy The name of the derived execution policy.
700
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
701
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
702
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
703
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
704
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
705
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
706
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
707
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
708
+ * \p InputIterator2's \c value_type is a model of <a
709
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
710
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
711
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
712
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
713
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
714
+ * Iterator</a>.
715
+ *
716
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to
717
+ * <tt>operator<</tt>. \pre The resulting range shall not overlap with either input range.
718
+ *
719
+ * The following code snippet demonstrates how to use \p set_symmetric_difference to compute
720
+ * the symmetric difference of two sets of integers sorted in ascending order using the \p thrust::host
721
+ * execution policy for parallelization:
722
+ *
723
+ * \code
724
+ * #include <thrust/set_operations.h>
725
+ * #include <thrust/execution_policy.h>
726
+ * ...
727
+ * int A1[7] = {0, 1, 2, 2, 4, 6, 7};
728
+ * int A2[5] = {1, 1, 2, 5, 8};
729
+ *
730
+ * int result[6];
731
+ *
732
+ * int *result_end = thrust::set_symmetric_difference(thrust::host, A1, A1 + 7, A2, A2 + 5, result);
733
+ * // result = {0, 4, 5, 6, 7, 8}
734
+ * \endcode
735
+ *
736
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_symmetric_difference
737
+ * \see \p merge
738
+ * \see \p includes
739
+ * \see \p set_difference
740
+ * \see \p set_union
741
+ * \see \p set_intersection
742
+ * \see \p sort
743
+ * \see \p is_sorted
744
+ */
745
+ template <typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename OutputIterator>
746
+ _CCCL_HOST_DEVICE OutputIterator set_symmetric_difference(
747
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
748
+ InputIterator1 first1,
749
+ InputIterator1 last1,
750
+ InputIterator2 first2,
751
+ InputIterator2 last2,
752
+ OutputIterator result);
753
+
754
+ /*! \p set_symmetric_difference constructs a sorted range that is the set symmetric
755
+ * difference of the sorted ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>.
756
+ * The return value is the end of the output range.
757
+ *
758
+ * In the simplest case, \p set_symmetric_difference performs a set theoretic calculation:
759
+ * it constructs the union of the two sets A - B and B - A, where A and B are the two
760
+ * input ranges. That is, the output range contains a copy of every element that is
761
+ * contained in <tt>[first1, last1)</tt> but not <tt>[first2, last2)</tt>, and a copy of
762
+ * every element that is contained in <tt>[first2, last2)</tt> but not <tt>[first1, last1)</tt>.
763
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
764
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements that are
765
+ * equivalent to each other and <tt>[first2, last2)</tt> contains \c n elements that are
766
+ * equivalent to them, then <tt>|m - n|</tt> of those elements shall be copied to the output
767
+ * range: the last <tt>m - n</tt> elements from <tt>[first1, last1)</tt> if <tt>m > n</tt>, and
768
+ * the last <tt>n - m</tt> of these elements from <tt>[first2, last2)</tt> if <tt>m < n</tt>.
769
+ *
770
+ * This version of \p set_union compares elements using \c operator<.
771
+ *
772
+ * \param first1 The beginning of the first input range.
773
+ * \param last1 The end of the first input range.
774
+ * \param first2 The beginning of the second input range.
775
+ * \param last2 The end of the second input range.
776
+ * \param result The beginning of the output range.
777
+ * \return The end of the output range.
778
+ *
779
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
780
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
781
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
782
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
783
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
784
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
785
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
786
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
787
+ * \p InputIterator2's \c value_type is a model of <a
788
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
789
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
790
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
791
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
792
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
793
+ * Iterator</a>.
794
+ *
795
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to
796
+ * <tt>operator<</tt>. \pre The resulting range shall not overlap with either input range.
797
+ *
798
+ * The following code snippet demonstrates how to use \p set_symmetric_difference to compute
799
+ * the symmetric difference of two sets of integers sorted in ascending order.
800
+ *
801
+ * \code
802
+ * #include <thrust/set_operations.h>
803
+ * ...
804
+ * int A1[7] = {0, 1, 2, 2, 4, 6, 7};
805
+ * int A2[5] = {1, 1, 2, 5, 8};
806
+ *
807
+ * int result[6];
808
+ *
809
+ * int *result_end = thrust::set_symmetric_difference(A1, A1 + 7, A2, A2 + 5, result);
810
+ * // result = {0, 4, 5, 6, 7, 8}
811
+ * \endcode
812
+ *
813
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_symmetric_difference
814
+ * \see \p merge
815
+ * \see \p includes
816
+ * \see \p set_difference
817
+ * \see \p set_union
818
+ * \see \p set_intersection
819
+ * \see \p sort
820
+ * \see \p is_sorted
821
+ */
822
+ template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
823
+ OutputIterator set_symmetric_difference(
824
+ InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);
825
+
826
+ /*! \p set_symmetric_difference constructs a sorted range that is the set symmetric
827
+ * difference of the sorted ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>.
828
+ * The return value is the end of the output range.
829
+ *
830
+ * In the simplest case, \p set_symmetric_difference performs a set theoretic calculation:
831
+ * it constructs the union of the two sets A - B and B - A, where A and B are the two
832
+ * input ranges. That is, the output range contains a copy of every element that is
833
+ * contained in <tt>[first1, last1)</tt> but not <tt>[first2, last2)</tt>, and a copy of
834
+ * every element that is contained in <tt>[first2, last2)</tt> but not <tt>[first1, last1)</tt>.
835
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
836
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements that are
837
+ * equivalent to each other and <tt>[first2, last2)</tt> contains \c n elements that are
838
+ * equivalent to them, then <tt>|m - n|</tt> of those elements shall be copied to the output
839
+ * range: the last <tt>m - n</tt> elements from <tt>[first1, last1)</tt> if <tt>m > n</tt>, and
840
+ * the last <tt>n - m</tt> of these elements from <tt>[first2, last2)</tt> if <tt>m < n</tt>.
841
+ *
842
+ * This version of \p set_union compares elements using a function object \p comp.
843
+ *
844
+ * The algorithm's execution is parallelized as determined by \p exec.
845
+ *
846
+ * \param exec The execution policy to use for parallelization.
847
+ * \param first1 The beginning of the first input range.
848
+ * \param last1 The end of the first input range.
849
+ * \param first2 The beginning of the second input range.
850
+ * \param last2 The end of the second input range.
851
+ * \param result The beginning of the output range.
852
+ * \param comp Comparison operator.
853
+ * \return The end of the output range.
854
+ *
855
+ * \tparam DerivedPolicy The name of the derived execution policy.
856
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
857
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
858
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
859
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
860
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
861
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
862
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
863
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
864
+ * \p InputIterator2's \c value_type is a model of <a
865
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
866
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
867
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
868
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
869
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
870
+ * Iterator</a>.
871
+ *
872
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to \p comp.
873
+ * \pre The resulting range shall not overlap with either input range.
874
+ *
875
+ * The following code snippet demonstrates how to use \p set_symmetric_difference to compute
876
+ * the symmetric difference of two sets of integers sorted in descending order using the \p thrust::host
877
+ * execution policy for parallelization:
878
+ *
879
+ * \code
880
+ * #include <thrust/set_operations.h>
881
+ * #include <thrust/execution_policy.h>
882
+ * ...
883
+ * int A1[7] = {7, 6, 4, 2, 2, 1, 0};
884
+ * int A2[5] = {8, 5, 2, 1, 1};
885
+ *
886
+ * int result[6];
887
+ *
888
+ * int *result_end = thrust::set_symmetric_difference(thrust::host, A1, A1 + 7, A2, A2 + 5, result);
889
+ * // result = {8, 7, 6, 5, 4, 0}
890
+ * \endcode
891
+ *
892
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_symmetric_difference
893
+ * \see \p merge
894
+ * \see \p includes
895
+ * \see \p set_difference
896
+ * \see \p set_union
897
+ * \see \p set_intersection
898
+ * \see \p sort
899
+ * \see \p is_sorted
900
+ */
901
+ template <typename DerivedPolicy,
902
+ typename InputIterator1,
903
+ typename InputIterator2,
904
+ typename OutputIterator,
905
+ typename StrictWeakCompare>
906
+ _CCCL_HOST_DEVICE OutputIterator set_symmetric_difference(
907
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
908
+ InputIterator1 first1,
909
+ InputIterator1 last1,
910
+ InputIterator2 first2,
911
+ InputIterator2 last2,
912
+ OutputIterator result,
913
+ StrictWeakCompare comp);
914
+
915
+ /*! \p set_symmetric_difference constructs a sorted range that is the set symmetric
916
+ * difference of the sorted ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>.
917
+ * The return value is the end of the output range.
918
+ *
919
+ * In the simplest case, \p set_symmetric_difference performs a set theoretic calculation:
920
+ * it constructs the union of the two sets A - B and B - A, where A and B are the two
921
+ * input ranges. That is, the output range contains a copy of every element that is
922
+ * contained in <tt>[first1, last1)</tt> but not <tt>[first2, last2)</tt>, and a copy of
923
+ * every element that is contained in <tt>[first2, last2)</tt> but not <tt>[first1, last1)</tt>.
924
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
925
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements that are
926
+ * equivalent to each other and <tt>[first2, last2)</tt> contains \c n elements that are
927
+ * equivalent to them, then <tt>|m - n|</tt> of those elements shall be copied to the output
928
+ * range: the last <tt>m - n</tt> elements from <tt>[first1, last1)</tt> if <tt>m > n</tt>, and
929
+ * the last <tt>n - m</tt> of these elements from <tt>[first2, last2)</tt> if <tt>m < n</tt>.
930
+ *
931
+ * This version of \p set_union compares elements using a function object \p comp.
932
+ *
933
+ * \param first1 The beginning of the first input range.
934
+ * \param last1 The end of the first input range.
935
+ * \param first2 The beginning of the second input range.
936
+ * \param last2 The end of the second input range.
937
+ * \param result The beginning of the output range.
938
+ * \param comp Comparison operator.
939
+ * \return The end of the output range.
940
+ *
941
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
942
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
943
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
944
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
945
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
946
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
947
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
948
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
949
+ * \p InputIterator2's \c value_type is a model of <a
950
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
951
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
952
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
953
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
954
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
955
+ * Iterator</a>.
956
+ *
957
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to \p comp.
958
+ * \pre The resulting range shall not overlap with either input range.
959
+ *
960
+ * The following code snippet demonstrates how to use \p set_symmetric_difference to compute
961
+ * the symmetric difference of two sets of integers sorted in descending order.
962
+ *
963
+ * \code
964
+ * #include <thrust/set_operations.h>
965
+ * ...
966
+ * int A1[7] = {7, 6, 4, 2, 2, 1, 0};
967
+ * int A2[5] = {8, 5, 2, 1, 1};
968
+ *
969
+ * int result[6];
970
+ *
971
+ * int *result_end = thrust::set_symmetric_difference(A1, A1 + 7, A2, A2 + 5, result);
972
+ * // result = {8, 7, 6, 5, 4, 0}
973
+ * \endcode
974
+ *
975
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_symmetric_difference
976
+ * \see \p merge
977
+ * \see \p includes
978
+ * \see \p set_difference
979
+ * \see \p set_union
980
+ * \see \p set_intersection
981
+ * \see \p sort
982
+ * \see \p is_sorted
983
+ */
984
+ template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename StrictWeakCompare>
985
+ OutputIterator set_symmetric_difference(
986
+ InputIterator1 first1,
987
+ InputIterator1 last1,
988
+ InputIterator2 first2,
989
+ InputIterator2 last2,
990
+ OutputIterator result,
991
+ StrictWeakCompare comp);
992
+
993
+ /*! \p set_union constructs a sorted range that is the union of the sorted ranges
994
+ * <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The return value is the
995
+ * end of the output range.
996
+ *
997
+ * In the simplest case, \p set_union performs the "union" operation from set
998
+ * theory: the output range contains a copy of every element that is contained in
999
+ * <tt>[first1, last1)</tt>, <tt>[first2, last2)</tt>, or both. The general case
1000
+ * is more complicated, because the input ranges may contain duplicate elements.
1001
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements
1002
+ * that are equivalent to each other and if <tt>[first2, last2)</tt> contains \c n
1003
+ * elements that are equivalent to them, then all \c m elements from the first
1004
+ * range shall be copied to the output range, in order, and then <tt>max(n - m, 0)</tt>
1005
+ * elements from the second range shall be copied to the output, in order.
1006
+ *
1007
+ * This version of \p set_union compares elements using \c operator<.
1008
+ *
1009
+ * The algorithm's execution is parallelized as determined by \p exec.
1010
+ *
1011
+ * \param exec The execution policy to use for parallelization.
1012
+ * \param first1 The beginning of the first input range.
1013
+ * \param last1 The end of the first input range.
1014
+ * \param first2 The beginning of the second input range.
1015
+ * \param last2 The end of the second input range.
1016
+ * \param result The beginning of the output range.
1017
+ * \return The end of the output range.
1018
+ *
1019
+ * \tparam DerivedPolicy The name of the derived execution policy.
1020
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1021
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1022
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1023
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1024
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1025
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1026
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1027
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1028
+ * \p InputIterator2's \c value_type is a model of <a
1029
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1030
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1031
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1032
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1033
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
1034
+ * Iterator</a>.
1035
+ *
1036
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to
1037
+ * <tt>operator<</tt>. \pre The resulting range shall not overlap with either input range.
1038
+ *
1039
+ * The following code snippet demonstrates how to use \p set_union to compute the union of
1040
+ * two sets of integers sorted in ascending order using the \p thrust::host execution policy for
1041
+ * parallelization:
1042
+ *
1043
+ * \code
1044
+ * #include <thrust/set_operations.h>
1045
+ * #include <thrust/execution_policy.h>
1046
+ * ...
1047
+ * int A1[7] = {0, 2, 4, 6, 8, 10, 12};
1048
+ * int A2[5] = {1, 3, 5, 7, 9};
1049
+ *
1050
+ * int result[11];
1051
+ *
1052
+ * int *result_end = thrust::set_union(thrust::host, A1, A1 + 7, A2, A2 + 5, result);
1053
+ * // result = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12}
1054
+ * \endcode
1055
+ *
1056
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_union
1057
+ * \see \p merge
1058
+ * \see \p includes
1059
+ * \see \p set_union
1060
+ * \see \p set_intersection
1061
+ * \see \p set_symmetric_difference
1062
+ * \see \p sort
1063
+ * \see \p is_sorted
1064
+ */
1065
+ template <typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename OutputIterator>
1066
+ _CCCL_HOST_DEVICE OutputIterator set_union(
1067
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
1068
+ InputIterator1 first1,
1069
+ InputIterator1 last1,
1070
+ InputIterator2 first2,
1071
+ InputIterator2 last2,
1072
+ OutputIterator result);
1073
+
1074
+ /*! \p set_union constructs a sorted range that is the union of the sorted ranges
1075
+ * <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The return value is the
1076
+ * end of the output range.
1077
+ *
1078
+ * In the simplest case, \p set_union performs the "union" operation from set
1079
+ * theory: the output range contains a copy of every element that is contained in
1080
+ * <tt>[first1, last1)</tt>, <tt>[first2, last2)</tt>, or both. The general case
1081
+ * is more complicated, because the input ranges may contain duplicate elements.
1082
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements
1083
+ * that are equivalent to each other and if <tt>[first2, last2)</tt> contains \c n
1084
+ * elements that are equivalent to them, then all \c m elements from the first
1085
+ * range shall be copied to the output range, in order, and then <tt>max(n - m, 0)</tt>
1086
+ * elements from the second range shall be copied to the output, in order.
1087
+ *
1088
+ * This version of \p set_union compares elements using \c operator<.
1089
+ *
1090
+ * \param first1 The beginning of the first input range.
1091
+ * \param last1 The end of the first input range.
1092
+ * \param first2 The beginning of the second input range.
1093
+ * \param last2 The end of the second input range.
1094
+ * \param result The beginning of the output range.
1095
+ * \return The end of the output range.
1096
+ *
1097
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1098
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1099
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1100
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1101
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1102
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1103
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1104
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1105
+ * \p InputIterator2's \c value_type is a model of <a
1106
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1107
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1108
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1109
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1110
+ * OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
1111
+ * Iterator</a>.
1112
+ *
1113
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to
1114
+ * <tt>operator<</tt>. \pre The resulting range shall not overlap with either input range.
1115
+ *
1116
+ * The following code snippet demonstrates how to use \p set_union to compute the union of
1117
+ * two sets of integers sorted in ascending order.
1118
+ *
1119
+ * \code
1120
+ * #include <thrust/set_operations.h>
1121
+ * ...
1122
+ * int A1[7] = {0, 2, 4, 6, 8, 10, 12};
1123
+ * int A2[5] = {1, 3, 5, 7, 9};
1124
+ *
1125
+ * int result[11];
1126
+ *
1127
+ * int *result_end = thrust::set_union(A1, A1 + 7, A2, A2 + 5, result);
1128
+ * // result = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12}
1129
+ * \endcode
1130
+ *
1131
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_union
1132
+ * \see \p merge
1133
+ * \see \p includes
1134
+ * \see \p set_union
1135
+ * \see \p set_intersection
1136
+ * \see \p set_symmetric_difference
1137
+ * \see \p sort
1138
+ * \see \p is_sorted
1139
+ */
1140
+ template <typename InputIterator1, typename InputIterator2, typename OutputIterator>
1141
+ OutputIterator set_union(
1142
+ InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result);
1143
+
1144
+ /*! \p set_union constructs a sorted range that is the union of the sorted ranges
1145
+ * <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The return value is the
1146
+ * end of the output range.
1147
+ *
1148
+ * In the simplest case, \p set_union performs the "union" operation from set
1149
+ * theory: the output range contains a copy of every element that is contained in
1150
+ * <tt>[first1, last1)</tt>, <tt>[first2, last2)</tt>, or both. The general case
1151
+ * is more complicated, because the input ranges may contain duplicate elements.
1152
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements
1153
+ * that are equivalent to each other and if <tt>[first2, last2)</tt> contains \c n
1154
+ * elements that are equivalent to them, then all \c m elements from the first
1155
+ * range shall be copied to the output range, in order, and then <tt>max(n - m, 0)</tt>
1156
+ * elements from the second range shall be copied to the output, in order.
1157
+ *
1158
+ * This version of \p set_union compares elements using a function object \p comp.
1159
+ *
1160
+ * The algorithm's execution is parallelized as determined by \p exec.
1161
+ *
1162
+ * \param exec The execution policy to use for parallelization.
1163
+ * \param first1 The beginning of the first input range.
1164
+ * \param last1 The end of the first input range.
1165
+ * \param first2 The beginning of the second input range.
1166
+ * \param last2 The end of the second input range.
1167
+ * \param result The beginning of the output range.
1168
+ * \param comp Comparison operator.
1169
+ * \return The end of the output range.
1170
+ *
1171
+ * \tparam DerivedPolicy The name of the derived execution policy.
1172
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1173
+ * Iterator</a>, \p InputIterator1's \c value_type is convertible to \p StrictWeakCompare's first argument type. and
1174
+ * \p InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1175
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1176
+ * \p InputIterator2's \c value_type is convertible to \p StrictWeakCompare's second argument type.
1177
+ * and \p InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types.
1178
+ * \tparam OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
1179
+ * Iterator</a>. \tparam StrictWeakCompare is a model of <a
1180
+ * href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak Ordering</a>.
1181
+ *
1182
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to \p comp.
1183
+ * \pre The resulting range shall not overlap with either input range.
1184
+ *
1185
+ * The following code snippet demonstrates how to use \p set_union to compute the union of
1186
+ * two sets of integers sorted in ascending order using the \p thrust::host execution policy for
1187
+ * parallelization:
1188
+ *
1189
+ * \code
1190
+ * #include <thrust/set_operations.h>
1191
+ * #include <thrust/functional.h>
1192
+ * #include <thrust/execution_policy.h>
1193
+ * ...
1194
+ * int A1[7] = {12, 10, 8, 6, 4, 2, 0};
1195
+ * int A2[5] = {9, 7, 5, 3, 1};
1196
+ *
1197
+ * int result[11];
1198
+ *
1199
+ * int *result_end = thrust::set_union(thrust::host, A1, A1 + 7, A2, A2 + 5, result, ::cuda::std::greater<int>());
1200
+ * // result = {12, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
1201
+ * \endcode
1202
+ *
1203
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_union
1204
+ * \see \p merge
1205
+ * \see \p includes
1206
+ * \see \p set_union
1207
+ * \see \p set_intersection
1208
+ * \see \p set_symmetric_difference
1209
+ * \see \p sort
1210
+ * \see \p is_sorted
1211
+ */
1212
+ template <typename DerivedPolicy,
1213
+ typename InputIterator1,
1214
+ typename InputIterator2,
1215
+ typename OutputIterator,
1216
+ typename StrictWeakCompare>
1217
+ _CCCL_HOST_DEVICE OutputIterator set_union(
1218
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
1219
+ InputIterator1 first1,
1220
+ InputIterator1 last1,
1221
+ InputIterator2 first2,
1222
+ InputIterator2 last2,
1223
+ OutputIterator result,
1224
+ StrictWeakCompare comp);
1225
+
1226
+ /*! \p set_union constructs a sorted range that is the union of the sorted ranges
1227
+ * <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt>. The return value is the
1228
+ * end of the output range.
1229
+ *
1230
+ * In the simplest case, \p set_union performs the "union" operation from set
1231
+ * theory: the output range contains a copy of every element that is contained in
1232
+ * <tt>[first1, last1)</tt>, <tt>[first2, last2)</tt>, or both. The general case
1233
+ * is more complicated, because the input ranges may contain duplicate elements.
1234
+ * The generalization is that if <tt>[first1, last1)</tt> contains \c m elements
1235
+ * that are equivalent to each other and if <tt>[first2, last2)</tt> contains \c n
1236
+ * elements that are equivalent to them, then all \c m elements from the first
1237
+ * range shall be copied to the output range, in order, and then <tt>max(n - m, 0)</tt>
1238
+ * elements from the second range shall be copied to the output, in order.
1239
+ *
1240
+ * This version of \p set_union compares elements using a function object \p comp.
1241
+ *
1242
+ * \param first1 The beginning of the first input range.
1243
+ * \param last1 The end of the first input range.
1244
+ * \param first2 The beginning of the second input range.
1245
+ * \param last2 The end of the second input range.
1246
+ * \param result The beginning of the output range.
1247
+ * \param comp Comparison operator.
1248
+ * \return The end of the output range.
1249
+ *
1250
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1251
+ * Iterator</a>, \p InputIterator1's \c value_type is convertible to \p StrictWeakCompare's first argument type. and
1252
+ * \p InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1253
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1254
+ * \p InputIterator2's \c value_type is convertible to \p StrictWeakCompare's second argument type.
1255
+ * and \p InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types.
1256
+ * \tparam OutputIterator is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output
1257
+ * Iterator</a>. \tparam StrictWeakCompare is a model of <a
1258
+ * href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak Ordering</a>.
1259
+ *
1260
+ * \pre The ranges <tt>[first1, last1)</tt> and <tt>[first2, last2)</tt> shall be sorted with respect to \p comp.
1261
+ * \pre The resulting range shall not overlap with either input range.
1262
+ *
1263
+ * The following code snippet demonstrates how to use \p set_union to compute the union of
1264
+ * two sets of integers sorted in ascending order.
1265
+ *
1266
+ * \code
1267
+ * #include <thrust/set_operations.h>
1268
+ * #include <thrust/functional.h>
1269
+ * ...
1270
+ * int A1[7] = {12, 10, 8, 6, 4, 2, 0};
1271
+ * int A2[5] = {9, 7, 5, 3, 1};
1272
+ *
1273
+ * int result[11];
1274
+ *
1275
+ * int *result_end = thrust::set_union(A1, A1 + 7, A2, A2 + 5, result, ::cuda::std::greater<int>());
1276
+ * // result = {12, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
1277
+ * \endcode
1278
+ *
1279
+ * \see https://en.cppreference.com/w/cpp/algorithm/set_union
1280
+ * \see \p merge
1281
+ * \see \p includes
1282
+ * \see \p set_union
1283
+ * \see \p set_intersection
1284
+ * \see \p set_symmetric_difference
1285
+ * \see \p sort
1286
+ * \see \p is_sorted
1287
+ */
1288
+ template <typename InputIterator1, typename InputIterator2, typename OutputIterator, typename StrictWeakCompare>
1289
+ OutputIterator set_union(
1290
+ InputIterator1 first1,
1291
+ InputIterator1 last1,
1292
+ InputIterator2 first2,
1293
+ InputIterator2 last2,
1294
+ OutputIterator result,
1295
+ StrictWeakCompare comp);
1296
+
1297
+ /*! \p set_difference_by_key performs a key-value difference operation from set theory.
1298
+ * \p set_difference_by_key constructs a sorted range that is the difference of the sorted
1299
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
1300
+ * with each element from the input and output key ranges is a value element. The associated input
1301
+ * value ranges need not be sorted.
1302
+ *
1303
+ * In the simplest case, \p set_difference_by_key performs the "difference" operation from set
1304
+ * theory: the keys output range contains a copy of every element that is contained in
1305
+ * <tt>[keys_first1, keys_last1)</tt> and not contained in <tt>[keys_first2, keys_last2)</tt>.
1306
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
1307
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements
1308
+ * that are equivalent to each other and if <tt>[keys_first2, keys_last2)</tt> contains \c n
1309
+ * elements that are equivalent to them, the last <tt>max(m-n,0)</tt> elements from
1310
+ * <tt>[keys_first1, keys_last1)</tt> range shall be copied to the output range.
1311
+ *
1312
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
1313
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
1314
+ * corresponding value element is copied from the corresponding values input range (beginning at
1315
+ * \p values_first1 or \p values_first2) to the values output range.
1316
+ *
1317
+ * This version of \p set_difference_by_key compares key elements using \c operator<.
1318
+ *
1319
+ * The algorithm's execution is parallelized as determined by \p exec.
1320
+ *
1321
+ * \param exec The execution policy to use for parallelization.
1322
+ * \param keys_first1 The beginning of the first input range of keys.
1323
+ * \param keys_last1 The end of the first input range of keys.
1324
+ * \param keys_first2 The beginning of the second input range of keys.
1325
+ * \param keys_last2 The end of the second input range of keys.
1326
+ * \param values_first1 The beginning of the first input range of values.
1327
+ * \param values_first2 The beginning of the first input range of values.
1328
+ * \param keys_result The beginning of the output range of keys.
1329
+ * \param values_result The beginning of the output range of values.
1330
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
1331
+ * and such that <tt>p.second</tt> is the end of the output range of values.
1332
+ *
1333
+ * \tparam DerivedPolicy The name of the derived execution policy.
1334
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1335
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1336
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1337
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1338
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1339
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1340
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1341
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1342
+ * \p InputIterator2's \c value_type is a model of <a
1343
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1344
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1345
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1346
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1347
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1348
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
1349
+ * value_types. \tparam InputIterator4 is a model of <a
1350
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
1351
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
1352
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
1353
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>.
1354
+ *
1355
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
1356
+ * respect to <tt>operator<</tt>. \pre The resulting ranges shall not overlap with any input range.
1357
+ *
1358
+ * The following code snippet demonstrates how to use \p set_difference_by_key to compute the
1359
+ * set difference of two sets of integers sorted in ascending order with their values using the \p thrust::host
1360
+ * execution policy for parallelization:
1361
+ *
1362
+ * \code
1363
+ * #include <thrust/set_operations.h>
1364
+ * #include <thrust/execution_policy.h>
1365
+ * ...
1366
+ * int A_keys[6] = {0, 1, 3, 4, 5, 6, 9};
1367
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
1368
+ *
1369
+ * int B_keys[5] = {1, 3, 5, 7, 9};
1370
+ * int B_vals[5] = {1, 1, 1, 1, 1};
1371
+ *
1372
+ * int keys_result[3];
1373
+ * int vals_result[3];
1374
+ *
1375
+ * thrust::pair<int*,int*> end = thrust::set_difference_by_key(thrust::host, A_keys, A_keys + 6, B_keys, B_keys + 5,
1376
+ * A_vals, B_vals, keys_result, vals_result);
1377
+ * // keys_result is now {0, 4, 6}
1378
+ * // vals_result is now {0, 0, 0}
1379
+ * \endcode
1380
+ *
1381
+ * \see \p set_union_by_key
1382
+ * \see \p set_intersection_by_key
1383
+ * \see \p set_symmetric_difference_by_key
1384
+ * \see \p sort_by_key
1385
+ * \see \p is_sorted
1386
+ */
1387
+ template <typename DerivedPolicy,
1388
+ typename InputIterator1,
1389
+ typename InputIterator2,
1390
+ typename InputIterator3,
1391
+ typename InputIterator4,
1392
+ typename OutputIterator1,
1393
+ typename OutputIterator2>
1394
+ _CCCL_HOST_DEVICE thrust::pair<OutputIterator1, OutputIterator2> set_difference_by_key(
1395
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
1396
+ InputIterator1 keys_first1,
1397
+ InputIterator1 keys_last1,
1398
+ InputIterator2 keys_first2,
1399
+ InputIterator2 keys_last2,
1400
+ InputIterator3 values_first1,
1401
+ InputIterator4 values_first2,
1402
+ OutputIterator1 keys_result,
1403
+ OutputIterator2 values_result);
1404
+
1405
+ /*! \p set_difference_by_key performs a key-value difference operation from set theory.
1406
+ * \p set_difference_by_key constructs a sorted range that is the difference of the sorted
1407
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
1408
+ * with each element from the input and output key ranges is a value element. The associated input
1409
+ * value ranges need not be sorted.
1410
+ *
1411
+ * In the simplest case, \p set_difference_by_key performs the "difference" operation from set
1412
+ * theory: the keys output range contains a copy of every element that is contained in
1413
+ * <tt>[keys_first1, keys_last1)</tt> and not contained in <tt>[keys_first2, keys_last2)</tt>.
1414
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
1415
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements
1416
+ * that are equivalent to each other and if <tt>[keys_first2, keys_last2)</tt> contains \c n
1417
+ * elements that are equivalent to them, the last <tt>max(m-n,0)</tt> elements from
1418
+ * <tt>[keys_first1, keys_last1)</tt> range shall be copied to the output range.
1419
+ *
1420
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
1421
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
1422
+ * corresponding value element is copied from the corresponding values input range (beginning at
1423
+ * \p values_first1 or \p values_first2) to the values output range.
1424
+ *
1425
+ * This version of \p set_difference_by_key compares key elements using \c operator<.
1426
+ *
1427
+ * \param keys_first1 The beginning of the first input range of keys.
1428
+ * \param keys_last1 The end of the first input range of keys.
1429
+ * \param keys_first2 The beginning of the second input range of keys.
1430
+ * \param keys_last2 The end of the second input range of keys.
1431
+ * \param values_first1 The beginning of the first input range of values.
1432
+ * \param values_first2 The beginning of the first input range of values.
1433
+ * \param keys_result The beginning of the output range of keys.
1434
+ * \param values_result The beginning of the output range of values.
1435
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
1436
+ * and such that <tt>p.second</tt> is the end of the output range of values.
1437
+ *
1438
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1439
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1440
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1441
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1442
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1443
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1444
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1445
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1446
+ * \p InputIterator2's \c value_type is a model of <a
1447
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1448
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1449
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1450
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1451
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1452
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
1453
+ * value_types. \tparam InputIterator4 is a model of <a
1454
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
1455
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
1456
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
1457
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>.
1458
+ *
1459
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
1460
+ * respect to <tt>operator<</tt>. \pre The resulting ranges shall not overlap with any input range.
1461
+ *
1462
+ * The following code snippet demonstrates how to use \p set_difference_by_key to compute the
1463
+ * set difference of two sets of integers sorted in ascending order with their values.
1464
+ *
1465
+ * \code
1466
+ * #include <thrust/set_operations.h>
1467
+ * ...
1468
+ * int A_keys[6] = {0, 1, 3, 4, 5, 6, 9};
1469
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
1470
+ *
1471
+ * int B_keys[5] = {1, 3, 5, 7, 9};
1472
+ * int B_vals[5] = {1, 1, 1, 1, 1};
1473
+ *
1474
+ * int keys_result[3];
1475
+ * int vals_result[3];
1476
+ *
1477
+ * thrust::pair<int*,int*> end = thrust::set_difference_by_key(A_keys, A_keys + 6, B_keys, B_keys + 5, A_vals, B_vals,
1478
+ * keys_result, vals_result);
1479
+ * // keys_result is now {0, 4, 6}
1480
+ * // vals_result is now {0, 0, 0}
1481
+ * \endcode
1482
+ *
1483
+ * \see \p set_union_by_key
1484
+ * \see \p set_intersection_by_key
1485
+ * \see \p set_symmetric_difference_by_key
1486
+ * \see \p sort_by_key
1487
+ * \see \p is_sorted
1488
+ */
1489
+ template <typename InputIterator1,
1490
+ typename InputIterator2,
1491
+ typename InputIterator3,
1492
+ typename InputIterator4,
1493
+ typename OutputIterator1,
1494
+ typename OutputIterator2>
1495
+ thrust::pair<OutputIterator1, OutputIterator2> set_difference_by_key(
1496
+ InputIterator1 keys_first1,
1497
+ InputIterator1 keys_last1,
1498
+ InputIterator2 keys_first2,
1499
+ InputIterator2 keys_last2,
1500
+ InputIterator3 values_first1,
1501
+ InputIterator4 values_first2,
1502
+ OutputIterator1 keys_result,
1503
+ OutputIterator2 values_result);
1504
+
1505
+ /*! \p set_difference_by_key performs a key-value difference operation from set theory.
1506
+ * \p set_difference_by_key constructs a sorted range that is the difference of the sorted
1507
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
1508
+ * with each element from the input and output key ranges is a value element. The associated input
1509
+ * value ranges need not be sorted.
1510
+ *
1511
+ * In the simplest case, \p set_difference_by_key performs the "difference" operation from set
1512
+ * theory: the keys output range contains a copy of every element that is contained in
1513
+ * <tt>[keys_first1, keys_last1)</tt> and not contained in <tt>[keys_first2, keys_last2)</tt>.
1514
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
1515
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements
1516
+ * that are equivalent to each other and if <tt>[keys_first2, keys_last2)</tt> contains \c n
1517
+ * elements that are equivalent to them, the last <tt>max(m-n,0)</tt> elements from
1518
+ * <tt>[keys_first1, keys_last1)</tt> range shall be copied to the output range.
1519
+ *
1520
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
1521
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
1522
+ * corresponding value element is copied from the corresponding values input range (beginning at
1523
+ * \p values_first1 or \p values_first2) to the values output range.
1524
+ *
1525
+ * This version of \p set_difference_by_key compares key elements using a function object \p comp.
1526
+ *
1527
+ * The algorithm's execution is parallelized as determined by \p exec.
1528
+ *
1529
+ * \param exec The execution policy to use for parallelization.
1530
+ * \param keys_first1 The beginning of the first input range of keys.
1531
+ * \param keys_last1 The end of the first input range of keys.
1532
+ * \param keys_first2 The beginning of the second input range of keys.
1533
+ * \param keys_last2 The end of the second input range of keys.
1534
+ * \param values_first1 The beginning of the first input range of values.
1535
+ * \param values_first2 The beginning of the first input range of values.
1536
+ * \param keys_result The beginning of the output range of keys.
1537
+ * \param values_result The beginning of the output range of values.
1538
+ * \param comp Comparison operator.
1539
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
1540
+ * and such that <tt>p.second</tt> is the end of the output range of values.
1541
+ *
1542
+ * \tparam DerivedPolicy The name of the derived execution policy.
1543
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1544
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1545
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1546
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1547
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1548
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1549
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1550
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1551
+ * \p InputIterator2's \c value_type is a model of <a
1552
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1553
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1554
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1555
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1556
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1557
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
1558
+ * value_types. \tparam InputIterator4 is a model of <a
1559
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
1560
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
1561
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
1562
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam
1563
+ * StrictWeakCompare is a model of <a href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak
1564
+ * Ordering</a>.
1565
+ *
1566
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
1567
+ * respect to \p comp. \pre The resulting ranges shall not overlap with any input range.
1568
+ *
1569
+ * The following code snippet demonstrates how to use \p set_difference_by_key to compute the
1570
+ * set difference of two sets of integers sorted in descending order with their values using the \p thrust::host
1571
+ * execution policy for parallelization:
1572
+ *
1573
+ * \code
1574
+ * #include <thrust/set_operations.h>
1575
+ * #include <thrust/functional.h>
1576
+ * #include <thrust/execution_policy.h>
1577
+ * ...
1578
+ * int A_keys[6] = {9, 6, 5, 4, 3, 1, 0};
1579
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
1580
+ *
1581
+ * int B_keys[5] = {9, 7, 5, 3, 1};
1582
+ * int B_vals[5] = {1, 1, 1, 1, 1};
1583
+ *
1584
+ * int keys_result[3];
1585
+ * int vals_result[3];
1586
+ *
1587
+ * thrust::pair<int*,int*> end = thrust::set_difference_by_key(thrust::host, A_keys, A_keys + 6, B_keys, B_keys + 5,
1588
+ * A_vals, B_vals, keys_result, vals_result, ::cuda::std::greater<int>());
1589
+ * // keys_result is now {0, 4, 6}
1590
+ * // vals_result is now {0, 0, 0}
1591
+ * \endcode
1592
+ *
1593
+ * \see \p set_union_by_key
1594
+ * \see \p set_intersection_by_key
1595
+ * \see \p set_symmetric_difference_by_key
1596
+ * \see \p sort_by_key
1597
+ * \see \p is_sorted
1598
+ */
1599
+ template <typename DerivedPolicy,
1600
+ typename InputIterator1,
1601
+ typename InputIterator2,
1602
+ typename InputIterator3,
1603
+ typename InputIterator4,
1604
+ typename OutputIterator1,
1605
+ typename OutputIterator2,
1606
+ typename StrictWeakCompare>
1607
+ _CCCL_HOST_DEVICE thrust::pair<OutputIterator1, OutputIterator2> set_difference_by_key(
1608
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
1609
+ InputIterator1 keys_first1,
1610
+ InputIterator1 keys_last1,
1611
+ InputIterator2 keys_first2,
1612
+ InputIterator2 keys_last2,
1613
+ InputIterator3 values_first1,
1614
+ InputIterator4 values_first2,
1615
+ OutputIterator1 keys_result,
1616
+ OutputIterator2 values_result,
1617
+ StrictWeakCompare comp);
1618
+
1619
+ /*! \p set_difference_by_key performs a key-value difference operation from set theory.
1620
+ * \p set_difference_by_key constructs a sorted range that is the difference of the sorted
1621
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
1622
+ * with each element from the input and output key ranges is a value element. The associated input
1623
+ * value ranges need not be sorted.
1624
+ *
1625
+ * In the simplest case, \p set_difference_by_key performs the "difference" operation from set
1626
+ * theory: the keys output range contains a copy of every element that is contained in
1627
+ * <tt>[keys_first1, keys_last1)</tt> and not contained in <tt>[keys_first2, keys_last2)</tt>.
1628
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
1629
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements
1630
+ * that are equivalent to each other and if <tt>[keys_first2, keys_last2)</tt> contains \c n
1631
+ * elements that are equivalent to them, the last <tt>max(m-n,0)</tt> elements from
1632
+ * <tt>[keys_first1, keys_last1)</tt> range shall be copied to the output range.
1633
+ *
1634
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
1635
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
1636
+ * corresponding value element is copied from the corresponding values input range (beginning at
1637
+ * \p values_first1 or \p values_first2) to the values output range.
1638
+ *
1639
+ * This version of \p set_difference_by_key compares key elements using a function object \p comp.
1640
+ *
1641
+ * \param keys_first1 The beginning of the first input range of keys.
1642
+ * \param keys_last1 The end of the first input range of keys.
1643
+ * \param keys_first2 The beginning of the second input range of keys.
1644
+ * \param keys_last2 The end of the second input range of keys.
1645
+ * \param values_first1 The beginning of the first input range of values.
1646
+ * \param values_first2 The beginning of the first input range of values.
1647
+ * \param keys_result The beginning of the output range of keys.
1648
+ * \param values_result The beginning of the output range of values.
1649
+ * \param comp Comparison operator.
1650
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
1651
+ * and such that <tt>p.second</tt> is the end of the output range of values.
1652
+ *
1653
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1654
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1655
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1656
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1657
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1658
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1659
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1660
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1661
+ * \p InputIterator2's \c value_type is a model of <a
1662
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1663
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1664
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1665
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1666
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1667
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
1668
+ * value_types. \tparam InputIterator4 is a model of <a
1669
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
1670
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
1671
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
1672
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam
1673
+ * StrictWeakCompare is a model of <a href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak
1674
+ * Ordering</a>.
1675
+ *
1676
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
1677
+ * respect to \p comp. \pre The resulting ranges shall not overlap with any input range.
1678
+ *
1679
+ * The following code snippet demonstrates how to use \p set_difference_by_key to compute the
1680
+ * set difference of two sets of integers sorted in descending order with their values.
1681
+ *
1682
+ * \code
1683
+ * #include <thrust/set_operations.h>
1684
+ * #include <thrust/functional.h>
1685
+ * ...
1686
+ * int A_keys[6] = {9, 6, 5, 4, 3, 1, 0};
1687
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
1688
+ *
1689
+ * int B_keys[5] = {9, 7, 5, 3, 1};
1690
+ * int B_vals[5] = {1, 1, 1, 1, 1};
1691
+ *
1692
+ * int keys_result[3];
1693
+ * int vals_result[3];
1694
+ *
1695
+ * thrust::pair<int*,int*> end = thrust::set_difference_by_key(A_keys, A_keys + 6, B_keys, B_keys + 5, A_vals, B_vals,
1696
+ * keys_result, vals_result, ::cuda::std::greater<int>());
1697
+ * // keys_result is now {0, 4, 6}
1698
+ * // vals_result is now {0, 0, 0}
1699
+ * \endcode
1700
+ *
1701
+ * \see \p set_union_by_key
1702
+ * \see \p set_intersection_by_key
1703
+ * \see \p set_symmetric_difference_by_key
1704
+ * \see \p sort_by_key
1705
+ * \see \p is_sorted
1706
+ */
1707
+ template <typename InputIterator1,
1708
+ typename InputIterator2,
1709
+ typename InputIterator3,
1710
+ typename InputIterator4,
1711
+ typename OutputIterator1,
1712
+ typename OutputIterator2,
1713
+ typename StrictWeakCompare>
1714
+ thrust::pair<OutputIterator1, OutputIterator2> set_difference_by_key(
1715
+ InputIterator1 keys_first1,
1716
+ InputIterator1 keys_last1,
1717
+ InputIterator2 keys_first2,
1718
+ InputIterator2 keys_last2,
1719
+ InputIterator3 values_first1,
1720
+ InputIterator4 values_first2,
1721
+ OutputIterator1 keys_result,
1722
+ OutputIterator2 values_result,
1723
+ StrictWeakCompare comp);
1724
+
1725
+ /*! \p set_intersection_by_key performs a key-value intersection operation from set theory.
1726
+ * \p set_intersection_by_key constructs a sorted range that is the intersection of the sorted
1727
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
1728
+ * with each element from the input and output key ranges is a value element. The associated input
1729
+ * value ranges need not be sorted.
1730
+ *
1731
+ * In the simplest case, \p set_intersection_by_key performs the "intersection" operation from set
1732
+ * theory: the keys output range contains a copy of every element that is contained in both
1733
+ * <tt>[keys_first1, keys_last1)</tt> <tt>[keys_first2, keys_last2)</tt>.
1734
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
1735
+ * The generalization is that if an element appears \c m times in <tt>[keys_first1, keys_last1)</tt>
1736
+ * and \c n times in <tt>[keys_first2, keys_last2)</tt> (where \c m may be zero), then it
1737
+ * appears <tt>min(m,n)</tt> times in the keys output range.
1738
+ * \p set_intersection_by_key is stable, meaning both that elements are copied from the first
1739
+ * input range rather than the second, and that the relative order of elements in the output range
1740
+ * is the same as the first input range.
1741
+ *
1742
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> to the keys output range,
1743
+ * the corresponding value element is copied from <tt>[values_first1, values_last1)</tt> to the values
1744
+ * output range.
1745
+ *
1746
+ * This version of \p set_intersection_by_key compares objects using \c operator<.
1747
+ *
1748
+ * The algorithm's execution is parallelized as determined by \p exec.
1749
+ *
1750
+ * \param exec The execution policy to use for parallelization.
1751
+ * \param keys_first1 The beginning of the first input range of keys.
1752
+ * \param keys_last1 The end of the first input range of keys.
1753
+ * \param keys_first2 The beginning of the second input range of keys.
1754
+ * \param keys_last2 The end of the second input range of keys.
1755
+ * \param values_first1 The beginning of the first input range of values.
1756
+ * \param keys_result The beginning of the output range of keys.
1757
+ * \param values_result The beginning of the output range of values.
1758
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
1759
+ * and such that <tt>p.second</tt> is the end of the output range of values.
1760
+ *
1761
+ * \note Unlike the other key-value set operations, \p set_intersection_by_key is unique in that it has no
1762
+ * \c values_first2 parameter because elements from the second input range are never copied to the output range.
1763
+ *
1764
+ * \tparam DerivedPolicy The name of the derived execution policy.
1765
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1766
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1767
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1768
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1769
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1770
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1771
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1772
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1773
+ * \p InputIterator2's \c value_type is a model of <a
1774
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1775
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1776
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1777
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1778
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1779
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
1780
+ * value_types. \tparam OutputIterator1 is a model of <a
1781
+ * href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2 is a
1782
+ * model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>.
1783
+ *
1784
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
1785
+ * respect to <tt>operator<</tt>. \pre The resulting ranges shall not overlap with any input range.
1786
+ *
1787
+ * The following code snippet demonstrates how to use \p set_intersection_by_key to compute the
1788
+ * set intersection of two sets of integers sorted in ascending order with their values using the \p thrust::host
1789
+ * execution policy for parallelization:
1790
+ *
1791
+ * \code
1792
+ * #include <thrust/set_operations.h>
1793
+ * #include <thrust/execution_policy.h>
1794
+ * ...
1795
+ * int A_keys[6] = {1, 3, 5, 7, 9, 11};
1796
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0};
1797
+ *
1798
+ * int B_keys[7] = {1, 1, 2, 3, 5, 8, 13};
1799
+ *
1800
+ * int keys_result[7];
1801
+ * int vals_result[7];
1802
+ *
1803
+ * thrust::pair<int*,int*> end = thrust::set_intersection_by_key(thrust::host, A_keys, A_keys + 6, B_keys, B_keys + 7,
1804
+ * A_vals, keys_result, vals_result);
1805
+ *
1806
+ * // keys_result is now {1, 3, 5}
1807
+ * // vals_result is now {0, 0, 0}
1808
+ * \endcode
1809
+ *
1810
+ * \see \p set_union_by_key
1811
+ * \see \p set_difference_by_key
1812
+ * \see \p set_symmetric_difference_by_key
1813
+ * \see \p sort_by_key
1814
+ * \see \p is_sorted
1815
+ */
1816
+ template <typename DerivedPolicy,
1817
+ typename InputIterator1,
1818
+ typename InputIterator2,
1819
+ typename InputIterator3,
1820
+ typename OutputIterator1,
1821
+ typename OutputIterator2>
1822
+ _CCCL_HOST_DEVICE thrust::pair<OutputIterator1, OutputIterator2> set_intersection_by_key(
1823
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
1824
+ InputIterator1 keys_first1,
1825
+ InputIterator1 keys_last1,
1826
+ InputIterator2 keys_first2,
1827
+ InputIterator2 keys_last2,
1828
+ InputIterator3 values_first1,
1829
+ OutputIterator1 keys_result,
1830
+ OutputIterator2 values_result);
1831
+
1832
+ /*! \p set_intersection_by_key performs a key-value intersection operation from set theory.
1833
+ * \p set_intersection_by_key constructs a sorted range that is the intersection of the sorted
1834
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
1835
+ * with each element from the input and output key ranges is a value element. The associated input
1836
+ * value ranges need not be sorted.
1837
+ *
1838
+ * In the simplest case, \p set_intersection_by_key performs the "intersection" operation from set
1839
+ * theory: the keys output range contains a copy of every element that is contained in both
1840
+ * <tt>[keys_first1, keys_last1)</tt> <tt>[keys_first2, keys_last2)</tt>.
1841
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
1842
+ * The generalization is that if an element appears \c m times in <tt>[keys_first1, keys_last1)</tt>
1843
+ * and \c n times in <tt>[keys_first2, keys_last2)</tt> (where \c m may be zero), then it
1844
+ * appears <tt>min(m,n)</tt> times in the keys output range.
1845
+ * \p set_intersection_by_key is stable, meaning both that elements are copied from the first
1846
+ * input range rather than the second, and that the relative order of elements in the output range
1847
+ * is the same as the first input range.
1848
+ *
1849
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> to the keys output range,
1850
+ * the corresponding value element is copied from <tt>[values_first1, values_last1)</tt> to the values
1851
+ * output range.
1852
+ *
1853
+ * This version of \p set_intersection_by_key compares objects using \c operator<.
1854
+ *
1855
+ * \param keys_first1 The beginning of the first input range of keys.
1856
+ * \param keys_last1 The end of the first input range of keys.
1857
+ * \param keys_first2 The beginning of the second input range of keys.
1858
+ * \param keys_last2 The end of the second input range of keys.
1859
+ * \param values_first1 The beginning of the first input range of values.
1860
+ * \param keys_result The beginning of the output range of keys.
1861
+ * \param values_result The beginning of the output range of values.
1862
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
1863
+ * and such that <tt>p.second</tt> is the end of the output range of values.
1864
+ *
1865
+ * \note Unlike the other key-value set operations, \p set_intersection_by_key is unique in that it has no
1866
+ * \c values_first2 parameter because elements from the second input range are never copied to the output range.
1867
+ *
1868
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1869
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1870
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1871
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1872
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1873
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1874
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1875
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1876
+ * \p InputIterator2's \c value_type is a model of <a
1877
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1878
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1879
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1880
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1881
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1882
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
1883
+ * value_types. \tparam OutputIterator1 is a model of <a
1884
+ * href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2 is a
1885
+ * model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>.
1886
+ *
1887
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
1888
+ * respect to <tt>operator<</tt>. \pre The resulting ranges shall not overlap with any input range.
1889
+ *
1890
+ * The following code snippet demonstrates how to use \p set_intersection_by_key to compute the
1891
+ * set intersection of two sets of integers sorted in ascending order with their values.
1892
+ *
1893
+ * \code
1894
+ * #include <thrust/set_operations.h>
1895
+ * ...
1896
+ * int A_keys[6] = {1, 3, 5, 7, 9, 11};
1897
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0};
1898
+ *
1899
+ * int B_keys[7] = {1, 1, 2, 3, 5, 8, 13};
1900
+ *
1901
+ * int keys_result[7];
1902
+ * int vals_result[7];
1903
+ *
1904
+ * thrust::pair<int*,int*> end = thrust::set_intersection_by_key(A_keys, A_keys + 6, B_keys, B_keys + 7, A_vals,
1905
+ * keys_result, vals_result);
1906
+ *
1907
+ * // keys_result is now {1, 3, 5}
1908
+ * // vals_result is now {0, 0, 0}
1909
+ * \endcode
1910
+ *
1911
+ * \see \p set_union_by_key
1912
+ * \see \p set_difference_by_key
1913
+ * \see \p set_symmetric_difference_by_key
1914
+ * \see \p sort_by_key
1915
+ * \see \p is_sorted
1916
+ */
1917
+ template <typename InputIterator1,
1918
+ typename InputIterator2,
1919
+ typename InputIterator3,
1920
+ typename OutputIterator1,
1921
+ typename OutputIterator2>
1922
+ thrust::pair<OutputIterator1, OutputIterator2> set_intersection_by_key(
1923
+ InputIterator1 keys_first1,
1924
+ InputIterator1 keys_last1,
1925
+ InputIterator2 keys_first2,
1926
+ InputIterator2 keys_last2,
1927
+ InputIterator3 values_first1,
1928
+ OutputIterator1 keys_result,
1929
+ OutputIterator2 values_result);
1930
+
1931
+ /*! \p set_intersection_by_key performs a key-value intersection operation from set theory.
1932
+ * \p set_intersection_by_key constructs a sorted range that is the intersection of the sorted
1933
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
1934
+ * with each element from the input and output key ranges is a value element. The associated input
1935
+ * value ranges need not be sorted.
1936
+ *
1937
+ * In the simplest case, \p set_intersection_by_key performs the "intersection" operation from set
1938
+ * theory: the keys output range contains a copy of every element that is contained in both
1939
+ * <tt>[keys_first1, keys_last1)</tt> <tt>[keys_first2, keys_last2)</tt>.
1940
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
1941
+ * The generalization is that if an element appears \c m times in <tt>[keys_first1, keys_last1)</tt>
1942
+ * and \c n times in <tt>[keys_first2, keys_last2)</tt> (where \c m may be zero), then it
1943
+ * appears <tt>min(m,n)</tt> times in the keys output range.
1944
+ * \p set_intersection_by_key is stable, meaning both that elements are copied from the first
1945
+ * input range rather than the second, and that the relative order of elements in the output range
1946
+ * is the same as the first input range.
1947
+ *
1948
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> to the keys output range,
1949
+ * the corresponding value element is copied from <tt>[values_first1, values_last1)</tt> to the values
1950
+ * output range.
1951
+ *
1952
+ * This version of \p set_intersection_by_key compares objects using a function object \p comp.
1953
+ *
1954
+ * The algorithm's execution is parallelized as determined by \p exec.
1955
+ *
1956
+ * \param exec The execution policy to use for parallelization.
1957
+ * \param keys_first1 The beginning of the first input range of keys.
1958
+ * \param keys_last1 The end of the first input range of keys.
1959
+ * \param keys_first2 The beginning of the second input range of keys.
1960
+ * \param keys_last2 The end of the second input range of keys.
1961
+ * \param values_first1 The beginning of the first input range of values.
1962
+ * \param keys_result The beginning of the output range of keys.
1963
+ * \param values_result The beginning of the output range of values.
1964
+ * \param comp Comparison operator.
1965
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
1966
+ * and such that <tt>p.second</tt> is the end of the output range of values.
1967
+ *
1968
+ * \note Unlike the other key-value set operations, \p set_intersection_by_key is unique in that it has no
1969
+ * \c values_first2 parameter because elements from the second input range are never copied to the output range.
1970
+ *
1971
+ * \tparam DerivedPolicy The name of the derived execution policy.
1972
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
1973
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
1974
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
1975
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
1976
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1977
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1978
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1979
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
1980
+ * \p InputIterator2's \c value_type is a model of <a
1981
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
1982
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
1983
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
1984
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
1985
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
1986
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
1987
+ * value_types. \tparam OutputIterator1 is a model of <a
1988
+ * href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2 is a
1989
+ * model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam
1990
+ * StrictWeakCompare is a model of <a href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak
1991
+ * Ordering</a>.
1992
+ *
1993
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
1994
+ * respect to \p comp. \pre The resulting ranges shall not overlap with any input range.
1995
+ *
1996
+ * The following code snippet demonstrates how to use \p set_intersection_by_key to compute the
1997
+ * set intersection of two sets of integers sorted in descending order with their values using the
1998
+ * \p thrust::host execution policy for parallelization:
1999
+ *
2000
+ * \code
2001
+ * #include <thrust/set_operations.h>
2002
+ * #include <thrust/functional.h>
2003
+ * #include <thrust/execution_policy.h>
2004
+ * ...
2005
+ * int A_keys[6] = {11, 9, 7, 5, 3, 1};
2006
+ * int A_vals[6] = { 0, 0, 0, 0, 0, 0};
2007
+ *
2008
+ * int B_keys[7] = {13, 8, 5, 3, 2, 1, 1};
2009
+ *
2010
+ * int keys_result[7];
2011
+ * int vals_result[7];
2012
+ *
2013
+ * thrust::pair<int*,int*> end = thrust::set_intersection_by_key(thrust::host, A_keys, A_keys + 6, B_keys, B_keys + 7,
2014
+ * A_vals, keys_result, vals_result, ::cuda::std::greater<int>());
2015
+ *
2016
+ * // keys_result is now {5, 3, 1}
2017
+ * // vals_result is now {0, 0, 0}
2018
+ * \endcode
2019
+ *
2020
+ * \see \p set_union_by_key
2021
+ * \see \p set_difference_by_key
2022
+ * \see \p set_symmetric_difference_by_key
2023
+ * \see \p sort_by_key
2024
+ * \see \p is_sorted
2025
+ */
2026
+ template <typename DerivedPolicy,
2027
+ typename InputIterator1,
2028
+ typename InputIterator2,
2029
+ typename InputIterator3,
2030
+ typename OutputIterator1,
2031
+ typename OutputIterator2,
2032
+ typename StrictWeakCompare>
2033
+ _CCCL_HOST_DEVICE thrust::pair<OutputIterator1, OutputIterator2> set_intersection_by_key(
2034
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
2035
+ InputIterator1 keys_first1,
2036
+ InputIterator1 keys_last1,
2037
+ InputIterator2 keys_first2,
2038
+ InputIterator2 keys_last2,
2039
+ InputIterator3 values_first1,
2040
+ OutputIterator1 keys_result,
2041
+ OutputIterator2 values_result,
2042
+ StrictWeakCompare comp);
2043
+
2044
+ /*! \p set_intersection_by_key performs a key-value intersection operation from set theory.
2045
+ * \p set_intersection_by_key constructs a sorted range that is the intersection of the sorted
2046
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2047
+ * with each element from the input and output key ranges is a value element. The associated input
2048
+ * value ranges need not be sorted.
2049
+ *
2050
+ * In the simplest case, \p set_intersection_by_key performs the "intersection" operation from set
2051
+ * theory: the keys output range contains a copy of every element that is contained in both
2052
+ * <tt>[keys_first1, keys_last1)</tt> <tt>[keys_first2, keys_last2)</tt>.
2053
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
2054
+ * The generalization is that if an element appears \c m times in <tt>[keys_first1, keys_last1)</tt>
2055
+ * and \c n times in <tt>[keys_first2, keys_last2)</tt> (where \c m may be zero), then it
2056
+ * appears <tt>min(m,n)</tt> times in the keys output range.
2057
+ * \p set_intersection_by_key is stable, meaning both that elements are copied from the first
2058
+ * input range rather than the second, and that the relative order of elements in the output range
2059
+ * is the same as the first input range.
2060
+ *
2061
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> to the keys output range,
2062
+ * the corresponding value element is copied from <tt>[values_first1, values_last1)</tt> to the values
2063
+ * output range.
2064
+ *
2065
+ * This version of \p set_intersection_by_key compares objects using a function object \p comp.
2066
+ *
2067
+ * \param keys_first1 The beginning of the first input range of keys.
2068
+ * \param keys_last1 The end of the first input range of keys.
2069
+ * \param keys_first2 The beginning of the second input range of keys.
2070
+ * \param keys_last2 The end of the second input range of keys.
2071
+ * \param values_first1 The beginning of the first input range of values.
2072
+ * \param keys_result The beginning of the output range of keys.
2073
+ * \param values_result The beginning of the output range of values.
2074
+ * \param comp Comparison operator.
2075
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2076
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2077
+ *
2078
+ * \note Unlike the other key-value set operations, \p set_intersection_by_key is unique in that it has no
2079
+ * \c values_first2 parameter because elements from the second input range are never copied to the output range.
2080
+ *
2081
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2082
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2083
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2084
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2085
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2086
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2087
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2088
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2089
+ * \p InputIterator2's \c value_type is a model of <a
2090
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2091
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2092
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2093
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2094
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2095
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2096
+ * value_types. \tparam OutputIterator1 is a model of <a
2097
+ * href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2 is a
2098
+ * model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam
2099
+ * StrictWeakCompare is a model of <a href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak
2100
+ * Ordering</a>.
2101
+ *
2102
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2103
+ * respect to \p comp. \pre The resulting ranges shall not overlap with any input range.
2104
+ *
2105
+ * The following code snippet demonstrates how to use \p set_intersection_by_key to compute the
2106
+ * set intersection of two sets of integers sorted in descending order with their values.
2107
+ *
2108
+ * \code
2109
+ * #include <thrust/set_operations.h>
2110
+ * #include <thrust/functional.h>
2111
+ * ...
2112
+ * int A_keys[6] = {11, 9, 7, 5, 3, 1};
2113
+ * int A_vals[6] = { 0, 0, 0, 0, 0, 0};
2114
+ *
2115
+ * int B_keys[7] = {13, 8, 5, 3, 2, 1, 1};
2116
+ *
2117
+ * int keys_result[7];
2118
+ * int vals_result[7];
2119
+ *
2120
+ * thrust::pair<int*,int*> end = thrust::set_intersection_by_key(A_keys, A_keys + 6, B_keys, B_keys + 7, A_vals,
2121
+ * keys_result, vals_result, ::cuda::std::greater<int>());
2122
+ *
2123
+ * // keys_result is now {5, 3, 1}
2124
+ * // vals_result is now {0, 0, 0}
2125
+ * \endcode
2126
+ *
2127
+ * \see \p set_union_by_key
2128
+ * \see \p set_difference_by_key
2129
+ * \see \p set_symmetric_difference_by_key
2130
+ * \see \p sort_by_key
2131
+ * \see \p is_sorted
2132
+ */
2133
+ template <typename InputIterator1,
2134
+ typename InputIterator2,
2135
+ typename InputIterator3,
2136
+ typename OutputIterator1,
2137
+ typename OutputIterator2,
2138
+ typename StrictWeakCompare>
2139
+ thrust::pair<OutputIterator1, OutputIterator2> set_intersection_by_key(
2140
+ InputIterator1 keys_first1,
2141
+ InputIterator1 keys_last1,
2142
+ InputIterator2 keys_first2,
2143
+ InputIterator2 keys_last2,
2144
+ InputIterator3 values_first1,
2145
+ OutputIterator1 keys_result,
2146
+ OutputIterator2 values_result,
2147
+ StrictWeakCompare comp);
2148
+
2149
+ /*! \p set_symmetric_difference_by_key performs a key-value symmetric difference operation from set theory.
2150
+ * \p set_difference_by_key constructs a sorted range that is the symmetric difference of the sorted
2151
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2152
+ * with each element from the input and output key ranges is a value element. The associated input
2153
+ * value ranges need not be sorted.
2154
+ *
2155
+ * In the simplest case, \p set_symmetric_difference_by_key performs a set theoretic calculation:
2156
+ * it constructs the union of the two sets A - B and B - A, where A and B are the two
2157
+ * input ranges. That is, the output range contains a copy of every element that is
2158
+ * contained in <tt>[keys_first1, keys_last1)</tt> but not <tt>[keys_first2, keys_last1)</tt>, and a copy of
2159
+ * every element that is contained in <tt>[keys_first2, keys_last2)</tt> but not <tt>[keys_first1, keys_last1)</tt>.
2160
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
2161
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements that are
2162
+ * equivalent to each other and <tt>[keys_first2, keys_last1)</tt> contains \c n elements that are
2163
+ * equivalent to them, then <tt>|m - n|</tt> of those elements shall be copied to the output
2164
+ * range: the last <tt>m - n</tt> elements from <tt>[keys_first1, keys_last1)</tt> if <tt>m > n</tt>, and
2165
+ * the last <tt>n - m</tt> of these elements from <tt>[keys_first2, keys_last2)</tt> if <tt>m < n</tt>.
2166
+ *
2167
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
2168
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
2169
+ * corresponding value element is copied from the corresponding values input range (beginning at
2170
+ * \p values_first1 or \p values_first2) to the values output range.
2171
+ *
2172
+ * This version of \p set_symmetric_difference_by_key compares key elements using \c operator<.
2173
+ *
2174
+ * The algorithm's execution is parallelized as determined by \p exec.
2175
+ *
2176
+ * \param exec The execution policy to use for parallelization.
2177
+ * \param keys_first1 The beginning of the first input range of keys.
2178
+ * \param keys_last1 The end of the first input range of keys.
2179
+ * \param keys_first2 The beginning of the second input range of keys.
2180
+ * \param keys_last2 The end of the second input range of keys.
2181
+ * \param values_first1 The beginning of the first input range of values.
2182
+ * \param values_first2 The beginning of the first input range of values.
2183
+ * \param keys_result The beginning of the output range of keys.
2184
+ * \param values_result The beginning of the output range of values.
2185
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2186
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2187
+ *
2188
+ * \tparam DerivedPolicy The name of the derived execution policy.
2189
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2190
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2191
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2192
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2193
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2194
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2195
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2196
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2197
+ * \p InputIterator2's \c value_type is a model of <a
2198
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2199
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2200
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2201
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2202
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2203
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2204
+ * value_types. \tparam InputIterator4 is a model of <a
2205
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
2206
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
2207
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
2208
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>.
2209
+ *
2210
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2211
+ * respect to <tt>operator<</tt>. \pre The resulting ranges shall not overlap with any input range.
2212
+ *
2213
+ * The following code snippet demonstrates how to use \p set_symmetric_difference_by_key to compute the
2214
+ * symmetric difference of two sets of integers sorted in ascending order with their values using the
2215
+ * \p thrust::host execution policy for parallelization:
2216
+ *
2217
+ * \code
2218
+ * #include <thrust/set_operations.h>
2219
+ * #include <thrust/execution_policy.h>
2220
+ * ...
2221
+ * int A_keys[6] = {0, 1, 2, 2, 4, 6, 7};
2222
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
2223
+ *
2224
+ * int B_keys[5] = {1, 1, 2, 5, 8};
2225
+ * int B_vals[5] = {1, 1, 1, 1, 1};
2226
+ *
2227
+ * int keys_result[6];
2228
+ * int vals_result[6];
2229
+ *
2230
+ * thrust::pair<int*,int*> end = thrust::set_symmetric_difference_by_key(thrust::host, A_keys, A_keys + 6, B_keys,
2231
+ * B_keys + 5, A_vals, B_vals, keys_result, vals_result);
2232
+ * // keys_result is now {0, 4, 5, 6, 7, 8}
2233
+ * // vals_result is now {0, 0, 1, 0, 0, 1}
2234
+ * \endcode
2235
+ *
2236
+ * \see \p set_union_by_key
2237
+ * \see \p set_intersection_by_key
2238
+ * \see \p set_difference_by_key
2239
+ * \see \p sort_by_key
2240
+ * \see \p is_sorted
2241
+ */
2242
+ template <typename DerivedPolicy,
2243
+ typename InputIterator1,
2244
+ typename InputIterator2,
2245
+ typename InputIterator3,
2246
+ typename InputIterator4,
2247
+ typename OutputIterator1,
2248
+ typename OutputIterator2>
2249
+ _CCCL_HOST_DEVICE thrust::pair<OutputIterator1, OutputIterator2> set_symmetric_difference_by_key(
2250
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
2251
+ InputIterator1 keys_first1,
2252
+ InputIterator1 keys_last1,
2253
+ InputIterator2 keys_first2,
2254
+ InputIterator2 keys_last2,
2255
+ InputIterator3 values_first1,
2256
+ InputIterator4 values_first2,
2257
+ OutputIterator1 keys_result,
2258
+ OutputIterator2 values_result);
2259
+
2260
+ /*! \p set_symmetric_difference_by_key performs a key-value symmetric difference operation from set theory.
2261
+ * \p set_difference_by_key constructs a sorted range that is the symmetric difference of the sorted
2262
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2263
+ * with each element from the input and output key ranges is a value element. The associated input
2264
+ * value ranges need not be sorted.
2265
+ *
2266
+ * In the simplest case, \p set_symmetric_difference_by_key performs a set theoretic calculation:
2267
+ * it constructs the union of the two sets A - B and B - A, where A and B are the two
2268
+ * input ranges. That is, the output range contains a copy of every element that is
2269
+ * contained in <tt>[keys_first1, keys_last1)</tt> but not <tt>[keys_first2, keys_last1)</tt>, and a copy of
2270
+ * every element that is contained in <tt>[keys_first2, keys_last2)</tt> but not <tt>[keys_first1, keys_last1)</tt>.
2271
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
2272
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements that are
2273
+ * equivalent to each other and <tt>[keys_first2, keys_last1)</tt> contains \c n elements that are
2274
+ * equivalent to them, then <tt>|m - n|</tt> of those elements shall be copied to the output
2275
+ * range: the last <tt>m - n</tt> elements from <tt>[keys_first1, keys_last1)</tt> if <tt>m > n</tt>, and
2276
+ * the last <tt>n - m</tt> of these elements from <tt>[keys_first2, keys_last2)</tt> if <tt>m < n</tt>.
2277
+ *
2278
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
2279
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
2280
+ * corresponding value element is copied from the corresponding values input range (beginning at
2281
+ * \p values_first1 or \p values_first2) to the values output range.
2282
+ *
2283
+ * This version of \p set_symmetric_difference_by_key compares key elements using \c operator<.
2284
+ *
2285
+ * \param keys_first1 The beginning of the first input range of keys.
2286
+ * \param keys_last1 The end of the first input range of keys.
2287
+ * \param keys_first2 The beginning of the second input range of keys.
2288
+ * \param keys_last2 The end of the second input range of keys.
2289
+ * \param values_first1 The beginning of the first input range of values.
2290
+ * \param values_first2 The beginning of the first input range of values.
2291
+ * \param keys_result The beginning of the output range of keys.
2292
+ * \param values_result The beginning of the output range of values.
2293
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2294
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2295
+ *
2296
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2297
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2298
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2299
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2300
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2301
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2302
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2303
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2304
+ * \p InputIterator2's \c value_type is a model of <a
2305
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2306
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2307
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2308
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2309
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2310
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2311
+ * value_types. \tparam InputIterator4 is a model of <a
2312
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
2313
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
2314
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
2315
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>.
2316
+ *
2317
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2318
+ * respect to <tt>operator<</tt>. \pre The resulting ranges shall not overlap with any input range.
2319
+ *
2320
+ * The following code snippet demonstrates how to use \p set_symmetric_difference_by_key to compute the
2321
+ * symmetric difference of two sets of integers sorted in ascending order with their values.
2322
+ *
2323
+ * \code
2324
+ * #include <thrust/set_operations.h>
2325
+ * ...
2326
+ * int A_keys[6] = {0, 1, 2, 2, 4, 6, 7};
2327
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
2328
+ *
2329
+ * int B_keys[5] = {1, 1, 2, 5, 8};
2330
+ * int B_vals[5] = {1, 1, 1, 1, 1};
2331
+ *
2332
+ * int keys_result[6];
2333
+ * int vals_result[6];
2334
+ *
2335
+ * thrust::pair<int*,int*> end = thrust::set_symmetric_difference_by_key(A_keys, A_keys + 6, B_keys, B_keys + 5,
2336
+ * A_vals, B_vals, keys_result, vals_result);
2337
+ * // keys_result is now {0, 4, 5, 6, 7, 8}
2338
+ * // vals_result is now {0, 0, 1, 0, 0, 1}
2339
+ * \endcode
2340
+ *
2341
+ * \see \p set_union_by_key
2342
+ * \see \p set_intersection_by_key
2343
+ * \see \p set_difference_by_key
2344
+ * \see \p sort_by_key
2345
+ * \see \p is_sorted
2346
+ */
2347
+ template <typename InputIterator1,
2348
+ typename InputIterator2,
2349
+ typename InputIterator3,
2350
+ typename InputIterator4,
2351
+ typename OutputIterator1,
2352
+ typename OutputIterator2>
2353
+ thrust::pair<OutputIterator1, OutputIterator2> set_symmetric_difference_by_key(
2354
+ InputIterator1 keys_first1,
2355
+ InputIterator1 keys_last1,
2356
+ InputIterator2 keys_first2,
2357
+ InputIterator2 keys_last2,
2358
+ InputIterator3 values_first1,
2359
+ InputIterator4 values_first2,
2360
+ OutputIterator1 keys_result,
2361
+ OutputIterator2 values_result);
2362
+
2363
+ /*! \p set_symmetric_difference_by_key performs a key-value symmetric difference operation from set theory.
2364
+ * \p set_difference_by_key constructs a sorted range that is the symmetric difference of the sorted
2365
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2366
+ * with each element from the input and output key ranges is a value element. The associated input
2367
+ * value ranges need not be sorted.
2368
+ *
2369
+ * In the simplest case, \p set_symmetric_difference_by_key performs a set theoretic calculation:
2370
+ * it constructs the union of the two sets A - B and B - A, where A and B are the two
2371
+ * input ranges. That is, the output range contains a copy of every element that is
2372
+ * contained in <tt>[keys_first1, keys_last1)</tt> but not <tt>[keys_first2, keys_last1)</tt>, and a copy of
2373
+ * every element that is contained in <tt>[keys_first2, keys_last2)</tt> but not <tt>[keys_first1, keys_last1)</tt>.
2374
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
2375
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements that are
2376
+ * equivalent to each other and <tt>[keys_first2, keys_last1)</tt> contains \c n elements that are
2377
+ * equivalent to them, then <tt>|m - n|</tt> of those elements shall be copied to the output
2378
+ * range: the last <tt>m - n</tt> elements from <tt>[keys_first1, keys_last1)</tt> if <tt>m > n</tt>, and
2379
+ * the last <tt>n - m</tt> of these elements from <tt>[keys_first2, keys_last2)</tt> if <tt>m < n</tt>.
2380
+ *
2381
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
2382
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
2383
+ * corresponding value element is copied from the corresponding values input range (beginning at
2384
+ * \p values_first1 or \p values_first2) to the values output range.
2385
+ *
2386
+ * This version of \p set_symmetric_difference_by_key compares key elements using a function object \c comp.
2387
+ *
2388
+ * The algorithm's execution is parallelized as determined by \p exec.
2389
+ *
2390
+ * \param exec The execution policy to use for parallelization.
2391
+ * \param keys_first1 The beginning of the first input range of keys.
2392
+ * \param keys_last1 The end of the first input range of keys.
2393
+ * \param keys_first2 The beginning of the second input range of keys.
2394
+ * \param keys_last2 The end of the second input range of keys.
2395
+ * \param values_first1 The beginning of the first input range of values.
2396
+ * \param values_first2 The beginning of the first input range of values.
2397
+ * \param keys_result The beginning of the output range of keys.
2398
+ * \param values_result The beginning of the output range of values.
2399
+ * \param comp Comparison operator.
2400
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2401
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2402
+ *
2403
+ * \tparam DerivedPolicy The name of the derived execution policy.
2404
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2405
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2406
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2407
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2408
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2409
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2410
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2411
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2412
+ * \p InputIterator2's \c value_type is a model of <a
2413
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2414
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2415
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2416
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2417
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2418
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2419
+ * value_types. \tparam InputIterator4 is a model of <a
2420
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
2421
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
2422
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
2423
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam
2424
+ * StrictWeakCompare is a model of <a href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak
2425
+ * Ordering</a>.
2426
+ *
2427
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2428
+ * respect to \p comp. \pre The resulting ranges shall not overlap with any input range.
2429
+ *
2430
+ * The following code snippet demonstrates how to use \p set_symmetric_difference_by_key to compute the
2431
+ * symmetric difference of two sets of integers sorted in descending order with their values using the
2432
+ * \p thrust::host execution policy for parallelization:
2433
+ *
2434
+ * \code
2435
+ * #include <thrust/set_operations.h>
2436
+ * #include <thrust/functional.h>
2437
+ * #include <thrust/execution_policy.h>
2438
+ * ...
2439
+ * int A_keys[6] = {7, 6, 4, 2, 2, 1, 0};
2440
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
2441
+ *
2442
+ * int B_keys[5] = {8, 5, 2, 1, 1};
2443
+ * int B_vals[5] = {1, 1, 1, 1, 1};
2444
+ *
2445
+ * int keys_result[6];
2446
+ * int vals_result[6];
2447
+ *
2448
+ * thrust::pair<int*,int*> end = thrust::set_symmetric_difference_by_key(thrust::host, A_keys, A_keys + 6, B_keys,
2449
+ * B_keys + 5, A_vals, B_vals, keys_result, vals_result);
2450
+ * // keys_result is now {8, 7, 6, 5, 4, 0}
2451
+ * // vals_result is now {1, 0, 0, 1, 0, 0}
2452
+ * \endcode
2453
+ *
2454
+ * \see \p set_union_by_key
2455
+ * \see \p set_intersection_by_key
2456
+ * \see \p set_difference_by_key
2457
+ * \see \p sort_by_key
2458
+ * \see \p is_sorted
2459
+ */
2460
+ template <typename DerivedPolicy,
2461
+ typename InputIterator1,
2462
+ typename InputIterator2,
2463
+ typename InputIterator3,
2464
+ typename InputIterator4,
2465
+ typename OutputIterator1,
2466
+ typename OutputIterator2,
2467
+ typename StrictWeakCompare>
2468
+ _CCCL_HOST_DEVICE thrust::pair<OutputIterator1, OutputIterator2> set_symmetric_difference_by_key(
2469
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
2470
+ InputIterator1 keys_first1,
2471
+ InputIterator1 keys_last1,
2472
+ InputIterator2 keys_first2,
2473
+ InputIterator2 keys_last2,
2474
+ InputIterator3 values_first1,
2475
+ InputIterator4 values_first2,
2476
+ OutputIterator1 keys_result,
2477
+ OutputIterator2 values_result,
2478
+ StrictWeakCompare comp);
2479
+
2480
+ /*! \p set_symmetric_difference_by_key performs a key-value symmetric difference operation from set theory.
2481
+ * \p set_difference_by_key constructs a sorted range that is the symmetric difference of the sorted
2482
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2483
+ * with each element from the input and output key ranges is a value element. The associated input
2484
+ * value ranges need not be sorted.
2485
+ *
2486
+ * In the simplest case, \p set_symmetric_difference_by_key performs a set theoretic calculation:
2487
+ * it constructs the union of the two sets A - B and B - A, where A and B are the two
2488
+ * input ranges. That is, the output range contains a copy of every element that is
2489
+ * contained in <tt>[keys_first1, keys_last1)</tt> but not <tt>[keys_first2, keys_last1)</tt>, and a copy of
2490
+ * every element that is contained in <tt>[keys_first2, keys_last2)</tt> but not <tt>[keys_first1, keys_last1)</tt>.
2491
+ * The general case is more complicated, because the input ranges may contain duplicate elements.
2492
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements that are
2493
+ * equivalent to each other and <tt>[keys_first2, keys_last1)</tt> contains \c n elements that are
2494
+ * equivalent to them, then <tt>|m - n|</tt> of those elements shall be copied to the output
2495
+ * range: the last <tt>m - n</tt> elements from <tt>[keys_first1, keys_last1)</tt> if <tt>m > n</tt>, and
2496
+ * the last <tt>n - m</tt> of these elements from <tt>[keys_first2, keys_last2)</tt> if <tt>m < n</tt>.
2497
+ *
2498
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
2499
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
2500
+ * corresponding value element is copied from the corresponding values input range (beginning at
2501
+ * \p values_first1 or \p values_first2) to the values output range.
2502
+ *
2503
+ * This version of \p set_symmetric_difference_by_key compares key elements using a function object \c comp.
2504
+ *
2505
+ * \param keys_first1 The beginning of the first input range of keys.
2506
+ * \param keys_last1 The end of the first input range of keys.
2507
+ * \param keys_first2 The beginning of the second input range of keys.
2508
+ * \param keys_last2 The end of the second input range of keys.
2509
+ * \param values_first1 The beginning of the first input range of values.
2510
+ * \param values_first2 The beginning of the first input range of values.
2511
+ * \param keys_result The beginning of the output range of keys.
2512
+ * \param values_result The beginning of the output range of values.
2513
+ * \param comp Comparison operator.
2514
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2515
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2516
+ *
2517
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2518
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2519
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2520
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2521
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2522
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2523
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2524
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2525
+ * \p InputIterator2's \c value_type is a model of <a
2526
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2527
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2528
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2529
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2530
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2531
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2532
+ * value_types. \tparam InputIterator4 is a model of <a
2533
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
2534
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
2535
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
2536
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam
2537
+ * StrictWeakCompare is a model of <a href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak
2538
+ * Ordering</a>.
2539
+ *
2540
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2541
+ * respect to \p comp. \pre The resulting ranges shall not overlap with any input range.
2542
+ *
2543
+ * The following code snippet demonstrates how to use \p set_symmetric_difference_by_key to compute the
2544
+ * symmetric difference of two sets of integers sorted in descending order with their values.
2545
+ *
2546
+ * \code
2547
+ * #include <thrust/set_operations.h>
2548
+ * #include <thrust/functional.h>
2549
+ * ...
2550
+ * int A_keys[6] = {7, 6, 4, 2, 2, 1, 0};
2551
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
2552
+ *
2553
+ * int B_keys[5] = {8, 5, 2, 1, 1};
2554
+ * int B_vals[5] = {1, 1, 1, 1, 1};
2555
+ *
2556
+ * int keys_result[6];
2557
+ * int vals_result[6];
2558
+ *
2559
+ * thrust::pair<int*,int*> end = thrust::set_symmetric_difference_by_key(A_keys, A_keys + 6, B_keys, B_keys + 5,
2560
+ * A_vals, B_vals, keys_result, vals_result);
2561
+ * // keys_result is now {8, 7, 6, 5, 4, 0}
2562
+ * // vals_result is now {1, 0, 0, 1, 0, 0}
2563
+ * \endcode
2564
+ *
2565
+ * \see \p set_union_by_key
2566
+ * \see \p set_intersection_by_key
2567
+ * \see \p set_difference_by_key
2568
+ * \see \p sort_by_key
2569
+ * \see \p is_sorted
2570
+ */
2571
+ template <typename InputIterator1,
2572
+ typename InputIterator2,
2573
+ typename InputIterator3,
2574
+ typename InputIterator4,
2575
+ typename OutputIterator1,
2576
+ typename OutputIterator2,
2577
+ typename StrictWeakCompare>
2578
+ thrust::pair<OutputIterator1, OutputIterator2> set_symmetric_difference_by_key(
2579
+ InputIterator1 keys_first1,
2580
+ InputIterator1 keys_last1,
2581
+ InputIterator2 keys_first2,
2582
+ InputIterator2 keys_last2,
2583
+ InputIterator3 values_first1,
2584
+ InputIterator4 values_first2,
2585
+ OutputIterator1 keys_result,
2586
+ OutputIterator2 values_result,
2587
+ StrictWeakCompare comp);
2588
+
2589
+ /*! \p set_union_by_key performs a key-value union operation from set theory.
2590
+ * \p set_union_by_key constructs a sorted range that is the union of the sorted
2591
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2592
+ * with each element from the input and output key ranges is a value element. The associated input
2593
+ * value ranges need not be sorted.
2594
+ *
2595
+ * In the simplest case, \p set_union_by_key performs the "union" operation from set theory:
2596
+ * the output range contains a copy of every element that is contained in
2597
+ * <tt>[keys_first1, keys_last1)</tt>, <tt>[keys_first2, keys_last1)</tt>, or both. The general case
2598
+ * is more complicated, because the input ranges may contain duplicate elements.
2599
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements
2600
+ * that are equivalent to each other and if <tt>[keys_first2, keys_last2)</tt> contains \c n
2601
+ * elements that are equivalent to them, then all \c m elements from the first
2602
+ * range shall be copied to the output range, in order, and then <tt>max(n - m, 0)</tt>
2603
+ * elements from the second range shall be copied to the output, in order.
2604
+ *
2605
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
2606
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
2607
+ * corresponding value element is copied from the corresponding values input range (beginning at
2608
+ * \p values_first1 or \p values_first2) to the values output range.
2609
+ *
2610
+ * This version of \p set_union_by_key compares key elements using \c operator<.
2611
+ *
2612
+ * The algorithm's execution is parallelized as determined by \p exec.
2613
+ *
2614
+ * \param exec The execution policy to use for parallelization.
2615
+ * \param keys_first1 The beginning of the first input range of keys.
2616
+ * \param keys_last1 The end of the first input range of keys.
2617
+ * \param keys_first2 The beginning of the second input range of keys.
2618
+ * \param keys_last2 The end of the second input range of keys.
2619
+ * \param values_first1 The beginning of the first input range of values.
2620
+ * \param values_first2 The beginning of the first input range of values.
2621
+ * \param keys_result The beginning of the output range of keys.
2622
+ * \param values_result The beginning of the output range of values.
2623
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2624
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2625
+ *
2626
+ * \tparam DerivedPolicy The name of the derived execution policy.
2627
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2628
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2629
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2630
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2631
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2632
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2633
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2634
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2635
+ * \p InputIterator2's \c value_type is a model of <a
2636
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2637
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2638
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2639
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2640
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2641
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2642
+ * value_types. \tparam InputIterator4 is a model of <a
2643
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
2644
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
2645
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
2646
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>.
2647
+ *
2648
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2649
+ * respect to <tt>operator<</tt>. \pre The resulting ranges shall not overlap with any input range.
2650
+ *
2651
+ * The following code snippet demonstrates how to use \p set_symmetric_difference_by_key to compute the
2652
+ * symmetric difference of two sets of integers sorted in ascending order with their values using the
2653
+ * \p thrust::host execution policy for parallelization:
2654
+ *
2655
+ * \code
2656
+ * #include <thrust/set_operations.h>
2657
+ * #include <thrust/execution_policy.h>
2658
+ * ...
2659
+ * int A_keys[6] = {0, 2, 4, 6, 8, 10, 12};
2660
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
2661
+ *
2662
+ * int B_keys[5] = {1, 3, 5, 7, 9};
2663
+ * int B_vals[5] = {1, 1, 1, 1, 1};
2664
+ *
2665
+ * int keys_result[11];
2666
+ * int vals_result[11];
2667
+ *
2668
+ * thrust::pair<int*,int*> end = thrust::set_symmetric_difference_by_key(thrust::host, A_keys, A_keys + 6, B_keys,
2669
+ * B_keys + 5, A_vals, B_vals, keys_result, vals_result);
2670
+ * // keys_result is now {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12}
2671
+ * // vals_result is now {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}
2672
+ * \endcode
2673
+ *
2674
+ * \see \p set_symmetric_difference_by_key
2675
+ * \see \p set_intersection_by_key
2676
+ * \see \p set_difference_by_key
2677
+ * \see \p sort_by_key
2678
+ * \see \p is_sorted
2679
+ */
2680
+ template <typename DerivedPolicy,
2681
+ typename InputIterator1,
2682
+ typename InputIterator2,
2683
+ typename InputIterator3,
2684
+ typename InputIterator4,
2685
+ typename OutputIterator1,
2686
+ typename OutputIterator2>
2687
+ _CCCL_HOST_DEVICE thrust::pair<OutputIterator1, OutputIterator2> set_union_by_key(
2688
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
2689
+ InputIterator1 keys_first1,
2690
+ InputIterator1 keys_last1,
2691
+ InputIterator2 keys_first2,
2692
+ InputIterator2 keys_last2,
2693
+ InputIterator3 values_first1,
2694
+ InputIterator4 values_first2,
2695
+ OutputIterator1 keys_result,
2696
+ OutputIterator2 values_result);
2697
+
2698
+ /*! \p set_union_by_key performs a key-value union operation from set theory.
2699
+ * \p set_union_by_key constructs a sorted range that is the union of the sorted
2700
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2701
+ * with each element from the input and output key ranges is a value element. The associated input
2702
+ * value ranges need not be sorted.
2703
+ *
2704
+ * In the simplest case, \p set_union_by_key performs the "union" operation from set theory:
2705
+ * the output range contains a copy of every element that is contained in
2706
+ * <tt>[keys_first1, keys_last1)</tt>, <tt>[keys_first2, keys_last1)</tt>, or both. The general case
2707
+ * is more complicated, because the input ranges may contain duplicate elements.
2708
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements
2709
+ * that are equivalent to each other and if <tt>[keys_first2, keys_last2)</tt> contains \c n
2710
+ * elements that are equivalent to them, then all \c m elements from the first
2711
+ * range shall be copied to the output range, in order, and then <tt>max(n - m, 0)</tt>
2712
+ * elements from the second range shall be copied to the output, in order.
2713
+ *
2714
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
2715
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
2716
+ * corresponding value element is copied from the corresponding values input range (beginning at
2717
+ * \p values_first1 or \p values_first2) to the values output range.
2718
+ *
2719
+ * This version of \p set_union_by_key compares key elements using \c operator<.
2720
+ *
2721
+ * \param keys_first1 The beginning of the first input range of keys.
2722
+ * \param keys_last1 The end of the first input range of keys.
2723
+ * \param keys_first2 The beginning of the second input range of keys.
2724
+ * \param keys_last2 The end of the second input range of keys.
2725
+ * \param values_first1 The beginning of the first input range of values.
2726
+ * \param values_first2 The beginning of the first input range of values.
2727
+ * \param keys_result The beginning of the output range of keys.
2728
+ * \param values_result The beginning of the output range of values.
2729
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2730
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2731
+ *
2732
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2733
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2734
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2735
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2736
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2737
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2738
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2739
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2740
+ * \p InputIterator2's \c value_type is a model of <a
2741
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2742
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2743
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2744
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2745
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2746
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2747
+ * value_types. \tparam InputIterator4 is a model of <a
2748
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
2749
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
2750
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
2751
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>.
2752
+ *
2753
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2754
+ * respect to <tt>operator<</tt>. \pre The resulting ranges shall not overlap with any input range.
2755
+ *
2756
+ * The following code snippet demonstrates how to use \p set_symmetric_difference_by_key to compute the
2757
+ * symmetric difference of two sets of integers sorted in ascending order with their values.
2758
+ *
2759
+ * \code
2760
+ * #include <thrust/set_operations.h>
2761
+ * ...
2762
+ * int A_keys[6] = {0, 2, 4, 6, 8, 10, 12};
2763
+ * int A_vals[6] = {0, 0, 0, 0, 0, 0, 0};
2764
+ *
2765
+ * int B_keys[5] = {1, 3, 5, 7, 9};
2766
+ * int B_vals[5] = {1, 1, 1, 1, 1};
2767
+ *
2768
+ * int keys_result[11];
2769
+ * int vals_result[11];
2770
+ *
2771
+ * thrust::pair<int*,int*> end = thrust::set_symmetric_difference_by_key(A_keys, A_keys + 6, B_keys, B_keys + 5,
2772
+ * A_vals, B_vals, keys_result, vals_result);
2773
+ * // keys_result is now {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12}
2774
+ * // vals_result is now {0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}
2775
+ * \endcode
2776
+ *
2777
+ * \see \p set_symmetric_difference_by_key
2778
+ * \see \p set_intersection_by_key
2779
+ * \see \p set_difference_by_key
2780
+ * \see \p sort_by_key
2781
+ * \see \p is_sorted
2782
+ */
2783
+ template <typename InputIterator1,
2784
+ typename InputIterator2,
2785
+ typename InputIterator3,
2786
+ typename InputIterator4,
2787
+ typename OutputIterator1,
2788
+ typename OutputIterator2>
2789
+ thrust::pair<OutputIterator1, OutputIterator2> set_union_by_key(
2790
+ InputIterator1 keys_first1,
2791
+ InputIterator1 keys_last1,
2792
+ InputIterator2 keys_first2,
2793
+ InputIterator2 keys_last2,
2794
+ InputIterator3 values_first1,
2795
+ InputIterator4 values_first2,
2796
+ OutputIterator1 keys_result,
2797
+ OutputIterator2 values_result);
2798
+
2799
+ /*! \p set_union_by_key performs a key-value union operation from set theory.
2800
+ * \p set_union_by_key constructs a sorted range that is the union of the sorted
2801
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2802
+ * with each element from the input and output key ranges is a value element. The associated input
2803
+ * value ranges need not be sorted.
2804
+ *
2805
+ * In the simplest case, \p set_union_by_key performs the "union" operation from set theory:
2806
+ * the output range contains a copy of every element that is contained in
2807
+ * <tt>[keys_first1, keys_last1)</tt>, <tt>[keys_first2, keys_last1)</tt>, or both. The general case
2808
+ * is more complicated, because the input ranges may contain duplicate elements.
2809
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements
2810
+ * that are equivalent to each other and if <tt>[keys_first2, keys_last2)</tt> contains \c n
2811
+ * elements that are equivalent to them, then all \c m elements from the first
2812
+ * range shall be copied to the output range, in order, and then <tt>max(n - m, 0)</tt>
2813
+ * elements from the second range shall be copied to the output, in order.
2814
+ *
2815
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
2816
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
2817
+ * corresponding value element is copied from the corresponding values input range (beginning at
2818
+ * \p values_first1 or \p values_first2) to the values output range.
2819
+ *
2820
+ * This version of \p set_union_by_key compares key elements using a function object \c comp.
2821
+ *
2822
+ * The algorithm's execution is parallelized as determined by \p exec.
2823
+ *
2824
+ * \param exec The execution policy to use for parallelization.
2825
+ * \param keys_first1 The beginning of the first input range of keys.
2826
+ * \param keys_last1 The end of the first input range of keys.
2827
+ * \param keys_first2 The beginning of the second input range of keys.
2828
+ * \param keys_last2 The end of the second input range of keys.
2829
+ * \param values_first1 The beginning of the first input range of values.
2830
+ * \param values_first2 The beginning of the first input range of values.
2831
+ * \param keys_result The beginning of the output range of keys.
2832
+ * \param values_result The beginning of the output range of values.
2833
+ * \param comp Comparison operator.
2834
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2835
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2836
+ *
2837
+ * \tparam DerivedPolicy The name of the derived execution policy.
2838
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2839
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2840
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2841
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2842
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2843
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2844
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2845
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2846
+ * \p InputIterator2's \c value_type is a model of <a
2847
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2848
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2849
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2850
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2851
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2852
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2853
+ * value_types. \tparam InputIterator4 is a model of <a
2854
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
2855
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
2856
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
2857
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam
2858
+ * StrictWeakCompare is a model of <a href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak
2859
+ * Ordering</a>.
2860
+ *
2861
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2862
+ * respect to \p comp. \pre The resulting ranges shall not overlap with any input range.
2863
+ *
2864
+ * The following code snippet demonstrates how to use \p set_symmetric_difference_by_key to compute the
2865
+ * symmetric difference of two sets of integers sorted in descending order with their values using the
2866
+ * \p thrust::host execution policy for parallelization:
2867
+ *
2868
+ * \code
2869
+ * #include <thrust/set_operations.h>
2870
+ * #include <thrust/functional.h>
2871
+ * #include <thrust/execution_policy.h>
2872
+ * ...
2873
+ * int A_keys[6] = {12, 10, 8, 6, 4, 2, 0};
2874
+ * int A_vals[6] = { 0, 0, 0, 0, 0, 0, 0};
2875
+ *
2876
+ * int B_keys[5] = {9, 7, 5, 3, 1};
2877
+ * int B_vals[5] = {1, 1, 1, 1, 1};
2878
+ *
2879
+ * int keys_result[11];
2880
+ * int vals_result[11];
2881
+ *
2882
+ * thrust::pair<int*,int*> end = thrust::set_symmetric_difference_by_key(thrust::host, A_keys, A_keys + 6, B_keys,
2883
+ * B_keys + 5, A_vals, B_vals, keys_result, vals_result, ::cuda::std::greater<int>());
2884
+ * // keys_result is now {12, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
2885
+ * // vals_result is now { 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}
2886
+ * \endcode
2887
+ *
2888
+ * \see \p set_symmetric_difference_by_key
2889
+ * \see \p set_intersection_by_key
2890
+ * \see \p set_difference_by_key
2891
+ * \see \p sort_by_key
2892
+ * \see \p is_sorted
2893
+ */
2894
+ template <typename DerivedPolicy,
2895
+ typename InputIterator1,
2896
+ typename InputIterator2,
2897
+ typename InputIterator3,
2898
+ typename InputIterator4,
2899
+ typename OutputIterator1,
2900
+ typename OutputIterator2,
2901
+ typename StrictWeakCompare>
2902
+ _CCCL_HOST_DEVICE thrust::pair<OutputIterator1, OutputIterator2> set_union_by_key(
2903
+ const thrust::detail::execution_policy_base<DerivedPolicy>& exec,
2904
+ InputIterator1 keys_first1,
2905
+ InputIterator1 keys_last1,
2906
+ InputIterator2 keys_first2,
2907
+ InputIterator2 keys_last2,
2908
+ InputIterator3 values_first1,
2909
+ InputIterator4 values_first2,
2910
+ OutputIterator1 keys_result,
2911
+ OutputIterator2 values_result,
2912
+ StrictWeakCompare comp);
2913
+
2914
+ /*! \p set_union_by_key performs a key-value union operation from set theory.
2915
+ * \p set_union_by_key constructs a sorted range that is the union of the sorted
2916
+ * ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt>. Associated
2917
+ * with each element from the input and output key ranges is a value element. The associated input
2918
+ * value ranges need not be sorted.
2919
+ *
2920
+ * In the simplest case, \p set_union_by_key performs the "union" operation from set theory:
2921
+ * the output range contains a copy of every element that is contained in
2922
+ * <tt>[keys_first1, keys_last1)</tt>, <tt>[keys_first2, keys_last1)</tt>, or both. The general case
2923
+ * is more complicated, because the input ranges may contain duplicate elements.
2924
+ * The generalization is that if <tt>[keys_first1, keys_last1)</tt> contains \c m elements
2925
+ * that are equivalent to each other and if <tt>[keys_first2, keys_last2)</tt> contains \c n
2926
+ * elements that are equivalent to them, then all \c m elements from the first
2927
+ * range shall be copied to the output range, in order, and then <tt>max(n - m, 0)</tt>
2928
+ * elements from the second range shall be copied to the output, in order.
2929
+ *
2930
+ * Each time a key element is copied from <tt>[keys_first1, keys_last1)</tt> or
2931
+ * <tt>[keys_first2, keys_last2)</tt> is copied to the keys output range, the
2932
+ * corresponding value element is copied from the corresponding values input range (beginning at
2933
+ * \p values_first1 or \p values_first2) to the values output range.
2934
+ *
2935
+ * This version of \p set_union_by_key compares key elements using a function object \c comp.
2936
+ *
2937
+ * \param keys_first1 The beginning of the first input range of keys.
2938
+ * \param keys_last1 The end of the first input range of keys.
2939
+ * \param keys_first2 The beginning of the second input range of keys.
2940
+ * \param keys_last2 The end of the second input range of keys.
2941
+ * \param values_first1 The beginning of the first input range of values.
2942
+ * \param values_first2 The beginning of the first input range of values.
2943
+ * \param keys_result The beginning of the output range of keys.
2944
+ * \param values_result The beginning of the output range of values.
2945
+ * \param comp Comparison operator.
2946
+ * \return A \p pair \c p such that <tt>p.first</tt> is the end of the output range of keys,
2947
+ * and such that <tt>p.second</tt> is the end of the output range of values.
2948
+ *
2949
+ * \tparam InputIterator1 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input
2950
+ * Iterator</a>, \p InputIterator1 and \p InputIterator2 have the same \c value_type, \p InputIterator1's \c value_type
2951
+ * is a model of <a href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the
2952
+ * ordering on \p InputIterator1's \c value_type is a strict weak ordering, as defined in the <a
2953
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2954
+ * InputIterator1's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2955
+ * InputIterator2 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2956
+ * \p InputIterator2 and \p InputIterator1 have the same \c value_type,
2957
+ * \p InputIterator2's \c value_type is a model of <a
2958
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a>, the ordering on \p
2959
+ * InputIterator2's \c value_type is a strict weak ordering, as defined in the <a
2960
+ * href="https://en.cppreference.com/w/cpp/named_req/LessThanComparable">LessThan Comparable</a> requirements, and \p
2961
+ * InputIterator2's \c value_type is convertible to a type in \p OutputIterator's set of \c value_types. \tparam
2962
+ * InputIterator3 is a model of <a href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>,
2963
+ * and \p InputIterator3's \c value_type is convertible to a type in \p OutputIterator2's set of \c
2964
+ * value_types. \tparam InputIterator4 is a model of <a
2965
+ * href="https://en.cppreference.com/w/cpp/iterator/input_iterator">Input Iterator</a>, and \p InputIterator4's \c
2966
+ * value_type is convertible to a type in \p OutputIterator2's set of \c value_types. \tparam OutputIterator1 is a model
2967
+ * of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam OutputIterator2
2968
+ * is a model of <a href="https://en.cppreference.com/w/cpp/iterator/output_iterator">Output Iterator</a>. \tparam
2969
+ * StrictWeakCompare is a model of <a href="https://en.cppreference.com/w/cpp/concepts/strict_weak_order">Strict Weak
2970
+ * Ordering</a>.
2971
+ *
2972
+ * \pre The ranges <tt>[keys_first1, keys_last1)</tt> and <tt>[keys_first2, keys_last2)</tt> shall be sorted with
2973
+ * respect to \p comp. \pre The resulting ranges shall not overlap with any input range.
2974
+ *
2975
+ * The following code snippet demonstrates how to use \p set_symmetric_difference_by_key to compute the
2976
+ * symmetric difference of two sets of integers sorted in descending order with their values.
2977
+ *
2978
+ * \code
2979
+ * #include <thrust/set_operations.h>
2980
+ * #include <thrust/functional.h>
2981
+ * ...
2982
+ * int A_keys[6] = {12, 10, 8, 6, 4, 2, 0};
2983
+ * int A_vals[6] = { 0, 0, 0, 0, 0, 0, 0};
2984
+ *
2985
+ * int B_keys[5] = {9, 7, 5, 3, 1};
2986
+ * int B_vals[5] = {1, 1, 1, 1, 1};
2987
+ *
2988
+ * int keys_result[11];
2989
+ * int vals_result[11];
2990
+ *
2991
+ * thrust::pair<int*,int*> end = thrust::set_symmetric_difference_by_key(A_keys, A_keys + 6, B_keys, B_keys + 5,
2992
+ * A_vals, B_vals, keys_result, vals_result, ::cuda::std::greater<int>());
2993
+ * // keys_result is now {12, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0}
2994
+ * // vals_result is now { 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}
2995
+ * \endcode
2996
+ *
2997
+ * \see \p set_symmetric_difference_by_key
2998
+ * \see \p set_intersection_by_key
2999
+ * \see \p set_difference_by_key
3000
+ * \see \p sort_by_key
3001
+ * \see \p is_sorted
3002
+ */
3003
+ template <typename InputIterator1,
3004
+ typename InputIterator2,
3005
+ typename InputIterator3,
3006
+ typename InputIterator4,
3007
+ typename OutputIterator1,
3008
+ typename OutputIterator2,
3009
+ typename StrictWeakCompare>
3010
+ thrust::pair<OutputIterator1, OutputIterator2> set_union_by_key(
3011
+ InputIterator1 keys_first1,
3012
+ InputIterator1 keys_last1,
3013
+ InputIterator2 keys_first2,
3014
+ InputIterator2 keys_last2,
3015
+ InputIterator3 values_first1,
3016
+ InputIterator4 values_first2,
3017
+ OutputIterator1 keys_result,
3018
+ OutputIterator2 values_result,
3019
+ StrictWeakCompare comp);
3020
+
3021
+ /*! \} // end set_operations
3022
+ */
3023
+
3024
+ THRUST_NAMESPACE_END
3025
+
3026
+ #include <thrust/detail/set_operations.inl>