code_ownership 2.0.0.pre.1 → 2.0.0.pre.3

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 (973) hide show
  1. checksums.yaml +4 -4
  2. data/.cargo/config +2 -2
  3. data/Cargo.lock +22 -31
  4. data/ext/cargo-vendor/codeowners-0.2.17/.cargo-checksum.json +1 -0
  5. data/ext/cargo-vendor/codeowners-0.2.17/Cargo.lock +1257 -0
  6. data/ext/cargo-vendor/codeowners-0.2.17/Cargo.toml +111 -0
  7. data/ext/cargo-vendor/codeowners-0.2.17/README.md +287 -0
  8. data/ext/cargo-vendor/codeowners-0.2.17/dev/run_benchmarks_for_gv.sh +12 -0
  9. data/ext/cargo-vendor/codeowners-0.2.17/rust-toolchain.toml +4 -0
  10. data/ext/cargo-vendor/codeowners-0.2.17/src/cache/file.rs +179 -0
  11. data/ext/cargo-vendor/codeowners-0.2.17/src/cli.rs +129 -0
  12. data/ext/cargo-vendor/codeowners-0.2.17/src/common_test.rs +358 -0
  13. data/ext/cargo-vendor/codeowners-0.2.17/src/config.rs +126 -0
  14. data/ext/cargo-vendor/codeowners-0.2.17/src/crosscheck.rs +90 -0
  15. data/ext/cargo-vendor/codeowners-0.2.17/src/lib.rs +11 -0
  16. data/ext/cargo-vendor/codeowners-0.2.17/src/main.rs +43 -0
  17. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/codeowners_file_parser.rs +504 -0
  18. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/codeowners_query.rs +32 -0
  19. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/file_generator.rs +203 -0
  20. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/file_owner_resolver.rs +414 -0
  21. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/mapper/annotated_file_mapper.rs +158 -0
  22. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/mapper/package_mapper.rs +220 -0
  23. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/mapper.rs +249 -0
  24. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership/validator.rs +218 -0
  25. data/ext/cargo-vendor/codeowners-0.2.17/src/ownership.rs +223 -0
  26. data/ext/cargo-vendor/codeowners-0.2.17/src/path_utils.rs +49 -0
  27. data/ext/cargo-vendor/codeowners-0.2.17/src/project.rs +229 -0
  28. data/ext/cargo-vendor/codeowners-0.2.17/src/project_builder.rs +337 -0
  29. data/ext/cargo-vendor/codeowners-0.2.17/src/project_file_builder.rs +107 -0
  30. data/ext/cargo-vendor/codeowners-0.2.17/src/runner/api.rs +141 -0
  31. data/ext/cargo-vendor/codeowners-0.2.17/src/runner/types.rs +37 -0
  32. data/ext/cargo-vendor/codeowners-0.2.17/src/runner.rs +390 -0
  33. data/ext/cargo-vendor/codeowners-0.2.17/src/tracked_files.rs +58 -0
  34. data/ext/cargo-vendor/codeowners-0.2.17/tests/common/mod.rs +179 -0
  35. data/ext/cargo-vendor/codeowners-0.2.17/tests/crosscheck_owners_test.rs +74 -0
  36. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/.github/CODEOWNERS +9 -0
  37. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/.keep +3 -0
  38. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/config/code_ownership.yml +12 -0
  39. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/config/teams/design.yml +7 -0
  40. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/config/teams/frontend.yml +6 -0
  41. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/apps/public/index.tsx +6 -0
  42. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/packages/dashboard/package.json +9 -0
  43. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/packages/dashboard/src/index.tsx +6 -0
  44. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/.codeowner +3 -0
  45. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/javascript_only_project/frontend/packages/ui-kit/src/button.tsx +5 -0
  46. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +10 -0
  47. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/.github/CODEOWNERS +41 -0
  48. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/config/code_ownership.yml +10 -0
  49. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/javascript/packages/list/page-admin.tsx +1 -0
  50. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/ruby/app/models/payroll.rb +3 -0
  51. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/ruby/app/views/foos/edit.erb +1 -0
  52. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/ruby/app/views/foos/index.html.erb +1 -0
  53. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project/ruby/app/views/foos/new.html.erb +1 -0
  54. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/.github/CODEOWNERS +53 -0
  55. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/code_ownership.yml +10 -0
  56. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/teams/brewers.yml +11 -0
  57. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/teams/cubs.yml +9 -0
  58. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/teams/giants.yml +8 -0
  59. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/config/teams/rockies.yml +8 -0
  60. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/package.json +5 -0
  61. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/datepicker/src/picks/dp.tsx +3 -0
  62. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/package.json +5 -0
  63. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/list/src/item.tsx +3 -0
  64. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/package.json +5 -0
  65. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/field.tsx +3 -0
  66. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/frontend/packages/components/textfield/src/fields/small.tsx +3 -0
  67. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/gems/apollo/lib/apollo.rb +6 -0
  68. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/gems/ivy/lib/ivy.rb +6 -0
  69. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/gems/lager/lib/lager.rb +6 -0
  70. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/gems/summit/lib/summit.rb +6 -0
  71. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/games/package.yml +1 -0
  72. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/locations/app/services/capacity.rb +0 -0
  73. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/locations/package.yml +1 -0
  74. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/schedule/app/services/date.rb +0 -0
  75. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/schedule/package.yml +1 -0
  76. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/lib/util.rb +3 -0
  77. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/brewers/services/play.rb +9 -0
  78. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/.codeowner +3 -0
  79. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/.codeowner +1 -0
  80. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/db/price.rb +5 -0
  81. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/models/entertainment.rb +0 -0
  82. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/cubs/services/play.rb +5 -0
  83. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/giants/services/play.rb +0 -0
  84. data/ext/cargo-vendor/codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/ruby/app/rockies/services/play.rb +0 -0
  85. data/ext/cargo-vendor/codeowners-0.2.17/tests/invalid_project_test.rs +144 -0
  86. data/ext/cargo-vendor/codeowners-0.2.17/tests/multiple_directory_owners_test.rs +41 -0
  87. data/ext/cargo-vendor/codeowners-0.2.17/tests/runner_api.rs +181 -0
  88. data/ext/cargo-vendor/codeowners-0.2.17/tests/untracked_files_test.rs +38 -0
  89. data/ext/cargo-vendor/codeowners-0.2.17/tests/valid_project_test.rs +348 -0
  90. data/ext/cargo-vendor/codeowners-0.2.17/tests/valid_project_with_overrides_test.rs +38 -0
  91. data/ext/cargo-vendor/codeowners-0.2.17/tmp/.gitkeep +0 -0
  92. data/ext/cargo-vendor/glob-0.3.3/.cargo-checksum.json +1 -0
  93. data/ext/cargo-vendor/glob-0.3.3/.cargo_vcs_info.json +6 -0
  94. data/ext/cargo-vendor/glob-0.3.3/.github/workflows/rust.yml +99 -0
  95. data/ext/cargo-vendor/glob-0.3.3/CHANGELOG.md +44 -0
  96. data/ext/cargo-vendor/glob-0.3.3/Cargo.lock +107 -0
  97. data/ext/cargo-vendor/glob-0.3.3/Cargo.toml +45 -0
  98. data/ext/cargo-vendor/glob-0.3.3/Cargo.toml.orig +18 -0
  99. data/ext/cargo-vendor/glob-0.3.3/README.md +38 -0
  100. data/ext/cargo-vendor/glob-0.3.3/src/lib.rs +1511 -0
  101. data/ext/cargo-vendor/glob-0.3.3/tests/glob-std.rs +477 -0
  102. data/ext/cargo-vendor/indexmap-2.11.0/.cargo-checksum.json +1 -0
  103. data/ext/cargo-vendor/indexmap-2.11.0/.cargo_vcs_info.json +6 -0
  104. data/ext/cargo-vendor/indexmap-2.11.0/.github/workflows/ci.yml +165 -0
  105. data/ext/cargo-vendor/indexmap-2.11.0/Cargo.lock +243 -0
  106. data/ext/cargo-vendor/indexmap-2.11.0/Cargo.toml +148 -0
  107. data/ext/cargo-vendor/indexmap-2.11.0/Cargo.toml.orig +62 -0
  108. data/ext/cargo-vendor/indexmap-2.11.0/RELEASES.md +575 -0
  109. data/ext/cargo-vendor/indexmap-2.11.0/src/lib.rs +290 -0
  110. data/ext/cargo-vendor/indexmap-2.11.0/src/map/core/entry.rs +625 -0
  111. data/ext/cargo-vendor/indexmap-2.11.0/src/map/core.rs +764 -0
  112. data/ext/cargo-vendor/indexmap-2.11.0/src/map/mutable.rs +165 -0
  113. data/ext/cargo-vendor/indexmap-2.11.0/src/map/slice.rs +800 -0
  114. data/ext/cargo-vendor/indexmap-2.11.0/src/map/tests.rs +1312 -0
  115. data/ext/cargo-vendor/indexmap-2.11.0/src/map.rs +1832 -0
  116. data/ext/cargo-vendor/indexmap-2.11.0/src/rayon/map.rs +686 -0
  117. data/ext/cargo-vendor/indexmap-2.11.0/src/rayon/set.rs +777 -0
  118. data/ext/cargo-vendor/indexmap-2.11.0/src/set/mutable.rs +86 -0
  119. data/ext/cargo-vendor/indexmap-2.11.0/src/set/slice.rs +427 -0
  120. data/ext/cargo-vendor/indexmap-2.11.0/src/set/tests.rs +1060 -0
  121. data/ext/cargo-vendor/indexmap-2.11.0/src/set.rs +1454 -0
  122. data/ext/cargo-vendor/indexmap-2.11.0/src/sval.rs +36 -0
  123. data/ext/cargo-vendor/indexmap-2.11.0/tests/quick.rs +894 -0
  124. data/ext/cargo-vendor/rayon-1.11.0/.cargo-checksum.json +1 -0
  125. data/ext/cargo-vendor/rayon-1.11.0/.cargo_vcs_info.json +6 -0
  126. data/ext/cargo-vendor/rayon-1.11.0/Cargo.lock +318 -0
  127. data/ext/cargo-vendor/rayon-1.11.0/Cargo.toml +130 -0
  128. data/ext/cargo-vendor/rayon-1.11.0/Cargo.toml.orig +57 -0
  129. data/ext/cargo-vendor/rayon-1.11.0/FAQ.md +213 -0
  130. data/ext/cargo-vendor/rayon-1.11.0/README.md +150 -0
  131. data/ext/cargo-vendor/rayon-1.11.0/RELEASES.md +922 -0
  132. data/ext/cargo-vendor/rayon-1.11.0/src/array.rs +85 -0
  133. data/ext/cargo-vendor/rayon-1.11.0/src/collections/binary_heap.rs +129 -0
  134. data/ext/cargo-vendor/rayon-1.11.0/src/collections/btree_map.rs +66 -0
  135. data/ext/cargo-vendor/rayon-1.11.0/src/collections/btree_set.rs +52 -0
  136. data/ext/cargo-vendor/rayon-1.11.0/src/collections/hash_map.rs +93 -0
  137. data/ext/cargo-vendor/rayon-1.11.0/src/collections/hash_set.rs +79 -0
  138. data/ext/cargo-vendor/rayon-1.11.0/src/collections/linked_list.rs +66 -0
  139. data/ext/cargo-vendor/rayon-1.11.0/src/collections/mod.rs +84 -0
  140. data/ext/cargo-vendor/rayon-1.11.0/src/collections/vec_deque.rs +159 -0
  141. data/ext/cargo-vendor/rayon-1.11.0/src/iter/blocks.rs +129 -0
  142. data/ext/cargo-vendor/rayon-1.11.0/src/iter/chain.rs +258 -0
  143. data/ext/cargo-vendor/rayon-1.11.0/src/iter/chunks.rs +216 -0
  144. data/ext/cargo-vendor/rayon-1.11.0/src/iter/cloned.rs +219 -0
  145. data/ext/cargo-vendor/rayon-1.11.0/src/iter/collect/mod.rs +114 -0
  146. data/ext/cargo-vendor/rayon-1.11.0/src/iter/collect/test.rs +368 -0
  147. data/ext/cargo-vendor/rayon-1.11.0/src/iter/copied.rs +219 -0
  148. data/ext/cargo-vendor/rayon-1.11.0/src/iter/empty.rs +108 -0
  149. data/ext/cargo-vendor/rayon-1.11.0/src/iter/enumerate.rs +128 -0
  150. data/ext/cargo-vendor/rayon-1.11.0/src/iter/filter.rs +137 -0
  151. data/ext/cargo-vendor/rayon-1.11.0/src/iter/filter_map.rs +141 -0
  152. data/ext/cargo-vendor/rayon-1.11.0/src/iter/find_first_last/mod.rs +230 -0
  153. data/ext/cargo-vendor/rayon-1.11.0/src/iter/find_first_last/test.rs +102 -0
  154. data/ext/cargo-vendor/rayon-1.11.0/src/iter/flat_map.rs +153 -0
  155. data/ext/cargo-vendor/rayon-1.11.0/src/iter/flat_map_iter.rs +145 -0
  156. data/ext/cargo-vendor/rayon-1.11.0/src/iter/flatten.rs +134 -0
  157. data/ext/cargo-vendor/rayon-1.11.0/src/iter/flatten_iter.rs +124 -0
  158. data/ext/cargo-vendor/rayon-1.11.0/src/iter/fold.rs +289 -0
  159. data/ext/cargo-vendor/rayon-1.11.0/src/iter/fold_chunks.rs +224 -0
  160. data/ext/cargo-vendor/rayon-1.11.0/src/iter/fold_chunks_with.rs +220 -0
  161. data/ext/cargo-vendor/rayon-1.11.0/src/iter/from_par_iter.rs +280 -0
  162. data/ext/cargo-vendor/rayon-1.11.0/src/iter/inspect.rs +253 -0
  163. data/ext/cargo-vendor/rayon-1.11.0/src/iter/interleave.rs +326 -0
  164. data/ext/cargo-vendor/rayon-1.11.0/src/iter/interleave_shortest.rs +80 -0
  165. data/ext/cargo-vendor/rayon-1.11.0/src/iter/intersperse.rs +401 -0
  166. data/ext/cargo-vendor/rayon-1.11.0/src/iter/len.rs +262 -0
  167. data/ext/cargo-vendor/rayon-1.11.0/src/iter/map.rs +255 -0
  168. data/ext/cargo-vendor/rayon-1.11.0/src/iter/map_with.rs +565 -0
  169. data/ext/cargo-vendor/rayon-1.11.0/src/iter/mod.rs +3627 -0
  170. data/ext/cargo-vendor/rayon-1.11.0/src/iter/multizip.rs +335 -0
  171. data/ext/cargo-vendor/rayon-1.11.0/src/iter/once.rs +70 -0
  172. data/ext/cargo-vendor/rayon-1.11.0/src/iter/panic_fuse.rs +338 -0
  173. data/ext/cargo-vendor/rayon-1.11.0/src/iter/par_bridge.rs +157 -0
  174. data/ext/cargo-vendor/rayon-1.11.0/src/iter/plumbing/mod.rs +476 -0
  175. data/ext/cargo-vendor/rayon-1.11.0/src/iter/positions.rs +133 -0
  176. data/ext/cargo-vendor/rayon-1.11.0/src/iter/repeat.rs +295 -0
  177. data/ext/cargo-vendor/rayon-1.11.0/src/iter/rev.rs +119 -0
  178. data/ext/cargo-vendor/rayon-1.11.0/src/iter/skip.rs +93 -0
  179. data/ext/cargo-vendor/rayon-1.11.0/src/iter/skip_any.rs +140 -0
  180. data/ext/cargo-vendor/rayon-1.11.0/src/iter/skip_any_while.rs +162 -0
  181. data/ext/cargo-vendor/rayon-1.11.0/src/iter/splitter.rs +172 -0
  182. data/ext/cargo-vendor/rayon-1.11.0/src/iter/step_by.rs +135 -0
  183. data/ext/cargo-vendor/rayon-1.11.0/src/iter/take.rs +84 -0
  184. data/ext/cargo-vendor/rayon-1.11.0/src/iter/take_any.rs +140 -0
  185. data/ext/cargo-vendor/rayon-1.11.0/src/iter/take_any_while.rs +162 -0
  186. data/ext/cargo-vendor/rayon-1.11.0/src/iter/test.rs +2392 -0
  187. data/ext/cargo-vendor/rayon-1.11.0/src/iter/try_fold.rs +282 -0
  188. data/ext/cargo-vendor/rayon-1.11.0/src/iter/unzip.rs +524 -0
  189. data/ext/cargo-vendor/rayon-1.11.0/src/iter/update.rs +323 -0
  190. data/ext/cargo-vendor/rayon-1.11.0/src/iter/walk_tree.rs +524 -0
  191. data/ext/cargo-vendor/rayon-1.11.0/src/iter/while_some.rs +150 -0
  192. data/ext/cargo-vendor/rayon-1.11.0/src/iter/zip.rs +153 -0
  193. data/ext/cargo-vendor/rayon-1.11.0/src/iter/zip_eq.rs +67 -0
  194. data/ext/cargo-vendor/rayon-1.11.0/src/lib.rs +156 -0
  195. data/ext/cargo-vendor/rayon-1.11.0/src/math.rs +25 -0
  196. data/ext/cargo-vendor/rayon-1.11.0/src/option.rs +197 -0
  197. data/ext/cargo-vendor/rayon-1.11.0/src/range.rs +457 -0
  198. data/ext/cargo-vendor/rayon-1.11.0/src/range_inclusive.rs +381 -0
  199. data/ext/cargo-vendor/rayon-1.11.0/src/result.rs +132 -0
  200. data/ext/cargo-vendor/rayon-1.11.0/src/slice/chunk_by.rs +239 -0
  201. data/ext/cargo-vendor/rayon-1.11.0/src/slice/chunks.rs +387 -0
  202. data/ext/cargo-vendor/rayon-1.11.0/src/slice/mod.rs +1242 -0
  203. data/ext/cargo-vendor/rayon-1.11.0/src/slice/rchunks.rs +385 -0
  204. data/ext/cargo-vendor/rayon-1.11.0/src/slice/sort.rs +1686 -0
  205. data/ext/cargo-vendor/rayon-1.11.0/src/slice/test.rs +216 -0
  206. data/ext/cargo-vendor/rayon-1.11.0/src/str.rs +1005 -0
  207. data/ext/cargo-vendor/rayon-1.11.0/src/vec.rs +292 -0
  208. data/ext/cargo-vendor/rayon-1.11.0/tests/clones.rs +222 -0
  209. data/ext/cargo-vendor/rayon-1.11.0/tests/collect.rs +113 -0
  210. data/ext/cargo-vendor/rayon-1.11.0/tests/debug.rs +233 -0
  211. data/ext/cargo-vendor/rayon-1.11.0/tests/named-threads.rs +25 -0
  212. data/ext/cargo-vendor/rayon-1.11.0/tests/producer_split_at.rs +386 -0
  213. data/ext/cargo-vendor/rayon-1.11.0/tests/sort-panic-safe.rs +164 -0
  214. data/ext/cargo-vendor/rayon-1.11.0/tests/str.rs +122 -0
  215. data/ext/cargo-vendor/rayon-core-1.13.0/.cargo-checksum.json +1 -0
  216. data/ext/cargo-vendor/rayon-core-1.13.0/.cargo_vcs_info.json +6 -0
  217. data/ext/cargo-vendor/rayon-core-1.13.0/Cargo.lock +309 -0
  218. data/ext/cargo-vendor/rayon-core-1.13.0/Cargo.toml +93 -0
  219. data/ext/cargo-vendor/rayon-core-1.13.0/Cargo.toml.orig +35 -0
  220. data/ext/cargo-vendor/rayon-core-1.13.0/README.md +11 -0
  221. data/ext/cargo-vendor/rayon-core-1.13.0/src/broadcast/mod.rs +150 -0
  222. data/ext/cargo-vendor/rayon-core-1.13.0/src/join/mod.rs +186 -0
  223. data/ext/cargo-vendor/rayon-core-1.13.0/src/join/test.rs +150 -0
  224. data/ext/cargo-vendor/rayon-core-1.13.0/src/latch.rs +457 -0
  225. data/ext/cargo-vendor/rayon-core-1.13.0/src/lib.rs +864 -0
  226. data/ext/cargo-vendor/rayon-core-1.13.0/src/registry.rs +1002 -0
  227. data/ext/cargo-vendor/rayon-core-1.13.0/src/scope/mod.rs +773 -0
  228. data/ext/cargo-vendor/rayon-core-1.13.0/src/scope/test.rs +621 -0
  229. data/ext/cargo-vendor/rayon-core-1.13.0/src/sleep/README.md +219 -0
  230. data/ext/cargo-vendor/rayon-core-1.13.0/src/sleep/counters.rs +273 -0
  231. data/ext/cargo-vendor/rayon-core-1.13.0/src/sleep/mod.rs +324 -0
  232. data/ext/cargo-vendor/rayon-core-1.13.0/src/spawn/mod.rs +163 -0
  233. data/ext/cargo-vendor/rayon-core-1.13.0/src/spawn/test.rs +255 -0
  234. data/ext/cargo-vendor/rayon-core-1.13.0/src/test.rs +200 -0
  235. data/ext/cargo-vendor/rayon-core-1.13.0/src/thread_pool/mod.rs +502 -0
  236. data/ext/cargo-vendor/rayon-core-1.13.0/src/thread_pool/test.rs +418 -0
  237. data/ext/cargo-vendor/rayon-core-1.13.0/tests/use_current_thread.rs +57 -0
  238. data/ext/cargo-vendor/serde_json-1.0.143/.cargo-checksum.json +1 -0
  239. data/ext/cargo-vendor/serde_json-1.0.143/.cargo_vcs_info.json +6 -0
  240. data/ext/cargo-vendor/serde_json-1.0.143/.github/workflows/ci.yml +156 -0
  241. data/ext/cargo-vendor/serde_json-1.0.143/Cargo.lock +419 -0
  242. data/ext/cargo-vendor/serde_json-1.0.143/Cargo.toml +157 -0
  243. data/ext/cargo-vendor/serde_json-1.0.143/Cargo.toml.orig +91 -0
  244. data/ext/cargo-vendor/serde_json-1.0.143/src/lib.rs +438 -0
  245. data/ext/cargo-vendor/serde_json-1.0.143/src/map.rs +1181 -0
  246. data/ext/cargo-vendor/serde_json-1.0.143/src/ser.rs +2285 -0
  247. data/ext/cargo-vendor/serde_json-1.0.143/src/value/de.rs +1507 -0
  248. data/ext/cargo-vendor/tempfile-3.21.0/.cargo-checksum.json +1 -0
  249. data/ext/cargo-vendor/tempfile-3.21.0/.cargo_vcs_info.json +6 -0
  250. data/ext/cargo-vendor/tempfile-3.21.0/.github/workflows/ci.yml +109 -0
  251. data/ext/cargo-vendor/tempfile-3.21.0/CHANGELOG.md +364 -0
  252. data/ext/cargo-vendor/tempfile-3.21.0/Cargo.lock +196 -0
  253. data/ext/cargo-vendor/tempfile-3.21.0/Cargo.toml +98 -0
  254. data/ext/cargo-vendor/tempfile-3.21.0/Cargo.toml.orig +47 -0
  255. data/ext/cargo-vendor/winapi-util-0.1.10/.cargo-checksum.json +1 -0
  256. data/ext/cargo-vendor/winapi-util-0.1.10/.cargo_vcs_info.json +6 -0
  257. data/ext/cargo-vendor/winapi-util-0.1.10/.github/FUNDING.yml +1 -0
  258. data/ext/cargo-vendor/winapi-util-0.1.10/Cargo.lock +83 -0
  259. data/ext/cargo-vendor/winapi-util-0.1.10/Cargo.toml +54 -0
  260. data/ext/cargo-vendor/winapi-util-0.1.10/Cargo.toml.orig +25 -0
  261. data/ext/code_ownership/Cargo.toml +9 -9
  262. data/ext/code_ownership/src/lib.rs +40 -6
  263. data/lib/code_ownership/cli.rb +5 -18
  264. data/lib/code_ownership/private/for_file_output_builder.rb +83 -0
  265. data/lib/code_ownership/private/team_finder.rb +21 -7
  266. data/lib/code_ownership/version.rb +1 -1
  267. data/lib/code_ownership.rb +173 -6
  268. metadata +513 -706
  269. data/ext/cargo-vendor/codeowners-0.2.7/.cargo-checksum.json +0 -1
  270. data/ext/cargo-vendor/codeowners-0.2.7/Cargo.lock +0 -1230
  271. data/ext/cargo-vendor/codeowners-0.2.7/Cargo.toml +0 -95
  272. data/ext/cargo-vendor/codeowners-0.2.7/README.md +0 -204
  273. data/ext/cargo-vendor/codeowners-0.2.7/dev/run_benchmarks_for_gv.sh +0 -13
  274. data/ext/cargo-vendor/codeowners-0.2.7/rust-toolchain.toml +0 -4
  275. data/ext/cargo-vendor/codeowners-0.2.7/src/cache/file.rs +0 -181
  276. data/ext/cargo-vendor/codeowners-0.2.7/src/cli.rs +0 -119
  277. data/ext/cargo-vendor/codeowners-0.2.7/src/common_test.rs +0 -338
  278. data/ext/cargo-vendor/codeowners-0.2.7/src/config.rs +0 -118
  279. data/ext/cargo-vendor/codeowners-0.2.7/src/lib.rs +0 -8
  280. data/ext/cargo-vendor/codeowners-0.2.7/src/main.rs +0 -43
  281. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/file_generator.rs +0 -203
  282. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/for_file_fast.rs +0 -425
  283. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/mapper/package_mapper.rs +0 -220
  284. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/mapper/team_file_mapper.rs +0 -123
  285. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/mapper.rs +0 -249
  286. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/parser.rs +0 -486
  287. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/tests.rs +0 -219
  288. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership/validator.rs +0 -218
  289. data/ext/cargo-vendor/codeowners-0.2.7/src/ownership.rs +0 -220
  290. data/ext/cargo-vendor/codeowners-0.2.7/src/project.rs +0 -229
  291. data/ext/cargo-vendor/codeowners-0.2.7/src/project_builder.rs +0 -319
  292. data/ext/cargo-vendor/codeowners-0.2.7/src/project_file_builder.rs +0 -75
  293. data/ext/cargo-vendor/codeowners-0.2.7/src/runner.rs +0 -312
  294. data/ext/cargo-vendor/codeowners-0.2.7/tests/common/mod.rs +0 -113
  295. data/ext/cargo-vendor/codeowners-0.2.7/tests/fixtures/multiple-directory-owners/config/code_ownership.yml +0 -10
  296. data/ext/cargo-vendor/codeowners-0.2.7/tests/fixtures/valid_project/.github/CODEOWNERS +0 -37
  297. data/ext/cargo-vendor/codeowners-0.2.7/tests/fixtures/valid_project/config/code_ownership.yml +0 -10
  298. data/ext/cargo-vendor/codeowners-0.2.7/tests/fixtures/valid_project/ruby/app/models/payroll.rb +0 -3
  299. data/ext/cargo-vendor/codeowners-0.2.7/tests/invalid_project_test.rs +0 -90
  300. data/ext/cargo-vendor/codeowners-0.2.7/tests/multiple_directory_owners_test.rs +0 -35
  301. data/ext/cargo-vendor/codeowners-0.2.7/tests/valid_project_test.rs +0 -284
  302. data/ext/cargo-vendor/glob-0.3.2/.cargo-checksum.json +0 -1
  303. data/ext/cargo-vendor/glob-0.3.2/.cargo_vcs_info.json +0 -6
  304. data/ext/cargo-vendor/glob-0.3.2/.github/workflows/rust.yml +0 -65
  305. data/ext/cargo-vendor/glob-0.3.2/CHANGELOG.md +0 -33
  306. data/ext/cargo-vendor/glob-0.3.2/Cargo.lock +0 -107
  307. data/ext/cargo-vendor/glob-0.3.2/Cargo.toml +0 -45
  308. data/ext/cargo-vendor/glob-0.3.2/Cargo.toml.orig +0 -19
  309. data/ext/cargo-vendor/glob-0.3.2/README.md +0 -37
  310. data/ext/cargo-vendor/glob-0.3.2/src/lib.rs +0 -1501
  311. data/ext/cargo-vendor/glob-0.3.2/tests/glob-std.rs +0 -474
  312. data/ext/cargo-vendor/indexmap-2.10.0/.cargo-checksum.json +0 -1
  313. data/ext/cargo-vendor/indexmap-2.10.0/.cargo_vcs_info.json +0 -6
  314. data/ext/cargo-vendor/indexmap-2.10.0/.github/workflows/ci.yml +0 -159
  315. data/ext/cargo-vendor/indexmap-2.10.0/Cargo.lock +0 -236
  316. data/ext/cargo-vendor/indexmap-2.10.0/Cargo.toml +0 -142
  317. data/ext/cargo-vendor/indexmap-2.10.0/Cargo.toml.orig +0 -61
  318. data/ext/cargo-vendor/indexmap-2.10.0/RELEASES.md +0 -563
  319. data/ext/cargo-vendor/indexmap-2.10.0/src/lib.rs +0 -288
  320. data/ext/cargo-vendor/indexmap-2.10.0/src/map/core/entry.rs +0 -574
  321. data/ext/cargo-vendor/indexmap-2.10.0/src/map/core.rs +0 -735
  322. data/ext/cargo-vendor/indexmap-2.10.0/src/map/mutable.rs +0 -165
  323. data/ext/cargo-vendor/indexmap-2.10.0/src/map/slice.rs +0 -751
  324. data/ext/cargo-vendor/indexmap-2.10.0/src/map/tests.rs +0 -1228
  325. data/ext/cargo-vendor/indexmap-2.10.0/src/map.rs +0 -1697
  326. data/ext/cargo-vendor/indexmap-2.10.0/src/rayon/map.rs +0 -662
  327. data/ext/cargo-vendor/indexmap-2.10.0/src/rayon/set.rs +0 -755
  328. data/ext/cargo-vendor/indexmap-2.10.0/src/set/mutable.rs +0 -86
  329. data/ext/cargo-vendor/indexmap-2.10.0/src/set/slice.rs +0 -380
  330. data/ext/cargo-vendor/indexmap-2.10.0/src/set/tests.rs +0 -999
  331. data/ext/cargo-vendor/indexmap-2.10.0/src/set.rs +0 -1340
  332. data/ext/cargo-vendor/indexmap-2.10.0/tests/quick.rs +0 -800
  333. data/ext/cargo-vendor/rayon-1.10.0/.cargo-checksum.json +0 -1
  334. data/ext/cargo-vendor/rayon-1.10.0/.cargo_vcs_info.json +0 -6
  335. data/ext/cargo-vendor/rayon-1.10.0/Cargo.toml +0 -61
  336. data/ext/cargo-vendor/rayon-1.10.0/Cargo.toml.orig +0 -39
  337. data/ext/cargo-vendor/rayon-1.10.0/FAQ.md +0 -227
  338. data/ext/cargo-vendor/rayon-1.10.0/README.md +0 -151
  339. data/ext/cargo-vendor/rayon-1.10.0/RELEASES.md +0 -909
  340. data/ext/cargo-vendor/rayon-1.10.0/src/array.rs +0 -85
  341. data/ext/cargo-vendor/rayon-1.10.0/src/collections/binary_heap.rs +0 -120
  342. data/ext/cargo-vendor/rayon-1.10.0/src/collections/btree_map.rs +0 -66
  343. data/ext/cargo-vendor/rayon-1.10.0/src/collections/btree_set.rs +0 -52
  344. data/ext/cargo-vendor/rayon-1.10.0/src/collections/hash_map.rs +0 -96
  345. data/ext/cargo-vendor/rayon-1.10.0/src/collections/hash_set.rs +0 -80
  346. data/ext/cargo-vendor/rayon-1.10.0/src/collections/linked_list.rs +0 -66
  347. data/ext/cargo-vendor/rayon-1.10.0/src/collections/mod.rs +0 -84
  348. data/ext/cargo-vendor/rayon-1.10.0/src/collections/vec_deque.rs +0 -159
  349. data/ext/cargo-vendor/rayon-1.10.0/src/iter/blocks.rs +0 -131
  350. data/ext/cargo-vendor/rayon-1.10.0/src/iter/chain.rs +0 -267
  351. data/ext/cargo-vendor/rayon-1.10.0/src/iter/chunks.rs +0 -224
  352. data/ext/cargo-vendor/rayon-1.10.0/src/iter/cloned.rs +0 -223
  353. data/ext/cargo-vendor/rayon-1.10.0/src/iter/collect/mod.rs +0 -116
  354. data/ext/cargo-vendor/rayon-1.10.0/src/iter/collect/test.rs +0 -373
  355. data/ext/cargo-vendor/rayon-1.10.0/src/iter/copied.rs +0 -223
  356. data/ext/cargo-vendor/rayon-1.10.0/src/iter/empty.rs +0 -104
  357. data/ext/cargo-vendor/rayon-1.10.0/src/iter/enumerate.rs +0 -133
  358. data/ext/cargo-vendor/rayon-1.10.0/src/iter/filter.rs +0 -141
  359. data/ext/cargo-vendor/rayon-1.10.0/src/iter/filter_map.rs +0 -142
  360. data/ext/cargo-vendor/rayon-1.10.0/src/iter/find_first_last/mod.rs +0 -230
  361. data/ext/cargo-vendor/rayon-1.10.0/src/iter/find_first_last/test.rs +0 -105
  362. data/ext/cargo-vendor/rayon-1.10.0/src/iter/flat_map.rs +0 -154
  363. data/ext/cargo-vendor/rayon-1.10.0/src/iter/flat_map_iter.rs +0 -147
  364. data/ext/cargo-vendor/rayon-1.10.0/src/iter/flatten.rs +0 -140
  365. data/ext/cargo-vendor/rayon-1.10.0/src/iter/flatten_iter.rs +0 -132
  366. data/ext/cargo-vendor/rayon-1.10.0/src/iter/fold.rs +0 -302
  367. data/ext/cargo-vendor/rayon-1.10.0/src/iter/fold_chunks.rs +0 -236
  368. data/ext/cargo-vendor/rayon-1.10.0/src/iter/fold_chunks_with.rs +0 -231
  369. data/ext/cargo-vendor/rayon-1.10.0/src/iter/from_par_iter.rs +0 -310
  370. data/ext/cargo-vendor/rayon-1.10.0/src/iter/inspect.rs +0 -257
  371. data/ext/cargo-vendor/rayon-1.10.0/src/iter/interleave.rs +0 -335
  372. data/ext/cargo-vendor/rayon-1.10.0/src/iter/interleave_shortest.rs +0 -85
  373. data/ext/cargo-vendor/rayon-1.10.0/src/iter/intersperse.rs +0 -410
  374. data/ext/cargo-vendor/rayon-1.10.0/src/iter/len.rs +0 -270
  375. data/ext/cargo-vendor/rayon-1.10.0/src/iter/map.rs +0 -259
  376. data/ext/cargo-vendor/rayon-1.10.0/src/iter/map_with.rs +0 -573
  377. data/ext/cargo-vendor/rayon-1.10.0/src/iter/mod.rs +0 -3656
  378. data/ext/cargo-vendor/rayon-1.10.0/src/iter/multizip.rs +0 -338
  379. data/ext/cargo-vendor/rayon-1.10.0/src/iter/once.rs +0 -68
  380. data/ext/cargo-vendor/rayon-1.10.0/src/iter/panic_fuse.rs +0 -342
  381. data/ext/cargo-vendor/rayon-1.10.0/src/iter/par_bridge.rs +0 -159
  382. data/ext/cargo-vendor/rayon-1.10.0/src/iter/plumbing/mod.rs +0 -483
  383. data/ext/cargo-vendor/rayon-1.10.0/src/iter/positions.rs +0 -137
  384. data/ext/cargo-vendor/rayon-1.10.0/src/iter/repeat.rs +0 -241
  385. data/ext/cargo-vendor/rayon-1.10.0/src/iter/rev.rs +0 -123
  386. data/ext/cargo-vendor/rayon-1.10.0/src/iter/skip.rs +0 -94
  387. data/ext/cargo-vendor/rayon-1.10.0/src/iter/skip_any.rs +0 -144
  388. data/ext/cargo-vendor/rayon-1.10.0/src/iter/skip_any_while.rs +0 -166
  389. data/ext/cargo-vendor/rayon-1.10.0/src/iter/splitter.rs +0 -174
  390. data/ext/cargo-vendor/rayon-1.10.0/src/iter/step_by.rs +0 -141
  391. data/ext/cargo-vendor/rayon-1.10.0/src/iter/take.rs +0 -85
  392. data/ext/cargo-vendor/rayon-1.10.0/src/iter/take_any.rs +0 -144
  393. data/ext/cargo-vendor/rayon-1.10.0/src/iter/take_any_while.rs +0 -166
  394. data/ext/cargo-vendor/rayon-1.10.0/src/iter/test.rs +0 -2333
  395. data/ext/cargo-vendor/rayon-1.10.0/src/iter/try_fold.rs +0 -298
  396. data/ext/cargo-vendor/rayon-1.10.0/src/iter/unzip.rs +0 -525
  397. data/ext/cargo-vendor/rayon-1.10.0/src/iter/update.rs +0 -327
  398. data/ext/cargo-vendor/rayon-1.10.0/src/iter/walk_tree.rs +0 -529
  399. data/ext/cargo-vendor/rayon-1.10.0/src/iter/while_some.rs +0 -154
  400. data/ext/cargo-vendor/rayon-1.10.0/src/iter/zip.rs +0 -158
  401. data/ext/cargo-vendor/rayon-1.10.0/src/iter/zip_eq.rs +0 -72
  402. data/ext/cargo-vendor/rayon-1.10.0/src/lib.rs +0 -160
  403. data/ext/cargo-vendor/rayon-1.10.0/src/math.rs +0 -54
  404. data/ext/cargo-vendor/rayon-1.10.0/src/option.rs +0 -203
  405. data/ext/cargo-vendor/rayon-1.10.0/src/range.rs +0 -454
  406. data/ext/cargo-vendor/rayon-1.10.0/src/range_inclusive.rs +0 -381
  407. data/ext/cargo-vendor/rayon-1.10.0/src/result.rs +0 -132
  408. data/ext/cargo-vendor/rayon-1.10.0/src/slice/chunk_by.rs +0 -244
  409. data/ext/cargo-vendor/rayon-1.10.0/src/slice/chunks.rs +0 -388
  410. data/ext/cargo-vendor/rayon-1.10.0/src/slice/mergesort.rs +0 -755
  411. data/ext/cargo-vendor/rayon-1.10.0/src/slice/mod.rs +0 -1226
  412. data/ext/cargo-vendor/rayon-1.10.0/src/slice/quicksort.rs +0 -902
  413. data/ext/cargo-vendor/rayon-1.10.0/src/slice/rchunks.rs +0 -386
  414. data/ext/cargo-vendor/rayon-1.10.0/src/slice/test.rs +0 -216
  415. data/ext/cargo-vendor/rayon-1.10.0/src/str.rs +0 -1010
  416. data/ext/cargo-vendor/rayon-1.10.0/src/vec.rs +0 -283
  417. data/ext/cargo-vendor/rayon-1.10.0/tests/clones.rs +0 -222
  418. data/ext/cargo-vendor/rayon-1.10.0/tests/collect.rs +0 -113
  419. data/ext/cargo-vendor/rayon-1.10.0/tests/debug.rs +0 -233
  420. data/ext/cargo-vendor/rayon-1.10.0/tests/named-threads.rs +0 -25
  421. data/ext/cargo-vendor/rayon-1.10.0/tests/producer_split_at.rs +0 -391
  422. data/ext/cargo-vendor/rayon-1.10.0/tests/sort-panic-safe.rs +0 -167
  423. data/ext/cargo-vendor/rayon-1.10.0/tests/str.rs +0 -119
  424. data/ext/cargo-vendor/rayon-core-1.12.1/.cargo-checksum.json +0 -1
  425. data/ext/cargo-vendor/rayon-core-1.12.1/.cargo_vcs_info.json +0 -6
  426. data/ext/cargo-vendor/rayon-core-1.12.1/Cargo.toml +0 -88
  427. data/ext/cargo-vendor/rayon-core-1.12.1/Cargo.toml.orig +0 -68
  428. data/ext/cargo-vendor/rayon-core-1.12.1/README.md +0 -11
  429. data/ext/cargo-vendor/rayon-core-1.12.1/src/broadcast/mod.rs +0 -150
  430. data/ext/cargo-vendor/rayon-core-1.12.1/src/join/mod.rs +0 -188
  431. data/ext/cargo-vendor/rayon-core-1.12.1/src/join/test.rs +0 -151
  432. data/ext/cargo-vendor/rayon-core-1.12.1/src/latch.rs +0 -461
  433. data/ext/cargo-vendor/rayon-core-1.12.1/src/lib.rs +0 -875
  434. data/ext/cargo-vendor/rayon-core-1.12.1/src/registry.rs +0 -996
  435. data/ext/cargo-vendor/rayon-core-1.12.1/src/scope/mod.rs +0 -769
  436. data/ext/cargo-vendor/rayon-core-1.12.1/src/scope/test.rs +0 -619
  437. data/ext/cargo-vendor/rayon-core-1.12.1/src/sleep/README.md +0 -219
  438. data/ext/cargo-vendor/rayon-core-1.12.1/src/sleep/counters.rs +0 -277
  439. data/ext/cargo-vendor/rayon-core-1.12.1/src/sleep/mod.rs +0 -325
  440. data/ext/cargo-vendor/rayon-core-1.12.1/src/spawn/mod.rs +0 -163
  441. data/ext/cargo-vendor/rayon-core-1.12.1/src/spawn/test.rs +0 -255
  442. data/ext/cargo-vendor/rayon-core-1.12.1/src/test.rs +0 -200
  443. data/ext/cargo-vendor/rayon-core-1.12.1/src/thread_pool/mod.rs +0 -508
  444. data/ext/cargo-vendor/rayon-core-1.12.1/src/thread_pool/test.rs +0 -418
  445. data/ext/cargo-vendor/rayon-core-1.12.1/tests/use_current_thread.rs +0 -57
  446. data/ext/cargo-vendor/serde_json-1.0.142/.cargo-checksum.json +0 -1
  447. data/ext/cargo-vendor/serde_json-1.0.142/.cargo_vcs_info.json +0 -6
  448. data/ext/cargo-vendor/serde_json-1.0.142/.github/workflows/ci.yml +0 -158
  449. data/ext/cargo-vendor/serde_json-1.0.142/Cargo.lock +0 -419
  450. data/ext/cargo-vendor/serde_json-1.0.142/Cargo.toml +0 -157
  451. data/ext/cargo-vendor/serde_json-1.0.142/Cargo.toml.orig +0 -91
  452. data/ext/cargo-vendor/serde_json-1.0.142/src/lib.rs +0 -438
  453. data/ext/cargo-vendor/serde_json-1.0.142/src/map.rs +0 -1174
  454. data/ext/cargo-vendor/serde_json-1.0.142/src/ser.rs +0 -2285
  455. data/ext/cargo-vendor/serde_json-1.0.142/src/value/de.rs +0 -1500
  456. data/ext/cargo-vendor/tempfile-3.20.0/.cargo-checksum.json +0 -1
  457. data/ext/cargo-vendor/tempfile-3.20.0/.cargo_vcs_info.json +0 -6
  458. data/ext/cargo-vendor/tempfile-3.20.0/.github/workflows/ci.yml +0 -107
  459. data/ext/cargo-vendor/tempfile-3.20.0/CHANGELOG.md +0 -360
  460. data/ext/cargo-vendor/tempfile-3.20.0/Cargo.lock +0 -183
  461. data/ext/cargo-vendor/tempfile-3.20.0/Cargo.toml +0 -98
  462. data/ext/cargo-vendor/tempfile-3.20.0/Cargo.toml.orig +0 -47
  463. data/ext/cargo-vendor/winapi-util-0.1.9/.cargo-checksum.json +0 -1
  464. data/ext/cargo-vendor/winapi-util-0.1.9/.cargo_vcs_info.json +0 -6
  465. data/ext/cargo-vendor/winapi-util-0.1.9/Cargo.toml +0 -53
  466. data/ext/cargo-vendor/winapi-util-0.1.9/Cargo.toml.orig +0 -25
  467. data/ext/cargo-vendor/windows-sys-0.59.0/.cargo-checksum.json +0 -1
  468. data/ext/cargo-vendor/windows-sys-0.59.0/.cargo_vcs_info.json +0 -6
  469. data/ext/cargo-vendor/windows-sys-0.59.0/Cargo.toml +0 -298
  470. data/ext/cargo-vendor/windows-sys-0.59.0/Cargo.toml.orig +0 -274
  471. data/ext/cargo-vendor/windows-sys-0.59.0/license-apache-2.0 +0 -201
  472. data/ext/cargo-vendor/windows-sys-0.59.0/license-mit +0 -21
  473. data/ext/cargo-vendor/windows-sys-0.59.0/readme.md +0 -87
  474. data/ext/cargo-vendor/windows-sys-0.59.0/rustfmt.toml +0 -2
  475. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Devices/Bluetooth/mod.rs +0 -32
  476. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Devices/HumanInterfaceDevice/mod.rs +0 -39
  477. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Devices/mod.rs +0 -4
  478. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Foundation/mod.rs +0 -1317
  479. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Graphics/Direct3D/mod.rs +0 -9170
  480. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Graphics/mod.rs +0 -2
  481. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/NetworkManagement/Ndis/mod.rs +0 -3892
  482. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/NetworkManagement/WindowsFilteringPlatform/mod.rs +0 -269
  483. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/NetworkManagement/mod.rs +0 -4
  484. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Storage/FileSystem/Minifilters/mod.rs +0 -1392
  485. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Storage/FileSystem/mod.rs +0 -4503
  486. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/Storage/mod.rs +0 -2
  487. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/IO/mod.rs +0 -2
  488. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/Memory/mod.rs +0 -11
  489. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/OfflineRegistry/mod.rs +0 -28
  490. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/Registry/mod.rs +0 -180
  491. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/SystemInformation/mod.rs +0 -18
  492. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/SystemServices/mod.rs +0 -13663
  493. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/Threading/mod.rs +0 -155
  494. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/System/mod.rs +0 -14
  495. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Wdk/mod.rs +0 -12
  496. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Data/HtmlHelp/mod.rs +0 -447
  497. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Data/RightsManagement/mod.rs +0 -237
  498. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Data/mod.rs +0 -4
  499. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/AllJoyn/mod.rs +0 -1273
  500. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/BiometricFramework/mod.rs +0 -1481
  501. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Bluetooth/mod.rs +0 -1419
  502. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Communication/mod.rs +0 -312
  503. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/DeviceAndDriverInstallation/mod.rs +0 -3969
  504. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/DeviceQuery/mod.rs +0 -141
  505. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Display/mod.rs +0 -3141
  506. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Enumeration/Pnp/mod.rs +0 -96
  507. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Enumeration/mod.rs +0 -2
  508. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Fax/mod.rs +0 -1203
  509. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/HumanInterfaceDevice/mod.rs +0 -3684
  510. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/PortableDevices/mod.rs +0 -1999
  511. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Properties/mod.rs +0 -261
  512. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Pwm/mod.rs +0 -73
  513. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Sensors/mod.rs +0 -687
  514. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/SerialCommunication/mod.rs +0 -230
  515. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Tapi/mod.rs +0 -3217
  516. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/Usb/mod.rs +0 -2694
  517. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/WebServicesOnDevices/mod.rs +0 -660
  518. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Devices/mod.rs +0 -36
  519. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Foundation/mod.rs +0 -10318
  520. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Gaming/mod.rs +0 -99
  521. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Globalization/mod.rs +0 -5135
  522. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Dwm/mod.rs +0 -232
  523. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Gdi/mod.rs +0 -3857
  524. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/GdiPlus/mod.rs +0 -2307
  525. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Hlsl/mod.rs +0 -2
  526. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/OpenGL/mod.rs +0 -1276
  527. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Printing/PrintTicket/mod.rs +0 -28
  528. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/Printing/mod.rs +0 -4147
  529. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Graphics/mod.rs +0 -12
  530. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Management/MobileDeviceManagementRegistration/mod.rs +0 -101
  531. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Management/mod.rs +0 -2
  532. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/Audio/mod.rs +0 -2052
  533. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/DxMediaObjects/mod.rs +0 -94
  534. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/KernelStreaming/mod.rs +0 -5281
  535. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/Multimedia/mod.rs +0 -6442
  536. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/Streaming/mod.rs +0 -117
  537. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/WindowsMediaFormat/mod.rs +0 -910
  538. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Media/mod.rs +0 -187
  539. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Dhcp/mod.rs +0 -1926
  540. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Dns/mod.rs +0 -1564
  541. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/InternetConnectionWizard/mod.rs +0 -22
  542. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/IpHelper/mod.rs +0 -3004
  543. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Multicast/mod.rs +0 -59
  544. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Ndis/mod.rs +0 -3334
  545. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/NetBios/mod.rs +0 -211
  546. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/NetManagement/mod.rs +0 -4814
  547. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/NetShell/mod.rs +0 -160
  548. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/NetworkDiagnosticsFramework/mod.rs +0 -222
  549. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/P2P/mod.rs +0 -1196
  550. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/QoS/mod.rs +0 -1447
  551. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Rras/mod.rs +0 -3212
  552. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/Snmp/mod.rs +0 -381
  553. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WNet/mod.rs +0 -363
  554. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WebDav/mod.rs +0 -47
  555. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WiFi/mod.rs +0 -4311
  556. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WindowsConnectionManager/mod.rs +0 -119
  557. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WindowsFilteringPlatform/mod.rs +0 -3818
  558. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WindowsFirewall/mod.rs +0 -281
  559. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/WindowsNetworkVirtualization/mod.rs +0 -104
  560. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/NetworkManagement/mod.rs +0 -42
  561. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/ActiveDirectory/mod.rs +0 -2383
  562. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/Clustering/mod.rs +0 -3900
  563. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/HttpServer/mod.rs +0 -1239
  564. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/Ldap/mod.rs +0 -817
  565. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WebSocket/mod.rs +0 -88
  566. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WinHttp/mod.rs +0 -1109
  567. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WinInet/mod.rs +0 -2168
  568. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WinSock/mod.rs +0 -4786
  569. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/WindowsWebServices/mod.rs +0 -3480
  570. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Networking/mod.rs +0 -18
  571. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/AppLocker/mod.rs +0 -172
  572. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Authentication/Identity/mod.rs +0 -5701
  573. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Authentication/mod.rs +0 -2
  574. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Authorization/mod.rs +0 -984
  575. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Credentials/mod.rs +0 -797
  576. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/Catalog/mod.rs +0 -151
  577. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/Certificates/mod.rs +0 -2315
  578. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/Sip/mod.rs +0 -155
  579. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/UI/mod.rs +0 -545
  580. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Cryptography/mod.rs +0 -8528
  581. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/DiagnosticDataQuery/mod.rs +0 -156
  582. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/DirectoryServices/mod.rs +0 -19
  583. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/EnterpriseData/mod.rs +0 -36
  584. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/ExtensibleAuthenticationProtocol/mod.rs +0 -998
  585. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/Isolation/mod.rs +0 -20
  586. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/LicenseProtection/mod.rs +0 -8
  587. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/NetworkAccessProtection/mod.rs +0 -149
  588. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/WinTrust/mod.rs +0 -863
  589. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/WinWlx/mod.rs +0 -335
  590. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Security/mod.rs +0 -1156
  591. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Cabinets/mod.rs +0 -209
  592. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/CloudFilters/mod.rs +0 -666
  593. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Compression/mod.rs +0 -36
  594. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/DistributedFileSystem/mod.rs +0 -342
  595. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/FileHistory/mod.rs +0 -97
  596. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/FileSystem/mod.rs +0 -3699
  597. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Imapi/mod.rs +0 -697
  598. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/IndexServer/mod.rs +0 -279
  599. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/InstallableFileSystems/mod.rs +0 -331
  600. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/IscsiDisc/mod.rs +0 -1291
  601. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Jet/mod.rs +0 -2593
  602. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Nvme/mod.rs +0 -3428
  603. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/OfflineFiles/mod.rs +0 -276
  604. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/OperationRecorder/mod.rs +0 -20
  605. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Packaging/Appx/mod.rs +0 -377
  606. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Packaging/mod.rs +0 -2
  607. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/ProjectedFileSystem/mod.rs +0 -246
  608. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/StructuredStorage/mod.rs +0 -3
  609. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Vhd/mod.rs +0 -720
  610. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/Xps/mod.rs +0 -415
  611. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Storage/mod.rs +0 -38
  612. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/AddressBook/mod.rs +0 -938
  613. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Antimalware/mod.rs +0 -112
  614. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ApplicationInstallationAndServicing/mod.rs +0 -2145
  615. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ApplicationVerifier/mod.rs +0 -58
  616. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ClrHosting/mod.rs +0 -322
  617. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Com/Marshal/mod.rs +0 -172
  618. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Com/StructuredStorage/mod.rs +0 -655
  619. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Com/Urlmon/mod.rs +0 -905
  620. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Com/mod.rs +0 -1227
  621. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ComponentServices/mod.rs +0 -574
  622. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Console/mod.rs +0 -373
  623. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/CorrelationVector/mod.rs +0 -15
  624. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/DataExchange/mod.rs +0 -428
  625. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/DeploymentServices/mod.rs +0 -565
  626. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/DeveloperLicensing/mod.rs +0 -3
  627. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/Ceip/mod.rs +0 -1
  628. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/Debug/Extensions/mod.rs +0 -3710
  629. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/Debug/mod.rs +0 -5557
  630. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/Etw/mod.rs +0 -2042
  631. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/ProcessSnapshotting/mod.rs +0 -293
  632. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/ToolHelp/mod.rs +0 -119
  633. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/TraceLogging/mod.rs +0 -105
  634. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Diagnostics/mod.rs +0 -12
  635. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/DistributedTransactionCoordinator/mod.rs +0 -308
  636. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Environment/mod.rs +0 -202
  637. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ErrorReporting/mod.rs +0 -393
  638. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/EventCollector/mod.rs +0 -117
  639. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/EventLog/mod.rs +0 -379
  640. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/EventNotificationService/mod.rs +0 -35
  641. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/GroupPolicy/mod.rs +0 -424
  642. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/HostCompute/mod.rs +0 -1
  643. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/HostComputeNetwork/mod.rs +0 -86
  644. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/HostComputeSystem/mod.rs +0 -171
  645. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Hypervisor/mod.rs +0 -1983
  646. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/IO/mod.rs +0 -53
  647. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Iis/mod.rs +0 -1411
  648. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Ioctl/mod.rs +0 -6216
  649. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/JobObjects/mod.rs +0 -434
  650. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Js/mod.rs +0 -154
  651. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Kernel/mod.rs +0 -295
  652. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/LibraryLoader/mod.rs +0 -106
  653. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Mailslots/mod.rs +0 -6
  654. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Mapi/mod.rs +0 -150
  655. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Memory/NonVolatile/mod.rs +0 -20
  656. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Memory/mod.rs +0 -464
  657. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/MessageQueuing/mod.rs +0 -712
  658. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/MixedReality/mod.rs +0 -14
  659. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Ole/mod.rs +0 -2599
  660. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/PasswordManagement/mod.rs +0 -22
  661. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Performance/HardwareCounterProfiling/mod.rs +0 -27
  662. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Performance/mod.rs +0 -1091
  663. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Pipes/mod.rs +0 -42
  664. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Power/mod.rs +0 -1413
  665. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/ProcessStatus/mod.rs +0 -200
  666. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Recovery/mod.rs +0 -15
  667. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Registry/mod.rs +0 -1114
  668. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/RemoteDesktop/mod.rs +0 -1771
  669. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/RemoteManagement/mod.rs +0 -935
  670. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/RestartManager/mod.rs +0 -86
  671. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Restore/mod.rs +0 -66
  672. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Rpc/mod.rs +0 -2668
  673. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Search/Common/mod.rs +0 -21
  674. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Search/mod.rs +0 -5993
  675. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SecurityCenter/mod.rs +0 -41
  676. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Services/mod.rs +0 -587
  677. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SetupAndMigration/mod.rs +0 -4
  678. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Shutdown/mod.rs +0 -111
  679. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/StationsAndDesktops/mod.rs +0 -99
  680. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SubsystemForLinux/mod.rs +0 -12
  681. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SystemInformation/mod.rs +0 -751
  682. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/SystemServices/mod.rs +0 -4541
  683. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Threading/mod.rs +0 -1148
  684. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Time/mod.rs +0 -50
  685. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/TpmBaseServices/mod.rs +0 -89
  686. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/UserAccessLogging/mod.rs +0 -17
  687. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Variant/mod.rs +0 -321
  688. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/VirtualDosMachines/mod.rs +0 -297
  689. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/WindowsProgramming/mod.rs +0 -1633
  690. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/Wmi/mod.rs +0 -2435
  691. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/System/mod.rs +0 -132
  692. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Accessibility/mod.rs +0 -1788
  693. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/ColorSystem/mod.rs +0 -702
  694. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Controls/Dialogs/mod.rs +0 -1128
  695. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Controls/mod.rs +0 -7276
  696. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/HiDpi/mod.rs +0 -66
  697. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/Ime/mod.rs +0 -1394
  698. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/KeyboardAndMouse/mod.rs +0 -765
  699. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/Pointer/mod.rs +0 -168
  700. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/Touch/mod.rs +0 -89
  701. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/XboxController/mod.rs +0 -151
  702. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Input/mod.rs +0 -182
  703. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/InteractionContext/mod.rs +0 -230
  704. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Magnification/mod.rs +0 -52
  705. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Shell/Common/mod.rs +0 -104
  706. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Shell/PropertiesSystem/mod.rs +0 -322
  707. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/Shell/mod.rs +0 -6704
  708. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/TabletPC/mod.rs +0 -1537
  709. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/TextServices/mod.rs +0 -794
  710. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/WindowsAndMessaging/mod.rs +0 -3760
  711. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/UI/mod.rs +0 -22
  712. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Web/InternetExplorer/mod.rs +0 -628
  713. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/Web/mod.rs +0 -2
  714. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/Win32/mod.rs +0 -30
  715. data/ext/cargo-vendor/windows-sys-0.59.0/src/Windows/mod.rs +0 -4
  716. data/ext/cargo-vendor/windows-sys-0.59.0/src/core/literals.rs +0 -114
  717. data/ext/cargo-vendor/windows-sys-0.59.0/src/core/mod.rs +0 -33
  718. data/ext/cargo-vendor/windows-sys-0.59.0/src/includes/Win32/UI/WindowsAndMessaging/WindowLong.rs +0 -8
  719. data/ext/cargo-vendor/windows-sys-0.59.0/src/lib.rs +0 -17
  720. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.github/workflows/audit.yml +0 -0
  721. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.github/workflows/ci.yml +0 -0
  722. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.github/workflows/dotslash-config.json +0 -0
  723. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.rustfmt.toml +0 -0
  724. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/.rusty-hook.toml +0 -0
  725. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/dev/run_benchmarks_for_file.sh +0 -0
  726. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/cache/mod.rs +0 -0
  727. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/cache/noop.rs +0 -0
  728. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/file_owner_finder.rs +0 -0
  729. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/directory_mapper.rs +0 -0
  730. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/escaper.rs +0 -0
  731. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/team_gem_mapper.rs +0 -0
  732. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/team_glob_mapper.rs +0 -0
  733. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/src/ownership/mapper/team_yml_mapper.rs +0 -0
  734. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/cache_test.rs +0 -0
  735. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/.github/CODEOWNERS +0 -0
  736. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/config/code_ownership.yml +0 -0
  737. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/config/teams/payments.yml +0 -0
  738. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/config/teams/payroll.yml +0 -0
  739. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/gems/payroll_calculator/calculator.rb +0 -0
  740. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/models/bank_account.rb +0 -0
  741. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/models/blockchain.rb +0 -0
  742. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/models/payroll.rb +0 -0
  743. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/payments/nacha.rb +0 -0
  744. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/services/.codeowner +0 -0
  745. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/services/multi_owned.rb +0 -0
  746. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/app/unowned.rb +0 -0
  747. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/invalid_project/ruby/packages/payroll_flow/package.yml +0 -0
  748. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/.github/CODEOWNERS +0 -0
  749. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/consumers/.codeowner +0 -0
  750. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/consumers/deep/nesting/nestdir/deep_file.rb +0 -0
  751. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/consumers/one_owner.rb +0 -0
  752. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/services/.codeowner +0 -0
  753. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/services/exciting/.codeowner +0 -0
  754. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/app/services/exciting/some_other_file.rb +0 -0
  755. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/config/teams/bar.yml +0 -0
  756. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/multiple-directory-owners/config/teams/foo.yml +0 -0
  757. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/.ignore +0 -0
  758. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/config/teams/payments.yml +0 -0
  759. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/config/teams/payroll.yml +0 -0
  760. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/config/teams/ux.yml +0 -0
  761. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/gems/payroll_calculator/calculator.rb +0 -0
  762. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/gems/pets/dog.rb +0 -0
  763. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/index.tsx +0 -0
  764. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/PayrollFlow/package.json +0 -0
  765. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/items/(special)/.codeowner +0 -0
  766. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/items/(special)/pay.ts +0 -0
  767. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/items/.codeowner +0 -0
  768. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/javascript/packages/items/item.ts +0 -0
  769. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/models/bank_account.rb +0 -0
  770. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payments/foo/.codeowner +0 -0
  771. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payments/foo/ownedby_payroll.rb +0 -0
  772. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payments/nacha.rb +0 -0
  773. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payroll/.codeowner +0 -0
  774. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/app/payroll/payroll.rb +0 -0
  775. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/ignored_files/git_ignored.rb +0 -0
  776. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/ruby/packages/payroll_flow/package.yml +0 -0
  777. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/fixtures/valid_project/should_be_ignored/an_ignored_file.rb +0 -0
  778. /data/ext/cargo-vendor/{codeowners-0.2.7/tmp/.gitkeep → codeowners-0.2.17/tests/fixtures/valid_project_with_overrides/packs/games/app/services/stats.rb} +0 -0
  779. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/git_stage_test.rs +0 -0
  780. /data/ext/cargo-vendor/{codeowners-0.2.7 → codeowners-0.2.17}/tests/invalid_project_structure_test.rs +0 -0
  781. /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/.github/dependabot.yml +0 -0
  782. /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/.github/workflows/publish.yml +0 -0
  783. /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/LICENSE-APACHE +0 -0
  784. /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/LICENSE-MIT +0 -0
  785. /data/ext/cargo-vendor/{glob-0.3.2 → glob-0.3.3}/triagebot.toml +0 -0
  786. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/.rustfmt.toml +0 -0
  787. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/LICENSE-APACHE +0 -0
  788. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/LICENSE-MIT +0 -0
  789. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/README.md +0 -0
  790. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/benches/bench.rs +0 -0
  791. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/benches/faststring.rs +0 -0
  792. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/arbitrary.rs +0 -0
  793. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/borsh.rs +0 -0
  794. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/macros.rs +0 -0
  795. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/map/core/extract.rs +0 -0
  796. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/map/core/raw_entry_v1.rs +0 -0
  797. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/map/iter.rs +0 -0
  798. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/map/serde_seq.rs +0 -0
  799. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/rayon/mod.rs +0 -0
  800. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/serde.rs +0 -0
  801. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/set/iter.rs +0 -0
  802. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/src/util.rs +0 -0
  803. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/tests/equivalent_trait.rs +0 -0
  804. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/tests/macros_full_path.rs +0 -0
  805. /data/ext/cargo-vendor/{indexmap-2.10.0 → indexmap-2.11.0}/tests/tests.rs +0 -0
  806. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/LICENSE-APACHE +0 -0
  807. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/LICENSE-MIT +0 -0
  808. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/cannot_collect_filtermap_data.rs +0 -0
  809. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/cannot_zip_filtered_data.rs +0 -0
  810. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/cell_par_iter.rs +0 -0
  811. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/mod.rs +0 -0
  812. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/must_use.rs +0 -0
  813. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/no_send_par_iter.rs +0 -0
  814. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/compile_fail/rc_par_iter.rs +0 -0
  815. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/delegate.rs +0 -0
  816. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/collect/consumer.rs +0 -0
  817. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/extend.rs +0 -0
  818. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/find.rs +0 -0
  819. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/for_each.rs +0 -0
  820. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/noop.rs +0 -0
  821. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/plumbing/README.md +0 -0
  822. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/product.rs +0 -0
  823. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/reduce.rs +0 -0
  824. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/sum.rs +0 -0
  825. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/try_reduce.rs +0 -0
  826. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/iter/try_reduce_with.rs +0 -0
  827. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/par_either.rs +0 -0
  828. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/prelude.rs +0 -0
  829. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/private.rs +0 -0
  830. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/split_producer.rs +0 -0
  831. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/src/string.rs +0 -0
  832. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/chars.rs +0 -0
  833. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/cross-pool.rs +0 -0
  834. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/drain_vec.rs +0 -0
  835. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/intersperse.rs +0 -0
  836. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/issue671-unzip.rs +0 -0
  837. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/issue671.rs +0 -0
  838. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/iter_panic.rs +0 -0
  839. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/octillion.rs +0 -0
  840. /data/ext/cargo-vendor/{rayon-1.10.0 → rayon-1.11.0}/tests/par_bridge_recursion.rs +0 -0
  841. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/LICENSE-APACHE +0 -0
  842. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/LICENSE-MIT +0 -0
  843. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/build.rs +0 -0
  844. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/broadcast/test.rs +0 -0
  845. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/mod.rs +0 -0
  846. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/quicksort_race1.rs +0 -0
  847. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/quicksort_race2.rs +0 -0
  848. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/quicksort_race3.rs +0 -0
  849. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/rc_return.rs +0 -0
  850. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/rc_upvar.rs +0 -0
  851. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/compile_fail/scope_join_bad.rs +0 -0
  852. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/job.rs +0 -0
  853. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/private.rs +0 -0
  854. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/src/unwind.rs +0 -0
  855. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/double_init_fail.rs +0 -0
  856. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/init_zero_threads.rs +0 -0
  857. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/scope_join.rs +0 -0
  858. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/scoped_threadpool.rs +0 -0
  859. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/simple_panic.rs +0 -0
  860. /data/ext/cargo-vendor/{rayon-core-1.12.1 → rayon-core-1.13.0}/tests/stack_overflow_crash.rs +0 -0
  861. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/CONTRIBUTING.md +0 -0
  862. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/LICENSE-APACHE +0 -0
  863. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/LICENSE-MIT +0 -0
  864. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/README.md +0 -0
  865. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/build.rs +0 -0
  866. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/de.rs +0 -0
  867. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/error.rs +0 -0
  868. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/io/core.rs +0 -0
  869. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/io/mod.rs +0 -0
  870. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/iter.rs +0 -0
  871. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/algorithm.rs +0 -0
  872. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/bhcomp.rs +0 -0
  873. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/bignum.rs +0 -0
  874. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/cached.rs +0 -0
  875. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/cached_float80.rs +0 -0
  876. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/digit.rs +0 -0
  877. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/errors.rs +0 -0
  878. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/exponent.rs +0 -0
  879. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/float.rs +0 -0
  880. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/large_powers.rs +0 -0
  881. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/large_powers32.rs +0 -0
  882. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/large_powers64.rs +0 -0
  883. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/math.rs +0 -0
  884. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/mod.rs +0 -0
  885. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/num.rs +0 -0
  886. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/parse.rs +0 -0
  887. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/rounding.rs +0 -0
  888. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/shift.rs +0 -0
  889. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/lexical/small_powers.rs +0 -0
  890. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/macros.rs +0 -0
  891. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/number.rs +0 -0
  892. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/raw.rs +0 -0
  893. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/read.rs +0 -0
  894. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/from.rs +0 -0
  895. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/index.rs +0 -0
  896. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/mod.rs +0 -0
  897. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/partial_eq.rs +0 -0
  898. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/src/value/ser.rs +0 -0
  899. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/compiletest.rs +0 -0
  900. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/debug.rs +0 -0
  901. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/algorithm.rs +0 -0
  902. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/exponent.rs +0 -0
  903. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/float.rs +0 -0
  904. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/math.rs +0 -0
  905. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/num.rs +0 -0
  906. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/parse.rs +0 -0
  907. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical/rounding.rs +0 -0
  908. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/lexical.rs +0 -0
  909. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/macros/mod.rs +0 -0
  910. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/map.rs +0 -0
  911. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue1004.rs +0 -0
  912. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue520.rs +0 -0
  913. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue795.rs +0 -0
  914. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue845.rs +0 -0
  915. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression/issue953.rs +0 -0
  916. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/regression.rs +0 -0
  917. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/stream.rs +0 -0
  918. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/test.rs +0 -0
  919. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_colon.rs +0 -0
  920. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_colon.stderr +0 -0
  921. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_comma.rs +0 -0
  922. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_comma.stderr +0 -0
  923. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_value.rs +0 -0
  924. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/missing_value.stderr +0 -0
  925. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/not_found.rs +0 -0
  926. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/not_found.stderr +0 -0
  927. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/parse_expr.rs +0 -0
  928. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/parse_expr.stderr +0 -0
  929. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/parse_key.rs +0 -0
  930. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/parse_key.stderr +0 -0
  931. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_after_array_element.rs +0 -0
  932. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_after_array_element.stderr +0 -0
  933. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_after_map_entry.rs +0 -0
  934. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_after_map_entry.stderr +0 -0
  935. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_colon.rs +0 -0
  936. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_colon.stderr +0 -0
  937. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_comma.rs +0 -0
  938. /data/ext/cargo-vendor/{serde_json-1.0.142 → serde_json-1.0.143}/tests/ui/unexpected_comma.stderr +0 -0
  939. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/.github/dependabot.yml +0 -0
  940. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/LICENSE-APACHE +0 -0
  941. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/LICENSE-MIT +0 -0
  942. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/README.md +0 -0
  943. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/deny.toml +0 -0
  944. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/dir/imp/any.rs +0 -0
  945. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/dir/imp/mod.rs +0 -0
  946. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/dir/imp/unix.rs +0 -0
  947. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/dir/mod.rs +0 -0
  948. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/env.rs +0 -0
  949. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/error.rs +0 -0
  950. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/imp/mod.rs +0 -0
  951. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/imp/other.rs +0 -0
  952. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/imp/unix.rs +0 -0
  953. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/imp/windows.rs +0 -0
  954. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/file/mod.rs +0 -0
  955. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/lib.rs +0 -0
  956. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/spooled.rs +0 -0
  957. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/src/util.rs +0 -0
  958. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/env.rs +0 -0
  959. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/namedtempfile.rs +0 -0
  960. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/spooled.rs +0 -0
  961. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/tempdir.rs +0 -0
  962. /data/ext/cargo-vendor/{tempfile-3.20.0 → tempfile-3.21.0}/tests/tempfile.rs +0 -0
  963. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/.github/workflows/ci.yml +0 -0
  964. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/COPYING +0 -0
  965. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/LICENSE-MIT +0 -0
  966. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/README.md +0 -0
  967. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/UNLICENSE +0 -0
  968. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/rustfmt.toml +0 -0
  969. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/console.rs +0 -0
  970. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/file.rs +0 -0
  971. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/lib.rs +0 -0
  972. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/sysinfo.rs +0 -0
  973. /data/ext/cargo-vendor/{winapi-util-0.1.9 → winapi-util-0.1.10}/src/win.rs +0 -0
