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