@@ -0,0 +1,1686 @@
1
+ //! **Parallel** Slice sorting
2
+ //!
3
+ //! This implementation is mostly copied from the `core::slice::sort` module, with minimal changes
4
+ //! to support stable Rust and parallel `is_less` (e.g. `Fn` rather than `FnMut`).
5
+ //!
6
+ //! ---
7
+ //!
8
+ //! This module contains a sorting algorithm based on Orson Peters' pattern-defeating quicksort,
9
+ //! published at: <https://github.com/orlp/pdqsort>
10
+ //!
11
+ //! Unstable sorting is compatible with core because it doesn't allocate memory, unlike our
12
+ //! stable sorting implementation.
13
+ //!
14
+ //! In addition it also contains the core logic of the stable sort used by `slice::sort` based on
15
+ //! TimSort.
16
+
17
+ use core::cmp;
18
+ use core::mem::{self, MaybeUninit};
19
+ use core::ptr;
20
+ use core::slice;
21
+
22
+ use crate::iter::{IndexedParallelIterator, ParallelIterator};
23
+ use crate::slice::ParallelSliceMut;
24
+ use crate::SendPtr;
25
+
26
+ // When dropped, copies from `src` into `dest`.
27
+ struct InsertionHole<T> {
28
+ src: *const T,
29
+ dest: *mut T,
30
+ }
31
+
32
+ impl<T> Drop for InsertionHole<T> {
33
+ fn drop(&mut self) {
34
+ // SAFETY: This is a helper class. Please refer to its usage for correctness. Namely, one
35
+ // must be sure that `src` and `dst` does not overlap as required by
36
+ // `ptr::copy_nonoverlapping` and are both valid for writes.
37
+ unsafe {
38
+ ptr::copy_nonoverlapping(self.src, self.dest, 1);
39
+ }
40
+ }
41
+ }
42
+
43
+ /// Inserts `v[v.len() - 1]` into pre-sorted sequence `v[..v.len() - 1]` so that whole `v[..]`
44
+ /// becomes sorted.
45
+ unsafe fn insert_tail<T, F>(v: &mut [T], is_less: &F)
46
+ where
47
+ F: Fn(&T, &T) -> bool,
48
+ {
49
+ debug_assert!(v.len() >= 2);
50
+
51
+ let arr_ptr = v.as_mut_ptr();
52
+ let i = v.len() - 1;
53
+
54
+ // SAFETY: caller must ensure v is at least len 2.
55
+ unsafe {
56
+ // See insert_head which talks about why this approach is beneficial.
57
+ let i_ptr = arr_ptr.add(i);
58
+
59
+ // It's important that we use i_ptr here. If this check is positive and we continue,
60
+ // We want to make sure that no other copy of the value was seen by is_less.
61
+ // Otherwise we would have to copy it back.
62
+ if is_less(&*i_ptr, &*i_ptr.sub(1)) {
63
+ // It's important, that we use tmp for comparison from now on. As it is the value that
64
+ // will be copied back. And notionally we could have created a divergence if we copy
65
+ // back the wrong value.
66
+ let tmp = mem::ManuallyDrop::new(ptr::read(i_ptr));
67
+ // Intermediate state of the insertion process is always tracked by `hole`, which
68
+ // serves two purposes:
69
+ // 1. Protects integrity of `v` from panics in `is_less`.
70
+ // 2. Fills the remaining hole in `v` in the end.
71
+ //
72
+ // Panic safety:
73
+ //
74
+ // If `is_less` panics at any point during the process, `hole` will get dropped and
75
+ // fill the hole in `v` with `tmp`, thus ensuring that `v` still holds every object it
76
+ // initially held exactly once.
77
+ let mut hole = InsertionHole {
78
+ src: &*tmp,
79
+ dest: i_ptr.sub(1),
80
+ };
81
+ ptr::copy_nonoverlapping(hole.dest, i_ptr, 1);
82
+
83
+ // SAFETY: We know i is at least 1.
84
+ for j in (0..(i - 1)).rev() {
85
+ let j_ptr = arr_ptr.add(j);
86
+ if !is_less(&*tmp, &*j_ptr) {
87
+ break;
88
+ }
89
+
90
+ ptr::copy_nonoverlapping(j_ptr, hole.dest, 1);
91
+ hole.dest = j_ptr;
92
+ }
93
+ // `hole` gets dropped and thus copies `tmp` into the remaining hole in `v`.
94
+ }
95
+ }
96
+ }
97
+
98
+ /// Inserts `v[0]` into pre-sorted sequence `v[1..]` so that whole `v[..]` becomes sorted.
99
+ ///
100
+ /// This is the integral subroutine of insertion sort.
101
+ unsafe fn insert_head<T, F>(v: &mut [T], is_less: &F)
102
+ where
103
+ F: Fn(&T, &T) -> bool,
104
+ {
105
+ debug_assert!(v.len() >= 2);
106
+
107
+ // SAFETY: caller must ensure v is at least len 2.
108
+ unsafe {
109
+ if is_less(v.get_unchecked(1), v.get_unchecked(0)) {
110
+ let arr_ptr = v.as_mut_ptr();
111
+
112
+ // There are three ways to implement insertion here:
113
+ //
114
+ // 1. Swap adjacent elements until the first one gets to its final destination.
115
+ // However, this way we copy data around more than is necessary. If elements are big
116
+ // structures (costly to copy), this method will be slow.
117
+ //
118
+ // 2. Iterate until the right place for the first element is found. Then shift the
119
+ // elements succeeding it to make room for it and finally place it into the
120
+ // remaining hole. This is a good method.
121
+ //
122
+ // 3. Copy the first element into a temporary variable. Iterate until the right place
123
+ // for it is found. As we go along, copy every traversed element into the slot
124
+ // preceding it. Finally, copy data from the temporary variable into the remaining
125
+ // hole. This method is very good. Benchmarks demonstrated slightly better
126
+ // performance than with the 2nd method.
127
+ //
128
+ // All methods were benchmarked, and the 3rd showed best results. So we chose that one.
129
+ let tmp = mem::ManuallyDrop::new(ptr::read(arr_ptr));
130
+
131
+ // Intermediate state of the insertion process is always tracked by `hole`, which
132
+ // serves two purposes:
133
+ // 1. Protects integrity of `v` from panics in `is_less`.
134
+ // 2. Fills the remaining hole in `v` in the end.
135
+ //
136
+ // Panic safety:
137
+ //
138
+ // If `is_less` panics at any point during the process, `hole` will get dropped and
139
+ // fill the hole in `v` with `tmp`, thus ensuring that `v` still holds every object it
140
+ // initially held exactly once.
141
+ let mut hole = InsertionHole {
142
+ src: &*tmp,
143
+ dest: arr_ptr.add(1),
144
+ };
145
+ ptr::copy_nonoverlapping(arr_ptr.add(1), arr_ptr.add(0), 1);
146
+
147
+ for i in 2..v.len() {
148
+ if !is_less(v.get_unchecked(i), &*tmp) {
149
+ break;
150
+ }
151
+ ptr::copy_nonoverlapping(arr_ptr.add(i), arr_ptr.add(i - 1), 1);
152
+ hole.dest = arr_ptr.add(i);
153
+ }
154
+ // `hole` gets dropped and thus copies `tmp` into the remaining hole in `v`.
155
+ }
156
+ }
157
+ }
158
+
159
+ /// Sort `v` assuming `v[..offset]` is already sorted.
160
+ ///
161
+ /// Never inline this function to avoid code bloat. It still optimizes nicely and has practically no
162
+ /// performance impact. Even improving performance in some cases.
163
+ #[inline(never)]
164
+ fn insertion_sort_shift_left<T, F>(v: &mut [T], offset: usize, is_less: &F)
165
+ where
166
+ F: Fn(&T, &T) -> bool,
167
+ {
168
+ let len = v.len();
169
+
170
+ // Using assert here improves performance.
171
+ assert!(offset != 0 && offset <= len);
172
+
173
+ // Shift each element of the unsorted region v[i..] as far left as is needed to make v sorted.
174
+ for i in offset..len {
175
+ // SAFETY: we tested that `offset` must be at least 1, so this loop is only entered if len
176
+ // >= 2. The range is exclusive and we know `i` must be at least 1 so this slice has at
177
+ // >least len 2.
178
+ unsafe {
179
+ insert_tail(&mut v[..=i], is_less);
180
+ }
181
+ }
182
+ }
183
+
184
+ /// Sort `v` assuming `v[offset..]` is already sorted.
185
+ ///
186
+ /// Never inline this function to avoid code bloat. It still optimizes nicely and has practically no
187
+ /// performance impact. Even improving performance in some cases.
188
+ #[inline(never)]
189
+ fn insertion_sort_shift_right<T, F>(v: &mut [T], offset: usize, is_less: &F)
190
+ where
191
+ F: Fn(&T, &T) -> bool,
192
+ {
193
+ let len = v.len();
194
+
195
+ // Using assert here improves performance.
196
+ assert!(offset != 0 && offset <= len && len >= 2);
197
+
198
+ // Shift each element of the unsorted region v[..i] as far left as is needed to make v sorted.
199
+ for i in (0..offset).rev() {
200
+ // SAFETY: we tested that `offset` must be at least 1, so this loop is only entered if len
201
+ // >= 2.We ensured that the slice length is always at least 2 long. We know that start_found
202
+ // will be at least one less than end, and the range is exclusive. Which gives us i always
203
+ // <= (end - 2).
204
+ unsafe {
205
+ insert_head(&mut v[i..len], is_less);
206
+ }
207
+ }
208
+ }
209
+
210
+ /// Partially sorts a slice by shifting several out-of-order elements around.
211
+ ///
212
+ /// Returns `true` if the slice is sorted at the end. This function is *O*(*n*) worst-case.
213
+ #[cold]
214
+ fn partial_insertion_sort<T, F>(v: &mut [T], is_less: &F) -> bool
215
+ where
216
+ F: Fn(&T, &T) -> bool,
217
+ {
218
+ // Maximum number of adjacent out-of-order pairs that will get shifted.
219
+ const MAX_STEPS: usize = 5;
220
+ // If the slice is shorter than this, don't shift any elements.
221
+ const SHORTEST_SHIFTING: usize = 50;
222
+
223
+ let len = v.len();
224
+ let mut i = 1;
225
+
226
+ for _ in 0..MAX_STEPS {
227
+ // SAFETY: We already explicitly did the bound checking with `i < len`.
228
+ // All our subsequent indexing is only in the range `0 <= index < len`
229
+ unsafe {
230
+ // Find the next pair of adjacent out-of-order elements.
231
+ while i < len && !is_less(v.get_unchecked(i), v.get_unchecked(i - 1)) {
232
+ i += 1;
233
+ }
234
+ }
235
+
236
+ // Are we done?
237
+ if i == len {
238
+ return true;
239
+ }
240
+
241
+ // Don't shift elements on short arrays, that has a performance cost.
242
+ if len < SHORTEST_SHIFTING {
243
+ return false;
244
+ }
245
+
246
+ // Swap the found pair of elements. This puts them in correct order.
247
+ v.swap(i - 1, i);
248
+
249
+ if i >= 2 {
250
+ // Shift the smaller element to the left.
251
+ insertion_sort_shift_left(&mut v[..i], i - 1, is_less);
252
+
253
+ // Shift the greater element to the right.
254
+ insertion_sort_shift_right(&mut v[..i], 1, is_less);
255
+ }
256
+ }
257
+
258
+ // Didn't manage to sort the slice in the limited number of steps.
259
+ false
260
+ }
261
+
262
+ /// Sorts `v` using heapsort, which guarantees *O*(*n* \* log(*n*)) worst-case.
263
+ #[cold]
264
+ fn heapsort<T, F>(v: &mut [T], is_less: F)
265
+ where
266
+ F: Fn(&T, &T) -> bool,
267
+ {
268
+ // This binary heap respects the invariant `parent >= child`.
269
+ let sift_down = |v: &mut [T], mut node| {
270
+ loop {
271
+ // Children of `node`.
272
+ let mut child = 2 * node + 1;
273
+ if child >= v.len() {
274
+ break;
275
+ }
276
+
277
+ // Choose the greater child.
278
+ if child + 1 < v.len() {
279
+ // We need a branch to be sure not to out-of-bounds index,
280
+ // but it's highly predictable. The comparison, however,
281
+ // is better done branchless, especially for primitives.
282
+ child += is_less(&v[child], &v[child + 1]) as usize;
283
+ }
284
+
285
+ // Stop if the invariant holds at `node`.
286
+ if !is_less(&v[node], &v[child]) {
287
+ break;
288
+ }
289
+
290
+ // Swap `node` with the greater child, move one step down, and continue sifting.
291
+ v.swap(node, child);
292
+ node = child;
293
+ }
294
+ };
295
+
296
+ // Build the heap in linear time.
297
+ for i in (0..v.len() / 2).rev() {
298
+ sift_down(v, i);
299
+ }
300
+
301
+ // Pop maximal elements from the heap.
302
+ for i in (1..v.len()).rev() {
303
+ v.swap(0, i);
304
+ sift_down(&mut v[..i], 0);
305
+ }
306
+ }
307
+
308
+ /// Partitions `v` into elements smaller than `pivot`, followed by elements greater than or equal
309
+ /// to `pivot`.
310
+ ///
311
+ /// Returns the number of elements smaller than `pivot`.
312
+ ///
313
+ /// Partitioning is performed block-by-block in order to minimize the cost of branching operations.
314
+ /// This idea is presented in the [BlockQuicksort][pdf] paper.
315
+ ///
316
+ /// [pdf]: https://drops.dagstuhl.de/opus/volltexte/2016/6389/pdf/LIPIcs-ESA-2016-38.pdf
317
+ fn partition_in_blocks<T, F>(v: &mut [T], pivot: &T, is_less: &F) -> usize
318
+ where
319
+ F: Fn(&T, &T) -> bool,
320
+ {
321
+ // Number of elements in a typical block.
322
+ const BLOCK: usize = 128;
323
+
324
+ // The partitioning algorithm repeats the following steps until completion:
325
+ //
326
+ // 1. Trace a block from the left side to identify elements greater than or equal to the pivot.
327
+ // 2. Trace a block from the right side to identify elements smaller than the pivot.
328
+ // 3. Exchange the identified elements between the left and right side.
329
+ //
330
+ // We keep the following variables for a block of elements:
331
+ //
332
+ // 1. `block` - Number of elements in the block.
333
+ // 2. `start` - Start pointer into the `offsets` array.
334
+ // 3. `end` - End pointer into the `offsets` array.
335
+ // 4. `offsets` - Indices of out-of-order elements within the block.
336
+
337
+ // The current block on the left side (from `l` to `l.add(block_l)`).
338
+ let mut l = v.as_mut_ptr();
339
+ let mut block_l = BLOCK;
340
+ let mut start_l = ptr::null_mut();
341
+ let mut end_l = ptr::null_mut();
342
+ let mut offsets_l = [MaybeUninit::<u8>::uninit(); BLOCK];
343
+
344
+ // The current block on the right side (from `r.sub(block_r)` to `r`).
345
+ // SAFETY: The documentation for .add() specifically mention that `vec.as_ptr().add(vec.len())` is always safe
346
+ let mut r = unsafe { l.add(v.len()) };
347
+ let mut block_r = BLOCK;
348
+ let mut start_r = ptr::null_mut();
349
+ let mut end_r = ptr::null_mut();
350
+ let mut offsets_r = [MaybeUninit::<u8>::uninit(); BLOCK];
351
+
352
+ // FIXME: When we get VLAs, try creating one array of length `min(v.len(), 2 * BLOCK)` rather
353
+ // than two fixed-size arrays of length `BLOCK`. VLAs might be more cache-efficient.
354
+
355
+ // Returns the number of elements between pointers `l` (inclusive) and `r` (exclusive).
356
+ fn width<T>(l: *mut T, r: *mut T) -> usize {
357
+ assert!(size_of::<T>() > 0);
358
+ // FIXME: this should *likely* use `offset_from`, but more
359
+ // investigation is needed (including running tests in miri).
360
+ (r as usize - l as usize) / size_of::<T>()
361
+ }
362
+
363
+ loop {
364
+ // We are done with partitioning block-by-block when `l` and `r` get very close. Then we do
365
+ // some patch-up work in order to partition the remaining elements in between.
366
+ let is_done = width(l, r) <= 2 * BLOCK;
367
+
368
+ if is_done {
369
+ // Number of remaining elements (still not compared to the pivot).
370
+ let mut rem = width(l, r);
371
+ if start_l < end_l || start_r < end_r {
372
+ rem -= BLOCK;
373
+ }
374
+
375
+ // Adjust block sizes so that the left and right block don't overlap, but get perfectly
376
+ // aligned to cover the whole remaining gap.
377
+ if start_l < end_l {
378
+ block_r = rem;
379
+ } else if start_r < end_r {
380
+ block_l = rem;
381
+ } else {
382
+ // There were the same number of elements to switch on both blocks during the last
383
+ // iteration, so there are no remaining elements on either block. Cover the remaining
384
+ // items with roughly equally-sized blocks.
385
+ block_l = rem / 2;
386
+ block_r = rem - block_l;
387
+ }
388
+ debug_assert!(block_l <= BLOCK && block_r <= BLOCK);
389
+ debug_assert!(width(l, r) == block_l + block_r);
390
+ }
391
+
392
+ if start_l == end_l {
393
+ // Trace `block_l` elements from the left side.
394
+ start_l = offsets_l.as_mut_ptr() as *mut u8;
395
+ end_l = start_l;
396
+ let mut elem = l;
397
+
398
+ for i in 0..block_l {
399
+ // SAFETY: The unsafety operations below involve the usage of the `offset`.
400
+ // According to the conditions required by the function, we satisfy them because:
401
+ // 1. `offsets_l` is stack-allocated, and thus considered separate allocated object.
402
+ // 2. The function `is_less` returns a `bool`.
403
+ // Casting a `bool` will never overflow `isize`.
404
+ // 3. We have guaranteed that `block_l` will be `<= BLOCK`.
405
+ // Plus, `end_l` was initially set to the begin pointer of `offsets_` which was declared on the stack.
406
+ // Thus, we know that even in the worst case (all invocations of `is_less` returns false) we will only be at most 1 byte pass the end.
407
+ // Another unsafety operation here is dereferencing `elem`.
408
+ // However, `elem` was initially the begin pointer to the slice which is always valid.
409
+ unsafe {
410
+ // Branchless comparison.
411
+ *end_l = i as u8;
412
+ end_l = end_l.add(!is_less(&*elem, pivot) as usize);
413
+ elem = elem.add(1);
414
+ }
415
+ }
416
+ }
417
+
418
+ if start_r == end_r {
419
+ // Trace `block_r` elements from the right side.
420
+ start_r = offsets_r.as_mut_ptr() as *mut u8;
421
+ end_r = start_r;
422
+ let mut elem = r;
423
+
424
+ for i in 0..block_r {
425
+ // SAFETY: The unsafety operations below involve the usage of the `offset`.
426
+ // According to the conditions required by the function, we satisfy them because:
427
+ // 1. `offsets_r` is stack-allocated, and thus considered separate allocated object.
428
+ // 2. The function `is_less` returns a `bool`.
429
+ // Casting a `bool` will never overflow `isize`.
430
+ // 3. We have guaranteed that `block_r` will be `<= BLOCK`.
431
+ // Plus, `end_r` was initially set to the begin pointer of `offsets_` which was declared on the stack.
432
+ // Thus, we know that even in the worst case (all invocations of `is_less` returns true) we will only be at most 1 byte pass the end.
433
+ // Another unsafety operation here is dereferencing `elem`.
434
+ // However, `elem` was initially `1 * sizeof(T)` past the end and we decrement it by `1 * sizeof(T)` before accessing it.
435
+ // Plus, `block_r` was asserted to be less than `BLOCK` and `elem` will therefore at most be pointing to the beginning of the slice.
436
+ unsafe {
437
+ // Branchless comparison.
438
+ elem = elem.sub(1);
439
+ *end_r = i as u8;
440
+ end_r = end_r.add(is_less(&*elem, pivot) as usize);
441
+ }
442
+ }
443
+ }
444
+
445
+ // Number of out-of-order elements to swap between the left and right side.
446
+ let count = cmp::min(width(start_l, end_l), width(start_r, end_r));
447
+
448
+ if count > 0 {
449
+ macro_rules! left {
450
+ () => {
451
+ l.add(usize::from(*start_l))
452
+ };
453
+ }
454
+ macro_rules! right {
455
+ () => {
456
+ r.sub(usize::from(*start_r) + 1)
457
+ };
458
+ }
459
+
460
+ // Instead of swapping one pair at the time, it is more efficient to perform a cyclic
461
+ // permutation. This is not strictly equivalent to swapping, but produces a similar
462
+ // result using fewer memory operations.
463
+
464
+ // SAFETY: The use of `ptr::read` is valid because there is at least one element in
465
+ // both `offsets_l` and `offsets_r`, so `left!` is a valid pointer to read from.
466
+ //
467
+ // The uses of `left!` involve calls to `offset` on `l`, which points to the
468
+ // beginning of `v`. All the offsets pointed-to by `start_l` are at most `block_l`, so
469
+ // these `offset` calls are safe as all reads are within the block. The same argument
470
+ // applies for the uses of `right!`.
471
+ //
472
+ // The calls to `start_l.offset` are valid because there are at most `count-1` of them,
473
+ // plus the final one at the end of the unsafe block, where `count` is the minimum number
474
+ // of collected offsets in `offsets_l` and `offsets_r`, so there is no risk of there not
475
+ // being enough elements. The same reasoning applies to the calls to `start_r.offset`.
476
+ //
477
+ // The calls to `copy_nonoverlapping` are safe because `left!` and `right!` are guaranteed
478
+ // not to overlap, and are valid because of the reasoning above.
479
+ unsafe {
480
+ let tmp = ptr::read(left!());
481
+ ptr::copy_nonoverlapping(right!(), left!(), 1);
482
+
483
+ for _ in 1..count {
484
+ start_l = start_l.add(1);
485
+ ptr::copy_nonoverlapping(left!(), right!(), 1);
486
+ start_r = start_r.add(1);
487
+ ptr::copy_nonoverlapping(right!(), left!(), 1);
488
+ }
489
+
490
+ ptr::copy_nonoverlapping(&tmp, right!(), 1);
491
+ mem::forget(tmp);
492
+ start_l = start_l.add(1);
493
+ start_r = start_r.add(1);
494
+ }
495
+ }
496
+
497
+ if start_l == end_l {
498
+ // All out-of-order elements in the left block were moved. Move to the next block.
499
+
500
+ // block-width-guarantee
501
+ // SAFETY: if `!is_done` then the slice width is guaranteed to be at least `2*BLOCK` wide. There
502
+ // are at most `BLOCK` elements in `offsets_l` because of its size, so the `offset` operation is
503
+ // safe. Otherwise, the debug assertions in the `is_done` case guarantee that
504
+ // `width(l, r) == block_l + block_r`, namely, that the block sizes have been adjusted to account
505
+ // for the smaller number of remaining elements.
506
+ l = unsafe { l.add(block_l) };
507
+ }
508
+
509
+ if start_r == end_r {
510
+ // All out-of-order elements in the right block were moved. Move to the previous block.
511
+
512
+ // SAFETY: Same argument as [block-width-guarantee]. Either this is a full block `2*BLOCK`-wide,
513
+ // or `block_r` has been adjusted for the last handful of elements.
514
+ r = unsafe { r.sub(block_r) };
515
+ }
516
+
517
+ if is_done {
518
+ break;
519
+ }
520
+ }
521
+
522
+ // All that remains now is at most one block (either the left or the right) with out-of-order
523
+ // elements that need to be moved. Such remaining elements can be simply shifted to the end
524
+ // within their block.
525
+
526
+ if start_l < end_l {
527
+ // The left block remains.
528
+ // Move its remaining out-of-order elements to the far right.
529
+ debug_assert_eq!(width(l, r), block_l);
530
+ while start_l < end_l {
531
+ // remaining-elements-safety
532
+ // SAFETY: while the loop condition holds there are still elements in `offsets_l`, so it
533
+ // is safe to point `end_l` to the previous element.
534
+ //
535
+ // The `ptr::swap` is safe if both its arguments are valid for reads and writes:
536
+ // - Per the debug assert above, the distance between `l` and `r` is `block_l`
537
+ // elements, so there can be at most `block_l` remaining offsets between `start_l`
538
+ // and `end_l`. This means `r` will be moved at most `block_l` steps back, which
539
+ // makes the `r.offset` calls valid (at that point `l == r`).
540
+ // - `offsets_l` contains valid offsets into `v` collected during the partitioning of
541
+ // the last block, so the `l.offset` calls are valid.
542
+ unsafe {
543
+ end_l = end_l.sub(1);
544
+ ptr::swap(l.add(usize::from(*end_l)), r.sub(1));
545
+ r = r.sub(1);
546
+ }
547
+ }
548
+ width(v.as_mut_ptr(), r)
549
+ } else if start_r < end_r {
550
+ // The right block remains.
551
+ // Move its remaining out-of-order elements to the far left.
552
+ debug_assert_eq!(width(l, r), block_r);
553
+ while start_r < end_r {
554
+ // SAFETY: See the reasoning in [remaining-elements-safety].
555
+ unsafe {
556
+ end_r = end_r.sub(1);
557
+ ptr::swap(l, r.sub(usize::from(*end_r) + 1));
558
+ l = l.add(1);
559
+ }
560
+ }
561
+ width(v.as_mut_ptr(), l)
562
+ } else {
563
+ // Nothing else to do, we're done.
564
+ width(v.as_mut_ptr(), l)
565
+ }
566
+ }
567
+
568
+ /// Partitions `v` into elements smaller than `v[pivot]`, followed by elements greater than or
569
+ /// equal to `v[pivot]`.
570
+ ///
571
+ /// Returns a tuple of:
572
+ ///
573
+ /// 1. Number of elements smaller than `v[pivot]`.
574
+ /// 2. True if `v` was already partitioned.
575
+ fn partition<T, F>(v: &mut [T], pivot: usize, is_less: &F) -> (usize, bool)
576
+ where
577
+ F: Fn(&T, &T) -> bool,
578
+ {
579
+ let (mid, was_partitioned) = {
580
+ // Place the pivot at the beginning of slice.
581
+ v.swap(0, pivot);
582
+ let (pivot, v) = v.split_at_mut(1);
583
+ let pivot = &mut pivot[0];
584
+
585
+ // Read the pivot into a stack-allocated variable for efficiency. If a following comparison
586
+ // operation panics, the pivot will be automatically written back into the slice.
587
+
588
+ // SAFETY: `pivot` is a reference to the first element of `v`, so `ptr::read` is safe.
589
+ let tmp = mem::ManuallyDrop::new(unsafe { ptr::read(pivot) });
590
+ let _pivot_guard = InsertionHole {
591
+ src: &*tmp,
592
+ dest: pivot,
593
+ };
594
+ let pivot = &*tmp;
595
+
596
+ // Find the first pair of out-of-order elements.
597
+ let mut l = 0;
598
+ let mut r = v.len();
599
+
600
+ // SAFETY: The unsafety below involves indexing an array.
601
+ // For the first one: We already do the bounds checking here with `l < r`.
602
+ // For the second one: We initially have `l == 0` and `r == v.len()` and we checked that `l < r` at every indexing operation.
603
+ // From here we know that `r` must be at least `r == l` which was shown to be valid from the first one.
604
+ unsafe {
605
+ // Find the first element greater than or equal to the pivot.
606
+ while l < r && is_less(v.get_unchecked(l), pivot) {
607
+ l += 1;
608
+ }
609
+
610
+ // Find the last element smaller that the pivot.
611
+ while l < r && !is_less(v.get_unchecked(r - 1), pivot) {
612
+ r -= 1;
613
+ }
614
+ }
615
+
616
+ (
617
+ l + partition_in_blocks(&mut v[l..r], pivot, is_less),
618
+ l >= r,
619
+ )
620
+
621
+ // `_pivot_guard` goes out of scope and writes the pivot (which is a stack-allocated
622
+ // variable) back into the slice where it originally was. This step is critical in ensuring
623
+ // safety!
624
+ };
625
+
626
+ // Place the pivot between the two partitions.
627
+ v.swap(0, mid);
628
+
629
+ (mid, was_partitioned)
630
+ }
631
+
632
+ /// Partitions `v` into elements equal to `v[pivot]` followed by elements greater than `v[pivot]`.
633
+ ///
634
+ /// Returns the number of elements equal to the pivot. It is assumed that `v` does not contain
635
+ /// elements smaller than the pivot.
636
+ fn partition_equal<T, F>(v: &mut [T], pivot: usize, is_less: &F) -> usize
637
+ where
638
+ F: Fn(&T, &T) -> bool,
639
+ {
640
+ // Place the pivot at the beginning of slice.
641
+ v.swap(0, pivot);
642
+ let (pivot, v) = v.split_at_mut(1);
643
+ let pivot = &mut pivot[0];
644
+
645
+ // Read the pivot into a stack-allocated variable for efficiency. If a following comparison
646
+ // operation panics, the pivot will be automatically written back into the slice.
647
+ // SAFETY: The pointer here is valid because it is obtained from a reference to a slice.
648
+ let tmp = mem::ManuallyDrop::new(unsafe { ptr::read(pivot) });
649
+ let _pivot_guard = InsertionHole {
650
+ src: &*tmp,
651
+ dest: pivot,
652
+ };
653
+ let pivot = &*tmp;
654
+
655
+ let len = v.len();
656
+ if len == 0 {
657
+ return 0;
658
+ }
659
+
660
+ // Now partition the slice.
661
+ let mut l = 0;
662
+ let mut r = len;
663
+ loop {
664
+ // SAFETY: The unsafety below involves indexing an array.
665
+ // For the first one: We already do the bounds checking here with `l < r`.
666
+ // For the second one: We initially have `l == 0` and `r == v.len()` and we checked that `l < r` at every indexing operation.
667
+ // From here we know that `r` must be at least `r == l` which was shown to be valid from the first one.
668
+ unsafe {
669
+ // Find the first element greater than the pivot.
670
+ while l < r && !is_less(pivot, v.get_unchecked(l)) {
671
+ l += 1;
672
+ }
673
+
674
+ // Find the last element equal to the pivot.
675
+ loop {
676
+ r -= 1;
677
+ if l >= r || !is_less(pivot, v.get_unchecked(r)) {
678
+ break;
679
+ }
680
+ }
681
+
682
+ // Are we done?
683
+ if l >= r {
684
+ break;
685
+ }
686
+
687
+ // Swap the found pair of out-of-order elements.
688
+ let ptr = v.as_mut_ptr();
689
+ ptr::swap(ptr.add(l), ptr.add(r));
690
+ l += 1;
691
+ }
692
+ }
693
+
694
+ // We found `l` elements equal to the pivot. Add 1 to account for the pivot itself.
695
+ l + 1
696
+
697
+ // `_pivot_guard` goes out of scope and writes the pivot (which is a stack-allocated variable)
698
+ // back into the slice where it originally was. This step is critical in ensuring safety!
699
+ }
700
+
701
+ /// Scatters some elements around in an attempt to break patterns that might cause imbalanced
702
+ /// partitions in quicksort.
703
+ #[cold]
704
+ fn break_patterns<T>(v: &mut [T]) {
705
+ let len = v.len();
706
+ if len >= 8 {
707
+ let mut seed = len;
708
+ let mut gen_usize = || {
709
+ // Pseudorandom number generator from the "Xorshift RNGs" paper by George Marsaglia.
710
+ if usize::BITS <= 32 {
711
+ let mut r = seed as u32;
712
+ r ^= r << 13;
713
+ r ^= r >> 17;
714
+ r ^= r << 5;
715
+ seed = r as usize;
716
+ seed
717
+ } else {
718
+ let mut r = seed as u64;
719
+ r ^= r << 13;
720
+ r ^= r >> 7;
721
+ r ^= r << 17;
722
+ seed = r as usize;
723
+ seed
724
+ }
725
+ };
726
+
727
+ // Take random numbers modulo this number.
728
+ // The number fits into `usize` because `len` is not greater than `isize::MAX`.
729
+ let modulus = len.next_power_of_two();
730
+
731
+ // Some pivot candidates will be in the nearby of this index. Let's randomize them.
732
+ let pos = len / 4 * 2;
733
+
734
+ for i in 0..3 {
735
+ // Generate a random number modulo `len`. However, in order to avoid costly operations
736
+ // we first take it modulo a power of two, and then decrease by `len` until it fits
737
+ // into the range `[0, len - 1]`.
738
+ let mut other = gen_usize() & (modulus - 1);
739
+
740
+ // `other` is guaranteed to be less than `2 * len`.
741
+ if other >= len {
742
+ other -= len;
743
+ }
744
+
745
+ v.swap(pos - 1 + i, other);
746
+ }
747
+ }
748
+ }
749
+
750
+ /// Chooses a pivot in `v` and returns the index and `true` if the slice is likely already sorted.
751
+ ///
752
+ /// Elements in `v` might be reordered in the process.
753
+ fn choose_pivot<T, F>(v: &mut [T], is_less: &F) -> (usize, bool)
754
+ where
755
+ F: Fn(&T, &T) -> bool,
756
+ {
757
+ // Minimum length to choose the median-of-medians method.
758
+ // Shorter slices use the simple median-of-three method.
759
+ const SHORTEST_MEDIAN_OF_MEDIANS: usize = 50;
760
+ // Maximum number of swaps that can be performed in this function.
761
+ const MAX_SWAPS: usize = 4 * 3;
762
+
763
+ let len = v.len();
764
+
765
+ // Three indices near which we are going to choose a pivot.
766
+ #[allow(clippy::identity_op)]
767
+ let mut a = len / 4 * 1;
768
+ let mut b = len / 4 * 2;
769
+ let mut c = len / 4 * 3;
770
+
771
+ // Counts the total number of swaps we are about to perform while sorting indices.
772
+ let mut swaps = 0;
773
+
774
+ if len >= 8 {
775
+ // Swaps indices so that `v[a] <= v[b]`.
776
+ // SAFETY: `len >= 8` so there are at least two elements in the neighborhoods of
777
+ // `a`, `b` and `c`. This means the three calls to `sort_adjacent` result in
778
+ // corresponding calls to `sort3` with valid 3-item neighborhoods around each
779
+ // pointer, which in turn means the calls to `sort2` are done with valid
780
+ // references. Thus the `v.get_unchecked` calls are safe, as is the `ptr::swap`
781
+ // call.
782
+ let mut sort2 = |a: &mut usize, b: &mut usize| unsafe {
783
+ if is_less(v.get_unchecked(*b), v.get_unchecked(*a)) {
784
+ ptr::swap(a, b);
785
+ swaps += 1;
786
+ }
787
+ };
788
+
789
+ // Swaps indices so that `v[a] <= v[b] <= v[c]`.
790
+ let mut sort3 = |a: &mut usize, b: &mut usize, c: &mut usize| {
791
+ sort2(a, b);
792
+ sort2(b, c);
793
+ sort2(a, b);
794
+ };
795
+
796
+ if len >= SHORTEST_MEDIAN_OF_MEDIANS {
797
+ // Finds the median of `v[a - 1], v[a], v[a + 1]` and stores the index into `a`.
798
+ let mut sort_adjacent = |a: &mut usize| {
799
+ let tmp = *a;
800
+ sort3(&mut (tmp - 1), a, &mut (tmp + 1));
801
+ };
802
+
803
+ // Find medians in the neighborhoods of `a`, `b`, and `c`.
804
+ sort_adjacent(&mut a);
805
+ sort_adjacent(&mut b);
806
+ sort_adjacent(&mut c);
807
+ }
808
+
809
+ // Find the median among `a`, `b`, and `c`.
810
+ sort3(&mut a, &mut b, &mut c);
811
+ }
812
+
813
+ if swaps < MAX_SWAPS {
814
+ (b, swaps == 0)
815
+ } else {
816
+ // The maximum number of swaps was performed. Chances are the slice is descending or mostly
817
+ // descending, so reversing will probably help sort it faster.
818
+ v.reverse();
819
+ (len - 1 - b, true)
820
+ }
821
+ }
822
+
823
+ /// Sorts `v` recursively.
824
+ ///
825
+ /// If the slice had a predecessor in the original array, it is specified as `pred`.
826
+ ///
827
+ /// `limit` is the number of allowed imbalanced partitions before switching to `heapsort`. If zero,
828
+ /// this function will immediately switch to heapsort.
829
+ fn recurse<'a, T, F>(mut v: &'a mut [T], is_less: &F, mut pred: Option<&'a mut T>, mut limit: u32)
830
+ where
831
+ T: Send,
832
+ F: Fn(&T, &T) -> bool + Sync,
833
+ {
834
+ // Slices of up to this length get sorted using insertion sort.
835
+ const MAX_INSERTION: usize = 20;
836
+
837
+ // If both partitions are up to this length, we continue sequentially. This number is as small
838
+ // as possible but so that the overhead of Rayon's task scheduling is still negligible.
839
+ const MAX_SEQUENTIAL: usize = 2000;
840
+
841
+ // True if the last partitioning was reasonably balanced.
842
+ let mut was_balanced = true;
843
+ // True if the last partitioning didn't shuffle elements (the slice was already partitioned).
844
+ let mut was_partitioned = true;
845
+
846
+ loop {
847
+ let len = v.len();
848
+
849
+ // Very short slices get sorted using insertion sort.
850
+ if len <= MAX_INSERTION {
851
+ if len >= 2 {
852
+ insertion_sort_shift_left(v, 1, is_less);
853
+ }
854
+ return;
855
+ }
856
+
857
+ // If too many bad pivot choices were made, simply fall back to heapsort in order to
858
+ // guarantee `O(n * log(n))` worst-case.
859
+ if limit == 0 {
860
+ heapsort(v, is_less);
861
+ return;
862
+ }
863
+
864
+ // If the last partitioning was imbalanced, try breaking patterns in the slice by shuffling
865
+ // some elements around. Hopefully we'll choose a better pivot this time.
866
+ if !was_balanced {
867
+ break_patterns(v);
868
+ limit -= 1;
869
+ }
870
+
871
+ // Choose a pivot and try guessing whether the slice is already sorted.
872
+ let (pivot, likely_sorted) = choose_pivot(v, is_less);
873
+
874
+ // If the last partitioning was decently balanced and didn't shuffle elements, and if pivot
875
+ // selection predicts the slice is likely already sorted...
876
+ if was_balanced && was_partitioned && likely_sorted {
877
+ // Try identifying several out-of-order elements and shifting them to correct
878
+ // positions. If the slice ends up being completely sorted, we're done.
879
+ if partial_insertion_sort(v, is_less) {
880
+ return;
881
+ }
882
+ }
883
+
884
+ // If the chosen pivot is equal to the predecessor, then it's the smallest element in the
885
+ // slice. Partition the slice into elements equal to and elements greater than the pivot.
886
+ // This case is usually hit when the slice contains many duplicate elements.
887
+ if let Some(&mut ref p) = pred {
888
+ if !is_less(p, &v[pivot]) {
889
+ let mid = partition_equal(v, pivot, is_less);
890
+
891
+ // Continue sorting elements greater than the pivot.
892
+ v = &mut v[mid..];
893
+ continue;
894
+ }
895
+ }
896
+
897
+ // Partition the slice.
898
+ let (mid, was_p) = partition(v, pivot, is_less);
899
+ was_balanced = cmp::min(mid, len - mid) >= len / 8;
900
+ was_partitioned = was_p;
901
+
902
+ // Split the slice into `left`, `pivot`, and `right`.
903
+ let (left, right) = v.split_at_mut(mid);
904
+ let (pivot, right) = right.split_at_mut(1);
905
+ let pivot = &mut pivot[0];
906
+
907
+ if Ord::max(left.len(), right.len()) <= MAX_SEQUENTIAL {
908
+ // Recurse into the shorter side only in order to minimize the total number of recursive
909
+ // calls and consume less stack space. Then just continue with the longer side (this is
910
+ // akin to tail recursion).
911
+ if left.len() < right.len() {
912
+ recurse(left, is_less, pred, limit);
913
+ v = right;
914
+ pred = Some(pivot);
915
+ } else {
916
+ recurse(right, is_less, Some(pivot), limit);
917
+ v = left;
918
+ }
919
+ } else {
920
+ // Sort the left and right half in parallel.
921
+ rayon_core::join(
922
+ || recurse(left, is_less, pred, limit),
923
+ || recurse(right, is_less, Some(pivot), limit),
924
+ );
925
+ break;
926
+ }
927
+ }
928
+ }
929
+
930
+ /// Sorts `v` using pattern-defeating quicksort in parallel.
931
+ ///
932
+ /// The algorithm is unstable, in-place, and *O*(*n* \* log(*n*)) worst-case.
933
+ pub(super) fn par_quicksort<T, F>(v: &mut [T], is_less: F)
934
+ where
935
+ T: Send,
936
+ F: Fn(&T, &T) -> bool + Sync,
937
+ {
938
+ // Sorting has no meaningful behavior on zero-sized types.
939
+ if size_of::<T>() == 0 {
940
+ return;
941
+ }
942
+
943
+ // Limit the number of imbalanced partitions to `floor(log2(len)) + 1`.
944
+ let limit = usize::BITS - v.len().leading_zeros();
945
+
946
+ recurse(v, &is_less, None, limit);
947
+ }
948
+
949
+ /// Merges non-decreasing runs `v[..mid]` and `v[mid..]` using `buf` as temporary storage, and
950
+ /// stores the result into `v[..]`.
951
+ ///
952
+ /// # Safety
953
+ ///
954
+ /// The two slices must be non-empty and `mid` must be in bounds. Buffer `buf` must be long enough
955
+ /// to hold a copy of the shorter slice. Also, `T` must not be a zero-sized type.
956
+ unsafe fn merge<T, F>(v: &mut [T], mid: usize, buf: *mut T, is_less: &F)
957
+ where
958
+ F: Fn(&T, &T) -> bool,
959
+ {
960
+ let len = v.len();
961
+ let v = v.as_mut_ptr();
962
+
963
+ // SAFETY: mid and len must be in-bounds of v.
964
+ let (v_mid, v_end) = unsafe { (v.add(mid), v.add(len)) };
965
+
966
+ // The merge process first copies the shorter run into `buf`. Then it traces the newly copied
967
+ // run and the longer run forwards (or backwards), comparing their next unconsumed elements and
968
+ // copying the lesser (or greater) one into `v`.
969
+ //
970
+ // As soon as the shorter run is fully consumed, the process is done. If the longer run gets
971
+ // consumed first, then we must copy whatever is left of the shorter run into the remaining
972
+ // hole in `v`.
973
+ //
974
+ // Intermediate state of the process is always tracked by `hole`, which serves two purposes:
975
+ // 1. Protects integrity of `v` from panics in `is_less`.
976
+ // 2. Fills the remaining hole in `v` if the longer run gets consumed first.
977
+ //
978
+ // Panic safety:
979
+ //
980
+ // If `is_less` panics at any point during the process, `hole` will get dropped and fill the
981
+ // hole in `v` with the unconsumed range in `buf`, thus ensuring that `v` still holds every
982
+ // object it initially held exactly once.
983
+ let mut hole;
984
+
985
+ if mid <= len - mid {
986
+ // The left run is shorter.
987
+
988
+ // SAFETY: buf must have enough capacity for `v[..mid]`.
989
+ unsafe {
990
+ ptr::copy_nonoverlapping(v, buf, mid);
991
+ hole = MergeHole {
992
+ start: buf,
993
+ end: buf.add(mid),
994
+ dest: v,
995
+ };
996
+ }
997
+
998
+ // Initially, these pointers point to the beginnings of their arrays.
999
+ let left = &mut hole.start;
1000
+ let mut right = v_mid;
1001
+ let out = &mut hole.dest;
1002
+
1003
+ while *left < hole.end && right < v_end {
1004
+ // Consume the lesser side.
1005
+ // If equal, prefer the left run to maintain stability.
1006
+
1007
+ // SAFETY: left and right must be valid and part of v same for out.
1008
+ unsafe {
1009
+ let is_l = is_less(&*right, &**left);
1010
+ let to_copy = if is_l { right } else { *left };
1011
+ ptr::copy_nonoverlapping(to_copy, *out, 1);
1012
+ *out = out.add(1);
1013
+ right = right.add(is_l as usize);
1014
+ *left = left.add(!is_l as usize);
1015
+ }
1016
+ }
1017
+ } else {
1018
+ // The right run is shorter.
1019
+
1020
+ // SAFETY: buf must have enough capacity for `v[mid..]`.
1021
+ unsafe {
1022
+ ptr::copy_nonoverlapping(v_mid, buf, len - mid);
1023
+ hole = MergeHole {
1024
+ start: buf,
1025
+ end: buf.add(len - mid),
1026
+ dest: v_mid,
1027
+ };
1028
+ }
1029
+
1030
+ // Initially, these pointers point past the ends of their arrays.
1031
+ let left = &mut hole.dest;
1032
+ let right = &mut hole.end;
1033
+ let mut out = v_end;
1034
+
1035
+ while v < *left && buf < *right {
1036
+ // Consume the greater side.
1037
+ // If equal, prefer the right run to maintain stability.
1038
+
1039
+ // SAFETY: left and right must be valid and part of v same for out.
1040
+ unsafe {
1041
+ let is_l = is_less(&*right.sub(1), &*left.sub(1));
1042
+ *left = left.sub(is_l as usize);
1043
+ *right = right.sub(!is_l as usize);
1044
+ let to_copy = if is_l { *left } else { *right };
1045
+ out = out.sub(1);
1046
+ ptr::copy_nonoverlapping(to_copy, out, 1);
1047
+ }
1048
+ }
1049
+ }
1050
+ // Finally, `hole` gets dropped. If the shorter run was not fully consumed, whatever remains of
1051
+ // it will now be copied into the hole in `v`.
1052
+ }
1053
+
1054
+ // When dropped, copies the range `start..end` into `dest..`.
1055
+ struct MergeHole<T> {
1056
+ start: *mut T,
1057
+ end: *mut T,
1058
+ dest: *mut T,
1059
+ }
1060
+
1061
+ impl<T> Drop for MergeHole<T> {
1062
+ fn drop(&mut self) {
1063
+ // SAFETY: `T` is not a zero-sized type, and these are pointers into a slice's elements.
1064
+ unsafe {
1065
+ let len = self.end.offset_from(self.start) as usize;
1066
+ ptr::copy_nonoverlapping(self.start, self.dest, len);
1067
+ }
1068
+ }
1069
+ }
1070
+
1071
+ /// The result of merge sort.
1072
+ #[must_use]
1073
+ #[derive(Clone, Copy, PartialEq, Eq)]
1074
+ enum MergeSortResult {
1075
+ /// The slice has already been sorted.
1076
+ NonDescending,
1077
+ /// The slice has been descending and therefore it was left intact.
1078
+ Descending,
1079
+ /// The slice was sorted.
1080
+ Sorted,
1081
+ }
1082
+
1083
+ /// This merge sort borrows some (but not all) ideas from TimSort, which used to be described in
1084
+ /// detail [here](https://github.com/python/cpython/blob/main/Objects/listsort.txt). However Python
1085
+ /// has switched to a Powersort based implementation.
1086
+ ///
1087
+ /// The algorithm identifies strictly descending and non-descending subsequences, which are called
1088
+ /// natural runs. There is a stack of pending runs yet to be merged. Each newly found run is pushed
1089
+ /// onto the stack, and then some pairs of adjacent runs are merged until these two invariants are
1090
+ /// satisfied:
1091
+ ///
1092
+ /// 1. for every `i` in `1..runs.len()`: `runs[i - 1].len > runs[i].len`
1093
+ /// 2. for every `i` in `2..runs.len()`: `runs[i - 2].len > runs[i - 1].len + runs[i].len`
1094
+ ///
1095
+ /// The invariants ensure that the total running time is *O*(*n* \* log(*n*)) worst-case.
1096
+ ///
1097
+ /// # Safety
1098
+ ///
1099
+ /// The argument `buf` is used as a temporary buffer and must hold at least `v.len() / 2`.
1100
+ unsafe fn merge_sort<T, CmpF>(v: &mut [T], buf_ptr: *mut T, is_less: &CmpF) -> MergeSortResult
1101
+ where
1102
+ CmpF: Fn(&T, &T) -> bool,
1103
+ {
1104
+ // The caller should have already checked that.
1105
+ debug_assert_ne!(size_of::<T>(), 0);
1106
+
1107
+ let len = v.len();
1108
+
1109
+ let mut runs = Vec::new();
1110
+
1111
+ let mut end = 0;
1112
+ let mut start = 0;
1113
+
1114
+ // Scan forward. Memory pre-fetching prefers forward scanning vs backwards scanning, and the
1115
+ // code-gen is usually better. For the most sensitive types such as integers, these are merged
1116
+ // bidirectionally at once. So there is no benefit in scanning backwards.
1117
+ while end < len {
1118
+ let (streak_end, was_reversed) = find_streak(&v[start..], is_less);
1119
+ end += streak_end;
1120
+ if start == 0 && end == len {
1121
+ return if was_reversed {
1122
+ MergeSortResult::Descending
1123
+ } else {
1124
+ MergeSortResult::NonDescending
1125
+ };
1126
+ }
1127
+ if was_reversed {
1128
+ v[start..end].reverse();
1129
+ }
1130
+
1131
+ // Insert some more elements into the run if it's too short. Insertion sort is faster than
1132
+ // merge sort on short sequences, so this significantly improves performance.
1133
+ end = provide_sorted_batch(v, start, end, is_less);
1134
+
1135
+ // Push this run onto the stack.
1136
+ runs.push(TimSortRun {
1137
+ start,
1138
+ len: end - start,
1139
+ });
1140
+ start = end;
1141
+
1142
+ // Merge some pairs of adjacent runs to satisfy the invariants.
1143
+ while let Some(r) = collapse(runs.as_slice(), len) {
1144
+ let left = runs[r];
1145
+ let right = runs[r + 1];
1146
+ let merge_slice = &mut v[left.start..right.start + right.len];
1147
+ // SAFETY: `buf_ptr` must hold enough capacity for the shorter of the two sides, and
1148
+ // neither side may be on length 0.
1149
+ unsafe {
1150
+ merge(merge_slice, left.len, buf_ptr, is_less);
1151
+ }
1152
+ runs[r + 1] = TimSortRun {
1153
+ start: left.start,
1154
+ len: left.len + right.len,
1155
+ };
1156
+ runs.remove(r);
1157
+ }
1158
+ }
1159
+
1160
+ // Finally, exactly one run must remain in the stack.
1161
+ debug_assert!(runs.len() == 1 && runs[0].start == 0 && runs[0].len == len);
1162
+
1163
+ // The original order of the slice was neither non-descending nor descending.
1164
+ return MergeSortResult::Sorted;
1165
+
1166
+ // Examines the stack of runs and identifies the next pair of runs to merge. More specifically,
1167
+ // if `Some(r)` is returned, that means `runs[r]` and `runs[r + 1]` must be merged next. If the
1168
+ // algorithm should continue building a new run instead, `None` is returned.
1169
+ //
1170
+ // TimSort is infamous for its buggy implementations, as described here:
1171
+ // http://envisage-project.eu/timsort-specification-and-verification/
1172
+ //
1173
+ // The gist of the story is: we must enforce the invariants on the top four runs on the stack.
1174
+ // Enforcing them on just top three is not sufficient to ensure that the invariants will still
1175
+ // hold for *all* runs in the stack.
1176
+ //
1177
+ // This function correctly checks invariants for the top four runs. Additionally, if the top
1178
+ // run starts at index 0, it will always demand a merge operation until the stack is fully
1179
+ // collapsed, in order to complete the sort.
1180
+ #[inline]
1181
+ fn collapse(runs: &[TimSortRun], stop: usize) -> Option<usize> {
1182
+ let n = runs.len();
1183
+ if n >= 2
1184
+ && (runs[n - 1].start + runs[n - 1].len == stop
1185
+ || runs[n - 2].len <= runs[n - 1].len
1186
+ || (n >= 3 && runs[n - 3].len <= runs[n - 2].len + runs[n - 1].len)
1187
+ || (n >= 4 && runs[n - 4].len <= runs[n - 3].len + runs[n - 2].len))
1188
+ {
1189
+ if n >= 3 && runs[n - 3].len < runs[n - 1].len {
1190
+ Some(n - 3)
1191
+ } else {
1192
+ Some(n - 2)
1193
+ }
1194
+ } else {
1195
+ None
1196
+ }
1197
+ }
1198
+ }
1199
+
1200
+ /// Internal type used by merge_sort.
1201
+ #[derive(Clone, Copy, Debug)]
1202
+ struct TimSortRun {
1203
+ len: usize,
1204
+ start: usize,
1205
+ }
1206
+
1207
+ /// Takes a range as denoted by start and end, that is already sorted and extends it to the right if
1208
+ /// necessary with sorts optimized for smaller ranges such as insertion sort.
1209
+ fn provide_sorted_batch<T, F>(v: &mut [T], start: usize, mut end: usize, is_less: &F) -> usize
1210
+ where
1211
+ F: Fn(&T, &T) -> bool,
1212
+ {
1213
+ let len = v.len();
1214
+ assert!(end >= start && end <= len);
1215
+
1216
+ // This value is a balance between least comparisons and best performance, as
1217
+ // influenced by for example cache locality.
1218
+ const MIN_INSERTION_RUN: usize = 10;
1219
+
1220
+ // Insert some more elements into the run if it's too short. Insertion sort is faster than
1221
+ // merge sort on short sequences, so this significantly improves performance.
1222
+ let start_end_diff = end - start;
1223
+
1224
+ if start_end_diff < MIN_INSERTION_RUN && end < len {
1225
+ // v[start_found..end] are elements that are already sorted in the input. We want to extend
1226
+ // the sorted region to the left, so we push up MIN_INSERTION_RUN - 1 to the right. Which is
1227
+ // more efficient that trying to push those already sorted elements to the left.
1228
+ end = cmp::min(start + MIN_INSERTION_RUN, len);
1229
+ let presorted_start = cmp::max(start_end_diff, 1);
1230
+
1231
+ insertion_sort_shift_left(&mut v[start..end], presorted_start, is_less);
1232
+ }
1233
+
1234
+ end
1235
+ }
1236
+
1237
+ /// Finds a streak of presorted elements starting at the beginning of the slice. Returns the first
1238
+ /// value that is not part of said streak, and a bool denoting whether the streak was reversed.
1239
+ /// Streaks can be increasing or decreasing.
1240
+ fn find_streak<T, F>(v: &[T], is_less: &F) -> (usize, bool)
1241
+ where
1242
+ F: Fn(&T, &T) -> bool,
1243
+ {
1244
+ let len = v.len();
1245
+
1246
+ if len < 2 {
1247
+ return (len, false);
1248
+ }
1249
+
1250
+ let mut end = 2;
1251
+
1252
+ // SAFETY: See below specific.
1253
+ unsafe {
1254
+ // SAFETY: We checked that len >= 2, so 0 and 1 are valid indices.
1255
+ let assume_reverse = is_less(v.get_unchecked(1), v.get_unchecked(0));
1256
+
1257
+ // SAFETY: We know end >= 2 and check end < len.
1258
+ // From that follows that accessing v at end and end - 1 is safe.
1259
+ if assume_reverse {
1260
+ while end < len && is_less(v.get_unchecked(end), v.get_unchecked(end - 1)) {
1261
+ end += 1;
1262
+ }
1263
+
1264
+ (end, true)
1265
+ } else {
1266
+ while end < len && !is_less(v.get_unchecked(end), v.get_unchecked(end - 1)) {
1267
+ end += 1;
1268
+ }
1269
+ (end, false)
1270
+ }
1271
+ }
1272
+ }
1273
+
1274
+ ////////////////////////////////////////////////////////////////////////////
1275
+ // Everything above this line is copied from `core::slice::sort` (with very minor tweaks).
1276
+ // Everything below this line is custom parallelization for rayon.
1277
+ ////////////////////////////////////////////////////////////////////////////
1278
+
1279
+ /// Splits two sorted slices so that they can be merged in parallel.
1280
+ ///
1281
+ /// Returns two indices `(a, b)` so that slices `left[..a]` and `right[..b]` come before
1282
+ /// `left[a..]` and `right[b..]`.
1283
+ fn split_for_merge<T, F>(left: &[T], right: &[T], is_less: &F) -> (usize, usize)
1284
+ where
1285
+ F: Fn(&T, &T) -> bool,
1286
+ {
1287
+ let left_len = left.len();
1288
+ let right_len = right.len();
1289
+
1290
+ if left_len >= right_len {
1291
+ let left_mid = left_len / 2;
1292
+
1293
+ // Find the first element in `right` that is greater than or equal to `left[left_mid]`.
1294
+ let mut a = 0;
1295
+ let mut b = right_len;
1296
+ while a < b {
1297
+ let m = a + (b - a) / 2;
1298
+ if is_less(&right[m], &left[left_mid]) {
1299
+ a = m + 1;
1300
+ } else {
1301
+ b = m;
1302
+ }
1303
+ }
1304
+
1305
+ (left_mid, a)
1306
+ } else {
1307
+ let right_mid = right_len / 2;
1308
+
1309
+ // Find the first element in `left` that is greater than `right[right_mid]`.
1310
+ let mut a = 0;
1311
+ let mut b = left_len;
1312
+ while a < b {
1313
+ let m = a + (b - a) / 2;
1314
+ if is_less(&right[right_mid], &left[m]) {
1315
+ b = m;
1316
+ } else {
1317
+ a = m + 1;
1318
+ }
1319
+ }
1320
+
1321
+ (a, right_mid)
1322
+ }
1323
+ }
1324
+
1325
+ /// Merges slices `left` and `right` in parallel and stores the result into `dest`.
1326
+ ///
1327
+ /// # Safety
1328
+ ///
1329
+ /// The `dest` pointer must have enough space to store the result.
1330
+ ///
1331
+ /// Even if `is_less` panics at any point during the merge process, this function will fully copy
1332
+ /// all elements from `left` and `right` into `dest` (not necessarily in sorted order).
1333
+ unsafe fn par_merge<T, F>(left: &mut [T], right: &mut [T], dest: *mut T, is_less: &F)
1334
+ where
1335
+ T: Send,
1336
+ F: Fn(&T, &T) -> bool + Sync,
1337
+ {
1338
+ // Slices whose lengths sum up to this value are merged sequentially. This number is slightly
1339
+ // larger than `CHUNK_LENGTH`, and the reason is that merging is faster than merge sorting, so
1340
+ // merging needs a bit coarser granularity in order to hide the overhead of Rayon's task
1341
+ // scheduling.
1342
+ const MAX_SEQUENTIAL: usize = 5000;
1343
+
1344
+ let left_len = left.len();
1345
+ let right_len = right.len();
1346
+
1347
+ // Intermediate state of the merge process, which serves two purposes:
1348
+ // 1. Protects integrity of `dest` from panics in `is_less`.
1349
+ // 2. Copies the remaining elements as soon as one of the two sides is exhausted.
1350
+ //
1351
+ // Panic safety:
1352
+ //
1353
+ // If `is_less` panics at any point during the merge process, `s` will get dropped and copy the
1354
+ // remaining parts of `left` and `right` into `dest`.
1355
+ let mut s = State {
1356
+ left_start: left.as_mut_ptr(),
1357
+ left_end: left.as_mut_ptr().add(left_len),
1358
+ right_start: right.as_mut_ptr(),
1359
+ right_end: right.as_mut_ptr().add(right_len),
1360
+ dest,
1361
+ };
1362
+
1363
+ if left_len == 0 || right_len == 0 || left_len + right_len < MAX_SEQUENTIAL {
1364
+ while s.left_start < s.left_end && s.right_start < s.right_end {
1365
+ // Consume the lesser side.
1366
+ // If equal, prefer the left run to maintain stability.
1367
+ let is_l = is_less(&*s.right_start, &*s.left_start);
1368
+ let to_copy = if is_l { s.right_start } else { s.left_start };
1369
+ ptr::copy_nonoverlapping(to_copy, s.dest, 1);
1370
+ s.dest = s.dest.add(1);
1371
+ s.right_start = s.right_start.add(is_l as usize);
1372
+ s.left_start = s.left_start.add(!is_l as usize);
1373
+ }
1374
+ } else {
1375
+ // Function `split_for_merge` might panic. If that happens, `s` will get destructed and copy
1376
+ // the whole `left` and `right` into `dest`.
1377
+ let (left_mid, right_mid) = split_for_merge(left, right, is_less);
1378
+ let (left_l, left_r) = left.split_at_mut(left_mid);
1379
+ let (right_l, right_r) = right.split_at_mut(right_mid);
1380
+
1381
+ // Prevent the destructor of `s` from running. Rayon will ensure that both calls to
1382
+ // `par_merge` happen. If one of the two calls panics, they will ensure that elements still
1383
+ // get copied into `dest_left` and `dest_right``.
1384
+ mem::forget(s);
1385
+
1386
+ // Wrap pointers in SendPtr so that they can be sent to another thread
1387
+ // See the documentation of SendPtr for a full explanation
1388
+ let dest_l = SendPtr(dest);
1389
+ let dest_r = SendPtr(dest.add(left_l.len() + right_l.len()));
1390
+ rayon_core::join(
1391
+ move || par_merge(left_l, right_l, dest_l.get(), is_less),
1392
+ move || par_merge(left_r, right_r, dest_r.get(), is_less),
1393
+ );
1394
+ }
1395
+ // Finally, `s` gets dropped if we used sequential merge, thus copying the remaining elements
1396
+ // all at once.
1397
+
1398
+ // When dropped, copies arrays `left_start..left_end` and `right_start..right_end` into `dest`,
1399
+ // in that order.
1400
+ struct State<T> {
1401
+ left_start: *mut T,
1402
+ left_end: *mut T,
1403
+ right_start: *mut T,
1404
+ right_end: *mut T,
1405
+ dest: *mut T,
1406
+ }
1407
+
1408
+ impl<T> Drop for State<T> {
1409
+ fn drop(&mut self) {
1410
+ // Copy array `left`, followed by `right`.
1411
+ unsafe {
1412
+ let left_len = self.left_end.offset_from(self.left_start) as usize;
1413
+ ptr::copy_nonoverlapping(self.left_start, self.dest, left_len);
1414
+ self.dest = self.dest.add(left_len);
1415
+
1416
+ let right_len = self.right_end.offset_from(self.right_start) as usize;
1417
+ ptr::copy_nonoverlapping(self.right_start, self.dest, right_len);
1418
+ }
1419
+ }
1420
+ }
1421
+ }
1422
+
1423
+ /// Recursively merges pre-sorted chunks inside `v`.
1424
+ ///
1425
+ /// Chunks of `v` are stored in `chunks` as intervals (inclusive left and exclusive right bound).
1426
+ /// Argument `buf` is an auxiliary buffer that will be used during the procedure.
1427
+ /// If `into_buf` is true, the result will be stored into `buf`, otherwise it will be in `v`.
1428
+ ///
1429
+ /// # Safety
1430
+ ///
1431
+ /// The number of chunks must be positive and they must be adjacent: the right bound of each chunk
1432
+ /// must equal the left bound of the following chunk.
1433
+ ///
1434
+ /// The buffer must be at least as long as `v`.
1435
+ unsafe fn merge_recurse<T, F>(
1436
+ v: *mut T,
1437
+ buf: *mut T,
1438
+ chunks: &[(usize, usize)],
1439
+ into_buf: bool,
1440
+ is_less: &F,
1441
+ ) where
1442
+ T: Send,
1443
+ F: Fn(&T, &T) -> bool + Sync,
1444
+ {
1445
+ let len = chunks.len();
1446
+ debug_assert!(len > 0);
1447
+
1448
+ // Base case of the algorithm.
1449
+ // If only one chunk is remaining, there's no more work to split and merge.
1450
+ if len == 1 {
1451
+ if into_buf {
1452
+ // Copy the chunk from `v` into `buf`.
1453
+ let (start, end) = chunks[0];
1454
+ let src = v.add(start);
1455
+ let dest = buf.add(start);
1456
+ ptr::copy_nonoverlapping(src, dest, end - start);
1457
+ }
1458
+ return;
1459
+ }
1460
+
1461
+ // Split the chunks into two halves.
1462
+ let (start, _) = chunks[0];
1463
+ let (mid, _) = chunks[len / 2];
1464
+ let (_, end) = chunks[len - 1];
1465
+ let (left, right) = chunks.split_at(len / 2);
1466
+
1467
+ // After recursive calls finish we'll have to merge chunks `(start, mid)` and `(mid, end)` from
1468
+ // `src` into `dest`. If the current invocation has to store the result into `buf`, we'll
1469
+ // merge chunks from `v` into `buf`, and vice versa.
1470
+ //
1471
+ // Recursive calls flip `into_buf` at each level of recursion. More concretely, `par_merge`
1472
+ // merges chunks from `buf` into `v` at the first level, from `v` into `buf` at the second
1473
+ // level etc.
1474
+ let (src, dest) = if into_buf { (v, buf) } else { (buf, v) };
1475
+
1476
+ // Panic safety:
1477
+ //
1478
+ // If `is_less` panics at any point during the recursive calls, the destructor of `guard` will
1479
+ // be executed, thus copying everything from `src` into `dest`. This way we ensure that all
1480
+ // chunks are in fact copied into `dest`, even if the merge process doesn't finish.
1481
+ let guard = MergeHole {
1482
+ start: src.add(start),
1483
+ end: src.add(end),
1484
+ dest: dest.add(start),
1485
+ };
1486
+
1487
+ // Wrap pointers in SendPtr so that they can be sent to another thread
1488
+ // See the documentation of SendPtr for a full explanation
1489
+ let v = SendPtr(v);
1490
+ let buf = SendPtr(buf);
1491
+ rayon_core::join(
1492
+ move || merge_recurse(v.get(), buf.get(), left, !into_buf, is_less),
1493
+ move || merge_recurse(v.get(), buf.get(), right, !into_buf, is_less),
1494
+ );
1495
+
1496
+ // Everything went all right - recursive calls didn't panic.
1497
+ // Forget the guard in order to prevent its destructor from running.
1498
+ mem::forget(guard);
1499
+
1500
+ // Merge chunks `(start, mid)` and `(mid, end)` from `src` into `dest`.
1501
+ let src_left = slice::from_raw_parts_mut(src.add(start), mid - start);
1502
+ let src_right = slice::from_raw_parts_mut(src.add(mid), end - mid);
1503
+ par_merge(src_left, src_right, dest.add(start), is_less);
1504
+ }
1505
+
1506
+ /// Sorts `v` using merge sort in parallel.
1507
+ ///
1508
+ /// The algorithm is stable, allocates memory, and `O(n log n)` worst-case.
1509
+ /// The allocated temporary buffer is of the same length as is `v`.
1510
+ pub(super) fn par_mergesort<T, F>(v: &mut [T], is_less: F)
1511
+ where
1512
+ T: Send,
1513
+ F: Fn(&T, &T) -> bool + Sync,
1514
+ {
1515
+ // Slices of up to this length get sorted using insertion sort in order to avoid the cost of
1516
+ // buffer allocation.
1517
+ const MAX_INSERTION: usize = 20;
1518
+
1519
+ // The length of initial chunks. This number is as small as possible but so that the overhead
1520
+ // of Rayon's task scheduling is still negligible.
1521
+ const CHUNK_LENGTH: usize = 2000;
1522
+
1523
+ // Sorting has no meaningful behavior on zero-sized types.
1524
+ if size_of::<T>() == 0 {
1525
+ return;
1526
+ }
1527
+
1528
+ let len = v.len();
1529
+
1530
+ // Short slices get sorted in-place via insertion sort to avoid allocations.
1531
+ if len <= MAX_INSERTION {
1532
+ if len >= 2 {
1533
+ insertion_sort_shift_left(v, 1, &is_less);
1534
+ }
1535
+ return;
1536
+ }
1537
+
1538
+ // Allocate a buffer to use as scratch memory. We keep the length 0 so we can keep in it
1539
+ // shallow copies of the contents of `v` without risking the dtors running on copies if
1540
+ // `is_less` panics.
1541
+ let mut buf = Vec::<T>::with_capacity(len);
1542
+ let buf = buf.as_mut_ptr();
1543
+
1544
+ // If the slice is not longer than one chunk would be, do sequential merge sort and return.
1545
+ if len <= CHUNK_LENGTH {
1546
+ let res = unsafe { merge_sort(v, buf, &is_less) };
1547
+ if res == MergeSortResult::Descending {
1548
+ v.reverse();
1549
+ }
1550
+ return;
1551
+ }
1552
+
1553
+ // Split the slice into chunks and merge sort them in parallel.
1554
+ // However, descending chunks will not be sorted - they will be simply left intact.
1555
+ let mut iter = {
1556
+ // Wrap pointer in SendPtr so that it can be sent to another thread
1557
+ // See the documentation of SendPtr for a full explanation
1558
+ let buf = SendPtr(buf);
1559
+ let is_less = &is_less;
1560
+
1561
+ v.par_chunks_mut(CHUNK_LENGTH)
1562
+ .with_max_len(1)
1563
+ .enumerate()
1564
+ .map(move |(i, chunk)| {
1565
+ let l = CHUNK_LENGTH * i;
1566
+ let r = l + chunk.len();
1567
+ unsafe {
1568
+ let buf = buf.get().add(l);
1569
+ (l, r, merge_sort(chunk, buf, is_less))
1570
+ }
1571
+ })
1572
+ .collect::<Vec<_>>()
1573
+ .into_iter()
1574
+ .peekable()
1575
+ };
1576
+
1577
+ // Now attempt to concatenate adjacent chunks that were left intact.
1578
+ let mut chunks = Vec::with_capacity(iter.len());
1579
+
1580
+ while let Some((a, mut b, res)) = iter.next() {
1581
+ // If this chunk was not modified by the sort procedure...
1582
+ if res != MergeSortResult::Sorted {
1583
+ while let Some(&(x, y, r)) = iter.peek() {
1584
+ // If the following chunk is of the same type and can be concatenated...
1585
+ if r == res && (r == MergeSortResult::Descending) == is_less(&v[x], &v[x - 1]) {
1586
+ // Concatenate them.
1587
+ b = y;
1588
+ iter.next();
1589
+ } else {
1590
+ break;
1591
+ }
1592
+ }
1593
+ }
1594
+
1595
+ // Descending chunks must be reversed.
1596
+ if res == MergeSortResult::Descending {
1597
+ v[a..b].reverse();
1598
+ }
1599
+
1600
+ chunks.push((a, b));
1601
+ }
1602
+
1603
+ // All chunks are properly sorted.
1604
+ // Now we just have to merge them together.
1605
+ unsafe {
1606
+ merge_recurse(v.as_mut_ptr(), buf, &chunks, false, &is_less);
1607
+ }
1608
+ }
1609
+
1610
+ #[cfg(test)]
1611
+ mod tests {
1612
+ use super::heapsort;
1613
+ use super::split_for_merge;
1614
+ use rand::distr::Uniform;
1615
+ use rand::{rng, Rng};
1616
+
1617
+ #[test]
1618
+ fn test_heapsort() {
1619
+ let rng = &mut rng();
1620
+
1621
+ for len in (0..25).chain(500..501) {
1622
+ for &modulus in &[5, 10, 100] {
1623
+ let dist = Uniform::new(0, modulus).unwrap();
1624
+ for _ in 0..100 {
1625
+ let v: Vec<i32> = rng.sample_iter(&dist).take(len).collect();
1626
+
1627
+ // Test heapsort using `<` operator.
1628
+ let mut tmp = v.clone();
1629
+ heapsort(&mut tmp, |a, b| a < b);
1630
+ assert!(tmp.windows(2).all(|w| w[0] <= w[1]));
1631
+
1632
+ // Test heapsort using `>` operator.
1633
+ let mut tmp = v.clone();
1634
+ heapsort(&mut tmp, |a, b| a > b);
1635
+ assert!(tmp.windows(2).all(|w| w[0] >= w[1]));
1636
+ }
1637
+ }
1638
+ }
1639
+
1640
+ // Sort using a completely random comparison function.
1641
+ // This will reorder the elements *somehow*, but won't panic.
1642
+ let mut v: Vec<_> = (0..100).collect();
1643
+ heapsort(&mut v, |_, _| rand::rng().random());
1644
+ heapsort(&mut v, |a, b| a < b);
1645
+
1646
+ for (i, &entry) in v.iter().enumerate() {
1647
+ assert_eq!(entry, i);
1648
+ }
1649
+ }
1650
+
1651
+ #[test]
1652
+ fn test_split_for_merge() {
1653
+ fn check(left: &[u32], right: &[u32]) {
1654
+ let (l, r) = split_for_merge(left, right, &|&a, &b| a < b);
1655
+ assert!(left[..l]
1656
+ .iter()
1657
+ .all(|&x| right[r..].iter().all(|&y| x <= y)));
1658
+ assert!(right[..r].iter().all(|&x| left[l..].iter().all(|&y| x < y)));
1659
+ }
1660
+
1661
+ check(&[1, 2, 2, 2, 2, 3], &[1, 2, 2, 2, 2, 3]);
1662
+ check(&[1, 2, 2, 2, 2, 3], &[]);
1663
+ check(&[], &[1, 2, 2, 2, 2, 3]);
1664
+
1665
+ let rng = &mut rng();
1666
+
1667
+ for _ in 0..100 {
1668
+ let limit: u32 = rng.random_range(1..21);
1669
+ let left_len: usize = rng.random_range(0..20);
1670
+ let right_len: usize = rng.random_range(0..20);
1671
+
1672
+ let mut left = rng
1673
+ .sample_iter(&Uniform::new(0, limit).unwrap())
1674
+ .take(left_len)
1675
+ .collect::<Vec<_>>();
1676
+ let mut right = rng
1677
+ .sample_iter(&Uniform::new(0, limit).unwrap())
1678
+ .take(right_len)
1679
+ .collect::<Vec<_>>();
1680
+
1681
+ left.sort();
1682
+ right.sort();
1683
+ check(&left, &right);
1684
+ }
1685
+ }
1686
+ }